🔌

Amazon Q Developer CLI でいろいろな MCP を動かしてみる

に公開

はじめに

MCP のことが気になりますがよく分かっていません。

気になるものがいくつかあるので、まずは実際に触ってみて雰囲気をつかもうと思います。

今回使ってみる MCP

  • AWS Document MCP
  • デジタル庁補助金検索 MCP
  • Playwright MCP
  • Lambda を使った自作 MCP

そもそもMCPとは

MCP(Model Context Protocol)
→ AIとシステムをつなぐための共通ルール

https://modelcontextprotocol.io/docs/getting-started/intro

alt text

https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/qdev-mcp-overview.html

MCPは「LLMに道具を持たせる仕組み」です。
LLMが自分の判断で、必要に応じて外部ツールを使ったり、使わなかったりできるようになります。

通常LLMは、入力された文字列に対して文字列を返すだけで、外部サービスにアクセスしたりといったことはできません。

でもChatGPTのようなサービスでは必要に応じて検索したり、画像作ったり、コード動かしたりしてくれますね。
これは、検索したり画像作ったりするツールと GPT-5(など)が、やり取りできる仕組みがあるために実現できています。

従来はこの仕組みをツールごとに個別に実装する必要があり、開発者ごとに異なる方法が使われていました。
この「LLMと外部ツールをつなぐ仕組み」を標準化したルールが MCP です。
このルールをみんなが踏襲することで、

  • LLMと外部ツールの連携がスムーズになる
  • 公開されているMCP対応ツールを簡単に組み込める
  • 開発者が共通の枠組みで拡張できる

といったメリットがあります。

実際に試してみる

AWS MCP

実際に MCP を使っていきます。

今回は Amazon Q Developer CLI に、いくつかの MCP サーバ を登録してみます。

Q CLI のインストール方法は以下を参照してください。

https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/command-line-installing.html

はじめに、AWS が公開している公式ドキュメントの MCP サーバーを登録してみます。

https://awslabs.github.io/mcp/servers/aws-documentation-mcp-server

Q CLI に MCP サーバを登録するには、設定ファイルへの追記が必要です。
~/.aws/amazonq/cli-agents/agent_config.json に MCP サーバの設定を追記します。

  "mcpServers": {
    "awslabs.aws-documentation-mcp-server": {
      "command": "uvx",
      "args": [
        "awslabs.aws-documentation-mcp-server@latest"
      ],
      "env": {
        "FASTMCP_LOG_LEVEL": "ERROR",
        "AWS_DOCUMENTATION_PARTITION": "aws"
      },
      "disabled": false,
      "autoApprove": []
    },
  },

  ~略~

  "useLegacyMcpJson": false,

Q cli を再起動します。

> q
✓ awslabs.aws-documentation-mcp-server loaded in 4.12 s


    ⢠⣶⣶⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣶⣿⣿⣿⣶⣦⡀⠀
 ⠀⠀⠀⣾⡿⢻⣿⡆⠀⠀⠀⢀⣄⡄⢀⣠⣤⣤⡀⢀⣠⣤⣤⡀⠀⠀⢀⣠⣤⣤⣤⣄⠀⠀⢀⣤⣤⣤⣤⣤⣤⡀⠀⠀⣀⣤⣤⣤⣀⠀⠀⠀⢠⣤⡀⣀⣤⣤⣄⡀⠀⠀⠀⠀⠀⠀⢠⣿⣿⠋⠀⠀⠀⠙⣿⣿⡆
 ⠀⠀⣼⣿⠇⠀⣿⣿⡄⠀⠀⢸⣿⣿⠛⠉⠻⣿⣿⠛⠉⠛⣿⣿⠀⠀⠘⠛⠉⠉⠻⣿⣧⠀⠈⠛⠛⠛⣻⣿⡿⠀⢀⣾⣿⠛⠉⠻⣿⣷⡀⠀⢸⣿⡟⠛⠉⢻⣿⣷⠀⠀⠀⠀⠀⠀⣼⣿⡏⠀⠀⠀⠀⠀⢸⣿⣿
 ⠀⢰⣿⣿⣤⣤⣼⣿⣷⠀⠀⢸⣿⣿⠀⠀⠀⣿⣿⠀⠀⠀⣿⣿⠀⠀⢀⣴⣶⣶⣶⣿⣿⠀⠀⠀⣠⣾⡿⠋⠀⠀⢸⣿⣿⠀⠀⠀⣿⣿⡇⠀⢸⣿⡇⠀⠀⢸⣿⣿⠀⠀⠀⠀⠀⠀⢹⣿⣇⠀⠀⠀⠀⠀⢸⣿⡿
 ⢀⣿⣿⠋⠉⠉⠉⢻⣿⣇⠀⢸⣿⣿⠀⠀⠀⣿⣿⠀⠀⠀⣿⣿⠀⠀⣿⣿⡀⠀⣠⣿⣿⠀⢀⣴⣿⣋⣀⣀⣀⡀⠘⣿⣿⣄⣀⣠⣿⣿⠃⠀⢸⣿⡇⠀⠀⢸⣿⣿⠀⠀⠀⠀⠀⠀⠈⢿⣿⣦⣀⣀⣀⣴⣿⡿⠃
 ⠚⠛⠋⠀⠀⠀⠀⠘⠛⠛⠀⠘⠛⠛⠀⠀⠀⠛⠛⠀⠀⠀⠛⠛⠀⠀⠙⠻⠿⠟⠋⠛⠛⠀⠘⠛⠛⠛⠛⠛⠛⠃⠀⠈⠛⠿⠿⠿⠛⠁⠀⠀⠘⠛⠃⠀⠀⠘⠛⠛⠀⠀⠀⠀⠀⠀⠀⠀⠙⠛⠿⢿⣿⣿⣋⠀⠀
 ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠛⠿⢿⡧

