ru-marketplace-mcp/dsh

66Star10Fork5Issue2Watching

DSH 插件包,向宿主注入 14 个技能和 2 个按需启用的 MCP 客户端行,用于查询俄罗斯与中国电商平台的价格、库存、评论和跨平台比价。

语言
Python
License
MIT
分支
main
aliexpressavitocitilinkclaudedetsky-mirdnsdsh-pluginlamoda

安装

$ dsh plugin --profile web add github:Vladimir-Human/ru-marketplace-mcp/dsh

在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程

一句话定位

这是 ru-marketplace-mcp 仓库针对 DeepSeek Harness 的插件包。它把 14 个 AI 技能和 2 个 MCP 客户端行注入到 DSH,让 AI 助手能够查询 Wildberries、Ozon、Yandex Market、Detsky Mir、Avito、Taobao、Megamarket、Lamoda、DNS、Citilink、AliExpress、MPStats 这 12 个俄罗斯/中国电商平台的价格、库存、评论和卖家资质,并支持一键跨平台比价。

核心能力

  • 注入 14 个技能(按平台拆分 + 跨平台比价 + 统一服务),每个技能都是人话写成的"使用说明",让 AI 自动判断该调哪个工具
  • 默认就挂载"轻量比价"模式(2 个工具,每个请求约 0.9k token),一句话问"哪里买更便宜"就能用
  • 可选切换到"完整统一服务"模式(36 个工具,每个请求约 13.6k token),覆盖查询、详情、评论、卖家资质、销量分析等
  • 提供跨平台比价工具:一次调用同时查询 Wildberries、Ozon、Yandex Market 等 10 个可搜索平台,按价格排序并给出价差
  • 让 AI 无需登录就能查询 Wildberries、Yandex Market、Detsky Mir 和 Lamoda 商品卡(匿名 HTTP 通道)
  • 通过本地 Chrome(CDP 协议)读取 Ozon、Avito、Taobao、Megamarket、Lamoda 搜索、DNS、Citilink、AliExpress 等有反爬封锁的平台
  • 提供 MPStats 付费插件接口(可选),拉取 Ozon/WB 商品的近 30 天销量曲线、库存拆分和卖家身份

技术实现

  • 语言: Python 3.12+(服务端运行时),通过 uv 启动进程
  • 关键依赖: fastmcp(实现 MCP 协议)、pydantic(数据模型)、uv 包管理器(依赖解析与进程启动)、Playwright(CDP 回落通道)
  • 架构模式: DSH 插件通过 dsh/cordis.patch.yml 注入 3 行配置——1 个 @deepseek-ai/dsh-skill-filesystem(挂载 14 个技能目录)+ 2 个 @deepseek-ai/dsh-mcp-client(互斥的 compare 与 full 客户端行),MCP 服务通过 uv run --frozen --directory <path> 启动 Python 进程
  • 入口文件: dsh/package.json 声明 bundle patch,dsh/cordis.patch.yml 包含完整注入逻辑,dsh/skills/ 下 14 个 SKILL.md 文件提供技能描述

适用场景

普通用户在 DSH 里需要查俄罗斯或中国电商平台的价格、库存、评价,或者要对比多家平台谁更便宜、想查某个卖家是否正规——这一切都不需要手动打开网页。DSH 的 AI 助手可以根据用户的自然语言提问自动判断调哪个平台的工具。例如做代购、海淘或价格监控时,可以用比价工具一次拿到 10 个平台的报价;做电商分析时,可以挂 full 模式获取评论、卖家资质和销量数据。

前置依赖与兼容性

依赖最低版本说明
DSH未声明dsh/package.json 未声明 engines 字段
Python3.12+父仓库 pyproject.toml:6 声明 requires-python
uv最新版用于 uv run --frozen --directory <克隆路径> 启动 MCP 服务
平台跨平台macOS / Windows / Linux 均可启动 Python 进程
原生模块纯 Python 包,依赖通过 uv 解析;Playwright/curl_cffi 为 Python 依赖,不属于 Node.js 原生模块

安装方式

dsh plugin --profile web add github:Vladimir-Human/ru-marketplace-mcp/dsh

安装完后还需要:

  1. 把仓库克隆到本机:git clone https://github.com/Vladimir-Human/ru-marketplace-mcp.git && cd ru-marketplace-mcp && uv sync --frozen
  2. 设置环境变量 RU_MARKETPLACE_MCP_DIR 指向克隆目录
  3. 重启 DSH profile

想启用完整 36 工具服务(而非默认的 2 个比价工具),再设置 RU_MARKETPLACE_MCP_FULL=1 即可。

配置项

