🧠 sam-serverless-mcp-server について
AWS SAM でデプロイし、AWS Lambda 関数として動作する MCP サーバーのひな型です。Amazon API Gateway 経由で HTTP に対応し、構築やローカルテストを行う開発者向けに、基本的な加算ツールの例を含みます。
主な機能
- 01SDK を使った最小構成の MCP サーバー
- 02単一の AWS Lambda へのデプロイ
- 03/mcp の HTTP POST エンドポイント
- 04SAM によるローカル開発
- 05加算ツールと JSON-RPC の例
- 06Jest テスト
活用シーン
- 01AWS 上でサーバーレス MCP エンドポイントを構築
- 02SAM で MCP リクエストをローカルテスト
- 03例のツールを独自サーバー向けに変更
MCP 対応
Amazon API Gateway 経由で /mcp の HTTP POST エンドポイントを公開する MCP サーバーを実装します。加算ツールの例を含み、MCP JSON-RPC リクエストに対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
🧠 sam-serverless-mcp-server
AWS Lambda にデプロイし、Amazon API Gateway 経由で公開する、とてもシンプルな Model Context Protocol(MCP)サーバーです。Serverless Application Model(SAM)を使ってデプロイします。 このひな形は、こちらのリポジトリで AWS Lambda 関数と Model Context Protocol(MCP)サーバーを統合するための middy ミドルウェアを開発した、Frédéric Barthelet氏の素晴らしい成果を基にしています。
詳しくはこちら
📖 このシリーズの記事はこちらからお読みください(dev.to)
🛠 特長
- 🪄 @modelcontextprotocol/sdk を使用した最小限の MCP サーバー構成
- 🚀 単一の AWS Lambda 関数としてデプロイ
- 🌐 API Gateway 経由で公開される /mcp の HTTP POST エンドポイント
- 🔄 SAM によるローカル開発に対応
- 🧪 JSON-RPC を使った簡単なサンプルツール(add)を収録
📦 プロジェクト構成
sam-serverless-mcp-server/
├── __tests__/ # Jest tests
├── src/ # Source code
│ └── index.js # MCP server handler
├── .gitignore # Git ignore file
├── buildspec.yml # Buildspec file for AWS CodeBuild and CodePipeline (CI/CD)
├── jest.config.mjs # Jest config file
├── package.json # Project dependencies
├── package-lock.json # Project lock file
├── README.md # This documentation file
├── samconfig.toml # Serverless Application Model config
└── template.yml # Serverless Application Model template
🛠 前提条件
🚀 はじめに
- 依存関係をインストールします:
npm install
- SAM でローカル実行します
sam local start-api
ローカルエンドポイントは次の場所で利用できます:
POST http://localhost:3000/mcp
API Gateway V2(HTTP API)への切り替え
API Gateway V2 を使用する場合は、template.yml ファイルの Events セクションで Api の代わりに HttpApi を使うように変更できます。これにより、REST API の代わりに HTTP API を使用できます。
これにより、REST API の代わりに HTTP API を使用できます。
Events:
McpHttpApi:
Type: HttpApi # 👈 This switches to HTTP API (v2)
Properties:
Path: /mcp
Method: POST
🧪 curl リクエストでテストする
ツールの一覧表示
curl --location 'http://localhost:3000/mcp' \
--header 'content-type: application/json' \
--header 'accept: application/json' \
--header 'jsonrpc: 2.0' \
--data '{
"jsonrpc": "2.0",
"method": "tools/list",
"id": 1
}'
➕ add ツールを使う
curl --location 'http://localhost:3000/mcp' \
--header 'content-type: application/json' \
--header 'accept: application/json' \
--header 'jsonrpc: 2.0' \
--data '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "add",
"arguments": {
"a": 5,
"b": 3
}
}
}'
🧪 jest でテストする
__tests__ フォルダーに基本的なテストがいくつか含まれています。次のコマンドで実行できます:
npm run test
🧬 コードの概要
このコードは、こちらのリポジトリで AWS Lambda 関数と Model Context Protocol(MCP)サーバーを統合するための middy ミドルウェアを開発した、Frédéric Barthelet氏の素晴らしい成果を基にしています。
src/index.js
import middy from "@middy/core";
import httpErrorHandler from "@middy/http-error-handler";
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";
import mcpMiddleware from "middy-mcp";
const server = new McpServer({
name: "Lambda hosted MCP Server",
version: "1.0.0",
});
server.tool("add", { a: z.number(), b: z.number() }, async ({ a, b }) => ({
content: [{ type: "text", text: String(a + b) }],
}));
export const handler = middy()
.use(mcpMiddleware({ server }))
.use(httpErrorHandler());
📡 AWS にデプロイする
次のコマンドを実行するだけです:
sam build
sam deploy --guided
デプロイ後、MCP サーバーはコマンドの出力に表示された URL で利用できるようになります。
📘 ライセンス
MIT — 自由にフォーク、変更し、ご自身のバージョンをデプロイしてください!
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。