╭─────────────────────────────── Did you know? ────────────────────────────────╮
│                                                                              │
│        Stay up to date with the latest features and improvements! Use        │
│                 /changelog to see what's new in Amazon Q CLI                 │
│                                                                              │
╰──────────────────────────────────────────────────────────────────────────────╯

/help all commands  •  ctrl + j new lines  •  ctrl + s fuzzy search
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🤖 You are chatting with claude-sonnet-4

[default] > /mcp

awslabs.aws-documentation-mcp-server
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
[2025:11:35]: ✓ awslabs.aws-documentation-mcp-server loaded in 4.12 s


[default] > 

✓ awslabs.aws-documentation-mcp-server loaded in 4.12 s の部分で MCP サーバが立ち上がったことを確認できます。
バックグラウンドで MCP サーバーのプロセスが立ち上がり、Q cli がそれ経由で AWS ドキュメントを参照できるようになりました。
本当にドキュメントを読みに行ってくれるか確認してみます。

[default] > Lambdaを用いてリモートMCPサーバを作成したい
関連するドキュメントはある?

> AWS LambdaでMCPサーバを作成する方法について、関連ドキュメントを検索してみます。


🛠️  Using tool: search_documentation from mcp server awslabs.aws-documentation-mcp-server
 ⋮ 
 ● Running search_documentation with the param:
 ⋮  {"search_phrase": "Lambda MCP Model Context Protocol server",
 ⋮    "limit": 10}

Allow this action? Use 't' to trust (always allow) this tool for the session. [y/n/t]:

[default] > t


 ⋮ 
 ● Completed in 2.30s


~略~


> AWS LambdaでMCPサーバを作成するための関連ドキュメントが見つかりました。主要なリソースは以下の通りです:

## 主要ドキュメント

1. MCP protocol contract - MCPサーバの実装要件
   • https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/runtime-mcp-protocol-contract.html

2. Integrating MCP - MCP統合の技術要件
   • https://docs.aws.amazon.com/marketplace/latest/userguide/integrating-mcp.html

3. McpLambdaTargetConfiguration - Lambda用MCP設定
   • https://docs.aws.amazon.com/bedrock-agentcore-control/latest/APIReference/API_
McpLambdaTargetConfiguration.html

## 重要な実装要件

プロトコル要件:
• Transport: Stateless streamable-http
• Session Management: Mcp-Session-Idヘッダーサポート
• JSON-RPC 2.0通信プロトコル

コンテナ要件:
• Host: 0.0.0.0
• Port: 8000
• Platform: ARM64コンテナ

エンドポイント:
• /mcp - POST: MCP RPCメッセージを受信・処理

