
无服务器CDK
HTTP-SSE基于AWS Lambda的无状态MCP服务器
基于AWS Lambda的无状态MCP服务器
このプロジェクトは、AWS CDK を使用して AWS Lambda と API Gateway 上でステートレスな MCP サーバーを構築します。 sample-serverless-mcp-serversの CDK 移植版で、Express.js と Hono (TypeScript) の 2 つの実装を提供します。
# メインプロジェクトの依存関係 npm install # MCP クライアント (cd src/js/mcpclient && npm install) # Hono TypeScript MCP サーバー (推奨) (cd src/ts/mcpserver && npm install) # Express.js MCP サーバー (オプション) (cd src/js/mcpserver && npm install)
現在の CDK スタックは Hono 版を使用するよう設定されています。
# 1. Hono MCP サーバーをビルド (cd src/ts/mcpserver && npm run build) # 2. CDKスタックをデプロイ npm run build cdk deploy --region us-east-1
Express.js 版を使用したい場合:
lib/serverless-mcp-servers-cdk-stack.ts:33
を編集:// Hono版 (デフォルト) code: lambda.Code.fromAsset(path.join(__dirname, "../src/ts/mcpserver/dist")), // Express版に変更 code: lambda.Code.fromAsset(path.join(__dirname, "../src/js/mcpserver")),
npm run build cdk deploy --region us-east-1
# 開発サーバー起動 (ホットリロード付き) (cd src/ts/mcpserver && npm run dev) # または手動ビルド・実行 (cd src/ts/mcpserver && npm run build && npm start)
node src/js/mcpserver/index.js
# ローカルサーバーをテスト node src/js/mcpclient/index.js # デプロイ済みサーバーをテスト export MCP_SERVER_ENDPOINT=$(aws cloudformation describe-stacks --stack-name ServerlessMcpServersCdkStack --region us-east-1 --query "Stacks[0].Outputs[?OutputKey=='McpEndpoint'].OutputValue" --output text) node src/js/mcpclient/index.js
{ "servers-local": { "url": "http://localhost:3000/mcp", "headers": { "Authorization": "Bearer YOUR_ACCESS_TOKEN" } }, "servers-remote": { "url": "https://{{OutputValue}}.execute-api.us-east-1.amazonaws.com/dev/mcp", "headers": { "Authorization": "Bearer YOUR_ACCESS_TOKEN" } } }
us-east-1
リージョンにデプロイしてください (Lambda Web Adapter layer の制約)npm run build
を実行してくださいping
: レスポンス時間テスト (100ms/1000ms で交互に切り替わり)start-notification-stream
: 定期通知テスト (Hono 版のみ)greeting-resource
: 静的グリーティングリソースgreeting-template
: パーソナライズされたグリーティングプロンプトMCP サーバーは Bearer Token 認証をサポートしています。環境変数 MCP_AUTH_TOKEN
を設定することで認証を有効にできます。
# ローカル開発時 export MCP_AUTH_TOKEN="your-secret-token" (cd src/ts/mcpserver && npm run dev) # または .env ファイルで設定 echo "MCP_AUTH_TOKEN=your-secret-token" > src/ts/mcpserver/.env # AWS Lambda環境変数として設定 # CDKスタックを編集して environment プロパティに追加: environment: { AWS_LWA_PORT: "3000", AWS_LAMBDA_EXEC_WRAPPER: "/opt/bootstrap", MCP_AUTH_TOKEN: "your-production-token" }
# mcp-remoteクライアントでの使用例 npx mcp-remote --header "Authorization:Bearer your-secret-token" http://localhost:3000/mcp
Claude & Cursor 設定例:
{ "example-authenticated": { "command": "/path/to/npx", "args": [ "mcp-remote", "--header", "Authorization:Bearer your-secret-token", "https://{{OutputValue}}.execute-api.us-east-1.amazonaws.com/dev/mcp" ] } }
認証に失敗した場合、以下のレスポンスが返されます:
{ "jsonrpc": "2.0", "error": { "code": -32001, "message": "Unauthorized: Bearer token required" // または "Unauthorized: Invalid token" }, "id": null }
このサンプルには、API Gateway カスタム認証機能も含まれています。デフォルトでは無効になっていますが、CDK スタックファイル内のコメントを解除することで有効にできます。
// lib/serverless-mcp-servers-cdk-stack.ts:33 code: lambda.Code.fromAsset(path.join(__dirname, "../src/js/mcpserver")), // Express
npm run build cdk deploy --region us-east-1
(cd src/ts/mcpserver && npm run build)
// lib/serverless-mcp-servers-cdk-stack.ts:33 code: lambda.Code.fromAsset(path.join(__dirname, "../src/ts/mcpserver/dist")), // Hono
npm run build cdk deploy --region us-east-1
評価が終わったら、以下のコマンドで AWS リソースを削除してください:
cdk destroy --region us-east-1