Skip to content

Commit 87d4f17

Browse files
feat(compat): add @modelcontextprotocol/sdk meta-package with v1 deep-import subpaths
Adds packages/sdk as the primary v2 entry point. Re-exports the full server + client + node surface from a single root barrel (TS2308-safe named re-exports for client/node) and preserves v1 deep-import subpaths (/types.js, /server/mcp.js, /client/index.js, /shared/transport.js, /shared/protocol.js, /server/auth/errors.js with the 17 OAuth error subclasses, etc.). Folds in the C3/C6 schema-arg shims: the sdk-exported Server and Client are thin subclasses that additionally accept the deprecated v1 calling conventions setRequestHandler(ZodSchema, h), setNotificationHandler( ZodSchema, h) and request(req, ResultSchema, opts), extracting the method literal and forwarding to the v2 string-based API with a one-time deprecation warning.
1 parent d0bc434 commit 87d4f17

44 files changed

Lines changed: 1033 additions & 6 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.changeset/sdk-meta-package.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@modelcontextprotocol/sdk': patch
3+
---
4+
5+
Add `@modelcontextprotocol/sdk` meta-package: re-exports `@modelcontextprotocol/server` + `client` + `node` and preserves v1 deep-import subpaths (`/types.js`, `/server/mcp.js`, `/client/index.js`, `/shared/transport.js`, `/server/auth/errors.js`, etc.). The package is the recommended primary entry point; the split packages remain available for bundle-conscious consumers.

packages/sdk/README.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# @modelcontextprotocol/sdk
2+
3+
The **primary entry point** for the Model Context Protocol TypeScript SDK.
4+
5+
This meta-package re-exports the full public surface of [`@modelcontextprotocol/server`](../server), [`@modelcontextprotocol/client`](../client), and [`@modelcontextprotocol/node`](../middleware/node), so most applications can depend on this package alone:
6+
7+
```ts
8+
import { McpServer, Client, NodeStreamableHTTPServerTransport } from '@modelcontextprotocol/sdk';
9+
```
10+
11+
## Upgrading from v1
12+
13+
`@modelcontextprotocol/sdk` v2 is a drop-in upgrade for most v1 servers — just bump the version. v1 deep-import paths (`@modelcontextprotocol/sdk/types.js`, `/server/mcp.js`, `/client/index.js`, `/shared/transport.js`, etc.) are preserved as compatibility subpaths that re-export
14+
the matching v2 symbols and emit one-time deprecation warnings where the API shape changed.
15+
16+
See [`docs/migration.md`](../../docs/migration.md) for the full mapping.
17+
18+
## When to use the sub-packages directly
19+
20+
Bundle-sensitive targets (browsers, Cloudflare Workers) should import from `@modelcontextprotocol/client` or `@modelcontextprotocol/server` directly to avoid pulling in Node-only transports.

packages/sdk/eslint.config.mjs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// @ts-check
2+
3+
import baseConfig from '@modelcontextprotocol/eslint-config';
4+
5+
export default [
6+
...baseConfig,
7+
{
8+
settings: {
9+
'import/internal-regex': '^@modelcontextprotocol/'
10+
}
11+
},
12+
{
13+
// This package is the v1-compat surface; deprecated re-exports are intentional.
14+
// import/no-unresolved: subpaths re-export from sibling packages (server-auth-legacy,
15+
// node/sse, server/zod-schemas) that don't exist on this branch standalone — they
16+
// land via separate PRs in this BC series. Resolves once those merge.
17+
// import/export: types.ts deliberately shadows `export *` names with v1-compat aliases
18+
// (TS spec: named export wins over re-export).
19+
// unicorn/filename-case: validation/ajv-provider.ts etc. match v1 subpath names.
20+
rules: {
21+
'@typescript-eslint/no-deprecated': 'off',
22+
'import/no-unresolved': 'off',
23+
'import/export': 'off',
24+
'unicorn/filename-case': 'off'
25+
}
26+
}
27+
];

packages/sdk/package.json

