Wildberries API MCP Server
Wildberries API MCP 服务器使用指南
请将上方徽章中的
ВАШ_ЛОГИН替换为发布仓库后您的 GitHub 账户/组织名称。
目录
简介
Wildberries API MCP 服务器是一个中间服务,用于简化与 Wildberries API 的交互。它提供统一的接口来访问 Wildberries API 中的分析数据、推广统计和其他信息。
MCP 服务器具有以下功能:
简化对 Wildberries API 各个端点的调用
处理错误和请求频率限制
统一响应格式
提供集中式身份验证
安装与运行
必要前提
Node.js(14 或更高版本)
npm 或 yarn
Docker 和 Docker Compose(可选,用于容器化)
具有相应权限的 Wildberries API 令牌
方法 1:通过 Node.js 直接安装
# Клонирование репозитория
git clone https://github.com/yourusername/wb-api-mcp-server.git
cd wb-api-mcp-server
# Установка зависимостей
npm install
# Запуск сервера
npm start服务器默认在 3000 端口启动。您可以通过设置环境变量 PORT 来指定其他端口:
PORT=8080 npm start环境变量
将 .env.example 复制为 .env,如有需要可进行编辑:
cp .env.example .env变量 | 默认值 | 描述 |
|
| 服务器监听的端口 |
|
|
|
|
| 每个 IP 每分钟的最大请求数 |
测试与代码检查
npm test # запускает Jest + Supertest
npm run lint这两个步骤会在每次 push 和 pull request 时自动在 GitHub Actions 中执行(参见 .github/workflows/ci.yml)。
方法 2:使用 Docker
# Создание Docker-образа
docker build -t wb-api-mcp-server .
# Запуск Docker-контейнера
docker run -p 3000:3000 -d --name wb-api-mcp wb-api-mcp-server方法 3:使用 Docker Compose
cp .env.example .env
# Запуск сервера с Docker Compose
docker-compose up -d
# Остановка сервера
docker-compose down方法 4:使用 GitHub Container Registry 中的现成镜像
每次推送到 main 分支时,GitHub Actions 都会自动构建并发布镜像(参见 .github/workflows/docker-publish.yml):
docker pull ghcr.io/ВАШ_ЛОГИН/wb-api-mcp-server:latest
docker run -p 3000:3000 -d --name wb-api-mcp ghcr.io/ВАШ_ЛОГИН/wb-api-mcp-server:latest验证安装
您可以通过向健康检查端点发送请求来验证服务器是否正常运行:
curl http://localhost:3000/health您应该会收到类似如下的响应:
{
"status": "ok",
"timestamp": "2023-05-21T12:34:56.789Z"
}可用的 API 工具
MCP 服务器提供以下端点组:
1. 推广统计
POST /api/adv/fullstats - 广告活动统计
GET /api/adv/auto/stat-words - 按关键词聚类分组的自动广告活动统计
GET /api/adv/stat/words - 按关键词分组的广告活动统计
GET /api/adv/stats/keywords - 自动广告活动的关键词统计
POST /api/adv/stats - 媒体广告活动统计
2. 销售漏斗
POST /api/nm-report/detail - 获取指定期间内商品卡片的统计信息
POST /api/nm-report/detail/history - 按天获取商品卡片的统计信息
POST /api/nm-report/grouped/history - 获取按类别、品牌和标签分组的商品卡片统计信息
3. 搜索查询
POST /api/search-report/report - 获取搜索查询主报告数据
POST /api/search-report/table/groups - 获取搜索查询组的分页信息
POST /api/search-report/table/details - 获取组内商品的分页信息
POST /api/search-report/product/search-texts - 获取商品的搜索文本
POST /api/search-report/product/orders - 获取商品的搜索文本对应的订单和排名
4. 库存报告
POST /api/stocks-report/products/groups - 获取库存报告的商品组数据
POST /api/stocks-report/products/products - 获取库存报告的商品数据
POST /api/stocks-report/products/sizes - 获取库存报告的尺码数据
POST /api/stocks-report/offices - 获取库存报告的仓库数据
5. 卖家分析 CSV 报告
POST /api/nm-report/downloads - 创建 CSV 报告
GET /api/nm-report/downloads - 获取报告列表
POST /api/nm-report/downloads/retry - 重新生成报告
GET /api/nm-report/downloads/file/:downloadId - 获取报告文件
6. EVIRMA PRO 数据导入
POST /api/evirma/import/keywords-report — 导入「按关键词分组的广告活动统计」报告(multipart/form-data,字段
file,.xlsx/.xls)POST /api/evirma/import/daily-zone-stats — 导入「按天和展示区域分组的广告活动统计」报告(multipart/form-data,字段
file,.xlsx/.xls)
导入 EVIRMA PRO 报告
EVIRMA PRO 是一款付费 Chrome 扩展(699 卢布/月),提供 Wildberries 广告的增强分析功能,包括 WB「Джем」官方订阅数据。EVIRMA 没有公共 API——数据只能从插件界面手动导出。此服务器接收该导出文件,并将其转换为结构化的 JSON。
如何获取文件
在 EVIRMA PRO 中打开按关键词分组的广告活动统计。
导出表格(导出按钮仅在 PRO 版本中可用)。
将生成的
.xlsx文件上传到下面的端点。
请求示例
curl -X POST http://localhost:3000/api/evirma/import/keywords-report \
-H "api-key: ВАШ_ТОКЕН_WILDBERRIES_API" \
-F "file=@Экспорт_..._cmp-advert-keywords-stats_....xlsx"响应格式
每一行(关键词/聚类)都会返回带有分组指标的数据——与 EVIRMA 导出文件中的分组方式相同:
{
"error": false,
"source": "evirma-pro-keywords-report",
"rowCount": 421,
"data": [
{
"cluster": "5w40",
"traffic": { "impressions": 250, "clicks": 9, "ctr": 3.6, "spend": 184, "...": "..." },
"basketsAd": { "baskets": null, "cpl": null, "...": "..." },
"ordersAd": { "orders": null, "revenue": null, "...": "..." },
"jemForecast": { "baskets": null, "orders": null, "...": "..." },
"jemTraffic": { "avgPosition": 98, "visibility": 100, "...": "..." },
"jemBaskets": { "baskets": null, "...": "..." },
"jemOrders": { "orders": null, "revenue": null, "...": "..." }
}
]
}jemForecast、jemTraffic、jemBaskets、jemOrders 组包含来自 WB「Джем」订阅的数据(所有流量,不仅限于广告流量)——仅当您在 Wildberries 上订阅了「Джем」服务时,这些数据才会出现在导出文件中。
重要提示: 列映射(lib/evirmaKeywordsParser.js)与截至 2026 年 8 月 EVIRMA 特定报告的确切结构相关联。如果 EVIRMA 开发人员更改了导出格式,则需要更新此文件中的 COLUMN_MAP 以适配新结构。
「按天和展示区域分组的广告活动统计」报告
POST /api/evirma/import/daily-zone-stats 解析按天和展示区域(搜索/目录)细分的广告统计报告。每个时间段(整个期间的小计 + 每天一个)都有三组指标——ad(广告)、adEfficiency(广告效果:购物车、订单、广告支出占比)和 total(商品的所有流量——广告 + 自然流量)——以及可选的 zones.search / zones.catalog 细分(如果当天有该区域的数据)。
curl -X POST http://localhost:3000/api/evirma/import/daily-zone-stats \
-H "api-key: ВАШ_ТОКЕН_WILDBERRIES_API" \
-F "file=@Экспорт_..._wb_cmp_advert-stats_....xlsx"{
"error": false,
"source": "evirma-pro-daily-zone-stats",
"rowCount": 27,
"data": [
{
"period": "За период",
"isSummary": true,
"date": null,
"weekday": null,
"ad": { "impressions": 4578, "cpm": 756, "clicks": 298, "spend": 3460, "...": "..." },
"adEfficiency": { "baskets": 33, "orders": 7, "revenue": 46403, "drrByRevenue": 7.46, "...": "..." },
"total": { "views": 26984, "ordersTotal": 43, "revenueTotal": 286865, "...": "..." },
"zones": {
"search": { "sharePercent": 97, "ad": { "impressions": 4438, "...": "..." }, "adEfficiency": { "...": "..." } },
"catalog": { "sharePercent": 3, "ad": { "impressions": 140, "...": "..." }, "adEfficiency": { "...": "..." } }
}
},
{
"period": "16.08.2026 / вс",
"isSummary": false,
"date": "2026-08-16",
"weekday": "вс",
"...": "..."
}
]
}重要提示: zones 中的 каталог 可能为 null——在 EVIRMA 导出文件中,对于目录中没有展示的天数,该行完全不存在(而不仅仅是包含零)。列映射(lib/evirmaDailyStatsParser.js)同样与当前 EVIRMA 报告格式相关联。
使用示例
获取广告活动统计
// Использование fetch
const response = await fetch('http://localhost:3000/api/adv/fullstats', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'api-key': 'ВАШ_ТОКЕН_WILDBERRIES_API'
},
body: JSON.stringify([
{
"id": 8960367,
"dates": [
"2024-04-07",
"2024-04-06"
]
}
])
});
const data = await response.json();
console.log(data);获取商品卡片统计
// Использование axios
const axios = require('axios');
const response = await axios.post('http://localhost:3000/api/nm-report/detail', {
"brandNames": ["ВашБренд"],
"objectIDs": [358],
"tagIDs": [123],
"nmIDs": [1234567],
"timezone": "Europe/Moscow",
"period": {
"begin": "2024-04-01 00:00:00",
"end": "2024-04-15 23:59:59"
},
"orderBy": {
"field": "ordersSumRub",
"mode": "asc"
},
"page": 1
}, {
headers: {
'api-key': 'ВАШ_ТОКЕН_WILDBERRIES_API'
}
});
console.log(response.data);典型使用场景
1. 监控广告活动效果
场景: 您希望定期监控广告活动的效果并分析关键指标。
使用 MCP 的解决方案:
设置一个每日任务,请求所有有效活动的统计信息。
将获取的数据保存到数据库中以进行历史分析。
创建显示关键指标(CTR、转化率、花费)的仪表板。
代码示例:
// Получение статистики кампаний
const campaigns = [123456, 789012]; // ID ваших кампаний
const dates = [getDateString(new Date())]; // Сегодняшняя дата
// Формирование запроса
const requestData = campaigns.map(id => ({
id: id,
dates: dates
}));
// Отправка запроса к MCP серверу
const campaignStats = await fetchFromMcp('/api/adv/fullstats', 'POST', requestData);
// Сохранение данных и генерация отчета
saveToDatabaseAndGenerateReport(campaignStats);2. 分析商品销售漏斗
场景: 您希望分析用户如何与您的商品互动,从查看商品卡片到购买。
使用 MCP 的解决方案:
请求所选期间内商品的详细统计信息。
分析每个阶段的转化率(查看 → 加入购物车 → 下单 → 购买)。
找出转化率低的商品以进行优化。
代码示例:
// Получение статистики воронки продаж
const response = await fetchFromMcp('/api/nm-report/detail', 'POST', {
"nmIDs": [/* ваши номенклатуры */],
"timezone": "Europe/Moscow",
"period": {
"begin": "2024-04-01 00:00:00",
"end": "2024-04-30 23:59:59"
},
"page": 1
});
// Анализ конверсий
const products = response.data.cards;
const lowConversionProducts = products.filter(product => {
const stats = product.statistics.selectedPeriod;
return stats.conversions.addToCartPercent < 5 ||
stats.conversions.cartToOrderPercent < 20 ||
stats.conversions.buyoutsPercent < 80;
});
// Генерация отчета по проблемным товарам
generateLowConversionReport(lowConversionProducts);3. 优化搜索可见性
场景: 您希望提高商品在 Wildberries 搜索中的可见性。
使用 MCP 的解决方案:
请求您商品的搜索查询报告。
分析您的商品在哪些查询中排名靠前,在哪些查询中排名靠后。
优化商品卡片以提高排名。
代码示例:
// Получение отчета по поисковым запросам
const searchReport = await fetchFromMcp('/api/search-report/report', 'POST', {
"currentPeriod": {
"start": "2024-04-01",
"end": "2024-04-30"
},
"positionCluster": "all",
"orderBy": {
"field": "avgPosition",
"mode": "desc"
},
"limit": 100,
"offset": 0
});
// Получение поисковых текстов для конкретного товара
const searchTexts = await fetchFromMcp('/api/search-report/product/search-texts', 'POST', {
"currentPeriod": {
"start": "2024-04-01",
"end": "2024-04-30"
},
"nmIds": [1234567],
"topOrderBy": "openCard",
"limit": 20
});
// Анализ результатов и формирование рекомендаций
analyzeSearchPositionsAndGenerateRecommendations(searchTexts);4. 基于分析的库存管理
场景: 您希望根据销售数据优化仓库中的库存水平。
使用 MCP 的解决方案:
定期请求库存和销售报告。
根据销售速度计算最佳库存水平。
找出库存过剩或不足的商品。
代码示例:
// Получение отчета по остаткам
const stocksReport = await fetchFromMcp('/api/stocks-report/products/products', 'POST', {
"nmIDs": [/* ваши номенклатуры */],
"currentPeriod": {
"start": "2024-04-01",
"end": "2024-04-30"
},
"stockType": "",
"skipDeletedNm": true,
"orderBy": {
"field": "avgOrders",
"mode": "desc"
},
"offset": 0
});
// Анализ скорости продаж и остатков
const stockOptimizationReport = stocksReport.data.items.map(item => {
const dailySales = item.metrics.avgOrders;
const currentStock = item.metrics.stockCount;
const daysOfSupply = currentStock / dailySales;
return {
nmId: item.nmID,
name: item.name,
dailySales,
currentStock,
daysOfSupply,
stockStatus: daysOfSupply < 7 ? 'LOW' : daysOfSupply > 30 ? 'HIGH' : 'OPTIMAL'
};
});
// Генерация рекомендаций по управлению запасами
generateStockManagementRecommendations(stockOptimizationReport);5. 生成和分析扩展 CSV 报告
场景: 您希望获取详细数据,以便在 Excel 或其他工具中进行深入分析。
使用 MCP 的解决方案:
通过 MCP 创建生成 CSV 报告的任务。
等待生成完成并下载报告。
将数据导入分析工具进行分析。
代码示例:
// Создание задачи на генерацию отчета
const reportId = generateUUID();
const createReportResponse = await fetchFromMcp('/api/nm-report/downloads', 'POST', {
"id": reportId,
"reportType": "DETAIL_HISTORY_REPORT",
"userReportName": "Аналитика по товарам за апрель",
"params": {
"nmIDs": [/* ваши номенклатуры */],
"startDate": "2024-04-01",
"endDate": "2024-04-30",
"timezone": "Europe/Moscow",
"aggregationLevel": "day",
"skipDeletedNm": false
}
});
// Проверка статуса генерации (через некоторое время)
setTimeout(async () => {
const reportStatusResponse = await fetchFromMcp('/api/nm-report/downloads', 'GET', {
'filter[downloadIds]': [reportId]
});
const reportStatus = reportStatusResponse.data[0].status;
if (reportStatus === 'SUCCESS') {
// Загрузка отчета
downloadReport(reportId);
} else if (reportStatus === 'FAILED') {
// Повторная попытка генерации
retryReport(reportId);
}
}, 60000); // Проверка через 1 минуту获取 API 令牌
要通过 MCP 服务器使用 Wildberries API,您需要一个 API 令牌。获取方法如下:
登录您的 Wildberries 卖家账户
访问 seller.wildberries.ru 并登录。
进入 API 设置部分
登录后,进入「设置」部分(通常可从菜单或个人资料中访问)。
进入 API 管理部分
找到「API」或「API 访问」或「集成」部分。
创建新的 API 令牌
点击「创建新令牌」或类似按钮
为令牌选择所需的访问权限:
对于 WB API MCP 服务器,您需要:
分析类别的权限,用于销售漏斗和搜索查询
推广类别的权限,用于广告统计
为令牌指定名称(方便您自己识别)
如有需要,请设置有效期(或保持永久有效)
生成并保存令牌
填写必要信息后,点击「生成」或「创建」以生成 API 令牌。
重要提示: 请务必复制并妥善保存您的令牌!出于安全原因,完整令牌仅显示一次。
故障排除
常见问题
连接被拒绝: 确保服务器已启动且端口可访问。
身份验证错误: 检查您的 Wildberries API 令牌是否有效且具有必要的权限。
请求频率限制: 服务器会处理 Wildberries API 的请求频率限制,但如果您超过了允许的请求数,则可能需要等待。
查看日志
使用 Docker 或 Docker Compose 运行时,日志存储在 logs 目录中,该目录已挂载为卷。
要查看正在运行的 Docker 容器中的日志:
docker logs wb-api-mcp错误代码
401 - 身份验证错误(检查您的 API 令牌)
429 - 超出请求限制(请稍候)
400 - 错误请求(检查请求参数)
403 - 禁止访问(检查您的令牌权限)
部署到 Cloudflare Workers
服务器也可以部署为 Cloudflare Worker(通过 wrangler deploy 或从 GitHub 自动部署到 Cloudflare Dashboard)——从 2026 年起,Cloudflare 官方支持通过 cloudflare:node 适配器在 Workers 上运行 Express 应用。这由两个文件负责:wrangler.jsonc(配置)和 worker-entry.mjs(包装入口点)。通过 npm start/Docker 的常规启动不使用也不需要它们。
npm run deploy:cloudflare
# или напрямую:
npx wrangler deploy要求: 构建环境中使用 Node.js ≥20(在 Cloudflare Dashboard 中,该版本会根据 .nvmrc 自动设置,或者通过 Settings → Build 中的 NODE_VERSION 变量设置)。
与 Docker/常规 Node 托管相比的重要限制:
Rate limiting(
express-rate-limit)将计数器存储在进程内存中。在 Workers 中,隔离实例会定期重新创建,因此请求限制可能比在持续运行的服务器上更频繁地重置——对于生产环境中的严格限流,建议使用平台层面的 Cloudflare Rate Limiting Rules 来代替(或与express-rate-limit一起使用)。CPU 时间按请求受 Cloudflare 套餐限制(尤其是在免费套餐上)——通过
/api/evirma/import/*解析大型.xlsx文件,在处理真正大规模的数据导出时可能会触及该限制。上传的文件(
multer)仅在请求的内存中进行处理——这在 Docker 上本来就是这样,这里没有任何变化。
如果需要一个完全没有这些限制的、完全可预测的 Node 运行时,请使用常规 Docker 部署(见上文),该服务器最初就是为这种部署编写的。
安全与生产运维
生产环境必须使用 HTTPS。 服务器本身不终止 TLS——请将其部署在反向代理(nginx、Caddy、Cloudflare Tunnel 等)之后,否则
api-key令牌将以明文形式传输。令牌不会存储在服务器上的任何地方 —— 客户端在每次请求时通过
api-key请求头将其传递,并且它仅用于向 Wildberries API 进行代理转发。/health不需要授权 —— 它用于监控以及 Docker/Kubernetes 健康检查,并且不会返回敏感数据。Rate limiting —— 内置的每分钟来自单个 IP 的
RATE_LIMIT_MAX请求限制可防止对 Wildberries API 的意外突发请求。依赖项和代码的自动扫描 —— Dependabot (npm/Docker/Actions) 和 CodeQL 每周运行,并在每次 PR 时运行(参见
.github/)。容器以非特权用户(
appuser)身份运行,而不是以 root 身份运行。文件上传(
/api/evirma/import/keywords-report)被限制为 15 MB 大小和.xlsx/.xls扩展名;文件仅在内存中处理(不会保存到磁盘)。
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Hosted Amazon Seller and Vendor MCP server for Claude, ChatGPT, Cursor, Codex, Gemini, Copilot.
Hosted MCP server for data analysis: CSV profiling, A/B tests, cohorts, funnels, trend forecasts.
Hosted MCP server for the Wavix telecom platform: SMS, voice, 2FA, SIP, numbers, 10DLC, CDRs.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/antondrpq/Wildberries-API-MCP-Server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server