Skip to content

Commit 46fe6d2

Browse files
refactor(client,server): move stdio transports to ./stdio subpath export
Stdio transports require a process-spawning runtime (Node.js, Bun, Deno). Exporting them from the package root meant browser and Cloudflare Workers bundlers pulled in node:child_process, node:stream, and cross-spawn. Move StdioClientTransport, getDefaultEnvironment, DEFAULT_INHERITED_ENV_VARS, and StdioServerParameters to @modelcontextprotocol/client/stdio, and StdioServerTransport to @modelcontextprotocol/server/stdio. The root entry is now browser-safe; stdio consumers update one import path.
1 parent 7ba58da commit 46fe6d2

28 files changed

+142
-26
lines changed

.changeset/stdio-subpath-export.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@modelcontextprotocol/client': minor
3+
'@modelcontextprotocol/server': minor
4+
---
5+
6+
Move stdio transports to a `./stdio` subpath export. Import `StdioClientTransport`, `getDefaultEnvironment`, `DEFAULT_INHERITED_ENV_VARS`, and `StdioServerParameters` from `@modelcontextprotocol/client/stdio`, and `StdioServerTransport` from `@modelcontextprotocol/server/stdio`. The package root entries no longer pull in `node:child_process`, `node:stream`, or `cross-spawn`, fixing bundling for browser and Cloudflare Workers targets. Node.js, Bun, and Deno consumers update the import path; runtime behavior is unchanged.

docs/client-quickstart.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,8 @@ First, let's set up our imports and create the basic client class in `src/index.
112112

113113
```ts source="../examples/client-quickstart/src/index.ts#prelude"
114114
import Anthropic from '@anthropic-ai/sdk';
115-
import { Client, StdioClientTransport } from '@modelcontextprotocol/client';
115+
import { Client } from '@modelcontextprotocol/client';
116+
import { StdioClientTransport } from '@modelcontextprotocol/client/stdio';
116117
import readline from 'readline/promises';
117118

118119
const ANTHROPIC_MODEL = 'claude-sonnet-4-5';

docs/client.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ import {
2626
SdkError,
2727
SdkErrorCode,
2828
SSEClientTransport,
29-
StdioClientTransport,
3029
StreamableHTTPClientTransport
3130
} from '@modelcontextprotocol/client';
31+
import { StdioClientTransport } from '@modelcontextprotocol/client/stdio';
3232
```
3333

3434
## Connecting to a server

docs/migration-SKILL.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ Replace all `@modelcontextprotocol/sdk/...` imports using this table.
4242
| `@modelcontextprotocol/sdk/client/auth.js` | `@modelcontextprotocol/client` |
4343
| `@modelcontextprotocol/sdk/client/streamableHttp.js` | `@modelcontextprotocol/client` |
4444
| `@modelcontextprotocol/sdk/client/sse.js` | `@modelcontextprotocol/client` |
45-
| `@modelcontextprotocol/sdk/client/stdio.js` | `@modelcontextprotocol/client` |
45+
| `@modelcontextprotocol/sdk/client/stdio.js` | `@modelcontextprotocol/client/stdio` |
4646
| `@modelcontextprotocol/sdk/client/websocket.js` | REMOVED (use Streamable HTTP or stdio; implement `Transport` for custom needs) |
4747

4848
### Server imports
@@ -51,7 +51,7 @@ Replace all `@modelcontextprotocol/sdk/...` imports using this table.
5151
| ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
5252
| `@modelcontextprotocol/sdk/server/mcp.js` | `@modelcontextprotocol/server` |
5353
| `@modelcontextprotocol/sdk/server/index.js` | `@modelcontextprotocol/server` |
54-
| `@modelcontextprotocol/sdk/server/stdio.js` | `@modelcontextprotocol/server` |
54+
| `@modelcontextprotocol/sdk/server/stdio.js` | `@modelcontextprotocol/server/stdio` |
5555
| `@modelcontextprotocol/sdk/server/streamableHttp.js` | `@modelcontextprotocol/node` (class renamed to `NodeStreamableHTTPServerTransport`) OR `@modelcontextprotocol/server` (web-standard `WebStandardStreamableHTTPServerTransport` for Cloudflare Workers, Deno, etc.) |
5656
| `@modelcontextprotocol/sdk/server/sse.js` | REMOVED (migrate to Streamable HTTP) |
5757
| `@modelcontextprotocol/sdk/server/auth/*` | REMOVED (use external auth library) |
@@ -66,7 +66,7 @@ Replace all `@modelcontextprotocol/sdk/...` imports using this table.
6666
| `@modelcontextprotocol/sdk/shared/transport.js` | `@modelcontextprotocol/client` or `@modelcontextprotocol/server` |
6767
| `@modelcontextprotocol/sdk/shared/uriTemplate.js` | `@modelcontextprotocol/client` or `@modelcontextprotocol/server` |
6868
| `@modelcontextprotocol/sdk/shared/auth.js` | `@modelcontextprotocol/client` or `@modelcontextprotocol/server` |
69-
| `@modelcontextprotocol/sdk/shared/stdio.js` | `@modelcontextprotocol/client` or `@modelcontextprotocol/server` |
69+
| `@modelcontextprotocol/sdk/shared/stdio.js` | `@modelcontextprotocol/client/stdio` or `@modelcontextprotocol/server/stdio` |
7070

