Skip to main content
Glama
antondrpq

Wildberries API MCP Server

by antondrpq

Wildberries API MCP 服务器使用指南

CI Docker publish

请将上方徽章中的 ВАШ_ЛОГИН 替换为发布仓库后您的 GitHub 账户/组织名称。

目录

  1. 简介

  2. 安装与运行

  3. 可用的 API 工具

  4. 使用示例

  5. 典型使用场景

  6. 获取 API 令牌

  7. 故障排除

简介

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

变量

默认值

描述

PORT

3000

服务器监听的端口

NODE_ENV

production

production / development / test

RATE_LIMIT_MAX

100

每个 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。

如何获取文件

  1. 在 EVIRMA PRO 中打开按关键词分组的广告活动统计。

  2. 导出表格(导出按钮仅在 PRO 版本中可用)。

  3. 将生成的 .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, "...": "..." }
    }
  ]
}

jemForecastjemTrafficjemBasketsjemOrders 组包含来自 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 的解决方案:

  1. 设置一个每日任务,请求所有有效活动的统计信息。

  2. 将获取的数据保存到数据库中以进行历史分析。

  3. 创建显示关键指标(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 的解决方案:

  1. 请求所选期间内商品的详细统计信息。

  2. 分析每个阶段的转化率(查看 → 加入购物车 → 下单 → 购买)。

  3. 找出转化率低的商品以进行优化。

代码示例:

// Получение статистики воронки продаж
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 的解决方案:

  1. 请求您商品的搜索查询报告。

  2. 分析您的商品在哪些查询中排名靠前,在哪些查询中排名靠后。

  3. 优化商品卡片以提高排名。

代码示例:

// Получение отчета по поисковым запросам
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 的解决方案:

  1. 定期请求库存和销售报告。

  2. 根据销售速度计算最佳库存水平。

  3. 找出库存过剩或不足的商品。

代码示例:

// Получение отчета по остаткам
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 的解决方案:

  1. 通过 MCP 创建生成 CSV 报告的任务。

  2. 等待生成完成并下载报告。

  3. 将数据导入分析工具进行分析。

代码示例:

// Создание задачи на генерацию отчета
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 令牌。获取方法如下:

  1. 登录您的 Wildberries 卖家账户

    访问 seller.wildberries.ru 并登录。

  2. 进入 API 设置部分

    登录后,进入「设置」部分(通常可从菜单或个人资料中访问)。

  3. 进入 API 管理部分

    找到「API」或「API 访问」或「集成」部分。

  4. 创建新的 API 令牌

    • 点击「创建新令牌」或类似按钮

    • 为令牌选择所需的访问权限:

      • 对于 WB API MCP 服务器,您需要:

        • 分析类别的权限,用于销售漏斗和搜索查询

        • 推广类别的权限,用于广告统计

    • 为令牌指定名称(方便您自己识别)

    • 如有需要,请设置有效期(或保持永久有效)

  5. 生成并保存令牌

    填写必要信息后,点击「生成」或「创建」以生成 API 令牌。

    重要提示: 请务必复制并妥善保存您的令牌!出于安全原因,完整令牌仅显示一次。

故障排除

常见问题

  1. 连接被拒绝: 确保服务器已启动且端口可访问。

  2. 身份验证错误: 检查您的 Wildberries API 令牌是否有效且具有必要的权限。

  3. 请求频率限制: 服务器会处理 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 扩展名;文件仅在内存中处理(不会保存到磁盘)。

-
license - not tested
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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.

View all MCP Connectors

Latest Blog Posts

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