Skip to content
Draft
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: 5 additions & 0 deletions .changeset/sdk-meta-package.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@modelcontextprotocol/sdk': patch
---

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.
25 changes: 25 additions & 0 deletions packages/sdk/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# @modelcontextprotocol/sdk

The **primary entry point** for the Model Context Protocol TypeScript SDK.

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:

```ts
import { McpServer, Client, NodeStreamableHTTPServerTransport } from '@modelcontextprotocol/sdk';
```

## Upgrading from v1

`@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
the matching v2 symbols and emit one-time deprecation warnings where the API shape changed.

See [`docs/migration.md`](../../docs/migration.md) for the full mapping.

## When to use the sub-packages directly

Bundle-sensitive targets (browsers, Cloudflare Workers) should import from `@modelcontextprotocol/client` or `@modelcontextprotocol/server` directly to avoid pulling in Node-only transports.
Comment thread
felixweinberger marked this conversation as resolved.

## Optional subpaths

The `./server/auth/*` subpaths re-export the legacy Authorization Server helpers from `@modelcontextprotocol/server-auth-legacy`, which require `express` to be installed by the consumer. Similarly, `./server/sse.js` (the deprecated `SSEServerTransport`) is provided by
`@modelcontextprotocol/node`. Both `express` and `hono` are optional peer dependencies — install them only if you use those subpaths.
27 changes: 27 additions & 0 deletions packages/sdk/eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// @ts-check

import baseConfig from '@modelcontextprotocol/eslint-config';

export default [
...baseConfig,
{
settings: {
'import/internal-regex': '^@modelcontextprotocol/'
}
},
{
// This package is the v1-compat surface; deprecated re-exports are intentional.
// import/no-unresolved: subpaths re-export from sibling packages (server-auth-legacy,
// node/sse, server/zod-schemas) that don't exist on this branch standalone — they
// land via separate PRs in this BC series. Resolves once those merge.
// import/export: types.ts deliberately shadows `export *` names with v1-compat aliases
// (TS spec: named export wins over re-export).
// unicorn/filename-case: validation/ajv-provider.ts etc. match v1 subpath names.
rules: {
'@typescript-eslint/no-deprecated': 'off',
'import/no-unresolved': 'off',
'import/export': 'off',
'unicorn/filename-case': 'off'
}
}
];
332 changes: 332 additions & 0 deletions packages/sdk/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,332 @@
{
"name": "@modelcontextprotocol/sdk",
"version": "2.0.0-alpha.2",
"description": "Model Context Protocol implementation for TypeScript - Full SDK (re-exports client, server, and node middleware)",
"license": "MIT",
"author": "Anthropic, PBC (https://anthropic.com)",
"homepage": "https://modelcontextprotocol.io",
"bugs": "https://github.com/modelcontextprotocol/typescript-sdk/issues",
"type": "module",
"types": "./dist/index.d.ts",
"repository": {
"type": "git",
"url": "git+https://github.com/modelcontextprotocol/typescript-sdk.git"
},
"engines": {
"node": ">=20"
},
"keywords": [
"modelcontextprotocol",
"mcp"
],
"exports": {
".": {
"types": "./dist/index.d.ts",
"import": "./dist/index.mjs"
},
"./stdio": {
"types": "./dist/stdio.d.ts",
"import": "./dist/stdio.mjs"
},
"./types.js": {
"types": "./dist/types.d.ts",
"import": "./dist/types.mjs"
},
"./types": {
"types": "./dist/types.d.ts",
"import": "./dist/types.mjs"
},
"./server/index.js": {
"types": "./dist/server/index.d.ts",
"import": "./dist/server/index.mjs"
},
"./server/index": {
"types": "./dist/server/index.d.ts",
"import": "./dist/server/index.mjs"
},
"./server/mcp.js": {
"types": "./dist/server/mcp.d.ts",
"import": "./dist/server/mcp.mjs"
},
"./server/mcp": {
"types": "./dist/server/mcp.d.ts",
"import": "./dist/server/mcp.mjs"
},
"./server/zod-compat.js": {
"types": "./dist/server/zod-compat.d.ts",
"import": "./dist/server/zod-compat.mjs"
},
"./server/zod-compat": {
"types": "./dist/server/zod-compat.d.ts",
"import": "./dist/server/zod-compat.mjs"
},
"./server/stdio.js": {
"types": "./dist/server/stdio.d.ts",
"import": "./dist/server/stdio.mjs"
},
"./server/stdio": {
"types": "./dist/server/stdio.d.ts",
"import": "./dist/server/stdio.mjs"
},
"./server/streamableHttp.js": {
"types": "./dist/server/streamableHttp.d.ts",
"import": "./dist/server/streamableHttp.mjs"
},
"./server/streamableHttp": {
"types": "./dist/server/streamableHttp.d.ts",
"import": "./dist/server/streamableHttp.mjs"
},
"./server/auth/types.js": {
"types": "./dist/server/auth/types.d.ts",
"import": "./dist/server/auth/types.mjs"
},
"./server/auth/types": {
"types": "./dist/server/auth/types.d.ts",
"import": "./dist/server/auth/types.mjs"
},
"./server/auth/errors.js": {
"types": "./dist/server/auth/errors.d.ts",
"import": "./dist/server/auth/errors.mjs"
},
"./server/auth/errors": {
"types": "./dist/server/auth/errors.d.ts",
"import": "./dist/server/auth/errors.mjs"
},
"./client": {
"types": "./dist/client/index.d.ts",
"import": "./dist/client/index.mjs"
},
"./client/index.js": {
"types": "./dist/client/index.d.ts",
"import": "./dist/client/index.mjs"
},
"./client/index": {
"types": "./dist/client/index.d.ts",
"import": "./dist/client/index.mjs"
},
"./client/stdio.js": {
"types": "./dist/client/stdio.d.ts",
"import": "./dist/client/stdio.mjs"
},
"./client/stdio": {
"types": "./dist/client/stdio.d.ts",
"import": "./dist/client/stdio.mjs"
},
"./client/streamableHttp.js": {
"types": "./dist/client/streamableHttp.d.ts",
"import": "./dist/client/streamableHttp.mjs"
},
"./client/streamableHttp": {
"types": "./dist/client/streamableHttp.d.ts",
"import": "./dist/client/streamableHttp.mjs"
},
"./client/sse.js": {
"types": "./dist/client/sse.d.ts",
"import": "./dist/client/sse.mjs"
},
"./client/sse": {
"types": "./dist/client/sse.d.ts",
"import": "./dist/client/sse.mjs"
},
"./client/auth.js": {
"types": "./dist/client/auth.d.ts",
"import": "./dist/client/auth.mjs"
},
"./client/auth": {
"types": "./dist/client/auth.d.ts",
"import": "./dist/client/auth.mjs"
},
"./shared/protocol.js": {
"types": "./dist/shared/protocol.d.ts",
"import": "./dist/shared/protocol.mjs"
},
"./shared/protocol": {
"types": "./dist/shared/protocol.d.ts",
"import": "./dist/shared/protocol.mjs"
},
"./shared/transport.js": {
"types": "./dist/shared/transport.d.ts",
"import": "./dist/shared/transport.mjs"
},
"./shared/transport": {
"types": "./dist/shared/transport.d.ts",
"import": "./dist/shared/transport.mjs"
},
"./shared/auth.js": {
"types": "./dist/shared/auth.d.ts",
"import": "./dist/shared/auth.mjs"
},
"./shared/auth": {
"types": "./dist/shared/auth.d.ts",
"import": "./dist/shared/auth.mjs"
},
"./server/auth/middleware/bearerAuth.js": {
"types": "./dist/server/auth/middleware/bearerAuth.d.ts",
"import": "./dist/server/auth/middleware/bearerAuth.mjs"
},
"./server/auth/middleware/bearerAuth": {
"types": "./dist/server/auth/middleware/bearerAuth.d.ts",
"import": "./dist/server/auth/middleware/bearerAuth.mjs"
},
"./server/auth/router.js": {
"types": "./dist/server/auth/router.d.ts",
"import": "./dist/server/auth/router.mjs"
},
"./server/auth/router": {
"types": "./dist/server/auth/router.d.ts",
"import": "./dist/server/auth/router.mjs"
},
"./server/auth/provider.js": {
"types": "./dist/server/auth/provider.d.ts",
"import": "./dist/server/auth/provider.mjs"
},
"./server/auth/provider": {
"types": "./dist/server/auth/provider.d.ts",
"import": "./dist/server/auth/provider.mjs"
},
"./server/auth/clients.js": {
"types": "./dist/server/auth/clients.d.ts",
"import": "./dist/server/auth/clients.mjs"
},
"./server/auth/clients": {
"types": "./dist/server/auth/clients.d.ts",
"import": "./dist/server/auth/clients.mjs"
},
"./inMemory.js": {
"types": "./dist/inMemory.d.ts",
"import": "./dist/inMemory.mjs"
},
"./inMemory": {
"types": "./dist/inMemory.d.ts",
"import": "./dist/inMemory.mjs"
},
"./server/completable.js": {
"types": "./dist/server/completable.d.ts",
"import": "./dist/server/completable.mjs"
},
"./server/completable": {
"types": "./dist/server/completable.d.ts",
"import": "./dist/server/completable.mjs"
},
"./server/sse.js": {
"types": "./dist/server/sse.d.ts",
"import": "./dist/server/sse.mjs"
},
"./server/sse": {
"types": "./dist/server/sse.d.ts",
"import": "./dist/server/sse.mjs"
},
"./experimental/tasks": {
"types": "./dist/experimental/tasks.d.ts",
"import": "./dist/experimental/tasks.mjs"
},
"./server": {
"types": "./dist/server/index.d.ts",
"import": "./dist/server/index.mjs"
},
"./server.js": {
"types": "./dist/server/index.d.ts",
"import": "./dist/server/index.mjs"
},
"./client.js": {
"types": "./dist/client/index.d.ts",
"import": "./dist/client/index.mjs"
},
"./server/webStandardStreamableHttp.js": {
"types": "./dist/server/webStandardStreamableHttp.d.ts",
"import": "./dist/server/webStandardStreamableHttp.mjs"
},
"./server/webStandardStreamableHttp": {
"types": "./dist/server/webStandardStreamableHttp.d.ts",
"import": "./dist/server/webStandardStreamableHttp.mjs"
},
"./shared/stdio.js": {
"types": "./dist/shared/stdio.d.ts",
"import": "./dist/shared/stdio.mjs"
},
"./shared/stdio": {
"types": "./dist/shared/stdio.d.ts",
"import": "./dist/shared/stdio.mjs"
},
"./validation/types.js": {
"types": "./dist/validation/types.d.ts",
"import": "./dist/validation/types.mjs"
},
"./validation/types": {
"types": "./dist/validation/types.d.ts",
"import": "./dist/validation/types.mjs"
},
"./validation/cfworker-provider.js": {
"types": "./dist/validation/cfworker-provider.d.ts",
"import": "./dist/validation/cfworker-provider.mjs"
},
"./validation/cfworker-provider": {
"types": "./dist/validation/cfworker-provider.d.ts",
"import": "./dist/validation/cfworker-provider.mjs"
},
"./validation/ajv-provider.js": {
"types": "./dist/validation/ajv-provider.d.ts",
"import": "./dist/validation/ajv-provider.mjs"
},
"./validation/ajv-provider": {
"types": "./dist/validation/ajv-provider.d.ts",
"import": "./dist/validation/ajv-provider.mjs"
}
},
"files": [
"dist"
],
"scripts": {
"typecheck": "tsgo -p tsconfig.json --noEmit",
"build": "tsdown && tsc -p tsconfig.build.json",
"lint": "eslint src/ && prettier --ignore-path ../../.prettierignore --check .",
"lint:fix": "eslint src/ --fix && prettier --ignore-path ../../.prettierignore --write .",
"check": "pnpm run typecheck && pnpm run lint",
"test": "vitest run",
"test:watch": "vitest",
"prepack": "pnpm run build"
},
"dependencies": {
Comment thread
claude[bot] marked this conversation as resolved.
"@modelcontextprotocol/client": "workspace:^",
"@modelcontextprotocol/node": "workspace:^",
"@modelcontextprotocol/server": "workspace:^",
"@modelcontextprotocol/server-auth-legacy": "workspace:^"
},
"peerDependencies": {
"express": "^4.18.0 || ^5.0.0",
"hono": "*"
},
"peerDependenciesMeta": {
"express": {
"optional": true
},
"hono": {
"optional": true
}
},
Comment thread
felixweinberger marked this conversation as resolved.
"devDependencies": {
"@modelcontextprotocol/core": "workspace:^",
"@modelcontextprotocol/eslint-config": "workspace:^",
"@modelcontextprotocol/test-helpers": "workspace:^",
"@modelcontextprotocol/tsconfig": "workspace:^",
"@modelcontextprotocol/vitest-config": "workspace:^",
"@typescript/native-preview": "catalog:devTools",
"eslint": "catalog:devTools",
"prettier": "catalog:devTools",
"tsdown": "catalog:devTools",
"typescript": "catalog:devTools",
"vitest": "catalog:devTools",
"zod": "catalog:runtimeShared"
},
"typesVersions": {
"*": {
"*.js": [
"dist/*.d.ts"
],
"*": [
"dist/*.d.ts",
"dist/*/index.d.ts"
]
}
}
Comment thread
felixweinberger marked this conversation as resolved.
}
1 change: 1 addition & 0 deletions packages/sdk/src/client/auth.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from '@modelcontextprotocol/client';
1 change: 1 addition & 0 deletions packages/sdk/src/client/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from '@modelcontextprotocol/client';
1 change: 1 addition & 0 deletions packages/sdk/src/client/sse.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { SSEClientTransport, type SSEClientTransportOptions, SseError } from '@modelcontextprotocol/client';
Loading
Loading