Sam's Club Sponsored Ads APIs (deprecated) について
Sam's Club Sponsored Ads APIs (deprecated)は、WalmartとSam's Clubの広告・Marketplace APIを検索、呼び出しする非推奨のMCPサーバーです。OpenAPI仕様から操作を解決し、認証と署名をサーバー側で処理します。READMEではio.github.alyiox/mcp-walmart-adsへの移行を案内しています。
主な機能
- 01API操作の検索と絞り込み
- 02操作と関連スキーマの確認
- 03認証付きAPI呼び出しの中継
- 04レポートやファイルのダウンロード
- 05トークンと署名のサーバー側処理
活用シーン
- 01Walmart Marketplace API操作の検索
- 02Sam's Club Sponsored Products APIの呼び出し
- 03認証付きエンドポイントからのレポート取得
MCP 対応
エンドポイントの検索、説明、呼び出し、ファイル取得のツールをMCPクライアントに提供します。認証、署名、リクエストヘッダーの構築はサーバー側で行います。非推奨のため、io.github.alyiox/mcp-walmart-adsの利用が案内されています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Walmart & Sam's Club API
3つのWalmart Inc. APIファミリーに対応するMCP サーバーです。1つのツールインターフェースから利用できます。
| プラットフォーム | API | 認証 |
|---|---|---|
walmart:ads — Walmart Connect | スポンサープロダクト、ディスプレイ | RSA-SHA256署名 + ベアラートークン |
walmart:marketplace — Walmart Marketplace | 28ドメイン(注文、商品、フィード、レポートなど) | OAuth2 client_credentials |
samsclub:ads — Sam's Club | スポンサープロダクト | RSA-SHA256署名 + ベアラートークン |
31個のAPIと424個の操作に対応する4つのツールを提供します。ディスカバリー、汎用プロキシ、ダウンローダーを備えています。エージェントは同梱のOpenAPI仕様からエンドポイントを見つけて呼び出し、サーバーは署名の生成、トークンの取得、ヘッダーの構築を行います。
walmart:ads:sponsored-products:SBAProfileUpdateV2
└─ retailer ─┘└ line ┘└─── api name ───┘└── operationId ──┘
└────────── platform ─────────┘ credentials attach here
操作IDだけでホストと認証方式を特定できます。<line>:<name>の形式のサフィックスを付けると、別の小売業者でも同じインターフェースを利用できます。90個の操作IDのうち、13個が共通です。
必要条件
- Python 3.13+
- 利用するプラットフォームの認証情報。利用するプラットフォームの分だけ設定してください。設定されていないプラットフォームは単に未設定として扱われ、認証情報がなくてもディスカバリーを利用できます。
- Walmart Connect / Sam's Club — コンシューマーID、RSAキーペア、ベアラートークン
- Walmart Marketplace — クライアントIDとシークレット、およびそれらが対応する広告主(販売者プロフィール)のID
クイックスタート
設定ファイルを用意し(設定を参照)、サーバーを起動します。
# Run directly with uvx (no clone needed)
npx -y @modelcontextprotocol/inspector@latest uvx mcp-walmart-ads
# Or run from source
git clone https://github.com/alyiox/mcp-walmart-ads.git
cd mcp-walmart-ads
uv sync
npx -y @modelcontextprotocol/inspector@latest uv run mcp-walmart-ads
設定
config.jsonは~/.config/mcp-walmart-ads/config.jsonに必ず配置してください。サーバーは起動時に一度だけ読み込むため、ファイルを修正した場合は必ず再起動してください。
Windows:
~は%USERPROFILE%(通常はC:\Users\<you>)に対応するため、フルパスは%USERPROFILE%\.config\mcp-walmart-ads\config.jsonになります。
ディレクトリを作成し、サンプルをコピーします。
# Unix-like (macOS, Linux, WSL, …)
mkdir -p ~/.config/mcp-walmart-ads/keys/walmart-ads
cp config.example.json ~/.config/mcp-walmart-ads/config.json
# Windows (PowerShell)
New-Item -ItemType Directory -Force "$env:USERPROFILE\.config\mcp-walmart-ads\keys\walmart-ads"
Copy-Item config.example.json "$env:USERPROFILE\.config\mcp-walmart-ads\config.json"
形状
platforms.<platform>.regions.<region>.<environment> = <auth block>
<platform> は api id が始まる 2 セグメントのプレフィックスです。そのため、設定キーには
platform ツールパラメーターに渡す値をそのまま指定します。翻訳は不要です。
認証ブロックの形状は、プラットフォームの認証モデルに従います。プラットフォームごとに形状は 1 つだけなので、識別子フィールドは不要です。
署名認証プラットフォーム(walmart:ads、samsclub:ads):
{
"platforms": {
"walmart:ads": {
"regions": {
"us": {
"production": {
"consumer_id": "your-consumer-id",
"private_key": "./keys/walmart-ads/us-prod.pem",
"private_key_version": "1",
"bearer_token": "your-bearer-token",
"base_urls": {
"sponsored-products": "https://developer.api.walmart.com/api-proxy/service/WPA/Api/v1",
"display": "https://developer.api.walmart.com/api-proxy/service/display/api/v1"
}
}
}
}
}
}
}
| フィールド | 備考 |
|---|---|
consumer_id | Partner Network のコンシューマー ID |
private_key | RSA 秘密鍵(PEM)へのパス。相対パスは設定ディレクトリを基準に解決されます |
private_key_version | キーバージョン文字列(デフォルトは "1") |
bearer_token | OAuth ベアラートークン |
base_urls.<api> | プラットフォームのディスカバリー対象に含まれる api ごとに 1 つ指定します。キーには短縮形(sponsored-products)または完全修飾形(walmart:ads:sponsored-products)を指定できます。raw method+path でアクセスする補助仕様用に、追加のキーを指定することもできます |
環境名は自由に指定できます。Walmart がテナントに production のみを発行する場合も、
production と staging の両方を発行する場合もあります。
OAuth2 プラットフォーム(walmart:marketplace):
{
"platforms": {
"walmart:marketplace": {
"regions": {
"us": {
"production": {
"credentials": [
{
"client_id": "your-client-id",
"client_secret": "your-client-secret",
"advertisers": [
{ "id": 7060158, "partner_id": "10001234" },
{ "id": 7060159 }
]
}
]
}
}
}
}
}
}
environment は production または sandbox にする必要があります。ベース URL はサーバーによって
固定されており、ファイルには記載しません。広告主 ID は、それを提供する認証情報の下にネストされるため、
シークレットは 1 回だけ記述され、参照先のない広告主 ID が構造上発生することはありません。partner_id
は販売者ごとに指定します。payments の 2 つの操作で WM_PARTNER_ID として必要になるためです。
すべてゼロの値は未設定として扱われます。これは、該当する ID を持たない販売者用に生成された設定が
書き込む値であり、scripts/backfill_partner_ids.py が Walmart から不足分を補完します。
リージョンは名前空間であり、ルートではありません。すべての walmart:marketplace リージョンは同じ
ホストにアクセスします。この階層が存在するのは、広告主 ID がリージョン内でのみ一意だからです。
設定の分割
設定済みの walmart:marketplace ブロックは、認証情報だけで数十キロバイトに達し、このファイルの 88% を
占めます。また、編集中に余計なカンマが 1 つ入るだけで、プラットフォームごとの検証より前に
解析エラーが発生し、すべてのプラットフォームが停止します。そのため、プラットフォームは
config.d/ 内の追加ファイルに置き、ベース設定にマージできます。
~/.config/mcp-walmart-ads/
├── config.json # server-wide settings, and any platforms you like
├── config.d/
│ ├── walmart-marketplace.json # only a "platforms" object
│ └── samsclub-ads.json
└── keys/
- 追加ファイルには
platformsのみを宣言する必要があります。サーバー全体の設定はconfig.jsonに記述します。 - 2 つのファイルで同じプラットフォームが宣言されている場合、両方のファイル名を示すエラーになります。優先順位によって黙って上書きされることはありません。
config.d/直下にある*.jsonのみが読み込まれるため、.bakファイルやエディターのスワップファイルは無視されます。- 解析に失敗したファイルの影響は、そのファイル内のプラットフォームのみに限られます。ほかの設定は動作し続けます。
private_keyの相対パスは、どちらの場合もconfig.jsonのディレクトリを基準に解決されます。そのため、プラットフォームをconfig.d/に移してもパスを変更する必要はありません。config.d/ディレクトリがなければ、動作に変更はありません。
1 つのプラットフォームの不正なブロックによって、ほかのプラットフォームの読み込みが停止してはなりません。
wmt://platforms を読み取ると、読み込みに成功したプラットフォームと、それらが宣言するリージョンや環境を確認できます。
読み込みに失敗したプラットフォームにはリージョンがありません。その環境を読み取ると、どのファイルのどのフィールドに問題があるのか、
修正には再起動が必要であることを、ローダー自身がメッセージで返します。
トップレベルオプション
| フィールド | デフォルト | 備考 |
|---|---|---|
response_cache_ttl | 3600 | 切り詰められた本文またはダウンロードが、リソース URI から読み取り可能な状態で保持される秒数 |
truncate_threshold | 2048 | プレビューに切り詰める前にインラインで返すレスポンスのバイト数 |
spec_refresh | {"auto": true, "interval": 7} | 仕様のバックグラウンド更新。auto で更新処理の有効・無効を切り替えます。interval は更新の間隔(日数)で、小数も指定できます |
マーケット → テナント(wap-tenant-id)
米国以外の walmart:ads マーケット(WMT_CA、WMT_MX、WBD_OD、…)では、call_endpoint と
download_file に tenant を渡してください。米国と walmart:marketplace では省略します。
ツール
list_endpoints
すべての API の操作を一覧表示します。フィルターは任意です。
| パラメーター | 説明 |
|---|---|
query | 操作 ID、パス、または概要に対する大文字と小文字を区別しない部分文字列検索 |
api | 1 つの API に限定します。例:walmart:marketplace:order-management |
platform | 1 つのプラットフォームに限定します — walmart:ads、walmart:marketplace、samsclub:ads(スキーマの列挙値) |
tag | OpenAPI タグでフィルターします |
method | HTTP メソッドでフィルターします — GET、POST、PUT、PATCH、DELETE(スキーマの列挙値) |
返される操作 ID は修飾形式(api:operationId)で、describe_endpoint または
call_endpoint にそのまま渡せます。
describe_endpoint
1 つの操作と、そこから参照されるすべての components.schemas エントリーを返します。
これにより、完全な仕様書がなくてもリクエストボディを作成できます。サーバー側で管理される認証ヘッダーと QoS ヘッダーは省略されます。
| パラメーター | 説明 |
|---|---|
operation_id | 修飾形式(api:operationId)、または一意に特定できる場合は修飾なしの形式 |
api | 修飾なしの ID を解決する API。例:walmart:ads:sponsored-products |
call_endpoint
設定済みの任意のプラットフォームに対して、認証付きリクエストを実行します。署名、認証情報ごとのキャッシュと同時実行の単一化を伴うトークン取得、および 401 の後の 1 回の再試行は、すべてサーバー側で行われます。
| パラメーター | 説明 |
|---|---|
region、environment | 必須。取得元:config |
operation_id | 修飾形式または修飾なしの形式。API、プラットフォーム、メソッド、パス、必須ヘッダーを解決します |
api | 生の method と path を指定する場合は必須です。それ以外の場合は operation_id から推測されます。2 つの補助的な walmart:ads 仕様を指定できます |
method、path | 生のルート。仕様書にないアルファ版/ベータ版/未公開のエンドポイントにもアクセスできます |
path_params | パス内の {placeholders} に指定する値 |
params、body | クエリー文字列と JSON ボディ |
file_path | ファイルを multipart/form-data で送信します — Marketplace のフィードのアップロードに使用します。feedType クエリーパラメーターと組み合わせてください |
advertiser_id | walmart:marketplace では必須です。認証情報の選択に使用されます。広告プラットフォームでは任意で、X-Advertiser-ID として送信されます |
tenant | 米国以外の walmart:ads リージョンで使用する WAP テナント |
応答が truncate_threshold より大きい場合、インラインにはプレビューが表示され、完全なボディは
wmt://responses/{request_id}、再現可能な cURL は wmt://curl/{request_id} で取得できます。
ベアラートークン、アクセストークン、署名はプレースホルダーに置き換えられます。
download_file
認証付きエンドポイントからレポート、ラベル、またはスナップショットをダウンロードします。完全な url(たとえば、表示スナップショットのポーリングで得られる details URL)、operation_id、または method と path を指定した api を渡します。platform が必須なのは、修飾なしの url を指定する場合のみです。
dest_path を指定すると、バイト列はそのパスに書き込まれます。指定しない場合、gzip 圧縮されていれば解凍されてキャッシュされ、結果には cached_at が含まれます。dest_path を指定せずにバイナリペイロードを要求すると、保存先パスの指定が求められます。リダイレクトは追従され、相対 URL または同一ホストの Location では認証ヘッダーが維持され、別ホストへのリダイレクトでは認証情報が破棄されます。結果にはリダイレクト経路を示す urls が含まれます。
仕様書
33 個の OpenAPI ドキュメントが wheel に同梱されています。更新すると、更新版が
~/.cache/mcp-walmart-ads/specs/ に書き込まれ、読み込み時には同梱版より優先されます。同梱版は実行時に書き換えられないため、キャッシュが破損または欠落した場合に戻れる基盤として保持されます。
どこから取得するか
Walmart は OpenAPI ファイルを公開していませんが、各 ReadMe リファレンスページは HTML にドキュメントのレジストリ UUID を埋め込んでおり、https://dash.readme.com/api/v1/api-registry/<uuid> は認証なしで完全な仕様を提供します。これにより、Walmart Connect と 28 の Marketplace ドメインすべてをカバーできます。Sam's Club はどちらも公開していないため、開発者向けドキュメントから仕様を手作業で作成しています。scripts/build_samsclub_spec.py はそのドキュメントから 候補 を再生成し、スケジュールされた spec drift ワークフローはドキュメントが変更されたときに PR を作成し、人によるレビューの関門とします。この候補が配布されることも、実行時に読み込まれることもありません。
ドキュメントは上流から提供されたものをそのまま保存するため、更新時の差分で変更内容を正確に確認できます。サイズの大きすぎるインライン例と x-readme メタデータはディスク上ではなく読み込み時に取り除かれるため、再ダウンロードせずに削減内容を調整できます。
最新の状態を保つ
仕様はバックグラウンドで更新されます。起動時に一度、その後は spec_refresh.interval 日ごと(デフォルトは 7 日)です。更新を停止するには auto を false に設定します。再び有効にしたときのために間隔は保持され、手動更新も引き続き利用できます。
今すぐ更新するには、バンドルされた仕様にないエンドポイントを利用した後、次を実行します。
# Installed with uvx (no clone)
uvx mcp-walmart-ads --refresh
# Or from a source checkout
uv run mcp-walmart-ads --refresh
どちらの形式でも、間隔に関係なくすべての仕様を確認し、同じユーザーキャッシュに書き込みます。各ドキュメントにつき 1 行ずつ、written、unchanged、error のいずれかが表示されます。
意図的に、このためのツールはありません。セッション内では、古い仕様も最新の仕様も見分けがつきません。単にエンドポイントが含まれていないだけです。そのため、判断を求められたエージェントは更新を一度も行わないか、無関係な失敗の後にむやみに更新することになります。更新のきっかけはセッションの外に置く必要があります。
インストール前に、ドキュメントから少なくとも 1 つのオペレーションを取得できなければなりません。これにより、エラー本文を含む 200 の応答によってキャッシュが汚染されることを防ぎ、バイト単位で同一のドキュメントはそのまま保持されます。キャッシュ済みのファイルを読み込めない場合は破棄され、読み込みはバンドルにフォールバックします。サーバーはキャッシュのルートにある spec-state.json を通じて連携します。このファイルには各仕様を最後に試行した日時が記録され、同時に 1 つのプロセスだけが一括確認を行うためのリースも保持されます。各クライアントセッションはそれぞれ独自のサーバープロセスを実行するため、これがなければ各プロセスが 33 個すべてを再ダウンロードしてしまいます。
バンドルの再構築
これはメンテナー向けの手順で、--refresh とは異なります。--refresh はキャッシュを更新しますが、こちらは wheel に同梱されるコピーを更新します。
# Registry-sourced specs only, by default
uv run python scripts/fetch_specs.py
uv run python scripts/fetch_specs.py walmart:ads:sponsored-products walmart:marketplace:order-management
# Regenerate the Sam's Club candidate spec for review
uv run --group spec-build python scripts/build_samsclub_spec.py
MCP リソース
| リソース URI | 説明 |
|---|---|
wmt://platforms | すべてのプラットフォーム、その認証モデル、および宣言されているリージョンと環境 |
wmt://platforms/{platform}/apis | そのプラットフォームの api ID |
wmt://platforms/{platform}/apis/{name} | 1 つの api:タイトル、バージョン、オペレーション数、およびタグごとの件数。使用可能な list_endpoints(tag=…) の値が分かります |
wmt://platforms/walmart:marketplace/regions/{region}/{environment}/advertisers | 広告主 ID と対応する Walmart Partner ID のマッピング(未設定の場合は null) |
wmt://platforms/{platform}/regions/{region}/{environment}/hosts | api ID と、呼び出し先のベース URL のマッピング。サーバーがホストを管理するすべての api を対象とする場合は * |
wmt://responses/{request_id} | 切り詰められたレスポンスまたはキャッシュされたダウンロードの完全な本文(メモリ内、TTL は設定に従います) |
wmt://curl/{request_id} | 以前のリクエストを再現する cURL。認証情報はプレースホルダーに置き換えられます |
MCP ホストの例
Cursor
.cursor/mcp.json に追加します。
{
"mcpServers": {
"walmart": {
"command": "uvx",
"args": ["mcp-walmart-ads"]
}
}
}
Claude Code
Claude Code の MCP 設定に追加します。
{
"mcpServers": {
"walmart": {
"command": "uvx",
"args": ["mcp-walmart-ads"]
}
}
}
Codex
[mcp_servers.walmart]
command = "uvx"
args = ["mcp-walmart-ads"]
OpenCode
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"walmart": {
"type": "local",
"enabled": true,
"command": ["uvx", "mcp-walmart-ads"]
}
}
}
GitHub Copilot
{
"inputs": [],
"servers": {
"walmart": {
"type": "stdio",
"command": "uvx",
"args": ["mcp-walmart-ads"]
}
}
}
開発
uv sync --group dev
uv run ruff check src/ tests/ scripts/
uv run ruff format --check src/ tests/ scripts/
uv run pyright
uv run pytest tests/ -v
コントリビューション
Issue とプルリクエストを歓迎します。変更の範囲は絞り、ruff check、ruff format --check、pyright、pytest のすべてに必ず合格してください。
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。