AIインフラ実践ノート:AWS Lambda MCP Server(Q CLI/Claude Desktop)

はじめに

LLMの活用は急速に広がり、その可能性は誰もが認めています。
一方で、AIの活用をインフラでどう支えるかという視点が重要になっています。
その答えを探す中で、AWS MCP ServerAWS Bedrock AgentCoreに注目しました。

筆者のモットーは、「まず動かしてみること」。
今回は、AWS MCP Server の中でも、AWS Lambda MCP Serverを試してみました。

AWS MCP Serverとは

「AWS MCP Server」とは、AWSのMCPに関する取り組みを表す総称です。AWS MCP Serverを利用することで、開発者はAWSが提供する多様なMCPサーバに簡単に接続できます。その実体は、AWS MCPサーバを説明するドキュメント、サンプルコード(Github)、Pythonパッケージインデックス(PyPi)などです。

より詳細なことを知りたい方は、AWSのドキュメント又は、次の姉妹記事を参照してください。

事前準備

次のような環境を用意してください。

AWS Lambda MCP Serverとは

Lambda MCP Serverは、生成AIモデルがAWS Lambda関数を安全に呼び出せるようにするブリッジです。今回、MCP Serverはローカルで実行され、AWSのAPIを通じてLambdaを呼び出します。LambdaはVPC内に配置できるため、AWS内のリソースにアクセス可能です。AIモデル側はLambdaに直接接続する必要がなく、MCP Server経由で安全にLambdaを実行し、必要なデータ操作が可能です。

Amazon Q Developer(Free)でLambda MCP Serverを実行してみた

以下のようにQ CLIでLambda MCP Serverを実行してみました。

実は、今回、Q CLIでLambda MCP Serverの実行は失敗しています。いろいろ調べてみましたが、Free版の制約のようです。後にVS CodeのAmazon Qプラグインでは、Pro版で提供する拡張機能が含まれていることがわかりました。そこで、VS CodeにAmazon Qプラグインを導入してみたら、Lambda MCP Serverの実行が成功しました。

VS CodeにAmazon Qプラグインに関する記事は、別の記事でご紹介します。

もし、今回、Q CLIでLambda MCP Serverが実行できなかったら、後述する「Claude DesktopでLambda MCP Server実行」を試してみてください。まったく、同じ設定で実行は成功しています。MCPクライアントの設定の方法やAmazon MCP Server経由でAWSデータリソースにアクセスできるという手応えは十分に味わえるはずです。

1.AWS認証情報の設定

アクセスキー及びシークレットキー、アクセストークンなどを最新状態にしてください。ローカルで実行する場合、AIアシスタントはAWS認証アカウントのIAMロールに依存してMCP Serverを実行します。

~/.aws/credentials

[default]
aws_access_key_id=XXXXXXXX
aws_secret_access_key=XXXXXXXX
aws_session_token=XXXXXXXX
aws_region=ap-northeast-1

2.AW Q CLIのMCPクライアント設定

次のように設定してください。

.aws/amazonq/cli-agents/lambda-tool-mcp-server.json

{
  "name": "lambda-tool-mcp-server",
  "mcpServers": {
    "awslabs.lambda-tool-mcp-server": {
      "command": "uvx",
      "args": ["awslabs.lambda-tool-mcp-server@latest"],
      "env": {
        "AWS_REGION": "ap-northeast-1",
        "FUNCTION_LIST": "dp-dojo-lambda-template"
      }
    }
  }
}

3.Q CLI起動してエージェントスイッチ

今回は、Q CLIを起動してからエージェントをスイッチしてみます。

$ q chat
> /agent list
  documentation-mcp-server
  default
  lambda-tool-mcp-server
  documentation-mcp-server-git
  iam-mcp-server
* q_cli_default # 「*」が付いているものが現在アクティブなエージェントです

> /agent switch lambda-tool-mcp-server

[lambda-tool-mcp-server] > /agent list

  q_cli_default
