Skip to content

Commit 564aed2

Browse files
committed
rename StreamableHttpServerTransport to NodeStreamableHttpServerTransport, add server-express, server-hono to pkg.pr.new
1 parent 354fb43 commit 564aed2

24 files changed

+92
-90
lines changed

.github/workflows/publish.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,4 @@ jobs:
3838
run: pnpm run build:all
3939

4040
- name: Publish preview packages
41-
run: pnpm dlx pkg-pr-new publish --packageManager=npm --pnpm './packages/server' './packages/client'
41+
run: pnpm dlx pkg-pr-new publish --packageManager=npm --pnpm './packages/server' './packages/client' './packages/server-express' './packages/server-hono'

CLAUDE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ mcpServer.tool('tool-name', { param: z.string() }, async ({ param }, extra) => {
224224

225225
```typescript
226226
// Server
227-
const transport = new StreamableHTTPServerTransport({ sessionIdGenerator: () => randomUUID() });
227+
const transport = new NodeStreamableHTTPServerTransport({ sessionIdGenerator: () => randomUUID() });
228228
await server.connect(transport);
229229

230230
// Client

examples/server/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ When deploying MCP servers in a horizontally scaled environment (multiple server
7171

7272
### Stateless mode
7373

74-
To enable stateless mode, configure the `StreamableHTTPServerTransport` with:
74+
To enable stateless mode, configure the `NodeStreamableHTTPServerTransport` with:
7575

7676
```typescript
7777
sessionIdGenerator: undefined;

examples/server/src/elicitationFormExample.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
import { randomUUID } from 'node:crypto';
1111

12-
import { isInitializeRequest, McpServer, StreamableHTTPServerTransport } from '@modelcontextprotocol/server';
12+
import { isInitializeRequest, McpServer, NodeStreamableHTTPServerTransport } from '@modelcontextprotocol/server';
1313
import { createMcpExpressApp } from '@modelcontextprotocol/server-express';
1414
import type { Request, Response } from 'express';
1515

@@ -322,7 +322,7 @@ async function main() {
322322
const app = createMcpExpressApp();
323323

324324
// Map to store transports by session ID
325-
const transports: { [sessionId: string]: StreamableHTTPServerTransport } = {};
325+
const transports: { [sessionId: string]: NodeStreamableHTTPServerTransport } = {};
326326

327327
// MCP POST endpoint
328328
const mcpPostHandler = async (req: Request, res: Response) => {
@@ -332,13 +332,13 @@ async function main() {
332332
}
333333

334334
try {
335-
let transport: StreamableHTTPServerTransport;
335+
let transport: NodeStreamableHTTPServerTransport;
336336
if (sessionId && transports[sessionId]) {
337337
// Reuse existing transport for this session
338338
transport = transports[sessionId];
339339
} else if (!sessionId && isInitializeRequest(req.body)) {
340340
// New initialization request - create new transport
341-
transport = new StreamableHTTPServerTransport({
341+
transport = new NodeStreamableHTTPServerTransport({
342342
sessionIdGenerator: () => randomUUID(),
343343
onsessioninitialized: sessionId => {
344344
// Store the transport by session ID when session is initialized

examples/server/src/elicitationUrlExample.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import {
1616
getOAuthProtectedResourceMetadataUrl,
1717
isInitializeRequest,
1818
McpServer,
19-
StreamableHTTPServerTransport,
19+
NodeStreamableHTTPServerTransport,
2020
UrlElicitationRequiredError
2121
} from '@modelcontextprotocol/server';
2222
import { createMcpExpressApp, mcpAuthMetadataRouter, requireBearerAuth } from '@modelcontextprotocol/server-express';
@@ -592,7 +592,7 @@ app.post('/confirm-payment', express.urlencoded(), (req: Request, res: Response)
592592
});
593593

594594
// Map to store transports by session ID
595-
const transports: { [sessionId: string]: StreamableHTTPServerTransport } = {};
595+
const transports: { [sessionId: string]: NodeStreamableHTTPServerTransport } = {};
596596

597597
// Interface for a function that can send an elicitation request
598598
type ElicitationSender = (params: ElicitRequestURLParams) => Promise<ElicitResult>;
@@ -611,15 +611,15 @@ const mcpPostHandler = async (req: Request, res: Response) => {
611611
console.debug(`Received MCP POST for session: ${sessionId || 'unknown'}`);
612612

613613
try {
614-
let transport: StreamableHTTPServerTransport;
614+
let transport: NodeStreamableHTTPServerTransport;
615615
if (sessionId && transports[sessionId]) {
616616
// Reuse existing transport
617617
transport = transports[sessionId];
618618
} else if (!sessionId && isInitializeRequest(req.body)) {
619619
const server = getServer();
620620
// New initialization request
621621
const eventStore = new InMemoryEventStore();
622-
transport = new StreamableHTTPServerTransport({
622+
transport = new NodeStreamableHTTPServerTransport({
623623
sessionIdGenerator: () => randomUUID(),
624624
eventStore, // Enable resumability
625625
onsessioninitialized: sessionId => {

examples/server/src/jsonResponseStreamableHttp.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { randomUUID } from 'node:crypto';
22

33
import type { CallToolResult } from '@modelcontextprotocol/server';
4-
import { isInitializeRequest, McpServer, StreamableHTTPServerTransport } from '@modelcontextprotocol/server';
4+
import { isInitializeRequest, McpServer, NodeStreamableHTTPServerTransport } from '@modelcontextprotocol/server';
55
import { createMcpExpressApp } from '@modelcontextprotocol/server-express';
66
import type { Request, Response } from 'express';
77
import * as z from 'zod/v4';
@@ -97,21 +97,21 @@ const getServer = () => {
9797
const app = createMcpExpressApp();
9898

9999
// Map to store transports by session ID
100-
const transports: { [sessionId: string]: StreamableHTTPServerTransport } = {};
100+
const transports: { [sessionId: string]: NodeStreamableHTTPServerTransport } = {};
101101

102102
app.post('/mcp', async (req: Request, res: Response) => {
103103
console.log('Received MCP request:', req.body);
104104
try {
105105
// Check for existing session ID
106106
const sessionId = req.headers['mcp-session-id'] as string | undefined;
107-
let transport: StreamableHTTPServerTransport;
107+
let transport: NodeStreamableHTTPServerTransport;
108108

109109
if (sessionId && transports[sessionId]) {
110110
// Reuse existing transport
111111
transport = transports[sessionId];
112112
} else if (!sessionId && isInitializeRequest(req.body)) {
113113
// New initialization request - use JSON response mode
114-
transport = new StreamableHTTPServerTransport({
114+
transport = new NodeStreamableHTTPServerTransport({
115115
sessionIdGenerator: () => randomUUID(),
116116
enableJsonResponse: true, // Enable JSON response mode
117117
onsessioninitialized: sessionId => {

examples/server/src/simpleStatelessStreamableHttp.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { CallToolResult, GetPromptResult, ReadResourceResult } from '@modelcontextprotocol/server';
2-
import { McpServer, StreamableHTTPServerTransport } from '@modelcontextprotocol/server';
2+
import { McpServer, NodeStreamableHTTPServerTransport } from '@modelcontextprotocol/server';
33
import { createMcpExpressApp } from '@modelcontextprotocol/server-express';
44
import type { Request, Response } from 'express';
55
import * as z from 'zod/v4';
@@ -104,7 +104,7 @@ const app = createMcpExpressApp();
104104
app.post('/mcp', async (req: Request, res: Response) => {
105105
const server = getServer();
106106
try {
107-
const transport: StreamableHTTPServerTransport = new StreamableHTTPServerTransport({
107+
const transport: NodeStreamableHTTPServerTransport = new NodeStreamableHTTPServerTransport({
108108
sessionIdGenerator: undefined
109109
});
110110
await server.connect(transport);

examples/server/src/simpleStreamableHttp.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import {
1717
InMemoryTaskStore,
1818
isInitializeRequest,
1919
McpServer,
20-
StreamableHTTPServerTransport
20+
NodeStreamableHTTPServerTransport
2121
} from '@modelcontextprotocol/server';
2222
import { createMcpExpressApp, mcpAuthMetadataRouter, requireBearerAuth } from '@modelcontextprotocol/server-express';
2323
import type { Request, Response } from 'express';
@@ -588,7 +588,7 @@ if (useOAuth) {
588588
}
589589

590590
// Map to store transports by session ID
591-
const transports: { [sessionId: string]: StreamableHTTPServerTransport } = {};
591+
const transports: { [sessionId: string]: NodeStreamableHTTPServerTransport } = {};
592592

593593
// MCP POST endpoint with optional auth
594594
const mcpPostHandler = async (req: Request, res: Response) => {
@@ -603,14 +603,14 @@ const mcpPostHandler = async (req: Request, res: Response) => {
603603
console.log('Authenticated user:', req.auth);
604604
}
605605
try {
606-
let transport: StreamableHTTPServerTransport;
606+
let transport: NodeStreamableHTTPServerTransport;
607607
if (sessionId && transports[sessionId]) {
608608
// Reuse existing transport
609609
transport = transports[sessionId];
610610
} else if (!sessionId && isInitializeRequest(req.body)) {
611611
// New initialization request
612612
const eventStore = new InMemoryEventStore();
613-
transport = new StreamableHTTPServerTransport({
613+
transport = new NodeStreamableHTTPServerTransport({
614614
sessionIdGenerator: () => randomUUID(),
615615
eventStore, // Enable resumability
616616
onsessioninitialized: sessionId => {

examples/server/src/simpleTaskInteractive.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ import {
4242
ListToolsRequestSchema,
4343
RELATED_TASK_META_KEY,
4444
Server,
45-
StreamableHTTPServerTransport
45+
NodeStreamableHTTPServerTransport
4646
} from '@modelcontextprotocol/server';
4747
import { createMcpExpressApp } from '@modelcontextprotocol/server-express';
4848
import type { Request, Response } from 'express';
@@ -642,7 +642,7 @@ const createServer = (): Server => {
642642
const app = createMcpExpressApp();
643643

644644
// Map to store transports by session ID
645-
const transports: { [sessionId: string]: StreamableHTTPServerTransport } = {};
645+
const transports: { [sessionId: string]: NodeStreamableHTTPServerTransport } = {};
646646

647647
// Helper to check if request is initialize
648648
const isInitializeRequest = (body: unknown): boolean => {
@@ -654,12 +654,12 @@ app.post('/mcp', async (req: Request, res: Response) => {
654654
const sessionId = req.headers['mcp-session-id'] as string | undefined;
655655

656656
try {
657-
let transport: StreamableHTTPServerTransport;
657+
let transport: NodeStreamableHTTPServerTransport;
658658

659659
if (sessionId && transports[sessionId]) {
660660
transport = transports[sessionId];
661661
} else if (!sessionId && isInitializeRequest(req.body)) {
662-
transport = new StreamableHTTPServerTransport({
662+
transport = new NodeStreamableHTTPServerTransport({
663663
sessionIdGenerator: () => randomUUID(),
664664
onsessioninitialized: sid => {
665665
console.log(`Session initialized: ${sid}`);

examples/server/src/sseAndStreamableHttpCompatibleServer.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { randomUUID } from 'node:crypto';
22

33
import type { CallToolResult } from '@modelcontextprotocol/server';
4-
import { isInitializeRequest, McpServer, SSEServerTransport, StreamableHTTPServerTransport } from '@modelcontextprotocol/server';
4+
import { isInitializeRequest, McpServer, SSEServerTransport, NodeStreamableHTTPServerTransport } from '@modelcontextprotocol/server';
55
import { createMcpExpressApp } from '@modelcontextprotocol/server-express';
66
import type { Request, Response } from 'express';
77
import * as z from 'zod/v4';
@@ -76,7 +76,7 @@ const getServer = () => {
7676
const app = createMcpExpressApp();
7777

7878
// Store transports by session ID
79-
const transports: Record<string, StreamableHTTPServerTransport | SSEServerTransport> = {};
79+
const transports: Record<string, NodeStreamableHTTPServerTransport | SSEServerTransport> = {};
8080

8181
//=============================================================================
8282
// STREAMABLE HTTP TRANSPORT (PROTOCOL VERSION 2025-11-25)
@@ -89,16 +89,16 @@ app.all('/mcp', async (req: Request, res: Response) => {
8989
try {
9090
// Check for existing session ID
9191
const sessionId = req.headers['mcp-session-id'] as string | undefined;
92-
let transport: StreamableHTTPServerTransport;
92+
let transport: NodeStreamableHTTPServerTransport;
9393

9494
if (sessionId && transports[sessionId]) {
9595
// Check if the transport is of the correct type
9696
const existingTransport = transports[sessionId];
97-
if (existingTransport instanceof StreamableHTTPServerTransport) {
97+
if (existingTransport instanceof NodeStreamableHTTPServerTransport) {
9898
// Reuse existing transport
9999
transport = existingTransport;
100100
} else {
101-
// Transport exists but is not a StreamableHTTPServerTransport (could be SSEServerTransport)
101+
// Transport exists but is not a NodeStreamableHTTPServerTransport (could be SSEServerTransport)
102102
res.status(400).json({
103103
jsonrpc: '2.0',
104104
error: {
@@ -111,7 +111,7 @@ app.all('/mcp', async (req: Request, res: Response) => {
111111
}
112112
} else if (!sessionId && req.method === 'POST' && isInitializeRequest(req.body)) {
113113
const eventStore = new InMemoryEventStore();
114-
transport = new StreamableHTTPServerTransport({
114+
transport = new NodeStreamableHTTPServerTransport({
115115
sessionIdGenerator: () => randomUUID(),
116116
eventStore, // Enable resumability
117117
onsessioninitialized: sessionId => {
@@ -186,7 +186,7 @@ app.post('/messages', async (req: Request, res: Response) => {
186186
// Reuse existing transport
187187
transport = existingTransport;
188188
} else {
189-
// Transport exists but is not a SSEServerTransport (could be StreamableHTTPServerTransport)
189+
// Transport exists but is not a SSEServerTransport (could be NodeStreamableHTTPServerTransport)
190190
res.status(400).json({
191191
jsonrpc: '2.0',
192192
error: {

0 commit comments

Comments
 (0)