kakakakakku blog

Weekly Tech Blog: Keep on Learning!

AWS Lambda MCP Server: Lambda 関数を MCP ツールとして呼び出そう

AWS MCP Servers で2025年4月12日頃にリリースされた(2025.4.2025112152「AWS Lambda MCP Server」を試す.AWS Lambda MCP Server を使うと AWS Lambda 関数を MCP ツールとして呼び出すことができる \( 'ω')/

awslabs.github.io

AWS MCP Servers の GitHub リポジトリに AWS Lambda MCP Server を試せるサンプル「MCP Server Sample Lambda Functions」があったので使ってみる💡

github.com

AWS Lambda 関数をデプロイする

AWS SAM を使って簡単にデプロイできる.ツール側は AWS Lambda 関数があれば OK👌

sam deploy --guided コマンドを実行して,スタック名は lambda-mcp-server-examples にした.AWS SAM テンプレートには AWS::Serverless::Function リソースの FunctionName プロパティが指定されてなく,AWS Lambda 関数名はスタック名がプレフィックスになる.最終的に以下のように2つの AWS Lambda 関数をデプロイできた.

  • lambda-mcp-server-examples-CustomerInfoFromId-kwdiSQlX2LjF
  • lambda-mcp-server-examples-CustomerIdFromEmail-nElq2nnCGuVb

AWS Lambda 関数 CustomerInfoFromId は指定した顧客 ID から顧客情報を返す.AWS Lambda 関数 CustomerIdFromEmail は指定したメールアドレスから顧客 ID を返す.サンプル実装としては AWS Lambda 関数から固定のレスポンスを返すようになっているけど(app.py 参照),ちゃんと実装するときは Amazon DynamoDB からデータを取得したりと自由に決められる😀

さらに AWS Lambda MCP Server では AWS Lambda 関数の説明 (description) も重要で,MCP ツールとして登録される仕組みになっているとドキュメントに書いてあった📝

  • Customer status from { 'customerId' }
  • Get customer ID from { 'email' }

IMPORTANT: The function name is used as MCP tool name. The function description in AWS Lambda is used as MCP tool description.

Claude Desktop

今回は Claude Desktop を MCP クライアントとして使う.Diagrams で簡易的にアーキテクチャ図を描くとこんな感じになる❗️

そして Claude Desktop に以下の設定を入れておく⚙️ポイントは MCP ツールとして呼び出す AWS Lambda 関数を特定するためのフィルタ条件で,今回は FUNCTION_PREFIXlambda-mcp-server-examples- を設定した.

{
  "mcpServers": {
    "awslabs.lambda-mcp-server": {
      "command": "uvx",
      "args": ["awslabs.lambda-mcp-server@latest"],
      "env": {
        "AWS_PROFILE": "xxxxx",
        "AWS_REGION": "ap-northeast-1",
        "FUNCTION_PREFIX": "lambda-mcp-server-examples-"
      }
    }
  }
}

動作確認

あとは以下のように問い合わせをすると AWS Lambda MCP Server 経由で AWS Lambda 関数が呼び出される👌

顧客ID 12345 の顧客情報を教えて!

メールアドレス john.doe@example.com の顧客ID を教えて!

タグを使って AWS Lambda 関数をフィルタする

MCP ツールとして登録する AWS Lambda 関数が増えることを考えると,フィルタ条件として FUNCTION_PREFIX もしくは FUNCTION_LIST を設定するのはちょっと使いにくいように感じた.そこで FUNCTION_TAG_KEYFUNCTION_TAG_VALUE を使うとタグでフィルタできるため試す❗️

ちなみに AWS Lambda MCP Server の実装を読むと,boto3 の list_functions() ですべての AWS Lambda 関数を取得してからフィルタ条件で絞り込むようになっていた.

boto3.amazonaws.com

まず,AWS SAM テンプレートに以下を追加して,AWS Lambda 関数に LAMBDA-MCP-SERVER タグを設定できるようにした✓

Globals:
  Function:
    Tags:
      LAMBDA-MCP-SERVER: true

Claude Desktop の設定も更新した.ポイントは FUNCTION_TAG_KEYFUNCTION_TAG_VALUE を設定しているところ⚙️

{
  "mcpServers": {
    "awslabs.lambda-mcp-server": {
      "command": "uvx",
      "args": ["awslabs.lambda-mcp-server@latest"],
      "env": {
        "AWS_PROFILE": "xxxxx",
        "AWS_REGION": "ap-northeast-1",
        "FUNCTION_TAG_KEY": "LAMBDA-MCP-SERVER",
        "FUNCTION_TAG_VALUE": "true"
      }
    }
  }
}

動作確認

変わらず問い合わせできる👌

ちなみに AWS Lambda MCP Server に以下のような実装がある.FUNCTION_PREFIX を指定している場合は MCP ツール名から除去されるようになっていて,キャプチャをよーく見ると実は MCP ツール名が違うという発見もあった💡

  • CustomerInfoFromId-kwdiSQlX2LjF
  • lambda-mcp-server-examples-CustomerInfoFromId-kwdiSQlX2LjF
def sanitize_tool_name(name: str) -> str:
    """Sanitize a Lambda function name to be used as a tool name."""
    # Remove prefix if present
    if name.startswith(FUNCTION_PREFIX):
        name = name[len(FUNCTION_PREFIX) :]