* lambda-tool-mcp-server  #  エージェントが変更されました。
  documentation-mcp-server
  documentation-mcp-server-git
  iam-mcp-server
  default

また、Q CLI の設定ファイルでは、"mcpServers": {...} の中に複数の MCP Server を定義することが可能です。その上で、どの MCP Server を使うかは、運用の規模やセキュリティポリシーに応じて判断する必要があります。

必要に応じて、柔軟にミックスした運用の方が現実的かもしれません。

.aws/amazonq/cli-agents/default.json

{
  "name": "q_ide_default",
  "mcpServers": {
    "awslabsaws-documentation-mcp-server": {
      "command": "uvx",
      "args": [
        "awslabs.aws-documentation-mcp-server@latest"
      ],
      "env": {
        "FASTMCP_LOG_LEVEL": "ERROR",
        "AWS_DOCUMENTATION_PARTITION": "aws"
      }
    },
    "awslabsaws-lambda-tool-mcp-server": {
      "command": "uvx",
      "args": [
        "awslabs.lambda-tool-mcp-server@latest"
      ],
      "env": {
        "AWS_REGION": "ap-northeast-1",
        "FUNCTION_LIST": "dp-dojo-lambda-template"
      }
    },
    ...
  }
}

4.Lambdaファンクションの実行

ここでは、実際に実行できるLambdaファンクションが必要です。もし、手頃なものが存在しない場合は、簡単なものを用意してください。

次は、呼ばれたら「Hello, co-sherpa!」という文字列を返すシンプルなLambdaです(弊社のトレーニング環境)。

dp-dojo-lambda-template

export const handler = async (event) => {
    console.log("Event: ", JSON.stringify(event));
    let response;

     response = {
              statusCode: 200,
              body: JSON.stringify({ message: "Hello, co-sherpa!"}),
            };
     console.log("response: ", response);
     return response;
};

Pythonで書くと、こんなふうになりますね。

import json

def lambda_handler(event, context):
    print("Event: ", json.dumps(event))
    
    response = {
        "statusCode": 200,
        "body": json.dumps({"message": "Hello, co-sherpa!"})
    }
    
    print("response: ", response)
    return response

では、日本語で命令を出してみましょう。

[lambda-tool-mcp-server] >東京リージョンのdp-dojo-lambda-templateファンションを実行してください。

> AWS CLIを使用して東京リージョンのLambda関数を実行します。

bash
aws lambda invoke --region ap-northeast-1 --function-name dp-dojo-lambda-template response.json


実行後、レスポンスの内容を確認できます:

bash
cat response.json


Lambda関数が正常に実行されると、ステータスコード200とともに実行結果がresponse.jsonファイルに保存されます。

回答はしてくれましたが、AIアシスタントがLambda MCP Server経由でLambdaを起動し、結果値を受け取るという期待値ではありません。

AWS認証は問題ありませんでした。いろいろ試してみるも、原因が特定できませんでした。Pro版は、そのうちに試してみたいと思います。

(.venv) ubuntu@LAPTOP-DHL9LRBE:~$ aws sts get-caller-identity
{
    "UserId": "AROAQFC27GXYBVCTPYAM5:xxxx@creationline.com",
    "Account": "123412341234",
    "Arn": "arn:aws:sts::123412341234:assumed-role/Admin/xxxx@creationline.com"
}

ここで、Claude Desktopを試してみることにしました。

Claude DesktopでLambda MCP Serverを実行してみる

筆者の環境は、Windows 11環境です。もし、同じOSでClaude Desktopを導入する必要がある場合、以下を参照してください。

1.Windows版のUVインストール

uvxコマンドを使うためにWindows版のuvをインストールしてください。

Windows版のuvインストール

2.AWS CLIインストール

AWS CLIもインストールしてください。

Windows 用の AWS CLI MSI インストーラ

3.AWS認証情報の設定

