mcpField
S
Sam's Club Sponsored Ads APIs (deprecated)

Sam's Club Sponsored Ads APIs (deprecated)

本地服务
github.com/alyiox商业与营销24 周前更新

关于 Sam's Club Sponsored Ads APIs (deprecated)

Sam's Club Sponsored Ads APIs (deprecated) 是一个已弃用的 MCP 服务,用于发现并调用 Walmart 与 Sam's Club 的广告及 Marketplace API。它使用 OpenAPI 规范解析操作,并在服务端处理认证与请求签名;项目建议改用 io.github.alyiox/mcp-walmart-ads。

主要功能

  1. 01搜索并筛选 API 操作
  2. 02查看操作定义及关联模式
  3. 03代理调用已认证 API
  4. 04下载报告或文件
  5. 05服务端处理令牌与签名

适用场景

  1. 01查询 Walmart Marketplace API 操作
  2. 02调用 Sam's Club Sponsored Products API
  3. 03下载已认证端点返回的报告

MCP 相关

它向 MCP 客户端提供端点发现、描述、调用和文件下载工具;服务端负责认证、签名及请求头构建。该项目已弃用,应改用 io.github.alyiox/mcp-walmart-ads。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"alyiox-mcp-samsclub-ads": {
"command": "uvx",
"args": [
"mcp-samsclub-ads"
]
}
}
}
启动命令uvx mcp-samsclub-ads

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypimcp-samsclub-ads0.1.1

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Walmart 和 Sam's Club API

CI PyPI Python 3.13+ License: MIT

一个 MCP 服务,通过统一的工具接口提供 Walmart Inc. 三类 API:

平台API身份验证
walmart:ads — Walmart ConnectSponsored Products、DisplayRSA-SHA256 签名 + bearer token
walmart:marketplace — Walmart Marketplace28 个领域(订单、商品、feeds、报告等)OAuth2 client_credentials
samsclub:ads — Sam's ClubSponsored ProductsRSA-SHA256 签名 + bearer token

四个工具,覆盖 31 个 API 和 424 个操作——包括发现、通用代理和下载器。Agent 可在捆绑的 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 — consumer ID、RSA 密钥对、bearer token
    • Walmart Marketplace — client ID 和 secret,以及它们服务的广告主(卖家资料)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 开头的两段式前缀,因此配置键就是你作为 platform 工具参数传入的值,无需翻译。

认证块的结构遵循平台的认证模型。每个平台只有一种结构,因此无需判别字段。