実装ステップ:
1. 機能定義(tools, resources, prompts)
2. MCPサーバインターフェース実装
3. JSON Schemaでの機能スキーマ作成
4. 認証・認可実装
5. エラーハンドリング・ログ追加
6. MCPクライアントでのテスト

これらのドキュメントを参考に、LambdaベースのMCPサーバを構築できます。

問題なく AWS のドキュメントから関連箇所を拾ってきてくれました。
これで MCP サーバの登録は完了です。簡単ですね。

デジタル庁 補助金検索 MCP

他にも MCP サーバを登録してみましょう。

デジタル庁が 10/24 に公開した、補助金電子申請システムのMCPサーバがあります。
Jグランツで公開されている補助金の検索ができるとのことです。

https://digital-gov.note.jp/n/n09dfb9fa4e8e

https://github.com/digital-go-jp/jgrants-mcp-server

今回は PyPI や npm でパッケージが公開されているわけではないため、リポジトリからソースをもってくる必要があります。
以下の手順に従います。

https://digital-gov.note.jp/n/n09dfb9fa4e8e#b99b393c-bd45-4ed1-989f-aed202544fa5

> git clone https://github.com/digital-go-jp/jgrants-mcp-server.git
Cloning into 'jgrants-mcp-server'...
remote: Enumerating objects: 38, done.
remote: Counting objects: 100% (38/38), done.
remote: Compressing objects: 100% (34/34), done.
remote: Total 38 (delta 13), reused 2 (delta 0), pack-reused 0 (from 0)
Receiving objects: 100% (38/38), 44.47 KiB | 1.27 MiB/s, done.
Resolving deltas: 100% (13/13), done.
> cd jgrants-mcp-server
> uv venv
Using CPython 3.11.13
Creating virtual environment at: .venv
Activate with: source .venv/bin/activate
> source .venv/bin/activate
(jgrants-mcp-server) > uv pip install -r requirements.txt
Resolved 101 packages in 770ms
Prepared 1 package in 7.03s
Installed 101 packages in 267ms
 + annotated-types==0.7.0
 + anyio==4.11.0
 + attrs==25.4.0

~略~

(jgrants-mcp-server) > python -m jgrants_mcp_server.core --port 8000
2025-10-27 11:56:09.334355989 [W:onnxruntime:Default, device_discovery.cc:164 DiscoverDevicesForPlatform] GPU device discovery failed: device_discovery.cc:89 ReadFileContents Failed to open file: "/sys/class/drm/card0/device/vendor"


                    ╭──────────────────────────────────────────────────────────────────────────────╮
                    │                                                                              │
                    │                         ▄▀▀ ▄▀█ █▀▀ ▀█▀ █▀▄▀█ █▀▀ █▀█                        │
                    │                         █▀  █▀█ ▄▄█  █  █ ▀ █ █▄▄ █▀▀                        │
                    │                                                                              │
                    │                               FastMCP 2.13.0.1                               │
                    │                                                                              │
                    │                                                                              │
                    │                  🖥  Server name: jgrants-mcp-server                          │
                    │                                                                              │
                    │                  📦 Transport:   HTTP                                        │
                    │                  🔗 Server URL:  http://127.0.0.1:8000/mcp                   │
                    │                                                                              │
                    │                  📚 Docs:        https://gofastmcp.com                       │
                    │                  🚀 Hosting:     https://fastmcp.cloud                       │
                    │                                                                              │
                    ╰──────────────────────────────────────────────────────────────────────────────╯


[10/27/25 11:56:10] INFO     Starting MCP server 'jgrants-mcp-server' with transport 'streamable-http' on server.py:2050
                             http://127.0.0.1:8000/mcp
INFO:     Started server process [42084]
INFO:     Waiting for application startup.
INFO:mcp.server.streamable_http_manager:StreamableHTTP session manager started
INFO:     Application startup complete.
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

サーバが立ち上がりました。
先ほどと同じように設定を追加します。
今回は args に localhost で実行しているサーバーのエンドポイントを指定しています。

    "jgrants": {
      "command": "uvx",
      "args": [
        "fastmcp",
        "run",
        "http://localhost:8000/mcp"
      ]
    }

Q cli を再度立ち上げて確認します。

[default] > /mcp

jgrants
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
[2025:12:21]: ✓ jgrants loaded in 12.61 s

awslabs.aws-documentation-mcp-server
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
[2025:12:22]: ✓ awslabs.aws-documentation-mcp-server loaded in 13.13 s


