Skip to content

Commit 5958449

Browse files
committed
PoC: split away server express and hono deps into server-express and server-hono
1 parent 71ae3ac commit 5958449

File tree

82 files changed

+2339
-2670
lines changed

Some content is hidden

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

82 files changed

+2339
-2670
lines changed

common/eslint-config/eslint.config.mjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ export default defineConfig(
4747
'@typescript-eslint/consistent-type-imports': ['error', { disallowTypeAnnotations: false }],
4848
'simple-import-sort/imports': 'warn',
4949
'simple-import-sort/exports': 'warn',
50+
'import/consistent-type-specifier-style': ['error', 'prefer-top-level'],
5051
'import/no-extraneous-dependencies': [
5152
'error',
5253
{

docs/server.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ For more detailed patterns (stateless vs stateful, JSON response mode, CORS, DNS
7070
MCP servers running on localhost are vulnerable to DNS rebinding attacks. Use `createMcpExpressApp()` to create an Express app with DNS rebinding protection enabled by default:
7171

7272
```typescript
73-
import { createMcpExpressApp } from '@modelcontextprotocol/server';
73+
import { createMcpExpressApp } from '@modelcontextprotocol/server-express';
7474

7575
// Protection auto-enabled (default host is 127.0.0.1)
7676
const app = createMcpExpressApp();
@@ -85,7 +85,7 @@ const app = createMcpExpressApp({ host: '0.0.0.0' });
8585
When binding to `0.0.0.0` / `::`, provide an allow-list of hosts:
8686

8787
```typescript
88-
import { createMcpExpressApp } from '@modelcontextprotocol/server';
88+
import { createMcpExpressApp } from '@modelcontextprotocol/server-express';
8989

9090
const app = createMcpExpressApp({
9191
host: '0.0.0.0',

examples/server/README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
# MCP TypeScript SDK Examples (Server)
22

3-
This directory contains runnable MCP **server** examples built with `@modelcontextprotocol/server`.
3+
This directory contains runnable MCP **server** examples built with `@modelcontextprotocol/server` plus framework adapters:
4+
5+
- `@modelcontextprotocol/server-express`
6+
- `@modelcontextprotocol/server-hono`
47

58
For client examples, see [`../client/README.md`](../client/README.md). For guided docs, see [`../../docs/server.md`](../../docs/server.md).
69

examples/server/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@
3838
"hono": "catalog:runtimeServerOnly",
3939
"@modelcontextprotocol/examples-shared": "workspace:^",
4040
"@modelcontextprotocol/server": "workspace:^",
41+
"@modelcontextprotocol/server-express": "workspace:^",
42+
"@modelcontextprotocol/server-hono": "workspace:^",
4143
"cors": "catalog:runtimeServerOnly",
4244
"express": "catalog:runtimeServerOnly",
4345
"zod": "catalog:runtimeShared"

examples/server/src/elicitationFormExample.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@
99

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

12-
import { createMcpExpressApp, isInitializeRequest, McpServer, StreamableHTTPServerTransport } from '@modelcontextprotocol/server';
13-
import { type Request, type Response } from 'express';
12+
import { isInitializeRequest, McpServer, StreamableHTTPServerTransport } from '@modelcontextprotocol/server';
13+
import { createMcpExpressApp } from '@modelcontextprotocol/server-express';
14+
import type { Request, Response } from 'express';
1415

1516
// Create MCP server - it will automatically use AjvJsonSchemaValidator with sensible defaults
1617
// The validator supports format validation (email, date, etc.) if ajv-formats is installed

examples/server/src/elicitationUrlExample.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,13 @@ import { setupAuthServer } from '@modelcontextprotocol/examples-shared';
1313
import type { CallToolResult, ElicitRequestURLParams, ElicitResult, OAuthMetadata } from '@modelcontextprotocol/server';
1414
import {
1515
checkResourceAllowed,
16-
createMcpExpressApp,
1716
getOAuthProtectedResourceMetadataUrl,
1817
isInitializeRequest,
19-
mcpAuthMetadataRouter,
2018
McpServer,
21-
requireBearerAuth,
2219
StreamableHTTPServerTransport,
2320
UrlElicitationRequiredError
2421
} from '@modelcontextprotocol/server';
22+
import { createMcpExpressApp, mcpAuthMetadataRouter, requireBearerAuth } from '@modelcontextprotocol/server-express';
2523
import cors from 'cors';
2624
import type { Request, Response } from 'express';
2725
import express from 'express';

examples/server/src/honoWebStandardStreamableHttp.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import { serve } from '@hono/node-server';
1111
import type { CallToolResult } from '@modelcontextprotocol/server';
1212
import { McpServer, WebStandardStreamableHTTPServerTransport } from '@modelcontextprotocol/server';
13+
import { mcpStreamableHttpHandler } from '@modelcontextprotocol/server-hono';
1314
import { Hono } from 'hono';
1415
import { cors } from 'hono/cors';
1516
import * as z from 'zod/v4';
@@ -56,7 +57,7 @@ app.use(
5657
app.get('/health', c => c.json({ status: 'ok' }));
5758

5859
// MCP endpoint
59-
app.all('/mcp', c => transport.handleRequest(c.req.raw));
60+
app.all('/mcp', mcpStreamableHttpHandler(transport));
6061

6162
// Start the server
6263
const PORT = process.env.MCP_PORT ? parseInt(process.env.MCP_PORT, 10) : 3000;

examples/server/src/jsonResponseStreamableHttp.ts

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

33
import type { CallToolResult } from '@modelcontextprotocol/server';
4-
import { createMcpExpressApp, isInitializeRequest, McpServer, StreamableHTTPServerTransport } from '@modelcontextprotocol/server';
4+
import { isInitializeRequest, McpServer, StreamableHTTPServerTransport } from '@modelcontextprotocol/server';
5+
import { createMcpExpressApp } from '@modelcontextprotocol/server-express';
56
import type { Request, Response } from 'express';
67
import * as z from 'zod/v4';
78

examples/server/src/simpleSseServer.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import type { CallToolResult } from '@modelcontextprotocol/server';
2-
import { createMcpExpressApp, McpServer, SSEServerTransport } from '@modelcontextprotocol/server';
2+
import { McpServer, SSEServerTransport } from '@modelcontextprotocol/server';
3+
import { createMcpExpressApp } from '@modelcontextprotocol/server-express';
34
import type { Request, Response } from 'express';
45
import * as z from 'zod/v4';
56

examples/server/src/simpleStatelessStreamableHttp.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import type { CallToolResult, GetPromptResult, ReadResourceResult } from '@modelcontextprotocol/server';
2-
import { createMcpExpressApp, McpServer, StreamableHTTPServerTransport } from '@modelcontextprotocol/server';
2+
import { McpServer, StreamableHTTPServerTransport } from '@modelcontextprotocol/server';
3+
import { createMcpExpressApp } from '@modelcontextprotocol/server-express';
34
import type { Request, Response } from 'express';
45
import * as z from 'zod/v4';
56

0 commit comments

Comments
 (0)