mcpField
M
MCP Lambda SAM

MCP Lambda SAM

ローカル
github.com/markvpクラウド・インフラ1281 週間前に更新

MCP Lambda SAM について

MCP Lambda SAMは、AWS LambdaとSAMを使ってMCPサーバーをサーバーレスで実装します。AWS上でツール、リソース、プロンプトを設定する管理者と、それらを利用するクライアント向けで、登録済みLambdaツールを動的に呼び出します。

主な機能

  1. 01ツール、リソース、プロンプトの登録
  2. 02IAM権限によるアクセス管理
  3. 03SSE接続
  4. 04ストリーミング応答の受信
  5. 05登録済みLambdaツールの動的呼び出し

活用シーン

  1. 01AWSでのMCPサーバーのデプロイ
  2. 02MCPツールやリソースの登録・更新
  3. 03管理者とクライアントのIAMアクセス設定
  4. 04セッション経由での登録済みツールへの要求

MCP 対応

SSE接続とメッセージ用エンドポイントを備えたMCPサーバーを実装します。管理者はツール、リソース、プロンプトを登録でき、サーバーは登録済みLambdaツールを動的に呼び出します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"lambda-sam": {
"command": "npx",
"args": [
"-y",
"@markvp/mcp-lambda-sam"
]
}
}
}
起動コマンドnpx -y @markvp/mcp-lambda-sam

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@markvp/mcp-lambda-sam

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

MCP Lambda SAM

AWS Lambda と SAM を使用した Model Context Protocol(MCP)の実装です。

概要

このプロジェクトでは、Model Context Protocol をサーバーレスで実装し、次の 2 つの異なるインターフェースを提供します。

  1. システム構成(管理者向け):

    • MCP ツール、リソース、プロンプトの登録
    • IAM 権限の管理
    • インフラストラクチャのセットアップと構成
  2. システム利用(クライアント向け):

    • 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-registration Function URL の呼び出しが許可されている必要があります
  • クライアント:mcp Function 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"
                }
            }
        }
    ]
}
サーバーへの接続
  1. 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 が含まれます。メッセージを送信するときに使用してください。

  1. コマンドを送信する:
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:レート制限を超過しました
トラブルシューティング
  1. 接続の問題:

    • AWS 認証情報を確認する
    • IAM 権限を確認する
    • ネットワーク接続を確認する
  2. コマンド実行エラー:

    • セッション ID が有効であることを確認する
    • コマンド形式がツールの登録内容と一致することを確認する
    • パラメーターがスキーマに一致することを確認する

要件

  • AWS CLI がインストールされ、構成されていること
  • AWS SAM CLI がインストールされていること
  • Node.js 20.x 以降
  • 以下を作成する権限を持つ AWS アカウント:
    • Lambda 関数
    • DynamoDB テーブル
    • IAM ロール
    • SQS キュー

AWS SAM CLI のセットアップ

AWS SAM CLI を使用して、このアプリケーションをローカルまたは AWS にデプロイするには:

  1. AWS SAM CLI をインストールします:https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html
  2. PATH から利用できることを確認します:
    sam --version
    
  3. アプリケーションをビルドしてデプロイします:
    sam build
    sam deploy --guided
    
  4. プロンプトに従って、スタック名、リージョン、機能、パラメーターのオーバーライドを構成します。

保存済みの構成を使用するには、--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 サーバーインスタンスの一意の ID
    • VpcEnabled: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 に更新を公開する必要がある場合:

  1. アプリケーションをパッケージ化します。
npm run package:sar
  1. SAR に公開します。
npm run publish:sar
  1. アプリケーションを公開設定にします(初回のみ)。
    • 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

貢献

  1. リポジトリをフォークします
  2. フィーチャーブランチを作成します
  3. 変更をコミットします
  4. ブランチにプッシュします
  5. 新しいプルリクエストを作成します

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。