[default] > 

設定されていますね。
では、動かしてみます。

[default] > DXに関する補助金を調べて

> DXに関する補助金を検索します。


🛠️  Using tool: search_subsidies (trusted) from mcp server jgrants
 ⋮ 
 ● Running search_subsidies with the param:
 ⋮  {"keyword": "DX"}

 ⋮ 
 ● Completed in 1.95s


> 現在受付中のDX関連補助金が5件見つかりました:

## 受付中のDX関連補助金

1. 令和7年度東京都医療DX人材育成支援事業
• 対象地域:東京都
• 最大補助額:50万円
• 受付期間:2025年7月23日〜11月28日
• 対象:従業員数制約なし

2. 久留米市小規模事業者デジタル化支援補助金(令和7年度)
• 対象地域:福岡県久留米市
• 最大補助額:20万円
• 受付期間:2025年6月30日〜12月31日
• 対象:20名以下の事業者

3. 建築GX・DX推進事業【代表事業者及び事業者の登録】
• 対象地域:全国
• 受付期間:2025年4月1日〜12月31日
• 対象:従業員数制約なし

4. 令和7年度 建築GX・DX推進事業
• 対象地域:全国
• 受付期間:2025年4月10日〜12月31日
• 対象:従業員数制約なし

5. 令和7年度スキルアップ支援事業
• 対象地域:東京都
• 最大補助額:350万円
• 受付期間:2025年2月28日〜2026年2月28日
• 対象:従業員数制約なし

詳細な申請要件や手続きについては、各補助金の詳細情報を確認することをお勧めします。

※出典:Jグランツ(jGrants)からの出典

動きました。

Playwright MCP

ブラウザ操作ツールの Playwright も MCP サーバを公開しています。
こちらも動かしてみます。

https://github.com/microsoft/playwright-mcp

設定ファイルに以下を追記します。

    "playwright": {
      "command": "npx",
      "args": [
        "@playwright/mcp@latest",
        "--config",
        "/root/.playwright.config.json"
      ]
    }

playwrightを動かすには少しセットアップが必要です。

まず、 .playwright.config.json を作成し、以下を記入します。
保存場所は設定ファイルの記述と合わせます。
ここで --no-sandbox を設定しないとエラーになりました。(おそらく wsl で root 権限を使っているため)

{
  "browser": {
    "browserName": "chromium",
    "isolated": true,
    "launchOptions": {
      "channel": "chromium",
      "headless": false,
      "args": [
        "--no-sandbox"
      ]
    },
    "contextOptions": {
      "locale": "ja-JP",
      "timezoneId": "Asia/Tokyo"
    }
  }
}

設定項目の詳細については以下の公式ドキュメントを参照してください

https://github.com/microsoft/playwright-mcp?tab=readme-ov-file#configuration-file

次に、Playwright をインストールします。

> npm -g install @playwright/mcp

changed 3 packages in 1s
> npx playwright install chromium
✔ No malicious packages detected.

ここまで出来たら設定が完了です。
Q cli を起動して確認します。

[default] > playwrightで北日本コンピューターサービスのHPを確認して、主要なサービスを調べて
各サービスのページのリンクを添付して

> 北日本コンピューターサービスのHPを確認して、主要なサービスを調べます。


🛠️  Using tool: browser_navigate (trusted) from mcp server playwright
 ⋮ 
 ● Running browser_navigate with the param:
 ⋮  {"url": "https://www.kitanihon.co.jp"}

 ⋮ 
 ● Completed in 1.64s


~略~


> 北日本コンピューターサービス株式会社のHPを確認しました。以下が主要なサービスと各ページのリンクです:

## 北日本コンピューターサービス株式会社の主要サービス

### 1. 生活保護システムふれあい
• 概要: 全国の都道府県市区町にて導入実績No.1のシステム
• リンク: https://www.kitacom.co.jp/software/welfare

### 2. WAISE(生活保護ケースワークAI支援サービス)
• 概要: 生活保護に関する質問を入力するとAIにより最適な回答案が得られるサービス
• リンク: https://www.kitacom.co.jp/software/welfare/waise

### 3. ふれあいコンシェルジュ
• 概要: 検索しやすさを追求したAI搭載FAQシステム。問い合わせ対応や組織の情報共有の課題を解決
• リンク: https://www.furecon.jp/

