Skip to content

Commit 7ba58da

Browse files
v2: cf workers fix (modelcontextprotocol#1843)
Co-authored-by: Felix Weinberger <3823880+felixweinberger@users.noreply.github.com>
1 parent df4b6cc commit 7ba58da

File tree

13 files changed

+48
-31
lines changed

13 files changed

+48
-31
lines changed

docs/migration-SKILL.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -480,7 +480,10 @@ new McpServer(
480480
new McpServer({ name: 'server', version: '1.0.0' }, {});
481481
```
482482

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

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

docs/migration.md

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -835,7 +835,8 @@ This means Cloudflare Workers users no longer need to explicitly pass the valida
835835
**Before (v1) - Cloudflare Workers required explicit configuration:**
836836

837837
```typescript
838-
import { McpServer, CfWorkerJsonSchemaValidator } from '@modelcontextprotocol/server';
838+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
839+
import { CfWorkerJsonSchemaValidator } from '@modelcontextprotocol/sdk/validation/cfworker';
839840

840841
const server = new McpServer(
841842
{ name: 'my-server', version: '1.0.0' },
@@ -858,12 +859,15 @@ const server = new McpServer(
858859
);
859860
```
860861

861-
You can still explicitly override the validator if needed. The validators are available via the `_shims` export:
862+
You can still explicitly override the validator if needed:
862863

863864
```typescript
865+
// Runtime-aware default (auto-selects AjvJsonSchemaValidator or CfWorkerJsonSchemaValidator)
864866
import { DefaultJsonSchemaValidator } from '@modelcontextprotocol/server/_shims';
865-
// or
866-
import { AjvJsonSchemaValidator, CfWorkerJsonSchemaValidator } from '@modelcontextprotocol/server';
867+
868+
// Specific validators
869+
import { AjvJsonSchemaValidator } from '@modelcontextprotocol/server';
870+
import { CfWorkerJsonSchemaValidator } from '@modelcontextprotocol/server/validators/cf-worker';
867871
```
868872

869873
## Unchanged APIs

packages/client/package.json

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@
2424
"types": "./dist/index.d.mts",
2525
"import": "./dist/index.mjs"
2626
},
27+
"./validators/cf-worker": {
28+
"types": "./dist/validators/cfWorker.d.mts",
29+
"import": "./dist/validators/cfWorker.mjs"
30+
},
2731
"./_shims": {
2832
"workerd": {
2933
"types": "./dist/shimsWorkerd.d.mts",
@@ -67,14 +71,6 @@
6771
"pkce-challenge": "catalog:runtimeShared",
6872
"zod": "catalog:runtimeShared"
6973
},
70-
"peerDependencies": {
71-
"@cfworker/json-schema": "catalog:runtimeShared"
72-
},
73-
"peerDependenciesMeta": {
74-
"@cfworker/json-schema": {
75-
"optional": true
76-
}
77-
},
7874
"devDependencies": {
7975
"@modelcontextprotocol/core": "workspace:^",
8076
"@modelcontextprotocol/tsconfig": "workspace:^",

packages/client/src/client/client.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ export type ClientOptions = ProtocolOptions & {
162162
* The validator is used to validate structured content returned by tools
163163
* against their declared output schemas.
164164
*
165-
* @default {@linkcode DefaultJsonSchemaValidator} ({@linkcode index.AjvJsonSchemaValidator | AjvJsonSchemaValidator} on Node.js, {@linkcode index.CfWorkerJsonSchemaValidator | CfWorkerJsonSchemaValidator} on Cloudflare Workers)
165+
* @default {@linkcode DefaultJsonSchemaValidator} ({@linkcode index.AjvJsonSchemaValidator | AjvJsonSchemaValidator} on Node.js, `CfWorkerJsonSchemaValidator` on Cloudflare Workers)
166166
*/
167167
jsonSchemaValidator?: jsonSchemaValidator;
168168

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/**
2+
* Cloudflare Workers JSON Schema validator, available as a sub-path export.
3+
*
4+
* @example
5+
* ```ts
6+
* import { CfWorkerJsonSchemaValidator } from '@modelcontextprotocol/client/validators/cf-worker';
7+
* ```
8+
*/
9+
export { CfWorkerJsonSchemaValidator } from '@modelcontextprotocol/core';
10+
export type { CfWorkerSchemaDraft } from '@modelcontextprotocol/core';

packages/client/tsdown.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ export default defineConfig({
44
failOnWarn: 'ci-only',
55
// 1. Entry Points
66
// Directly matches package.json include/exclude globs
7-
entry: ['src/index.ts', 'src/shimsNode.ts', 'src/shimsWorkerd.ts', 'src/shimsBrowser.ts'],
7+
entry: ['src/index.ts', 'src/shimsNode.ts', 'src/shimsWorkerd.ts', 'src/shimsBrowser.ts', 'src/validators/cfWorker.ts'],
88

99
// 2. Output Configuration
1010
format: ['esm'],

packages/core/src/exports/public/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,6 @@ export { InMemoryTaskMessageQueue, InMemoryTaskStore } from '../../experimental/
137137
export type { StandardSchemaWithJSON } from '../../util/standardSchema.js';
138138
export { AjvJsonSchemaValidator } from '../../validators/ajvProvider.js';
139139
export type { CfWorkerSchemaDraft } from '../../validators/cfWorkerProvider.js';
140-
export { CfWorkerJsonSchemaValidator } from '../../validators/cfWorkerProvider.js';
141140
// fromJsonSchema is intentionally NOT exported here — the server and client packages
142141
// provide runtime-aware wrappers that default to the appropriate validator via _shims.
143142
export type { JsonSchemaType, JsonSchemaValidator, jsonSchemaValidator, JsonSchemaValidatorResult } from '../../validators/types.js';

packages/core/src/index.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,11 @@ export * from './validators/fromJsonSchema.js';
2828
* Choose a validator based on your runtime environment:
2929
*
3030
* - {@linkcode AjvJsonSchemaValidator}: Best for Node.js (default, fastest)
31-
* Import from: @modelcontextprotocol/sdk/validators/ajv
32-
* Requires peer dependencies: ajv, ajv-formats
31+
* Bundled — no additional dependencies required.
3332
*
3433
* - {@linkcode CfWorkerJsonSchemaValidator}: Best for edge runtimes
35-
* Import from: @modelcontextprotocol/sdk/validators/cfworker
36-
* Requires peer dependency: @cfworker/json-schema
34+
* Import from: `@modelcontextprotocol/server/validators/cf-worker` or `@modelcontextprotocol/client/validators/cf-worker`
35+
* Bundled — no additional dependencies required.
3736
*
3837
* @example For Node.js with AJV
3938
* ```ts source="./index.examples.ts#validation_ajv"

packages/core/src/validators/ajvProvider.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ function createDefaultAjvInstance(): Ajv {
3333
* const validator = new AjvJsonSchemaValidator(ajv);
3434
* ```
3535
*
36-
* @see {@linkcode CfWorkerJsonSchemaValidator} for an edge-runtime-compatible alternative
36+
* @see `CfWorkerJsonSchemaValidator` for an edge-runtime-compatible alternative (import from `@modelcontextprotocol/server/validators/cf-worker` or `@modelcontextprotocol/client/validators/cf-worker`)
3737
*/
3838
export class AjvJsonSchemaValidator implements jsonSchemaValidator {
3939
private _ajv: Ajv;

packages/server/package.json

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@
2424
"types": "./dist/index.d.mts",
2525
"import": "./dist/index.mjs"
2626
},
27+
"./validators/cf-worker": {
28+
"types": "./dist/validators/cfWorker.d.mts",
29+
"import": "./dist/validators/cfWorker.mjs"
30+
},
2731
"./_shims": {
2832
"workerd": {
2933
"types": "./dist/shimsWorkerd.d.mts",
@@ -62,14 +66,6 @@
6266
"dependencies": {
6367
"zod": "catalog:runtimeShared"
6468
},
65-
"peerDependencies": {
66-
"@cfworker/json-schema": "catalog:runtimeShared"
67-
},
68-
"peerDependenciesMeta": {
69-
"@cfworker/json-schema": {
70-
"optional": true
71-
}
72-
},
7369
"devDependencies": {
7470
"@cfworker/json-schema": "catalog:runtimeShared",
7571
"@eslint/js": "catalog:devTools",

0 commit comments

Comments
 (0)