Lines changed: 312 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,312 @@
1+
{
2+
"name": "@modelcontextprotocol/sdk",
3+
"version": "2.0.0-alpha.2",
4+
"description": "Model Context Protocol implementation for TypeScript - Full SDK (re-exports client, server, and node middleware)",
5+
"license": "MIT",
6+
"author": "Anthropic, PBC (https://anthropic.com)",
7+
"homepage": "https://modelcontextprotocol.io",
8+
"bugs": "https://github.com/modelcontextprotocol/typescript-sdk/issues",
9+
"type": "module",
10+
"repository": {
11+
"type": "git",
12+
"url": "git+https://github.com/modelcontextprotocol/typescript-sdk.git"
13+
},
14+
"engines": {
15+
"node": ">=20"
16+
},
17+
"keywords": [
18+
"modelcontextprotocol",
19+
"mcp"
20+
],
21+
"exports": {
22+
".": {
23+
"types": "./dist/index.d.ts",
24+
"import": "./dist/index.mjs"
25+
},
26+
"./stdio": {
27+
"types": "./dist/stdio.d.ts",
28+
"import": "./dist/stdio.mjs"
29+
},
30+
"./types.js": {
31+
"types": "./dist/types.d.ts",
32+
"import": "./dist/types.mjs"
33+
},
34+
"./types": {
35+
"types": "./dist/types.d.ts",
36+
"import": "./dist/types.mjs"
37+
},
38+
"./server/index.js": {
39+
"types": "./dist/server/index.d.ts",
40+
"import": "./dist/server/index.mjs"
41+
},
42+
"./server/index": {
43+
"types": "./dist/server/index.d.ts",
44+
"import": "./dist/server/index.mjs"
45+
},
46+
"./server/mcp.js": {
47+
"types": "./dist/server/mcp.d.ts",
48+
"import": "./dist/server/mcp.mjs"
49+
},
50+
"./server/mcp": {
51+
"types": "./dist/server/mcp.d.ts",
52+
"import": "./dist/server/mcp.mjs"
53+
},
54+
"./server/stdio.js": {
55+
"types": "./dist/server/stdio.d.ts",
56+
"import": "./dist/server/stdio.mjs"
57+
},
58+
"./server/stdio": {
59+
"types": "./dist/server/stdio.d.ts",
60+
"import": "./dist/server/stdio.mjs"
61+
},
62+
"./server/streamableHttp.js": {
63+
"types": "./dist/server/streamableHttp.d.ts",
64+
"import": "./dist/server/streamableHttp.mjs"
65+
},
66+
"./server/streamableHttp": {
67+
"types": "./dist/server/streamableHttp.d.ts",
68+
"import": "./dist/server/streamableHttp.mjs"
69+
},
70+
"./server/auth/types.js": {
71+
"types": "./dist/server/auth/types.d.ts",
72+
"import": "./dist/server/auth/types.mjs"
73+
},
74+
"./server/auth/types": {
75+
"types": "./dist/server/auth/types.d.ts",
76+
"import": "./dist/server/auth/types.mjs"
77+
},
78+
"./server/auth/errors.js": {
79+
"types": "./dist/server/auth/errors.d.ts",
80+
"import": "./dist/server/auth/errors.mjs"
81+
},
82+
"./server/auth/errors": {
83+
"types": "./dist/server/auth/errors.d.ts",
84+
"import": "./dist/server/auth/errors.mjs"
85+
},
86+
"./client": {
87+
"types": "./dist/client/index.d.ts",
88+
"import": "./dist/client/index.mjs"
89+
},
90+
"./client/index.js": {
91+
"types": "./dist/client/index.d.ts",
92+
"import": "./dist/client/index.mjs"
93+
},
94+
"./client/index": {
95+
"types": "./dist/client/index.d.ts",
96+
"import": "./dist/client/index.mjs"
97+
},
98+
"./client/stdio.js": {
99+
"types": "./dist/client/stdio.d.ts",
100+
"import": "./dist/client/stdio.mjs"
101+
},
102+
"./client/stdio": {
103+
"types": "./dist/client/stdio.d.ts",
104+
"import": "./dist/client/stdio.mjs"
105+
},
106+
"./client/streamableHttp.js": {
107+
"types": "./dist/client/streamableHttp.d.ts",
108+
"import": "./dist/client/streamableHttp.mjs"
109+
},
110+
"./client/streamableHttp": {
111+
"types": "./dist/client/streamableHttp.d.ts",
112+
"import": "./dist/client/streamableHttp.mjs"
113+
},
114+
"./client/sse.js": {
115+
"types": "./dist/client/sse.d.ts",
116+
"import": "./dist/client/sse.mjs"
117+
},
118+
"./client/sse": {
119+
"types": "./dist/client/sse.d.ts",
120+
"import": "./dist/client/sse.mjs"
121+
},
122+
"./client/auth.js": {
123+
"types": "./dist/client/auth.d.ts",
124+
"import": "./dist/client/auth.mjs"
125+
},
126+
"./client/auth": {
127+
"types": "./dist/client/auth.d.ts",
128+
"import": "./dist/client/auth.mjs"
129+
},
130+
"./shared/protocol.js": {
131+
"types": "./dist/shared/protocol.d.ts",
132+
"import": "./dist/shared/protocol.mjs"
133+
},
134+
"./shared/protocol": {
135+
"types": "./dist/shared/protocol.d.ts",
136+
"import": "./dist/shared/protocol.mjs"
137+
},
138+
"./shared/transport.js": {
139+
"types": "./dist/shared/transport.d.ts",
140+
"import": "./dist/shared/transport.mjs"
141+
},
142+
"./shared/transport": {
143+
"types": "./dist/shared/transport.d.ts",
144+
"import": "./dist/shared/transport.mjs"
145+
},
146+
"./shared/auth.js": {
147+
"types": "./dist/shared/auth.d.ts",
148+
"import": "./dist/shared/auth.mjs"
149+
},
150+
"./shared/auth": {
151+
"types": "./dist/shared/auth.d.ts",
152+
"import": "./dist/shared/auth.mjs"
153+
},
154+
"./server/auth/middleware/bearerAuth.js": {
155+
"types": "./dist/server/auth/middleware/bearerAuth.d.ts",
156+
"import": "./dist/server/auth/middleware/bearerAuth.mjs"
157+
},
158+
"./server/auth/middleware/bearerAuth": {
159+
"types": "./dist/server/auth/middleware/bearerAuth.d.ts",
160+
"import": "./dist/server/auth/middleware/bearerAuth.mjs"
161+
},
162+
"./server/auth/router.js": {
163+
"types": "./dist/server/auth/router.d.ts",
164+
"import": "./dist/server/auth/router.mjs"
165+
},
166+
"./server/auth/router": {
167+
"types": "./dist/server/auth/router.d.ts",
168+
"import": "./dist/server/auth/router.mjs"
169+
},
170+
"./server/auth/provider.js": {
171+
"types": "./dist/server/auth/provider.d.ts",
172+
"import": "./dist/server/auth/provider.mjs"
173+
},
174+
"./server/auth/provider": {
175+
"types": "./dist/server/auth/provider.d.ts",
176+
"import": "./dist/server/auth/provider.mjs"
177+
},
178+
"./server/auth/clients.js": {
179+
"types": "./dist/server/auth/clients.d.ts",
180+
"import": "./dist/server/auth/clients.mjs"
181+
},
182+
"./server/auth/clients": {
183+
"types": "./dist/server/auth/clients.d.ts",
184+
"import": "./dist/server/auth/clients.mjs"
185+
},
186+
"./inMemory.js": {
187+
"types": "./dist/inMemory.d.ts",
188+
"import": "./dist/inMemory.mjs"
189+
},
190+
"./inMemory": {
191+
"types": "./dist/inMemory.d.ts",
192+
"import": "./dist/inMemory.mjs"
193+
},
194+
"./server/completable.js": {
195+
"types": "./dist/server/completable.d.ts",
196+
"import": "./dist/server/completable.mjs"
197+
},
198+
"./server/completable": {
199+
"types": "./dist/server/completable.d.ts",
200+
"import": "./dist/server/completable.mjs"
201+
},
202+
"./server/sse.js": {
203+
"types": "./dist/server/sse.d.ts",
204+
"import": "./dist/server/sse.mjs"
205+
},
206+
"./server/sse": {
207+
"types": "./dist/server/sse.d.ts",
208+
"import": "./dist/server/sse.mjs"
209+
},
210+
"./experimental/tasks": {
211+
"types": "./dist/experimental/tasks.d.ts",
212+
"import": "./dist/experimental/tasks.mjs"
213+
},
214+
"./server": {
215+
"types": "./dist/server/index.d.ts",
216+
"import": "./dist/server/index.mjs"
217+
},
218+
"./server.js": {
219+
"types": "./dist/server/index.d.ts",
220+
"import": "./dist/server/index.mjs"
221+
},
222+
"./client.js": {
223+
"types": "./dist/client/index.d.ts",
224+
"import": "./dist/client/index.mjs"
225+
},
226+
"./server/webStandardStreamableHttp.js": {
227+
"types": "./dist/server/webStandardStreamableHttp.d.ts",
228+
"import": "./dist/server/webStandardStreamableHttp.mjs"
229+
},
230+
"./server/webStandardStreamableHttp": {
231+
"types": "./dist/server/webStandardStreamableHttp.d.ts",
232+
"import": "./dist/server/webStandardStreamableHttp.mjs"
233+
},
234+
"./shared/stdio.js": {
235+
"types": "./dist/shared/stdio.d.ts",
236+
"import": "./dist/shared/stdio.mjs"
237+
},
238+
"./shared/stdio": {
239+
"types": "./dist/shared/stdio.d.ts",
240+
"import": "./dist/shared/stdio.mjs"
241+
},
242+
"./validation/types.js": {
243+
"types": "./dist/validation/types.d.ts",
244+
"import": "./dist/validation/types.mjs"
245+
},
246+
"./validation/types": {
247+
"types": "./dist/validation/types.d.ts",
248+
"import": "./dist/validation/types.mjs"
249+
},
250+
"./validation/cfworker-provider.js": {
251+
"types": "./dist/validation/cfworker-provider.d.ts",
252+
"import": "./dist/validation/cfworker-provider.mjs"
253+
},
254+
"./validation/cfworker-provider": {
255+
"types": "./dist/validation/cfworker-provider.d.ts",
256+
"import": "./dist/validation/cfworker-provider.mjs"
257+
},
258+
"./validation/ajv-provider.js": {
259+
"types": "./dist/validation/ajv-provider.d.ts",
260+
"import": "./dist/validation/ajv-provider.mjs"
261+
},
262+
"./validation/ajv-provider": {
263+
"types": "./dist/validation/ajv-provider.d.ts",
264+
"import": "./dist/validation/ajv-provider.mjs"
265+
}
266+
},
267+
"files": [
268+
"dist"
269+
],
270+
"scripts": {
271+
"typecheck": "tsgo -p tsconfig.json --noEmit",
272+
"build": "tsdown && tsc -p tsconfig.build.json",
273+
"lint": "eslint src/ && prettier --ignore-path ../../.prettierignore --check .",
274+
"lint:fix": "eslint src/ --fix && prettier --ignore-path ../../.prettierignore --write .",
275+
"check": "pnpm run typecheck && pnpm run lint",
276+
"test": "vitest run",
277+
"test:watch": "vitest",
278+
"prepack": "pnpm run build"
279+
},
280+
"dependencies": {
281+
"@modelcontextprotocol/client": "workspace:^",
282+
"@modelcontextprotocol/express": "workspace:^",
283+
"@modelcontextprotocol/node": "workspace:^",
284+
"@modelcontextprotocol/server": "workspace:^",
285+
"@modelcontextprotocol/server-auth-legacy": "workspace:^"
286+
},
287+
"devDependencies": {
288+
"@modelcontextprotocol/core": "workspace:^",
289+
"@modelcontextprotocol/eslint-config": "workspace:^",
290+
"@modelcontextprotocol/test-helpers": "workspace:^",
291+
"@modelcontextprotocol/tsconfig": "workspace:^",
292+
"@modelcontextprotocol/vitest-config": "workspace:^",
293+
"@typescript/native-preview": "catalog:devTools",
294+
"eslint": "catalog:devTools",
295+
"prettier": "catalog:devTools",
296+
"tsdown": "catalog:devTools",
297+
"typescript": "catalog:devTools",
298+
"vitest": "catalog:devTools",
299+
"zod": "catalog:runtimeShared"
300+
},
301+
"typesVersions": {
302+
"*": {
303+
"*.js": [
304+
"dist/*.d.ts"
305+
],
306+
"*": [
307+
"dist/*.d.ts",
308+
"dist/*/index.d.ts"
309+
]
310+
}
311+
}
312+
}

packages/sdk/src/client/auth.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from '@modelcontextprotocol/client';

packages/sdk/src/client/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from '@modelcontextprotocol/client';

packages/sdk/src/client/sse.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { SSEClientTransport, type SSEClientTransportOptions } from '@modelcontextprotocol/client';

packages/sdk/src/client/stdio.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export type { StdioServerParameters } from '@modelcontextprotocol/client/stdio';
2+
export { DEFAULT_INHERITED_ENV_VARS, getDefaultEnvironment, StdioClientTransport } from '@modelcontextprotocol/client/stdio';
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export {
2+
StreamableHTTPClientTransport,
3+
type StreamableHTTPClientTransportOptions,
4+
StreamableHTTPError,
5+
type StreamableHTTPReconnectionOptions
6+
} from '@modelcontextprotocol/client';
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// v1 compat: `@modelcontextprotocol/sdk/experimental/tasks`
2+
// Re-exports the full server surface (task stores, handlers, and related types
3+
// are scattered between core/public and server/experimental/tasks; the root
4+
// barrel includes both).
5+
export * from '@modelcontextprotocol/server';

0 commit comments

Comments
 (0)