Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion docs/migration-SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -480,7 +480,10 @@ new McpServer(
new McpServer({ name: 'server', version: '1.0.0' }, {});
```

Access validators via `_shims` export: `import { DefaultJsonSchemaValidator } from '@modelcontextprotocol/server/_shims';`
Access validators explicitly:
- Runtime-aware default: `import { DefaultJsonSchemaValidator } from '@modelcontextprotocol/server/_shims';`
- AJV (Node.js): `import { AjvJsonSchemaValidator } from '@modelcontextprotocol/server';`
- CF Worker: `import { CfWorkerJsonSchemaValidator } from '@modelcontextprotocol/server/validators/cf-worker';`

## 15. Migration Steps (apply in this order)

Expand Down
12 changes: 8 additions & 4 deletions docs/migration.md
Original file line number Diff line number Diff line change
Expand Up @@ -835,7 +835,8 @@ This means Cloudflare Workers users no longer need to explicitly pass the valida
**Before (v1) - Cloudflare Workers required explicit configuration:**

```typescript
import { McpServer, CfWorkerJsonSchemaValidator } from '@modelcontextprotocol/server';
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { CfWorkerJsonSchemaValidator } from '@modelcontextprotocol/sdk/validation/cfworker';

const server = new McpServer(
{ name: 'my-server', version: '1.0.0' },
Expand All @@ -858,12 +859,15 @@ const server = new McpServer(
);
```

You can still explicitly override the validator if needed. The validators are available via the `_shims` export:
You can still explicitly override the validator if needed:

```typescript
// Runtime-aware default (auto-selects AjvJsonSchemaValidator or CfWorkerJsonSchemaValidator)
import { DefaultJsonSchemaValidator } from '@modelcontextprotocol/server/_shims';
// or
import { AjvJsonSchemaValidator, CfWorkerJsonSchemaValidator } from '@modelcontextprotocol/server';

// Specific validators
import { AjvJsonSchemaValidator } from '@modelcontextprotocol/server';
import { CfWorkerJsonSchemaValidator } from '@modelcontextprotocol/server/validators/cf-worker';
```

## Unchanged APIs
Expand Down
12 changes: 4 additions & 8 deletions packages/client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@
"types": "./dist/index.d.mts",
"import": "./dist/index.mjs"
},
"./validators/cf-worker": {
"types": "./dist/validators/cfWorker.d.mts",
"import": "./dist/validators/cfWorker.mjs"
},
"./_shims": {
"workerd": {
"types": "./dist/shimsWorkerd.d.mts",
Expand Down Expand Up @@ -67,14 +71,6 @@
"pkce-challenge": "catalog:runtimeShared",
"zod": "catalog:runtimeShared"
},
"peerDependencies": {
"@cfworker/json-schema": "catalog:runtimeShared"
},
"peerDependenciesMeta": {
"@cfworker/json-schema": {
"optional": true
}
},
"devDependencies": {
"@modelcontextprotocol/core": "workspace:^",
"@modelcontextprotocol/tsconfig": "workspace:^",
Expand Down
2 changes: 1 addition & 1 deletion packages/client/src/client/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ export type ClientOptions = ProtocolOptions & {
* The validator is used to validate structured content returned by tools
* against their declared output schemas.
*
* @default {@linkcode DefaultJsonSchemaValidator} ({@linkcode index.AjvJsonSchemaValidator | AjvJsonSchemaValidator} on Node.js, {@linkcode index.CfWorkerJsonSchemaValidator | CfWorkerJsonSchemaValidator} on Cloudflare Workers)
* @default {@linkcode DefaultJsonSchemaValidator} ({@linkcode index.AjvJsonSchemaValidator | AjvJsonSchemaValidator} on Node.js, `CfWorkerJsonSchemaValidator` on Cloudflare Workers)
*/
jsonSchemaValidator?: jsonSchemaValidator;

Expand Down
10 changes: 10 additions & 0 deletions packages/client/src/validators/cfWorker.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
/**
* Cloudflare Workers JSON Schema validator, available as a sub-path export.
*
* @example
* ```ts
* import { CfWorkerJsonSchemaValidator } from '@modelcontextprotocol/client/validators/cf-worker';
* ```
*/
export { CfWorkerJsonSchemaValidator } from '@modelcontextprotocol/core';
export type { CfWorkerSchemaDraft } from '@modelcontextprotocol/core';
2 changes: 1 addition & 1 deletion packages/client/tsdown.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ export default defineConfig({
failOnWarn: 'ci-only',
// 1. Entry Points
// Directly matches package.json include/exclude globs
entry: ['src/index.ts', 'src/shimsNode.ts', 'src/shimsWorkerd.ts', 'src/shimsBrowser.ts'],
entry: ['src/index.ts', 'src/shimsNode.ts', 'src/shimsWorkerd.ts', 'src/shimsBrowser.ts', 'src/validators/cfWorker.ts'],

// 2. Output Configuration
format: ['esm'],
Expand Down
1 change: 0 additions & 1 deletion packages/core/src/exports/public/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,6 @@ export { InMemoryTaskMessageQueue, InMemoryTaskStore } from '../../experimental/
export type { StandardSchemaWithJSON } from '../../util/standardSchema.js';
export { AjvJsonSchemaValidator } from '../../validators/ajvProvider.js';
export type { CfWorkerSchemaDraft } from '../../validators/cfWorkerProvider.js';
export { CfWorkerJsonSchemaValidator } from '../../validators/cfWorkerProvider.js';
// fromJsonSchema is intentionally NOT exported here — the server and client packages
// provide runtime-aware wrappers that default to the appropriate validator via _shims.
export type { JsonSchemaType, JsonSchemaValidator, jsonSchemaValidator, JsonSchemaValidatorResult } from '../../validators/types.js';
7 changes: 3 additions & 4 deletions packages/core/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,11 @@ export * from './validators/fromJsonSchema.js';
* Choose a validator based on your runtime environment:
*
* - {@linkcode AjvJsonSchemaValidator}: Best for Node.js (default, fastest)
* Import from: @modelcontextprotocol/sdk/validators/ajv
* Requires peer dependencies: ajv, ajv-formats
* Bundled — no additional dependencies required.
*
* - {@linkcode CfWorkerJsonSchemaValidator}: Best for edge runtimes
* Import from: @modelcontextprotocol/sdk/validators/cfworker
* Requires peer dependency: @cfworker/json-schema
* Import from: `@modelcontextprotocol/server/validators/cf-worker` or `@modelcontextprotocol/client/validators/cf-worker`
* Bundled — no additional dependencies required.
*
* @example For Node.js with AJV
* ```ts source="./index.examples.ts#validation_ajv"
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/validators/ajvProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ function createDefaultAjvInstance(): Ajv {
* const validator = new AjvJsonSchemaValidator(ajv);
* ```
*
* @see {@linkcode CfWorkerJsonSchemaValidator} for an edge-runtime-compatible alternative
* @see `CfWorkerJsonSchemaValidator` for an edge-runtime-compatible alternative (import from `@modelcontextprotocol/server/validators/cf-worker` or `@modelcontextprotocol/client/validators/cf-worker`)
*/
export class AjvJsonSchemaValidator implements jsonSchemaValidator {
private _ajv: Ajv;
Expand Down
12 changes: 4 additions & 8 deletions packages/server/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@
"types": "./dist/index.d.mts",
"import": "./dist/index.mjs"
},
"./validators/cf-worker": {
"types": "./dist/validators/cfWorker.d.mts",
"import": "./dist/validators/cfWorker.mjs"
},
"./_shims": {
"workerd": {
"types": "./dist/shimsWorkerd.d.mts",
Expand Down Expand Up @@ -62,14 +66,6 @@
"dependencies": {
"zod": "catalog:runtimeShared"
},
"peerDependencies": {
"@cfworker/json-schema": "catalog:runtimeShared"
},
"peerDependenciesMeta": {
"@cfworker/json-schema": {
"optional": true
}
},
"devDependencies": {
"@cfworker/json-schema": "catalog:runtimeShared",
"@eslint/js": "catalog:devTools",
Expand Down
2 changes: 1 addition & 1 deletion packages/server/src/server/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ export type ServerOptions = ProtocolOptions & {
* The validator is used to validate user input returned from elicitation
* requests against the requested schema.
*
* @default {@linkcode DefaultJsonSchemaValidator} ({@linkcode index.AjvJsonSchemaValidator | AjvJsonSchemaValidator} on Node.js, {@linkcode index.CfWorkerJsonSchemaValidator | CfWorkerJsonSchemaValidator} on Cloudflare Workers)
* @default {@linkcode DefaultJsonSchemaValidator} ({@linkcode index.AjvJsonSchemaValidator | AjvJsonSchemaValidator} on Node.js, `CfWorkerJsonSchemaValidator` on Cloudflare Workers)
*/
jsonSchemaValidator?: jsonSchemaValidator;
};
Expand Down
10 changes: 10 additions & 0 deletions packages/server/src/validators/cfWorker.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
/**
* Cloudflare Workers JSON Schema validator, available as a sub-path export.
*
* @example
* ```ts
* import { CfWorkerJsonSchemaValidator } from '@modelcontextprotocol/server/validators/cf-worker';
* ```
*/
export { CfWorkerJsonSchemaValidator } from '@modelcontextprotocol/core';
export type { CfWorkerSchemaDraft } from '@modelcontextprotocol/core';
2 changes: 1 addition & 1 deletion packages/server/tsdown.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ export default defineConfig({
failOnWarn: 'ci-only',
// 1. Entry Points
// Directly matches package.json include/exclude globs
entry: ['src/index.ts', 'src/shimsNode.ts', 'src/shimsWorkerd.ts'],
entry: ['src/index.ts', 'src/shimsNode.ts', 'src/shimsWorkerd.ts', 'src/validators/cfWorker.ts'],

// 2. Output Configuration
format: ['esm'],
Expand Down
Loading