MCP Lambda Server について
MCP Lambda Serverは、AWS LambdaとSAMを使ったサーバーレスのMCP実装で、AWS上にMCPサービスを展開するチーム向けです。管理者はツール、リソース、プロンプトを登録し、クライアントはSSEで接続してストリーミング応答を受け取れます。
主な機能
- 01ツール、リソース、プロンプトの登録
- 02APIによる登録内容の管理
- 03登録済みLambdaツールの呼び出し
- 04クライアントセッション状態の保持
- 05SSE接続とメッセージ送信
活用シーン
- 01AWS SAMを使ったMCPサービスのデプロイ
- 02Lambdaを使ったMCPツールの登録
- 03AWS SigV4によるクライアント接続
- 04MCPの登録内容と権限の管理
MCP 対応
AWS Lambdaを使ってMCP サーバーを実装し、登録済みのツール、リソース、プロンプトをクライアントに公開します。クライアントはSSEセッションを確立してコマンドを送り、登録済みLambdaツールを呼び出します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP Lambda SAM
AWS Lambda と SAM を使用した Model Context Protocol(MCP)の実装です。
概要
このプロジェクトでは、Model Context Protocol をサーバーレスで実装し、次の 2 つの異なるインターフェースを提供します。
-
システム構成(管理者向け):
- MCP ツール、リソース、プロンプトの登録
- IAM 権限の管理
- インフラストラクチャのセットアップと構成
-
システム利用(クライアント向け):
- SSE 接続の確立
- コマンドの送信
- ストリーミングレスポンスの受信
アーキテクチャ
Mermaid 図
次の 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| RegistrationTable
- MCP Lambda は、起動時とリクエストの処理時に Registration Table から登録情報を読み込みます。
- Session Table を使用して、セッション状態を永続化します。
- Registration Table に保存された ARN を使用して、登録済みの Lambda ツールを動的に呼び出します。
システム構成ガイド(管理者向け)
このセクションは、MCP サーバーの構成と管理を行うシステム管理者向けです。
デプロイ
npx @markvp/mcp-lambda-sam deploy
このコマンドを実行すると、管理者向けの構成について対話形式で質問されます。
- スタック名(複数のインスタンスを使用する場合)
- AWS リージョン
- VPC 構成(任意)
権限の概要
MCP エンドポイントにアクセスするには、ユーザーとクライアントに、該当する Function URL を呼び出す IAM 権限が必要です。
- 管理者:
mcp-registrationFunction URL の呼び出しが許可されている必要があります - クライアント:
mcpFunction URL の呼び出しが許可されている必要があります
IAM ポリシーまたは aws lambda add-permission を使用してアクセス権を付与できます(以下を参照)。
AWS CLI を使用した権限の割り当て
登録用 Function URL の呼び出し権限を付与するには:
aws lambda add-permission \
--function-name <registration-function-name> \
--statement-id allow-registration \
--action lambda:InvokeFunctionUrl \
--principal "*" \
--function-url-auth-type IAM
MCP Function 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:セッション ID が無効です429:レート制限を超過しました
トラブルシューティング
-
接続の問題:
- AWS 認証情報を確認する
- IAM 権限を確認する
- ネットワーク接続を確認する
-
コマンド実行エラー:
- セッション ID が有効であることを確認する
- コマンド形式がツールの登録内容と一致することを確認する
- パラメーターがスキーマに一致することを確認する
要件
- AWS CLI がインストールされ、構成されていること
- AWS SAM CLI がインストールされていること
- Node.js 20.x 以降
- 以下を作成する権限を持つ AWS アカウント:
- Lambda 関数
- 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 Serverless Application Repository(SAR)を使用する
MCP サーバーをデプロイする最も簡単な方法は、AWS Serverless Application Repository(SAR)を使用することです。
- SAR Console に移動します
- Mark Van Proctor の mcp-lambda-sam を検索します
- Deploy をクリックします
- パラメーターを設定します。
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 deploy
SAR への公開
このプロジェクトに貢献し、SAR に更新を公開する必要がある場合:
- アプリケーションをパッケージ化します。
npm run package:sar
- SAR に公開します。
npm run publish:sar
- アプリケーションを公開設定にします(初回のみ)。
- AWS Console > Serverless Application Repository に移動します
- アプリケーションを選択します
- 「Share」をクリックし、「Public」を選択します
- 次の共有ポリシーを適用します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "serverlessrepo:CreateCloudFormationTemplate", "Resource": "arn:aws:serverlessrepo:${region}:${account-id}:applications/mcp-lambda-sam" } ] }
ライセンス
MIT
貢献
- リポジトリをフォークします
- フィーチャーブランチを作成します
- 変更をコミットします
- ブランチにプッシュします
- 新しいプルリクエストを作成します
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。