cn-shop-mcp
合规的淘宝 / 京东 / 拼多多商品搜索与跨平台比价 MCP Server(本机 stdio,Python)。
- 合规:只调用三家官方开放平台 API(淘宝联盟 / 京东联盟 / 多多进宝),不做页面抓取、不做 UI 自动化。
- 能力:搜索、比价、转链(淘口令 / 拼多多短链 / 京东短链)、"好价合集"群发文案;下单/付款仍在各平台 App 完成。
- 工具:共 11 个,见下方工具一览。
安装
方式一:uvx(推荐,无需克隆代码)
uvx cn-shop-mcp
MCP 客户端里配置(以 opencode 为例,完整示例见客户端配置):
"cn-shop-mcp": {
"type": "local",
"command": ["uvx", "cn-shop-mcp"],
"environment": { "CN_SHOP_MCP_ENV_FILE": "D:/path/to/你的/.env" }
}
.env查找顺序:① 环境变量CN_SHOP_MCP_ENV_FILE指定路径 → ② 当前工作目录(含上级)→ ③ 包目录相对(源码运行时自动生效)。
方式二:源码运行(开发用)
uv sync
copy .env.example .env # Windows(macOS/Linux: cp .env.example .env)
# 编辑 .env,按下方指南填入三家凭证
验证:uv run python scripts/live_smoke.py 电脑桌(未配置任何平台时退出码为 2 并提示缺失项)。
凭证配置表
| 变量 | 平台 | 说明 |
|---|---|---|
TB_APP_KEY / TB_APP_SECRET |
淘宝 | 淘宝客应用(open.taobao.com)的 AppKey / AppSecret |
TB_ADZONE_ID |
淘宝 | 淘宝联盟推广位 ID(adzone_id,mm_xxx_xxx_数字 中的最后一段数字) |
JD_APP_KEY / JD_APP_SECRET |
京东 | 京东联盟应用(jos.jd.com)的 AppKey / AppSecret |
JD_SEARCH_MODE |
京东 | jingfen(频道精选,免权限、无关键词,默认)或 keyword(关键词搜索,需接口权限) |
PDD_CLIENT_ID / PDD_CLIENT_SECRET |
拼多多 | 多多客应用(open.pinduoduo.com)凭证 |
PDD_PID |
拼多多 | 多多进宝推广位 PID |
SHOP_MCP_QPS |
全部 | 可选,每平台每秒请求上限,默认 1 |
CN_SHOP_MCP_ENV_FILE |
全部 | 可选,显式指定 .env 文件路径(uvx 安装运行时推荐配置) |
任一家未配置:该平台工具返回 degraded: not_configured 与修复提示,其余平台不受影响。
三家账号注册与开通
淘宝联盟
- 打开 https://pub.alimama.com(用淘宝账号登录),完成实名认证与媒体备案;
- 创建推广位,得到推广位 ID(
adzone_id); - 打开 https://open.taobao.com 创建应用,申请"淘宝客【推广者】"权限(物料搜索接口
taobao.tbk.dg.material.optional),获得 AppKey / AppSecret; - 填入
.env:TB_APP_KEY/TB_APP_SECRET/TB_ADZONE_ID。
京东联盟
- 打开 https://union.jd.com(用京东账号登录),完成实名认证;
- 在 https://jos.jd.com(宙斯开发者中心)/ 联盟开放平台创建应用,获得 AppKey / AppSecret;
- 关键词搜索接口(
jd.union.open.goods.query)可能需要为应用申请权限;未获批前: 在.env设JD_SEARCH_MODE=jingfen(现为默认),用"京粉精选"频道先跑通(无关键词,返回频道精选商品); - 填入
.env:JD_APP_KEY/JD_APP_SECRET。
多多进宝(拼多多)
- 打开 https://jinbao.pinduoduo.com,手机号注册并实名;
- 创建推广位,得到 PID;
- 到 https://open.pinduoduo.com 创建(多多客角色)应用,获得
client_id/client_secret; - 按官方指引用
pid+custom_parameters完成搜索接口备案(未备案会报60001); - 填入
.env:PDD_CLIENT_ID/PDD_CLIENT_SECRET/PDD_PID。
客户端配置
opencode
写入 ~/.config/opencode/opencode.json(或项目根 opencode.json):
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"cn-shop-mcp": {
"type": "local",
"command": ["uvx", "cn-shop-mcp"],
"environment": { "CN_SHOP_MCP_ENV_FILE": "D:/work/cn-shop-mcp/.env" },
"enabled": true
}
}
}
源码方式运行的话,command 换成
["uv", "--directory", "你的仓库路径", "run", "cn-shop-mcp"]即可。
验证:opencode mcp list 应出现 cn-shop-mcp。
Claude Desktop / Cherry Studio(mcpServers 形状)
{
"mcpServers": {
"cn-shop-mcp": {
"command": "uvx",
"args": ["cn-shop-mcp"],
"env": { "CN_SHOP_MCP_ENV_FILE": "D:/path/to/你的/.env" }
}
}
}
工具一览
| 工具 | 参数 | 说明 |
|---|---|---|
search_taobao |
keyword, price_min, price_max, coupon_only, sort, page, page_size | 淘宝联盟物料搜索 |
search_jd |
同上 | 京东联盟搜索(或 jingfen 频道) |
search_pdd |
同上 | 多多进宝商品搜索 |
compare_prices |
keyword, price_min, price_max, top_n_per_platform | 三平台并行搜索 + 启发式同款分桶(含置信度与价差) |
platform_status |
无 | 各家凭证与最近一次调用状态(不回显密钥) |
create_taobao_tpwd |
url, text? | 淘口令生成(手机复制打开淘宝领券下单) |
taobao_promotions |
kind(大额店铺券/天猫店铺券/券券补/有价券), page | 联盟『权益物料精选』神券(含券面额、领券链接、推荐商品) |
create_jd_short_link |
url | 京东转链:商品链接 → 推广短链(导购媒体走 byunionid,需 .env 配 JD_UNION_ID;网站/APP 走 common.get,配 JD_SITE_ID) |
create_pdd_link |
goods_sign(即搜索结果的 item_id) | 拼多多转链:→ p.pinduoduo.com 短链 |
query_jd_orders |
hours?, order_type? | 查自己的京东联盟订单(自动按1小时窗口分段;1=下单 2=完成 3=结算) |
build_deals_digest |
keyword, platforms?, n_per_platform?, price_max? | 一键生成"好价合集"群发文案(自动配口令/短链) |
sort:relevance(默认)/ sales_desc / price_asc / price_desc / commission_desc。
价格筛选(price_min / price_max)按券后价(有券可用时)判断;coupon_only 仅保留有券商品。京东/拼多多为页内本地筛选。
示例对话:"帮我搜一下 80cm 宽的电脑桌,对比淘宝京东拼多多的价格。"
排障
| 现象 | 处理 |
|---|---|
degraded: not_configured |
按 .env.example 补全对应平台凭证 |
bad_response(非 JSON) |
可能被风控拦截,稍后重试 |
| 淘宝 code 2 / 4 | 检查 TB_ADZONE_ID 是否正确、有效,AppKey 是否匹配 |
| 淘宝 code 1911 | 该 AppKey 无对应物料场景权限(本工具使用默认物料 2836) |
| 京东 403 | 为应用申请该接口权限,或设 JD_SEARCH_MODE=jingfen |
| 京东 15 / 88 | 接口未开通:到京东开放平台『控制中心→应用管理→接口管理』申请该接口权限 |
| 京东 2000 | 未实名或超出当日调用额度:到 union.jd.com 完成实名/申请提额 |
| 拼多多 60001 | 到多多进宝完成 pid 备案(pid + custom_parameters) |
| 排序不符预期 | 京东/拼多多为页内本地排序;淘宝价格排序为本地、销量/佣金为原生 |
局限(如实说明)
- 跨平台没有互通商品 ID:
compare_prices的同款分组是启发式线索(给出高/中/低置信度),不保证同款,请以人工确认为准。 - 搜索范围为联盟物料库:未参加联盟推广计划的商品不会出现在结果里。
- 拼多多进宝库不覆盖 3C 大件/核心配件(实测返回 0 条、非报错):
手机、平板、固态硬盘、内存条、显卡、CPU、主板、显示器、键鼠、机箱、整机等;周边配件正常(移动硬盘/U盘/路由器/耳机/充电宝/散热器/数据线等)。此类商品请用淘宝搜索或各平台网页/APP 查价。 - 京东
jingfen模式不支持关键词(返回频道精选),且会标注 degraded 提示。 - 只读:下单/付款请到各平台 App 完成。
开发
uv run pytest # 全量离线测试
uv run python scripts/live_smoke.py 关键词 # 手动冒烟(需真实凭证)
Metadata
Release files for cn-shop-mcp 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| cn_shop_mcp-0.1.0.tar.gz | 114.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| cn_shop_mcp-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 142.4 kB
Release files / cn_shop_mcp-0.1.0.tar.gz
| Download URL | cn_shop_mcp-0.1.0.tar.gz |
|---|---|
| Size | 114.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5a592b5e0dfaf893551bb506dfac510ad436da7927d2ff2537f758de3db644b2
|
|
BLAKE2b-256 checksum How to use checksums |
eaf19406fc08abd99640aeb78c04c57d600e19977d93bd8cd904b9cbb41885e1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / cn_shop_mcp-0.1.0-py3-none-any.whl
| Download URL | cn_shop_mcp-0.1.0-py3-none-any.whl |
|---|---|
| Size | 28.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
bc69dbf4b449c00d888a4272d72b7a2d50980ccc5fd97c92909af2aa2a72c0cc
|
|
BLAKE2b-256 checksum How to use checksums |
0fe44b41f895eed719bda5544ba5b54766f117b946ce0dbcaf47607e578a2475
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|