### 4. 滞納管理システム
• 概要: 複数の管理台帳をデータベース化。法規に基づいた滞納整理業務を即座に処理
• リンク: https://www.kitacom.co.jp/software/dialogue/

### 5. PiMS
• 概要: 電子照会における課題を行政機関と一緒に解決するためのプラットフォーム
• リンク: https://pims-for-lg.com/

### 6. OneDrip(滞納整理EBPM支援サービス)
• 概要: 独自の分析手法により、収納率と生産性の同時向上を目的とした合理的根拠を提供
• リンク: https://www.kitacom.co.jp/software/onedrip

### 7. Ittoco
• 概要: 在席状況を見える化するシステム(行き先ホワイトボードの代替)
• リンク: https://www.kitacom.co.jp/ittoco

### 8. ふれあい健康管理サービス
• 概要: 健康診断結果(個票)のデジタル化で事務作業を削減(IT導入補助金対応)
• リンク: https://www.kitacom.co.jp/kenko

### 9. 貸付システム(母子父子寡婦福祉資金貸付システム)
• 概要: 償還率の向上と職員の負担軽減・業務効率化を図るシステム
• リンク: https://www.kitacom.co.jp/software/general

### その他のサービス
• システムサポート体制: インストラクター、コールセンター、標準パッケージの維持・メンテナンス
• システム開発: 顧客密着型の開発アプローチ
• ネットワーク構築・保守: インフラサービス、機器設置、クラウドシステムサポート

会社概要: 1969年設立、秋田県秋田市に本社を置く自治体向けシステム開発会社で、「三位一体」(販売・開発・サポ
ート)でお客様にシステムを提供することを理念としています。

ブラウザが立ち上がり、自動で操作が行われました。

この MCP を使うことで、クリック操作やフォーム入力などのブラウザ操作を自然言語で実行できます。
また、スクリーンショットの取得や PDF 出力なども可能なようなので、さまざまな活用が考えられます。

https://github.com/microsoft/playwright-mcp?tab=readme-ov-file#tools

ちなみに、似たような MCP として Chrome DevTools MCP もあります。
その名の通り、Chrome の開発者ツール機能にアクセスできる MCP です。
Playwright MCP よりも多機能ですが、Chrome 専用であり、他のブラウザ操作はできません。
Playwright は chromiumu 以外に、 firefox 、 webkit でも実行可能なようです。

https://github.com/ChromeDevTools/chrome-devtools-mcp

Lambda で MCP サーバを動かしてみる

ここまで動かしてみて MCP サーバの便利さは分かりました。
せっかくなら周りの人にもこの便利さを体験してもらいたいところです。
しかし、今回使った MCP サーバはローカルにサーバを立てる必要があるため、uv や node が必要だったりと、開発者以外の人に勧めるには少しハードルが高いです。
また、普段使いの AI アシスタントとしてブラウザの ChatGPT などを使ってる人も多いので、そこでも使えるとより多くの人に試してもらえそうです。
そこで最後にパブリックに使える MCP を作ってみます。

Lambda + mcp_lambda_handler を用いて、パブリックでステートレスな MCP サーバを作ってみます。
以下の記事の方法を参考にしました。

https://zenn.dev/zhizhiarv/articles/host-remote-mcp-on-lambda

https://zenn.dev/masuda1112/articles/2025-08-11-lambda-mcp

AWS が公開しているフレームワーク、mcp-lambda-handler を使います。

https://github.com/awslabs/mcp/tree/main/src/mcp-lambda-handler

本筋とはずれるので詳細な説明は割愛します。

ワークスペースの準備します。

> mkdir lambda
> mkdir infra
> cd infra/
> cdk init app --language=typescript
> cd ../lambda/
> touch requirements.txt main.py

requirements.txtに awslabs.mcp-lambda-handler 追加します。

awslabs.mcp-lambda-handler

main.py に MCP で公開したい処理を記述します。

from awslabs.mcp_lambda_handler import MCPLambdaHandler

mcp_server = MCPLambdaHandler(name="mcp-lambda-server", version="1.0.0")

@mcp_server.tool()
def get_time() -> str:
    """
    Returns the current time in ISO 8601 format with UTC timezone.
    """
    from datetime import datetime, UTC
    return datetime.now(UTC).isoformat()