7171
Notes:
7272

docs/migration.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,10 @@ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
5050
**After (v2):**
5151

5252
```typescript
53-
import { Client, StreamableHTTPClientTransport, StdioClientTransport } from '@modelcontextprotocol/client';
54-
import { McpServer, StdioServerTransport, WebStandardStreamableHTTPServerTransport } from '@modelcontextprotocol/server';
53+
import { Client, StreamableHTTPClientTransport } from '@modelcontextprotocol/client';
54+
import { StdioClientTransport } from '@modelcontextprotocol/client/stdio';
55+
import { McpServer, WebStandardStreamableHTTPServerTransport } from '@modelcontextprotocol/server';
56+
import { StdioServerTransport } from '@modelcontextprotocol/server/stdio';
5557

5658
// Node.js HTTP server transport is in the @modelcontextprotocol/node package
5759
import { NodeStreamableHTTPServerTransport } from '@modelcontextprotocol/node';

docs/server-quickstart.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,8 @@ Now let's dive into building your server.
127127
Add these to the top of your `src/index.ts`:
128128

129129
```ts source="../examples/server-quickstart/src/index.ts#prelude"
130-
import { McpServer, StdioServerTransport } from '@modelcontextprotocol/server';
130+
import { McpServer } from '@modelcontextprotocol/server';
131+
import { StdioServerTransport } from '@modelcontextprotocol/server/stdio';
131132
import * as z from 'zod/v4';
132133

133134
const NWS_API_BASE = 'https://api.weather.gov';

docs/server.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ import { randomUUID } from 'node:crypto';
2222
import { createMcpExpressApp } from '@modelcontextprotocol/express';
2323
import { NodeStreamableHTTPServerTransport } from '@modelcontextprotocol/node';
2424
import type { CallToolResult, ResourceLink } from '@modelcontextprotocol/server';
25-
import { completable, McpServer, ResourceTemplate, StdioServerTransport } from '@modelcontextprotocol/server';
25+
import { completable, McpServer, ResourceTemplate } from '@modelcontextprotocol/server';
26+
import { StdioServerTransport } from '@modelcontextprotocol/server/stdio';
2627
import * as z from 'zod/v4';
2728
```
2829

examples/client-quickstart/src/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
//#region prelude
22
import Anthropic from '@anthropic-ai/sdk';
3-
import { Client, StdioClientTransport } from '@modelcontextprotocol/client';
3+
import { Client } from '@modelcontextprotocol/client';
4+
import { StdioClientTransport } from '@modelcontextprotocol/client/stdio';
45
import readline from 'readline/promises';
56

67
const ANTHROPIC_MODEL = 'claude-sonnet-4-5';

examples/client/src/clientGuide.examples.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ import {
2121
SdkError,
2222
SdkErrorCode,
2323
SSEClientTransport,
24-
StdioClientTransport,
2524
StreamableHTTPClientTransport
2625
} from '@modelcontextprotocol/client';
26+
import { StdioClientTransport } from '@modelcontextprotocol/client/stdio';
2727
//#endregion imports
2828

2929
// ---------------------------------------------------------------------------

examples/server-quickstart/src/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
//#region prelude
2-
import { McpServer, StdioServerTransport } from '@modelcontextprotocol/server';
2+
import { McpServer } from '@modelcontextprotocol/server';
3+
import { StdioServerTransport } from '@modelcontextprotocol/server/stdio';
34
import * as z from 'zod/v4';
45

56
const NWS_API_BASE = 'https://api.weather.gov';

0 commit comments

Comments
 (0)