配置类型说明默认值
RU_MARKETPLACE_MCP_DIR路径环境变量指向本地克隆的 ru-marketplace-mcp 目录,同时充当是否启用 MCP 服务的开关未设置
RU_MARKETPLACE_MCP_FULL开关环境变量设为 1 切换为完整 36 工具模式;未设置走轻量比价模式(2 个工具)未设置
MPSTATS_MP_AUTHJWT 字符串MPStats 付费账号的 mp_auth cookie 值(原始 JWT,不带 mp_auth= 前缀);未设置时 MPStats 工具返回 auth_missing,其他平台不受影响未设置
CHROME_CDP_HOST主机地址CDP 客户端Chrome 远程调试监听地址,Ozon/Avito 等需要 CDP 的平台用127.0.0.1
CHROME_CDP_PORT端口号Chrome 远程调试端口号9222
CHROME_STEALTH0 或 1是否启用 Chrome 反检测模式(Windows 上把窗口藏到屏幕外)1
CHROME_HEADLESS0 或 1是否以无头模式启动 Chrome(反爬系统能识别无头模式,谨慎开启)0
CHROME_BINARY路径Chrome/Chromium 可执行文件路径自动按平台探测
CHROME_SCRAPING_PROFILE路径专门的 Chrome 配置文件目录(避免污染日常 profile)按平台默认
COMPARE_SOURCE_TIMEOUT秒数跨平台比价时单个平台的最长等待时间45

常见问题

Q: 安装后只看到 14 个技能,没看到比价工具,怎么办?

A: 这是正常状态。2 个 MCP 客户端行默认关闭,只在设置了 RU_MARKETPLACE_MCP_DIR 之后才启用其中之一。设置后重启 DSH profile,技能列表里会再出现 compare_prices(轻量模式)或 wb_* / ozon_* 等 36 个工具(完整模式)。

Q: compare 模式和 full 模式能同时开吗?

A: 不能。两个客户端行互斥——disabled 条件里一头是 !process.env.RU_MARKETPLACE_MCP_FULL、另一头是 !!process.env.RU_MARKETPLACE_MCP_FULL,所以同一时刻只会激活一个。需要切换时改环境变量后重启 profile。

Q: 报 "uv: command not found" 怎么办?

A: 系统里没装 uv 包管理器。按 https://docs.astral.sh/uv/ 指引安装最新版即可。

Q: 一定要克隆仓库吗?能不能用 pip 装?

A: DSH 的 patch 通过 uv run --frozen --directory <路径> 启动服务,必须有本地克隆路径。仓库文档也发布过 GHCR 镜像(ghcr.io/vladimir-human/ru-marketplace-mcp),可以替换 patch 里的命令改用 Docker 镜像。

Q: 比价结果出现 price_rub: null,是 bug 吗?

A: 不是。null 表示"该平台没有这个商品的价格数据"——它可能已经下架、库存为空,或者卖家没填价格。不会是 0 元。想知道是哪个平台"缺席",可以调用 marketplace_sources 工具,它会列出哪些平台加载成功、哪些因依赖缺失被跳过。

Q: 部分平台返回 blocked 怎么办?

A: Avito、Ozon、Megamarket 等平台会按 IP 屏蔽数据中心 IP。需要从俄罗斯住宅 IP 访问,并放慢请求节奏(Avi­to 在短时间内多次查询会被直接拉黑)。marketplace-mcp doctor 自检脚本会告诉你当前环境被哪些平台屏蔽。

Q: 怎么卸载?

A: 执行 dsh plugin --profile web remove ru-marketplace-mcp-dsh,然后重启 profile。本地克隆的 ru-marketplace-mcp 仓库可以保留也可以删除,不影响 DSH。

Q: 用 full 模式时 AI 提示里的 token 占用很大?

A: 是的。每个请求约 13.6k token,因为 DSH 会把 36 个工具的 schema 全部塞进会话上下文。如果只是偶尔比价,建议用 RU_MARKETPLACE_MCP_FULL=1 临时切换后再切回。

上手难度

入门 — 14 个技能本身就是"使用说明",AI 助手能直接判断该调哪个工具;普通用户只需要会配置环境变量即可。日常使用够用,但要在 CDN 封装或容器中部署 CDP 通道需要进阶水平。

已知问题与限制

  • Wildberries 搜索结果的价格比商品卡片实际价格略高(2026-07-28 测量:60 571 vs 60 275),如果两个候选商品的价差在 1% 以内,需要用 wb_card 再确认一次
  • Wildberries 搜索翻到末尾会循环返回第一页(HTTP 200,无报错),分页时按 nm_id 去重
  • complete 模式每次请求约 13.6k token(36 个工具 schema),建议按需启用;compare 模式仅 0.9k token
  • Avito、Megamarket、Taobao、AliExpress、DNS、Citilink 平台需要外部 Chrome 通过 CDP 协调;Chrome 没启动时这些功能完全不可用
  • 俄罗斯以外或数据中心的 IP 上,Ozon/Avito 等平台会直接拒绝请求,必须从俄罗斯住宅 IP 访问
  • Detsky Mir 没有文本搜索 API,比价结果会跳过它,需要单独用 detmir_category 按分类浏览
  • Yandex Market 的 Plus 会员价(比日常价低 25-30%)永远不会参与比价排序,避免"虚构便宜"
  • Taobao 价格以人民币(CNY)报出,price_rub 字段为 null,不会进入卢布价排序——CNY 转 RUB 需要手动按当日汇率换算,插件不会硬编码汇率
  • WB 评论和提问按 imt_id(聚合商品 ID)索引而非 nmId(单 SKU ID),必须先用 wb_root_info(nmId) 拿到 imt_id 再查评论