文档
接入、用法与排查。从零到第一次调用通常不超过 5 分钟,而且不需要注册。
快速接入(5 分钟)
一条命令写进你的 agent 配置,重启会话就能用。不需要注册、不需要密钥—— 匿名调用按 IP 给免费额度,够日常试用与轻度开发。要更高额度、要看用量、要管密钥时再注册。
claude mcp add --transport http amazon-spapi https://mcp.sp-api.net/mcp/sp-api
两个 endpoint
SP-API 与 Ads 完全独立,各自一套工具集,可以只装一个。额度共享同一个池。
| endpoint | 地址 | 工具 | 内容 |
|---|---|---|---|
| sp-api | https://mcp.sp-api.net/mcp/sp-api | 10 | 订单、库存、商品、报告、Feed、通知——66 个 API 的权威签名与限流。 |
| ads-api | https://mcp.sp-api.net/mcp/ads-api | 11 | SP / SB / SD / DSP / AMC——72 个规范,外加 269 个 Amazon 官方真实请求体。 |
下面按客户端分节,每节都有一段可以直接复制的配置。找到你在用的那个即可,其余可以跳过。
Claude Code
最省事的一条路:命令行直接加,不用编辑任何 JSON。
claude mcp add --transport http amazon-spapi https://mcp.sp-api.net/mcp/sp-api
claude mcp add --transport http amazon-ads https://mcp.sp-api.net/mcp/ads-api
需要密钥时的变体
默认不带密钥就能用。当你注册后想把调用记到自己账号下(看用量、拿更高额度),
再加一个 --header:
claude mcp add --transport http amazon-spapi https://mcp.sp-api.net/mcp/sp-api \
--header "Authorization: Bearer sk_live_xxx"
验证是否装上:claude mcp list 应该能看到 amazon-spapi,状态 connected。
~/.claude/skills/
改完配置重启会话才生效
ChatGPT / Codex CLI
写进 ~/.codex/config.toml。ChatGPT 桌面端的 Codex 与 Codex CLI 共用这份配置。
# ~/.codex/config.toml
[mcp_servers.amazon-spapi]
url = "https://mcp.sp-api.net/mcp/sp-api"
[mcp_servers.amazon-ads]
url = "https://mcp.sp-api.net/mcp/ads-api"
~/.agents/skills/
改完配置重启会话才生效
WorkBuddy
在设置里找到 MCP Servers,粘贴下面这段标准 mcpServers 结构即可。
mcpServers 结构给出的通用写法;正式格式确认后本节会更新。
如果你的 WorkBuddy 版本里找不到对应入口,可以先用「其他客户端」一节的通用 HTTP 接入方式。
// WorkBuddy 设置 → MCP Servers(标准 mcpServers 结构,HTTP 传输)
{
"mcpServers": {
"amazon-spapi": {
"type": "http",
"url": "https://mcp.sp-api.net/mcp/sp-api"
},
"amazon-ads": {
"type": "http",
"url": "https://mcp.sp-api.net/mcp/ads-api"
}
}
}
~/.agents/skills/
改完配置重启会话才生效
Cursor
写进 ~/.cursor/mcp.json(全局)或项目里的 .cursor/mcp.json。
// ~/.cursor/mcp.json
{
"mcpServers": {
"amazon-spapi": { "url": "https://mcp.sp-api.net/mcp/sp-api" },
"amazon-ads": { "url": "https://mcp.sp-api.net/mcp/ads-api" }
}
}
~/.agents/skills/
改完配置重启会话才生效
VS Code
写进工作区的 .vscode/mcp.json,Copilot Chat 的 agent 模式会自动加载。
// .vscode/mcp.json
{
"servers": {
"amazon-spapi": { "type": "http", "url": "https://mcp.sp-api.net/mcp/sp-api" },
"amazon-ads": { "type": "http", "url": "https://mcp.sp-api.net/mcp/ads-api" }
}
}
~/.agents/skills/
改完配置重启会话才生效
其他客户端
任何支持 Streamable HTTP 传输的 MCP 客户端都能直接填 URL。
endpoint : https://mcp.sp-api.net/mcp/sp-api
https://mcp.sp-api.net/mcp/ads-api
transport: Streamable HTTP(POST,单次 JSON 响应)
protocol : 2026-07-28 / 2025-11-25 / 2025-06-18 / 2025-03-26 均支持
auth : 可不带;需要更高额度时 Authorization: Bearer <密钥>
协议是普通的 Streamable HTTP:一次 POST,一次 JSON 响应。没有长连接、
没有 SSE 依赖、没有 initialize 握手。详见协议版本一节。
~/.agents/skills/
改完配置重启会话才生效
三步用法
规范不是给人翻的,是给模型查的。正确的姿势是漏斗:先定位,再取权威签名, 最后生成请求。370 + 789 个 operation 绝不能一对一暴露成工具——模型选不过来也选不准。
- search —— 定位
spapi_search "orders"返回精简候选行(operation / schema / doc 一次搜完),几 KB 而已。 - op / show —— 取权威签名
spapi_op orders-v0:getOrders给出必填参数、schema、限流0.0167 req/s、是否 deprecated。写任何请求之前必调。 - request —— 生成可执行请求
spapi_request返回解析好的 URL、query、头、body 骨架、翻页方式、缺失的必填项,外加一条能直接跑的 curl。
第四步在你自己的机器上:把请求描述交给本地执行器,或者直接复制那条 curl。 凭证在这一步才出现,且只出现在你的机器上。
一段真实对话
spapi_op 从规范里带出来的
rateLimit.note。规范服务的增值不只是给数字,还给出「该换个 API」的判断。
工具清单
两个 endpoint 各自一套。带 ★ 的是「生成可执行请求」那一步,也是最终要落到的地方。
SP-API(9 个工具)
| 工具 | 做什么 |
|---|---|
| spapi_search | 全域检索:operation / schema / doc / api / notification / report 一次搜完,返回精简候选行。 |
| spapi_op | 单个 operation 的完整权威定义:method、path、全部参数(位置 / 必填 / 类型)、请求与响应 schema、限流、是否废弃。 |
| spapi_schema | 取 schema 定义并内联 $ref:字段、类型、必填、枚举、说明。 |
| spapi_doc | 读取 Amazon 官方开发者文档正文。 |
| spapi_request | ★ 生成可直接执行的请求描述:URL、query、头、body 骨架、限流、翻页方式,外加一条 curl。 |
| spapi_list | 按类目浏览而不是检索:列全部 API、按条件列 operation / schema / doc。 |
| spapi_changelog | Amazon 官方 changelog 条目,最新在前。用于回答「这个月改了什么」。 |
| spapi_status | 规范来源与新鲜度:各类记录数、更新时间、上游版本。 |
| get_executor | 返回本地执行器的文件清单与内容,由客户端写入本地。 |
Ads API(10 个工具)
| 工具 | 做什么 |
|---|---|
| ads_search | 全域检索:789 个 operation、7,206 个 schema、768 页文档、269 个官方请求示例。 |
| ads_operation | 检索 operation 列表并返回精简行:operationId、method、path、所属规范、tag、响应码、摘要。 |
| ads_show | ★ 单个 operation 的完整定义,直接读自 OpenAPI 规范:合并后的全部参数、准确的鉴权头组合、媒体类型。 |
| ads_schema | schema 定义:名称、所属规范、类型、必填字段、全部属性。 |
| ads_doc | 检索广告高级工具中心的官方文档。 |
| ads_example | Amazon 官方 Postman 集合中的真实请求:method、完整 URL、请求体。 |
| ads_request | ★ 生成可直接执行的请求描述:区域主机、URL、正确的鉴权头组合、媒体类型。 |
| ads_gap | Amazon 自己在调、却没有任何公开 OpenAPI 规范的端点——共 80 个,最大一块是 AMC。 |
| ads_spec | 规范目录:72 个 OpenAPI 规范的 slug、family、版本、operation 数。 |
| get_executor | 同上,返回本地执行器文件。 |
请求描述格式
spapi_request / ads_request 返回的不是「调用结果」,而是一份怎么调的说明书。
它是纯函数的输出:给定 operation 与参数,永远得到同一份描述。凭证的位置只有占位符。
{
"method": "GET",
"host": { "NA": "sellingpartnerapi-na.amazon.com",
"EU": "sellingpartnerapi-eu.amazon.com",
"FE": "sellingpartnerapi-fe.amazon.com" },
"path": "/orders/v0/orders",
"query": { "MarketplaceIds": "ATVPDKIKX0DER",
"CreatedAfter": "2026-08-18T00:00:00Z" },
"auth": { "header": "x-amz-access-token", "value": "${AUTH_TOKEN}",
"rdtRequired": false },
"rateLimit": { "rps": 0.0167, "burst": 20,
"note": "拉取大量历史订单请改用 createReport" },
"pagination": { "style": "NextToken", "param": "NextToken" },
"validation": { "missing": [], "unknown": [] },
"curl": "curl -sS -X GET \"https://…\" -H \"x-amz-access-token: $LWA_ACCESS_TOKEN\""
}
host把三个区域都给出来——我们不知道你在哪个区域经营,由执行器按当前连接选。validation.missing在发请求之前就列出缺了哪个必填项,省一次 400 往返。rateLimit.note是规范原文里的建议,不是模型编的。curl可以直接复制到终端跑,填上自己的 token 即可。
${AUTH_TOKEN} 永远是占位符。服务端不知道、也不需要知道你的真实 token——
这不是承诺,是架构决定的结果。
本地执行器
执行器是一个不含任何规范数据的哑执行器:它不知道 Amazon 有哪些 API, 只会执行一份别人给它的请求描述。所有智能都在服务端,所以它只有几十 KB、零第三方依赖。 不装也能用——请求描述里自带的 curl 效果完全一样,只是重试、翻页、token 刷新要你自己来。
默认路径。让 agent 调 get_executor 工具,它会拿到文件清单与内容,逐个写入本地。
复制 request 返回里的那条 curl,填上自己的 token,直接跑。
curl -sS -X GET \
"https://sellingpartnerapi-na.amazon.com/orders/v0/orders?MarketplaceIds=ATVPDKIKX0DER" \
-H "x-amz-access-token: $LWA_ACCESS_TOKEN" \
-H "user-agent: my-app/1.0 (Language=Python/3.12)" \
-H "accept: application/json"
get_executor 返回什么
{
"version": "1.4.2",
"installPaths": {
"claude-code": "~/.claude/skills/amazon-exec/",
"codex": "~/.agents/skills/amazon-exec/",
"default": "~/.agents/skills/amazon-exec/"
},
"files": [
{ "path": "SKILL.md", "content": "---\nname: amazon-exec\n..." },
{ "path": "scripts/auth.py", "content": "#!/usr/bin/env python3\n..." }
],
"sha256": "a3f1…",
"totalBytes": 48213,
"postInstall": "安装完成后请重启 agent 会话,Skill 在启动时扫描才会生效。"
}
curl | sh 是供应链攻击的经典形态。返回内容意味着每一个字节都对你可见、可审计、
可被客户端拦截确认——工具本身不执行任何写入,写文件是模型在你眼皮底下做的。
执行器负责的四件事
- LWA token 刷新:access token 只有 1 小时,自动续;需要 RDT 的受限操作自动换 RDT。
- 429 退避与重试:按 operation 在本地记账,发请求前先做令牌桶预判,主动排队而不是撞到 429 再退。
- 自动翻页:NextToken / cursor 两种模式,
--paginate n控制最多翻几页。 - 多店铺连接:凭证与状态按连接隔离,见多店铺连接。
Agent Skills 是开放标准,但安装目录还没统一:Claude Code 用
~/.claude/skills/,Codex 及多数其他工具用 ~/.agents/skills/。
Codex 的扫描顺序是:当前目录逐级向上到 repo 根的 .agents/skills,
然后 $HOME/.agents/skills、/etc/codex/skills、内置。
多店铺连接
跨店误操作(改错店的价格、库存、广告预算)是这个产品最危险的失败模式,代价是真金白银。 所以执行器的第一条规则是:没有默认连接。
--connection <别名>。
不写就拒绝执行,并列出可选连接让你挑。这一条拦下的事故比其他三条加起来都多。
连接管理命令
exec.py connect --alias us-main --kind sp-api # 走 LWA 授权,凭证存 keychain
exec.py list # 列出所有连接
exec.py show --connection us-main # 详情(凭证脱敏)
exec.py verify --connection us-main # 连通性自检
exec.py disconnect --connection eu-store # 删除连接与凭证
# 执行一个请求描述
exec.py --connection us-main --paginate 10 '<request-json>'
exec.py --connection us-main --dry-run '<request-json>' # 只打印最终请求,不发出
四道防线
- 无默认连接不指定就拒绝执行,并列出候选。
- 每次执行回显当前连接
[connection: us-main | SP-API NA | seller A1B2C3D4E5 | ATVPDKIKX0DER]—— 模型和人都看得见。 - 写操作二次确认非 GET 请求默认进入确认流程,打印完整请求与目标连接,要求显式
--yes。可对特定连接预授权--trust-writes,且控制台可见。 - marketplace 一致性校验请求里的
marketplaceId若不在该连接声明的列表中,直接拒绝:A1PA6795UKMFR9 (DE) 不属于连接 us-main (US, CA)。
状态在哪
每个连接的状态严格隔离在自己的子目录下,这是防止跨店串数据的第一道结构性保障。
~/.amazon-mcp/
├── profiles.json 连接元数据(明文,只有别名 / region / profileId / marketplaces)
├── credentials.enc AES-256-GCM 密文,密钥在 OS keychain
├── state/
│ ├── us-main/ cursor.json · quota.json · seen.db
│ ├── eu-store/
│ └── ads-us/
├── cache/tokens.json 仅 access token(1 小时),加密,可随时丢弃
└── logs/exec.log 脱敏后的执行日志
服务端不需要知道这些:request 是纯函数,区域 / marketplace / profileId 全部由执行器在本地填充。
我们不知道你有几个店、店在哪、卖什么。
认证与密钥
先分清两套完全无关的凭证:服务凭证用来访问我们的 MCP(我们签发); Amazon 凭证用来访问 Amazon API(Amazon 签发,存在你本地,我们永不接触)。 这一节只讲前者。
link_account」,
它会给出一个链接;用手机打开、微信扫一下码,agent 就会自动取回密钥并写进配置——
全程不用复制粘贴任何一串字符。
| OAuth 2.1(交互式) | Personal Access Token(CI / 容器) | |
|---|---|---|
| 获取方式 | 客户端自动弹浏览器授权,点一次同意 | 控制台生成,复制粘贴 |
| 适用场景 | 交互式 agent | CI、headless、容器 |
| 生命周期 | access token 短期 + refresh | 长期,可设过期 |
| 吊销 | 控制台一键 | 控制台一键 |
| 作用域 | spapi:read / ads:read,一次同意授予两个 | 可选作用域 |
用 PAT 直接调
POST https://mcp.sp-api.net/mcp/sp-api
Authorization: Bearer sk_live_xxx
Content-Type: application/json
MCP-Protocol-Version: 2026-07-28
Mcp-Method: tools/call
Mcp-Name: spapi_op
{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"spapi_op","arguments":{"ref":"orders-v0:getOrders"}}}
- 一台机器 / 一条流水线用一把,出事时可以精确吊销,不影响其他环境。
- 不要提交进代码仓库,也不要贴进对话记录——真实威胁不是「恶意 AI」,而是凭证意外进入模型上下文。
- 定期看「最后使用」与「来源 IP」,长期不用的直接吊销。
额度与限制
计价单位是 MCP 调用次数:一次 tools/call 记 1 次,
无论返回的是 400 字节还是 8KB。两个 endpoint 共享同一个额度池。
超额是渐进的,不会突然断
| 用量 | 行为 |
|---|---|
| < 80% | 正常返回,用量随结果的 _meta 回显,不打扰主流程 |
| ≥ 80% | 提醒 _meta 标记 warning,控制台与邮件提醒 |
| ≥ 95% | 追加警告 结果末尾追加一行文字警告,模型能直接看到 |
| ≥ 100% | 宽限 进入 10% 宽限额度,继续服务,但每次都警告 |
| ≥ 110% | 停止 返回 isError: true,文案里明确写「请勿重试」 |
- 自动去重:60 秒内同一租户、同一工具、同一组参数的重复调用只计 1 次。agent 重试非常常见,重复扣费不合理。
- 字节不是计价单位,只是防批量导出的软锁:单次响应硬上限 32KB,月度字节配额 = 调用配额 × 8KB。正常使用平均约 3KB/次。
- 突发保护独立于月度额度(按档位 30–500 次 / 10 秒),防的是失控 agent 的死循环,触发后数秒自动恢复。
配额用尽是业务状态而非协议错误,所以不返回 HTTP 429(客户端会自动重试)、 也不返回 JSON-RPC error(模型可能读不到内容),而是返回一条模型看得懂的工具结果。 完整档位见定价页。
常见错误排查
下面这些都不是猜的,是规范里查得到的确定答案。遇到问题先对照这张表。
| 症状 | 最可能的原因 | 怎么修 |
|---|---|---|
| 工具没出现 | agent 会话没重启,或配置写错了文件 | 重启会话。Claude Code 可用 claude mcp list 确认状态是 connected。 |
| 401 调我们的 MCP | 带了已吊销 / 过期的 PAT。不带任何凭证反而是可以的 | 在控制台 · 密钥确认状态,必要时新建一把;或者干脆去掉 Authorization 头用匿名额度。 |
| 401 调 Ads API | 两套鉴权头混用——这是 Ads 401 的头号来源 |
传统体系:Amazon-Advertising-API-ClientId + Amazon-Advertising-API-Scope(profileId);
新版 v1:Amazon-Ads-ClientId + Amazon-Ads-AccountId。
不可混用。准确字符串用 ads_show <operationId> 取,别从相邻端点复制。
|
| 401 头名看着没错 | Amazon-Ads-Account-ID(多一个连字符,4 个 operation 在用)与 Amazon-Ads-AccountId 是两个不同的头 |
按 ads_show 返回的原文照抄。(ClientID 与 ClientId 只是大小写差异,HTTP 视为同一个头,无害。) |
| 403 SP-API | 应用未被授权该 operation 所属的 role,或 access token 过期(1 小时) | 检查开发者中心里应用申请的 role;access token 过期请刷新——执行器会自动做。 |
| 403 缺 RDT | 涉及 PII 的受限操作需要 Restricted Data Token | RDT 放在同一个 x-amz-access-token 头里(不是另开一个头),同样 1 小时有效。请求描述里的 auth.rdtRequired 会标出来。 |
| 429 频繁被限流 | 循环调用了低限流接口。getOrders 只有 0.0167 req/s(约每分钟 1 次) |
先 spapi_op 看 rateLimit;低于 0.05 req/s 的接口不要循环,改用 Reports API。执行器会本地记账、主动排队。 |
| 415 Ads 请求 | Content-Type / Accept 写成了 application/json |
Ads 大量接口用带版本的厂商媒体类型,如 application/vnd.spCampaign.v3+json。以 ads_show 返回的为准。 |
| 400 缺必填参数 | 规范里的 required 项没给 | 看请求描述里的 validation.missing——它在发请求之前就告诉你缺什么。 |
| 404 规范里找不到端点 | Amazon 公开的规范目录并不完整 | 查 ads_gap:有 80 个端点 Amazon 自己在调、却没有任何公开 OpenAPI 规范(最大一块是 AMC)。规范里没有,不等于不存在。 |
| deprecated | 用了已废弃的 operation 而不自知 | spapi_op 会返回 deprecated: true 与 successor。模型看到必须说出来。 |
| 400 HeaderMismatch | 路由头与 body 不一致(-32020) |
Mcp-Method 必须等于 body 的 method,Mcp-Name 必须等于 params.name;tools/list 不要带 Mcp-Name。 |
| 额度 返回 isError | 月度调用额度(含 10% 宽限)已用尽 | 返回文案里写明「请勿重试」,_meta 里 retryable: false。去计费页升级或等待重置。 |
给 AI 读的文档 llms.txt
本页是写给人看的。给 agent 看的那份在 /llms.txt——纯 Markdown、无导航、无营销,
一页说完接入方式、工具清单与调用约定。/llm.md 是同一份内容。
最省事的用法:把地址丢给你的 agent,让它自己去读,比你转述可靠得多。
https://mcp.sp-api.net/llms.txt
协议版本
主线是 MCP 2026-07-28:无状态,没有 initialize 握手,也没有
Mcp-Session-Id。同时兼容 2025-11-25 / 2025-06-18 / 2025-03-26,
客户端按自己支持的版本发即可。
MCP-Protocol-Version / Mcp-Method / Mcp-Name
三个路由头是强制的,且必须与 body 一致,否则返回 400 与 JSON-RPC
-32020 HeaderMismatch。网关据此计量与路由,不需要解析 body。
拉 tools/list 时不要带 Mcp-Name。
哪些流量到我们、哪些到 Amazon
服务部署在国内,直接访问即可,不需要任何代理。传输的只有规范查询与请求描述, 单次响应通常 2–8KB,对网络质量要求很低。
- 普通 HTTPS,没有长连接、没有 WebSocket、没有 SSE 依赖
- 无状态设计,断线重连不丢上下文
server/discover与tools/list可被缓存 24 小时
API 调用发生在你本地,所以需要你的机器能访问 Amazon 的接口域名。 这条链路我们完全不参与,也无法代为解决。
- LWA 令牌:
api.amazon.com - SP-API:
sellingpartnerapi-na / -eu / -fe .amazon.com - Ads:
advertising-api / -eu / -fe .amazon.com
延迟参考
| 操作 | 典型耗时 | 响应体积 | 说明 |
|---|---|---|---|
search 短语 | 11 ms | 5.1 KB | 纯服务端 CPU,命中缓存后更快 |
op 精确 | 41 ms | 4.3 KB | 含 $ref 内联展开 |
show 单操作 | 94 ms | 1.9 KB | 最慢的一类查询,仍在百毫秒内 |
| Amazon API 调用 | 0.2–3 s | — | 在你本地发生,取决于你的网络 |