リンクをコピーしました

ローカルで動かしていたAmazon Product Advertising APIのMCPを、チームや友人にも共有できるようにしたくて、FastMCP Cloudへ載せました。
この記事は、デプロイ後にClaude Desktop / Claude Codeへ繋いだときの設定と、そこで分かったことを残したものです。

デプロイしたもの

今回デプロイしたのは、Amazon Product Advertising APIのラッパーをMCPツールにしたサーバーです。
キーなどの認証情報はヘッダーで受け渡す構成にしています。

現在デプロイしているサービスを止める予定はありませんが、悪意あるアクセスや無料枠を超えそうになれば非公開にします。ヘッダーで何も指定しなければデフォルト値で動作します。

Claude Desktopから呼び出すと、商品検索・詳細取得までは動きました。
Amazon Product API単体ではKindle Unlimitedかどうかを判定する情報が取れないため、Claudeが商品詳細から推測しようとしますが、精度はまだ微妙です。
ただ、MCP経由でAmazonの商品データを取る仕組みとしては使えました。

提供しているツールは次の5つです。

ツール名概要
search_productsキーワードでAmazon商品を検索
get_product_detailsASINを指定して商品詳細を取得
get_product_variations色・サイズなどのバリエーションを取得
get_browse_nodesカテゴリ階層を取得
check_api_statusAPIの設定と接続状態を確認

FastMCP Cloudへデプロイした流れ

前提は、Amazon Product Advertising APIの認証情報と、FastMCP Cloudのアカウントです。
認証情報がなくても、ヘッダー未指定ならデフォルト値の範囲で試せます。

ローカルでfastmcpのMCPサーバーを作り、MCPインスペクターで動作確認してからGitHubへプッシュしました。
そのあとFastMCP Cloudのセットアップから、リポジトリとエントリーポイントを指定してデプロイしています。

リポジトリの選択画面
デプロイ設定画面

ビルド完了後は、FastMCP Cloudのインスペクターとチャットからツールを試せます。

FastMCP Cloud のインスペクター画面
FastMCP Cloud のチャットテスト

接続の実体:ヘッダーで認証を渡す

エンドポイントは次です。

https://amazon-product-ad-api.fastmcp.app/mcp

渡しているヘッダーは次の4つです。

  • aws_access_key_id
  • aws_secret_access_key
  • aws_associate_tag
  • amazon_marketplace(日本なら JP、アメリカなら US

Pythonでの疎通

import asyncio
from fastmcp import Client
from fastmcp.client.transports import StreamableHttpTransport
from fastmcp.client.auth import OAuth

MCP_URL = "https://amazon-product-ad-api.fastmcp.app/mcp"

HEADERS = {
    "aws_access_key_id": "YOUR_ACCESS_KEY_ID",
    "aws_secret_access_key": "YOUR_SECRET_ACCESS_KEY",
    "aws_associate_tag": "YOUR_ASSOCIATE_TAG",
    "amazon_marketplace": "JP",
}

oauth_auth = OAuth(
    mcp_url=MCP_URL,
    additional_client_metadata={
        "token_endpoint_auth_method": "client_secret_post"
    },
)

client = Client(
    transport=StreamableHttpTransport(
        MCP_URL, headers=HEADERS, auth=oauth_auth
    )
)


async def test_connection():
    try:
        async with client:
            await client.ping()
            print("接続成功")
            return True
    except Exception as e:
        print(f"接続失敗: {e}")
        return False


if __name__ == "__main__":
    asyncio.run(test_connection())

YOUR_* を自分の認証情報に置き換えて実行します。

Claude Desktop(Mac)

Claude Desktopを開くたびに認証を求められます。ブラウザをアクティブにしないとフリーズしたように見えることがあるので、その場合はアプリを再起動してみてください。

設定ファイルは次です。

~/Library/Application Support/Claude/claude_desktop_config.json

開発者モードをONにしたうえで、mcp-remote 経由でヘッダーを渡しています。

{
  "mcpServers": {
    "amazon-product-ad-api": {
      "command": "npx",
      "type": "streamable-http",
      "args": [
        "mcp-remote@latest",
        "https://amazon-product-ad-api.fastmcp.app/mcp",
        "--header",
        "aws_access_key_id: YOUR_ACCESS_KEY_ID",
        "--header",
        "aws_secret_access_key: YOUR_SECRET_ACCESS_KEY",
        "--header",
        "aws_associate_tag: YOUR_ASSOCIATE_TAG",
        "--header",
        "amazon_marketplace: JP"
      ]
    }
  }
}

ヘッダーやメタを付けない簡易接続も、リモートサーバー接続のドキュメントの手順で試せます。
その場合はデフォルト値での動作になります。

Claude Code

claude mcp add --transport http amazon-product-api-test \
  https://amazon-product-ad-api.fastmcp.app/mcp \
  --header "aws_access_key_id: YOUR_ACCESS_KEY_ID" \
  --header "aws_secret_access_key: YOUR_SECRET_ACCESS_KEY" \
  --header "aws_associate_tag: YOUR_ASSOCIATE_TAG" \
  --header "amazon_marketplace: JP"

追加後は次で確認します。

claude
/mcp amazon-product-api-test

認証画面がブラウザで開くので、FastMCP Cloudアカウントでログインします。

FastMCP Cloud の認証画面

設定後は、Claude側で次のように呼べます。

amazon-product-api-testを使って、任天堂のゲームを調べてください。

うまくいかないとき

接続が怪しいときは、MCPインスペクターで切り分けるのが早いです。

  • ヘッダーのキー名・値の誤り
  • Claude Desktopで認証ポップアップを処理せずに戻ってしまう
  • FastMCP Cloudのログでエントリーポイント指定を見直す

所感

FastMCP Cloudへのデプロイ自体はスムーズで、大きくハマる点はありませんでした。
ローカルだけで完結させず、共有したいならクラウドに置くのは便利です。

一つのMCPに全部詰め込むより、目的ごとに分けてリミックスする方が扱いやすいと感じました。

参考リンク