MCP Lambda Server

by markvp
Verified

remote-capable server

The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.

Integrations

  • Adapts the MCP TypeScript SDK to work with AWS Lambda functions, supporting Server-Sent Events through Lambda response streaming and function URLs

  • Provides MCP server infrastructure specifically designed for Node.js runtime in AWS Lambda, with official support for response streaming

  • Offers full TypeScript support for implementing MCP servers with type definitions and interfaces

MCP ラムダ SAM

AWS Lambda と SAM を使用したモデルコンテキストプロトコル (MCP) の実装。

概要

このプロジェクトは、2 つの異なるインターフェースを持つ、モデル コンテキスト プロトコルのサーバーレス実装を提供します。

  1. システム構成(管理):
    • MCPツール、リソース、プロンプトの登録
    • IAM権限管理
    • インフラストラクチャのセットアップと構成
  2. システム使用状況(クライアント):
    • SSE接続の確立
    • コマンドの送信
    • ストリーミング応答の受信

建築

人魚の図

この Mermaid 構文を使用してシステムを視覚化できます。

  • MCP 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 IAM

MCP 関数 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 アカウント:
    • ラムダ関数
    • 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 サーバーレスアプリケーションリポジトリ (SAR) の使用

MCP サーバーをデプロイする最も簡単な方法は、AWS Serverless Application Repository (SAR) を使用することです。

  • SARコンソールへ移動
  • Mark Van Proctorによるmcp-lambda-samを検索
  • デプロイをクリック
  • パラメータを設定します:
    • StackIdentifier : このMCPサーバーインスタンスの一意のID
    • VpcEnabled : VPC にデプロイする場合はtrueに設定します
    • VpcIdSubnetIds : VpcEnabledtrueの場合にのみ指定します
  • 指示に従って展開します

あるいは、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. アプリケーションを公開する (1 回限りの設定):
    • AWSコンソール > サーバーレスアプリケーションリポジトリに移動します
    • アプリケーションを選択
    • 「共有」をクリックし、「公開」を選択します
    • 次の共有ポリシーを適用します: GXP25

ライセンス

マサチューセッツ工科大学

貢献

  1. リポジトリをフォークする
  2. 機能ブランチを作成する
  3. 変更をコミットする
  4. ブランチにプッシュする
  5. 新しいプルリクエストを作成する
-
security - not tested
A
license - permissive license
-
quality - not tested

SSE サポートを備えた AWS Lambda 関数用のモデルコンテキストプロトコル サーバー インフラストラクチャを提供する Node.js パッケージ。開発者は MCP ツールとプロンプトをサーバーレス関数として実装できます。

  1. Overview
    1. Architecture
      1. Mermaid Diagram
    2. System Configuration Guide (Administrators)
      1. Deployment
      2. Permissions Overview
      3. Assigning Permissions via AWS CLI
      4. Registration API
      5. Required IAM Permissions
    3. System Usage Guide (Clients)
      1. Required IAM Permissions
      2. Connecting to the Server
      3. Example cURL for SSE
      4. Error Handling
    4. Requirements
      1. AWS SAM CLI Setup
        1. Installation
          1. 1. Using AWS Serverless Application Repository (SAR)
          2. 2. Using npx (CLI)
          3. 3. Programmatic Usage with Install
          4. 4. Local Development and Deployment
        2. Development
          1. Publishing to SAR
        3. License
          1. Contributing
            ID: ptzby1d8b2