def lambda_handler(event, context):
    return mcp_server.handle_request(event, context)

CDK を使って Lambda を作成。

import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as lambda from 'aws-cdk-lib/aws-lambda';

export class InfraStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // Lambda関数の定義
    const func = new lambda.Function(this, 'McpLambdaFunction', {
      runtime: lambda.Runtime.PYTHON_3_12,
      handler: 'main.lambda_handler',
      code: lambda.Code.fromAsset('../lambda', {
        bundling: {
          image: lambda.Runtime.PYTHON_3_12.bundlingImage,
          command: [
            'bash', '-c',
            'pip install -r requirements.txt -t /asset-output && cp -au . /asset-output'
          ],
        },
      }),
      architecture: lambda.Architecture.X86_64,
      timeout: cdk.Duration.seconds(10),
      description: 'MCP Lambda server function exposed via Function URL',
    });

    // Function URLの作成(認証なしでパブリックアクセス可能)
    const functionUrl = func.addFunctionUrl({
      authType: lambda.FunctionUrlAuthType.NONE,
      cors: {
        allowedOrigins: ['*'],
        allowedMethods: [lambda.HttpMethod.ALL],
        allowedHeaders: ['*'],
      },
    });

    // デプロイ後にURLを出力
    new cdk.CfnOutput(this, 'McpLambdaFunctionUrl', {
      value: functionUrl.url,
      description: 'Public Function URL for the MCP Lambda function',
    });
  }
}

デプロイします。

> cdk deploy

デプロイが完了すると 関数 URL に GET した時、400エラーが返ってくるようになります。

err.png

MCP サーバとして登録します。

    "lambda-mcp": {
      "type": "http",
      "url": "https://*.lambda-url.ap-northeast-1.on.aws"
    }
> q
✗ aws-mcp-lambda has failed to load after 2.47 s
 - Transport closed
 - run with Q_LOG_LEVEL=trace and see $TMPDIR/qlog/qchat.log for detail

うーんエラー
Q cli のバージョン上げたり、Agent ファイルの記述を変えてみたりしたんですが効果なしでした。
ちなみにエラーログは $TMPDIR/qlog/qchat.log とありますが、 環境によっては $XDG_RUNTIME_DIR/qlog/qchat.log に保存されます。

https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/troubleshooting-q-logs.html

VScode 拡張機能の Amazon Q からはうまくいきます。

chatgpt.png

ChatGPT からもうまくいきますね。

qide.png

Q cli の設定方法を間違えているのかと思い、AWSが提供しているリモート MCP サーバ、aws-knowledge-mcp-server も設定してみます。

    "lambda-mcp": {
      "type": "http",
      "url": "https://*.lambda-url.ap-northeast-1.on.aws"
    },
    "aws-knowledge-mcp-server": {
      "url": "https://knowledge-mcp.global.api.aws",
      "type": "http"
    },

こちらはうまく動作します。どうして。

[default] > /mcp

playwright
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
[2025:11:52]: ✓ playwright loaded in 1.92 s

aws-knowledge-mcp-server
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
[2025:11:51]: ✓ aws-knowledge-mcp-server loaded in 1.52 s

lambda-mcp
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
[2025:11:50]: ✗ lambda-mcp has failed to load after 0.27 s
 - Transport send error: Transport [rmcp::transport::worker::WorkerTransport<rmcp::transport::streamable_http_client::StreamableHttpClientWorker<reqwest::async_impl::client::Client>>] error: Transport channel closed
 - run with Q_LOG_LEVEL=trace and see $TMPDIR/qlog/qchat.log for detail

awslabs.aws-documentation-mcp-server
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
[2025:11:52]: ✓ awslabs.aws-documentation-mcp-server loaded in 2.07 s

似た事象の issue が挙げられてたので Q cli の問題かもしれません。

https://github.com/aws/amazon-q-developer-cli/issues/2993

今回は Q cli で使うのは諦めようと思います。

おわりに

個別の処理を MCP サーバーとして小さく管理できる点や、プラグインを追加するように自分の好きなAIアシスタントの機能を拡張できる点は MCP を使う魅力に感じました。

一方で、LLM に過度な権限を与えてしまうリスクや、悪意ある MCP サーバが存在する可能性には注意が必要ですね。

北日本コンピューターサービス

Discussion