签名平台(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_idPartner Network 消费者 ID
private_keyRSA 私钥(PEM)的路径。相对路径以配置目录为基准解析
private_key_version密钥版本字符串(默认为 "1")
bearer_tokenOAuth bearer token
base_urls.<api>平台发现范围内每个 API 对应一个。键可以是简写(sponsored-products),也可以是完整限定名(walmart:ads:sponsored-products);也允许为通过原始方法和路径访问的辅助规范添加额外键

此处的环境名称可以自由设置——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 嵌套在为其提供服务的凭据下,因此密钥只会出现一次,也不可能在结构上出现无效的广告主引用。partner_id 按卖家设置,因为两个 payments 操作需要将其作为 WM_PARTNER_ID;全零值会被视为缺失,因为生成的配置会为没有该值的卖家写入全零值,而 scripts/backfill_partner_ids.py 会从 Walmart 补齐缺失值。

区域是命名空间,而非路由——每个 walmart:marketplace 区域都会访问相同的主机。设置这一层级是因为广告主 ID 仅在区域内唯一。

拆分配置

已填充的 walmart:marketplace 块会包含数十 KB 的凭据,占此处文件内容的 88%;编辑时多出一个逗号就会导致所有平台不可用:配置解析失败会先于逐个平台的验证。因此,平台可以放在 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 中。
  • 如果在两个文件中声明了同一平台,必须报错并指出这两个文件,绝不能静默决定优先级。
  • 只会读取 config.d/ 目录下的 *.json 文件,因此会忽略 .bak 和编辑器交换文件。
  • 如果某个文件解析失败,只影响该文件中的平台;其余平台仍可正常工作。
  • 无论如何,相对 private_key 路径都以 config.json 所在目录为基准解析,因此将平台移入 config.d/ 无需修改路径。
  • 没有 config.d/ 目录时,行为不会改变。

某个平台的配置块格式错误,不得阻止其他平台加载。读取 wmt://platforms,即可查看哪些平台已加载,以及它们声明了哪些区域和环境:加载失败的平台没有区域;读取其某个环境时会返回加载器自身的错误信息,指出涉及的文件和字段,并说明修复后需要重启。

顶层选项
字段默认值说明
response_cache_ttl3600截断的响应正文或下载文件在其资源 URI 中保持可读的秒数
truncate_threshold2048响应被截断为预览前以内联形式返回的字节数
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 中的操作,并支持可选筛选条件。

ParameterNotes
query不区分大小写的子字符串,可匹配操作 ID、路径或摘要
api限定为一个 API,例如 walmart:marketplace:order-management
platform限定为一个平台 — walmart:ads、walmart:marketplace、samsclub:ads(架构枚举)
tag按 OpenAPI 标签筛选
method按 HTTP 方法筛选 — GET、POST、PUT、PATCH、DELETE(架构枚举)

返回的操作 ID 带有完整限定符(api:operationId),可直接传给 describe_endpoint 或 call_endpoint。

describe_endpoint

返回一个操作及其可访问的所有 components.schemas 条目,因此无需完整规范即可构建请求正文。省略由服务端管理的身份验证和 QoS 标头。

ParameterNotes
operation_id带完整限定符(api:operationId),或在无歧义时使用不带限定符的 ID
api用于解析不带限定符的 ID 的 API,例如 walmart:ads:sponsored-products
call_endpoint

向任何已配置的平台发送经过身份验证的请求。签名、按凭据缓存并通过 single-flight 刷新获取令牌,以及在收到 401 后重试一次,均由服务端处理。

ParameterNotes
region、environment必填。来源:配置
operation_id带或不带限定符均可。用于解析 API、平台、方法、路径和必需标头
api使用原始 method + path 时必填;否则根据 operation_id 推断。支持两个辅助 walmart:ads 规范
method、path原始路由,可访问规范中未包含的 alpha/beta/未发布端点
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} — bearer 令牌、访问令牌和签名会替换为占位符。

download_file

从经过身份验证的端点下载报告、标签或快照。提供完整的 url(例如显示快照轮询返回的 details URL),或提供 operation_id,或提供 api 以及 method + path。仅当 url 不带限定符时才需要 platform。

提供 dest_path 时,字节数据会写入该路径。未提供时,若文件经过 gzip 压缩,则会先解压再缓存,结果中会包含 cached_at — 未提供 dest_path 的二进制负载会要求提供一个路径。跟随重定向时,如果 Location 为相对地址或同主机地址,则保留身份验证标头;跨主机时则移除凭据。结果中会包含表示跳转路径的 urls。

规范

此 wheel 中包含 33 份 OpenAPI 文档。刷新时会将更新后的副本写入 ~/.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

两种形式都会忽略间隔设置,刷新所有规范并写入同一用户缓存;每份文档会打印一行状态:written、unchanged 或 error。

这里有意不提供用于此操作的工具。在会话中,无法区分过时规范和最新规范——它只会缺少某个端点——因此,如果让 Agent 来决定,它要么永远不刷新,要么在遇到无关故障后凭直觉刷新。触发刷新应当发生在会话之外。

文档必须至少包含一个操作才能安装,这样上游即使以 200 状态返回错误正文,也不会污染缓存;内容完全相同的文档则不会被改动。无法加载的缓存文件会被丢弃,读取操作将回退到捆绑版本。各服务通过缓存根目录中的 spec-state.json 协调,该文件记录每份规范最近一次尝试的时间,并持有租约,确保同一时间只有一个进程执行刷新——每个客户端会话都会运行自己的服务进程;没有该机制时,每个进程都会重新下载全部 33 份规范。

重新构建捆绑版本

这是维护者执行的步骤,与 --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}单个 api:标题、版本、操作数量,以及带有各自数量的标签——这些是合法的 list_endpoints(tag=…) 值
wmt://platforms/walmart:marketplace/regions/{region}/{environment}/advertisers广告主 id 与其 Walmart Partner ID 的映射(未设置时为 null)
wmt://platforms/{platform}/regions/{region}/{environment}/hostsapi 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

贡献

欢迎提交问题和拉取请求。请保持更改聚焦;ruff check、ruff format --check、pyright 和 pytest 必须全部通过。

许可证

LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。