Sample Serverless MCP Servers について
Sample Serverless MCP Servers は、AWS のサーバーレス基盤で動作する AI エージェントと MCP サーバーのサンプル実装集です。AWS 上でリモート MCP サーバーを構築したい開発者向けの参考資料となります。Streamable HTTP におけるステートフルとステートレスの違いについての解説も含みます。
主な機能
- 01AWS Lambda 上のステートレスなリモート MCP サーバーの例
- 02Amazon ECS 上のステートフルとステートレスの例
- 03Strands Agents SDK を使った AI エージェントの例
- 04Python と Node.js のランタイム例
- 05Terraform、CDK、SAM によるデプロイ方式
活用シーン
- 01AWS Lambda にリモート MCP サーバーをデプロイする方法の参照
- 02Amazon ECS でセッションを保持する MCP サーバーを構築する
- 03Streamable HTTP におけるステートフルとステートレスの比較
MCP 対応
MCP サーバーの実装例を提供し、Streamable HTTP で接続するリモートサーバーとしての構成を示します。AI エージェントのサンプルでは MCP サーバーへの接続も含まれます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
サーバーレス MCP サーバーのサンプル

このリポジトリには、MCP サーバーの実装サンプルが含まれています。
| ディレクトリ | ランタイム | IaC | 説明 |
|---|---|---|---|
| strands-agent-on-lambda | Python(Agent) Node.js(MCP) | Terraform, CDK | Strands Agents SDK を使用し、AWS Lambda 上で実行される AI エージェントと接続された MCP サーバーの実装サンプルです。ユーザー認証のための Cognito との統合も含まれています。 |
| strands-agent-on-lambda-python | Python | SAM | Strands Agents SDK を使用し、AWS Lambda 上で実行される AI エージェントの実装サンプルです。 |
| stateless-mcp-on-lambda-nodejs | Node.js | Terraform | AWS Lambda と Amazon API Gateway 上でネイティブに実行される、リモートのステートレス MCP サーバーの実装サンプルです。 |
| stateless-mcp-on-lambda-python | Python | SAM | AWS Lambda と Amazon API Gateway 上でネイティブに実行される、リモートのステートレス MCP サーバーの実装サンプルです。 |
| stateless-mcp-on-ecs-nodejs | Node.js | Terraform | Application Load Balancer を使用して Amazon ECS 上でネイティブに実行される、リモートのステートレス MCP サーバーの実装サンプルです。 |
| stateful-mcp-on-ecs-nodejs | Node.js | Terraform | Application Load Balancer を使用して Amazon ECS 上でネイティブに実行される、リモートのステートフル MCP サーバーの実装サンプルです。 |
| stateful-mcp-on-ecs-python | Python | SAM | Application Load Balancer を使用して Amazon ECS 上でネイティブに実行される、リモートのステートフル MCP サーバーの実装サンプルです。 |
| lambda-ops-mcp-server | Node.js | Terraform | 非推奨のランタイムで実行されている関数を検出し、アップグレードするために使用できるローカル MCP サーバーのデモ用 PoC です。 |
ステートフル MCP サーバーとステートレス MCP サーバー
MCP サーバー/クライアントで Streamable HTTP Transport を使用する場合、ステートフルとステートレスの MCP サーバー実装の違いや、それぞれのトレードオフを理解することが重要です。各モデルは、スケーラビリティ、接続処理、セッション管理に影響します。
主なポイント
Streamable HTTP Transport の仕様では、2 つの重要な機能が説明されています。まず、クライアントは長時間有効な HTTP GET リクエストを開始して永続的な SSE(Server-Sent Events)接続を確立できるため、クライアントが POST リクエストを送信していない場合でも、サーバーからデータをプッシュできます。次に、接続が中断された場合、クライアントは別の GET リクエストで再接続して通信を再開できる必要があります。どちらの機能も、サーバーが永続的なセッションコンテキストを維持し、長時間有効な接続をサポートする必要があることを意味します。Streamable HTTP Transport のセッション管理について詳しくはこちらをご覧ください。
ステートフルモデルの課題
ステートフルな MCP サーバーでは、これはセッションの状態をメモリ上で維持し、SSE 接続を長時間にわたって維持することを意味します。しかし、2025 年 5 月上旬時点では、公式 MCP SDK のいずれも外部でのセッション永続化(Redis や DynamoDB など)をサポートしていません。この制限により、ステートフルサーバーを水平スケーリングすることが困難になります。たとえば、クライアントがあるサーバーインスタンスとのセッションを確立した後、後続のリクエストが別のインスタンスにルーティングされると、セッションコンテキストが失われ、接続に失敗する可能性があります。
とはいえ、ロードバランサー側でセッションアフィニティ(スティッキーセッションとも呼ばれます)を設定すれば、ステートフルな MCP サーバーをスケーリングすることは可能です。たとえば、Cookie ベースのスティッキーセッションを利用すれば、セッション中、クライアントが同じサーバーインスタンスにルーティングされるようにできます。ただし、現在、TypeScript MCP Client SDK は fetch API に依存しており、Cookie をネイティブにはサポートしていません。この制限を回避するには、stateful-mcp-on-ecs の例で示すように、Cookie の処理を手動で実装する必要があります。

ステートレスなら解決できます
MCP の仕様では、ステートレスなサーバーモードも認められています。このモードでは、サーバーはリクエスト間でセッションコンテキストを保持せず、クライアントも切断された接続の再開を想定しません。ステートレスモードでは水平スケーリングをシームレスに行うことができ、伸縮性と負荷分散が重要な環境に適しています。このモデルは、このリポジトリに含まれる stateless-mcp-on-lambda、stateless-mcp-on-ecs、stateless-mcp-on-lambda-python のサンプルで確認できます。


詳しい手順とデプロイ方法については、それぞれのフォルダーを参照してください。
ライセンス
このライブラリは MIT-0 ライセンスの下でライセンスされています。LICENSE ファイルを参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。