MCP ラムダ SAM
AWS Lambda と SAM を使用したモデルコンテキストプロトコル (MCP) の実装。
概要
このプロジェクトは、2 つの異なるインターフェースを持つ、モデル コンテキスト プロトコルのサーバーレス実装を提供します。
システム構成(管理):
MCPツール、リソース、プロンプトの登録
IAM権限管理
インフラストラクチャのセットアップと構成
システム使用状況(クライアント):
SSE接続の確立
コマンドの送信
ストリーミング応答の受信
Related MCP server: Node Omnibus MCP Server
建築
人魚の図
この Mermaid 構文を使用してシステムを視覚化できます。
graph TD
Client --> MCP[/"MCP Lambda\n(/sse & /message)"/]
MCP -->|read/write| SessionTable[(Session Table)]
MCP -->|query| RegistrationTable[(Registration Table)]
MCP -->|invoke| RegisteredLambda["Registered Lambda Tool"]
Admin[Administrator] --> RegistrationLambda[/"Registration Lambda\n(/register)"/]
RegistrationLambda -->|write| RegistrationTableMCP Lambda は、起動時およびリクエストの処理時に登録テーブルから登録を読み取ります。
セッション状態を永続化するためにセッション テーブルを使用します。
登録テーブルに保存されている ARN を使用して、登録された Lambda ツールを動的に呼び出します。
システム構成ガイド(管理者)
このセクションは、MCP サーバーを構成および管理する必要があるシステム管理者を対象としています。
展開
npx @markvp/mcp-lambda-sam deployこのコマンドは対話形式で管理構成を要求します。
スタック名(複数インスタンスの場合)
AWS リージョン
VPC 構成(オプション)
権限の概要
MCP エンドポイントにアクセスするには、ユーザーとクライアントは関連する関数 URL を呼び出すための IAM 権限を持っている必要があります。
管理者:
mcp-registration関数の URL を呼び出す権限が必要ですクライアント:
mcp関数 URL を呼び出す権限が必要です
IAM ポリシーまたはaws lambda add-permission (以下を参照) を使用してアクセスを許可できます。
AWS CLI 経由で権限を割り当てる
登録機能 URLを呼び出す権限を付与するには:
aws lambda add-permission \
--function-name <registration-function-name> \
--statement-id allow-registration \
--action lambda:InvokeFunctionUrl \
--principal "*" \
--function-url-auth-type IAMMCP 関数 URL (SSE およびメッセージ) を呼び出す権限を付与するには:
aws lambda add-permission \
--function-name <mcp-function-name> \
--statement-id allow-mcp \
--action lambda:InvokeFunctionUrl \
--principal "*" \
--function-url-auth-type IAM<registration-function-name>と<mcp-function-name>を実際の Lambda 関数名に置き換えます。
登録API
これらのエンドポイントを使用して、MCP ツール、リソース、およびプロンプトを管理します。
新しいツールを登録する
awscurl -X POST ${REGISTRATION_URL}/register \
--region ap-southeast-2 \
--service lambda \
-H "Content-Type: application/json" \
-d '{
"type": "tool",
"name": "example",
"description": "Example tool",
"lambdaArn": "arn:aws:lambda:region:account:function:name",
"parameters": {
"input": "string"
}
}'登録の更新
awscurl -X PUT ${REGISTRATION_URL}/register/{id} \
--region ap-southeast-2 \
--service lambda \
-d '...'登録を削除
awscurl -X DELETE ${REGISTRATION_URL}/register/{id} \
--region ap-southeast-2 \
--service lambda登録リスト
awscurl ${REGISTRATION_URL}/register \
--region ap-southeast-2 \
--service lambda必要なIAM権限
管理者向け
登録を管理するには、管理者には次の権限が必要です。
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": "lambda:InvokeFunctionUrl",
"Resource": "arn:aws:lambda:${region}:${account}:function:${stack-id}-mcp-registration",
"Condition": {
"StringEquals": {
"lambda:FunctionUrlAuthType": "AWS_IAM"
}
}
}]
}
システム利用ガイド(クライアント)
このセクションは、MCP サーバーを使用するクライアント向けです。
必要なIAM権限
MCP サーバーを使用するには、クライアントに次の権限が必要です。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "lambda:InvokeFunctionUrl",
"Resource": [
"arn:aws:lambda:${region}:${account}:function:${stack-id}-mcp",
],
"Condition": {
"StringEquals": {
"lambda:FunctionUrlAuthType": "AWS_IAM"
}
}
}
]
}サーバーへの接続
SSE接続を確立します:
const sse = new EventSource(SSE_URL, {
headers: {
Authorization: 'AWS4-HMAC-SHA256 ...', // Must be AWS SigV4 signed
}
});
sse.onmessage = (event) => {
console.log(JSON.parse(event.data));
};SSE の cURL の例
awscurl -X GET "${MCP_URL}/sse" \
--region ap-southeast-2 \
--service lambda最初のイベントにはsessionIdが含まれます。メッセージを送信する際にこれを使用してください。
送信コマンド:
awscurl -X POST "${MCP_URL}/message?sessionId=session-123" \
--region ap-southeast-2 \
--service lambda \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": "1",
"method": "example",
"params": {
"input": "hello"
}
}'エラー処理
一般的なクライアントエラー
401: AWS 認証情報が無効または見つかりません403: 権限が不十分です404: 無効なセッションID429: レート制限を超えました
トラブルシューティング
接続の問題:
AWS認証情報を確認する
IAM権限を確認する
ネットワーク接続を確保する
コマンド実行エラー:
セッションIDがアクティブであることを確認する
コマンド形式がツール登録と一致しているかどうかを確認します
パラメータがスキーマと一致していることを確認する
要件
AWS CLI がインストールおよび設定されている
AWS SAM CLI がインストールされている
Node.js 20.x 以降
以下を作成する権限を持つ AWS アカウント:
ラムダ関数
DynamoDB テーブル
IAMロール
SQSキュー
AWS SAM CLI セットアップ
AWS SAM CLI を使用してこのアプリケーションをローカルまたは AWS にデプロイするには:
AWS SAM CLI をインストールします: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html
PATH で使用可能であることを確認します。
sam --versionアプリケーションをビルドしてデプロイします。
sam build sam deploy --guidedプロンプトに従って、スタック名、リージョン、機能、およびパラメータのオーバーライドを構成します。
保存した構成を使用するには、 --guidedなしでsam deploy再実行できます。
インストール
このアプリケーションは、次の 4 つの方法でインストールおよび展開できます。
1. AWS サーバーレスアプリケーションリポジトリ (SAR) の使用
MCP サーバーをデプロイする最も簡単な方法は、AWS Serverless Application Repository (SAR) を使用することです。
SARコンソールへ移動
Mark Van Proctorによるmcp-lambda-samを検索
デプロイをクリック
パラメータを設定します:
StackIdentifier: このMCPサーバーインスタンスの一意のIDVpcEnabled: VPC にデプロイする場合はtrueに設定しますVpcIdとSubnetIds:VpcEnabledがtrueの場合にのみ指定します
指示に従って展開します
あるいは、AWS CLI からデプロイすることもできます。
aws serverlessrepo create-cloud-formation-change-set \
--application-id arn:aws:serverlessrepo:ap-southeast-2:522814717816:applications/mcp-lambda-sam \
--stack-name your-stack-name \
--capabilities CAPABILITY_IAM \
--parameter-overrides '[{"name":"StackIdentifier","value":"your-stack-id"}]'2. npx の使用 (CLI)
npx @markvp/mcp-lambda-sam deployこのコマンドは対話形式で管理構成を要求します。
スタック名(複数インスタンスの場合)
AWS リージョン
VPC 構成(オプション)
3. インストールによるプログラム的な使用
パッケージをインストールします。
npm install @markvp/mcp-lambda-samパッケージをインストールしたら、プログラムで使用できます。
import { deploy } from '@markvp/mcp-lambda-sam';
// Usage example
deploy();4. ローカル開発と展開
パッケージをインストールします。
npm install @markvp/mcp-lambda-sam開発の変更を行った後、手動でデプロイできます。
npm run deploy発達
# Install dependencies
npm install
# Lint
npm run lint
# Run tests
npm test
# Build
npm run build
# Deploy
npm run deploySARへの公開
このプロジェクトに貢献していて、SAR に更新を公開する必要がある場合:
アプリケーションをパッケージ化します。
npm run package:sarSAR に公開:
npm run publish:sarアプリケーションを公開する (1 回限りの設定):
AWSコンソール > サーバーレスアプリケーションリポジトリに移動します
アプリケーションを選択
「共有」をクリックし、「公開」を選択します
次の共有ポリシーを適用します: GXP25
ライセンス
マサチューセッツ工科大学
貢献
リポジトリをフォークする
機能ブランチを作成する
変更をコミットする
ブランチにプッシュする
新しいプルリクエストを作成する