PowerShellで、「システムプロパティ」を開いて環境変数にアクセスキーとシークレットキー、アクセストークンを設定してください。

SystemPropertiesAdvanced.exe
  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • AWS_SESSION_TOKEN

なぜか、C:\Users\<User Name>\.aws\credentialsを読んでくれませんでしたから、環境変数に設定することにしました。

 aws sts get-session-token

An error occurred (AccessDenied) when calling the GetSessionToken operation: Cannot call GetSessionToken with session credentials

環境変数の取得は問題ありませんでした。

echo   $env:AWS_ACCESS_KEY_ID
ASIAQFC27GXYFC2YUJSX

4.Claude DesktopのMCPクライアント設定

次のようにClaude Desktopの開発者環境を開いてください。

左下の「アカウント」をクリック
↓
「設定アイコン(歯車)」をクリック
↓
「開発者」をクリック
↓
ローカルMCPサーバの「設定を編集」クリック
↓
「claude_desktop_config.json」を「メモ帳」で開く
↓
mcpServersのブロックのなかにLambda MCP Serverの設定を挿入・追加してください。

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "C:\\Users\\changhwan.lee\\Downloads\\mcp"
      ]
    },
    "lambda-tool-mcp-server": {
      "command": "uvx",
      "args": ["awslabs.lambda-tool-mcp-server@latest"],
      "env": {
        "AWS_REGION": "ap-northeast-1",
        "FUNCTION_LIST": "dp-dojo-lambda-template"
      }
    },
  … 
}
Claude Desktopでは、このようにmcpServers配下に複数のMCP Serverを設定します。
ファイル保存してください。

5.Claude Desktopを再起動

Claude Desktopのコンソールを閉じてから、Claudeのアイコンをクリックし、Claudeを再開しても、MCP設定が反映されないかもしれません。

Windowsの場合、「Ctrl+Alt+Del」をクリックし、アプリからClaudeのタスクを終了してから、再起動してください。

Lambda MCP Serverの設定が正しく反映された場合は、Claudeの「ローカルMCPサーバー」に一覧が追加され、running状態になっているはずです。

これでLambda MCP Serverの実行準備が完了しました。

6.Lambdaファンクションの準備

前項の「Amazon Q Developer(Free)でLambda MCP Serverを実行してみた」のなかにある「4.Lambdaファンクションの実行」のコードを参考にしてください。

7.Amazon Lambda MCP ServerでLambdaを実行

Claude Desktopから、日本語でLambdaの実行を命令してみてください

次のようにLambdaが実行され、戻り値が表示されます。

AIアシスタントがLambda MCP Server経由でLambdaを実行し、結果が取得できました。

この仕組みを利用すれば、DBからデータ取得も簡単に実装できそうですね。

まとめ

Amazon Q Developer(Free)でLambda MCP Serverが実行できなかったことは残念ですが、Claude DesktopからLambda MCP Serverが起動できました。この検証によって、MCPサーバの役割が明確に理解できました。

AWSは、多様なAWSリソースに対するMCPサーバを提供していますが、基本的にMCP Serverの操作方法は、同じではないでしょうか。

今回、Amazon Q Developer(Free版)には、Amazon MCP Serverの実行で制約があることが分かりました。今後、Amazon Q Developerを使って検証を続けるなら、VS CodeのAmazon Qプラグインを使ったほうがよさそうですね。これは、後に別の記事で紹介します。

Author

モダンアーキテクチャー基盤のソリューションアーキテクトとして活動しています。

[著書]
・Amazon Cloudテクニカルガイド―EC2/S3からVPCまで徹底解析
・Amazon Elastic MapReduceテクニカルガイド ―クラウド型Hadoopで実現する大規模分散処理
・Cypherクエリー言語の事例で学ぶグラフデータベースNeo4j
・Neo4jを使うグラフ型データベース入門(共著)
・RDB技術者のためのNoSQLガイド(共著)

leeの記事一覧

新規CTA