MCP server: One MCP server.

moysklad-mcp

@theyahiaMCP server · External

MCP server for MoySklad — warehouse, inventory, orders, reports (Russia)

Inventory managementv3.0.1MITTypeScript
Freeno charge per call

Runs on your machine from its package; the steps are below.

What it does

  1. Reads
  2. Writes
  3. High impact

At most: creates or changes data: records, files, settings.

What it costs

Free

Odel charges nothing per call. The publisher may charge for its own service.

Runs locally over stdio

This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).

npm@theyahia/moysklad-mcpv3.0.1

Run

npx -y @theyahia/moysklad-mcp

MCP client config

{
  "mcpServers": {
    "moysklad-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@theyahia/moysklad-mcp"
      ]
    }
  }
}
README6 min read

MCP-сервер для МойСклад — 60 инструментов для ИИ-агента: товары, склад, заказы, финансы

Если вы искали, как подключить МойСклад к Claude или другому ИИ-агенту, — этот сервер закрывает весь торгово-складской цикл через JSON API 1.2: каталог и цены, остатки по складам, контрагенты, заказы покупателей и поставщикам, отгрузки, приёмки, перемещения, инвентаризации, списания, возвраты, счета, платежи и касса, отчёты по прибыли и оборотам, аудит и вебхуки. Спрашиваете «сколько футболок свободно к продаже» или «какая маржа по каждому товару за август» — получаете таблицу с цифрами, а не выгрузку в Excel. Цены во всех инструментах в рублях (перевод в копейки, которых требует API МойСклад, сервер делает сам), лимит запросов соблюдается автоматически.

npm license

Демонстрация: вопрос «сколько футболок на складе и сколько из них в резерве» — агент вызывает get_stock и отвечает таблицей остатков и резервов

Часть WWmcp — набора MCP-серверов для развивающихся рынков.

Быстрый старт

Claude Desktop

Добавьте в claude_desktop_config.json:

json
{
  "mcpServers": {
    "moysklad": {
      "command": "npx",
      "args": ["-y", "@theyahia/moysklad-mcp"],
      "env": {
        "MOYSKLAD_TOKEN": "your-bearer-token"
      }
    }
  }
}

Чтобы использовать логин и пароль вместо токена, замените блок env на:

json
"env": { "MOYSKLAD_LOGIN": "you@example.com", "MOYSKLAD_PASSWORD": "your-password" }

Claude Code

bash
claude mcp add moysklad --env MOYSKLAD_TOKEN=your-bearer-token -- npx -y @theyahia/moysklad-mcp

Cursor / Windsurf

Добавьте в настройки MCP:

json
{
  "moysklad": {
    "command": "npx",
    "args": ["-y", "@theyahia/moysklad-mcp"],
    "env": { "MOYSKLAD_TOKEN": "your-bearer-token" }
  }
}

Авторизация

ПеременнаяОписание
MOYSKLAD_TOKENBearer-токен (предпочтительно)
MOYSKLAD_LOGIN + MOYSKLAD_PASSWORDHTTP Basic-авторизация

Токен выдаётся в МоёмСкладе: Настройки → Пользователи → Токены доступа (также работает POST /security/token с Basic-авторизацией). Генерация нового токена отзывает предыдущий.

Нужные права: у пользователя или токена должен быть доступ к тем сущностям, с которыми вы работаете. Читающим инструментам нужны права просмотра, создающим и изменяющим — права редактирования соответствующего типа документов. Вебхуки и часть отчётов требуют платного тарифа МойСклад.

Цены

API МойСклад хранит деньги в копейках (1 рубль = 100 копеек). Сервер конвертирует автоматически:

  • На вход: передавайте цены и суммы в рублях (например, 1500.50)
  • На выход: цены и суммы возвращаются в рублях
  • (Отчёт get_dashboard проксируется как есть, поэтому денежные значения в нём остаются в копейках.)

Если у товара есть цена продажи, МойСклад требует тип цены. Сервер сам подставляет тип цены по умолчанию из вашего аккаунта (берёт из list_price_types); чтобы выбрать конкретный, передайте price_type_href.

Инструменты (60)

Товары и каталог

ИнструментОписание
search_productsПоиск товаров по названию или артикулу
get_productТовар по UUID (raw — полный объект)
create_productСоздать товар (тип цены подставляется автоматически)
update_pricesОбновить цены продажи, закупки и минимальную
search_assortmentСквозной поиск по товарам, модификациям, услугам и комплектам
list_price_typesТипы цен (первый — по умолчанию)
search_variants / search_bundles / search_servicesПоиск модификаций / комплектов / услуг
create_serviceСоздать услугу

Остатки

ИнструментОписание
get_stockТекущие остатки (количество, резерв, в пути)
get_stock_by_storeОстатки в разрезе складов
get_stock_currentБыстрый срез текущих остатков

Контрагенты

ИнструментОписание
get_counterpartiesПоиск по названию, ИНН или телефону
get_counterpartyПолная карточка (raw — полный объект)
create_counterpartyСоздать покупателя или поставщика

Заказы и отгрузки

ИнструментОписание
create_customer_order / get_orders / get_customer_order / update_customer_order_statusЖизненный цикл заказа покупателя
create_purchase_order / get_purchase_ordersЗаказы поставщикам
create_demandОтгрузка, привязанная к заказу и складу
create_supplyПриёмка (поступление от поставщика)
create_sales_return / create_purchase_returnВозвраты от покупателей и поставщикам

Складские документы

ИнструментОписание
create_move / get_movesПеремещение между складами
create_enter / get_entersОприходование
create_loss / get_lossesСписание
create_inventory / get_inventoriesИнвентаризация

Финансы

ИнструментОписание
create_payment_in / create_payment_outВходящие и исходящие банковские платежи
create_cash_in / create_cash_outПриходные и расходные кассовые ордера
create_invoice_out / create_invoice_in / get_invoices_outСчета покупателям и от поставщиков

Отчёты

ИнструментОписание
get_profit_reportПрибыль по товарам (выручка, себестоимость, маржа)
get_sales_reportПродажи по товарам (количество, выручка)
get_dashboardПоказатели дашборда за день, неделю, месяц
get_turnoverОборачиваемость товаров за период
get_money_reportТекущие остатки денег по счетам и кассам

Справочники и аудит

ИнструментОписание
list_stores / list_organizationsСклады и юрлица
list_employees / list_currencies / list_product_foldersСправочные данные
get_metadataМетаданные сущностей (статусы, атрибуты) — здесь берутся href статусов заказа
get_audit / get_entity_auditЖурнал событий аккаунта и история одной сущности

Вебхуки и универсальные инструменты

ИнструментОписание
list_webhooks / create_webhook / update_webhook / delete_webhookУправление вебхуками (CREATE/UPDATE/DELETE/PROCESSED)
get_documents / get_documentУниверсальные список и получение для любого типа сущностей, не покрытого выше

HTTP-транспорт

bash
HTTP_PORT=3000 npx @theyahia/moysklad-mcp
# или
npx @theyahia/moysklad-mcp --http 3000

Эндпоинты: POST /mcp (JSON-RPC), GET /health (статус). CORS выключен по умолчанию — HTTP-эндпоинт действует от имени вашего токена МойСклад, поэтому задавайте MOYSKLAD_HTTP_CORS_ORIGIN только если доверенному браузерному origin это действительно нужно.

Конфигурация (переменные окружения)

ПеременнаяПо умолчаниюОписание
MOYSKLAD_TOKEN—Bearer-токен
MOYSKLAD_LOGIN / MOYSKLAD_PASSWORD—Basic-авторизация
MOYSKLAD_RATE_BUCKET20Сколько запросов разрешено в трёхсекундном окне
MOYSKLAD_MAX_CONCURRENT5Максимум параллельных запросов (МойСклад допускает 5 на пользователя)
MOYSKLAD_HTTP_CORS_ORIGIN—Разрешённый CORS-origin для HTTP-транспорта
HTTP_PORT—Запустить транспорт Streamable HTTP на этом порту

Ограничение частоты запросов

МойСклад считает «вес за 3 секунды» (≈45 единиц для токена решения, меньше для логина с паролем; отчёты get_stock и get_stock_by_store стоят по 5 единиц каждый). Встроенный лимитер — token bucket, который списывается по весу запроса, и по умолчанию он консервативен (MOYSKLAD_RATE_BUCKET=20), потому что API может временно отключить доступ после серии 429. Повторы на 429/5xx идут с задержкой и учитывают заголовок X-Lognex-Retry-After. С токеном решения корзину можно поднять ближе к 45.

Решение проблем

СимптомПричина и что делать
Auth not configuredЗадайте MOYSKLAD_TOKEN (или MOYSKLAD_LOGIN + MOYSKLAD_PASSWORD).
auth error 401/403Токен недействителен или истёк, либо у пользователя нет прав на сущность. Новый токен отзывает старые.
MoySklad HTTP 412 …Не хватает обязательного поля (например, исходящему платежу может требоваться статья расходов — передайте expense_item_href). Параметр указан в тексте ошибки.
Много 429 / медленноСнизьте объём запросов или положитесь на встроенный лимитер; поднимайте MOYSKLAD_RATE_BUCKET только с токеном решения.
HTTP 415Среда выполнения не отправляет gzip — используйте Node ≥18 (его fetch делает gzip автоматически).
Вебхуки и часть отчётов не работаютТребуют платного тарифа МойСклад.

E-commerce-стек

СервисMCP-серверЧто делает
МойСклад@theyahia/moysklad-mcpСклад, товары, заказы
СДЭК@theyahia/cdek-mcpДоставка, трекинг
DaData@theyahia/dadata-mcpПроверка адресов
ЮKassa@theyahia/yookassa-mcpПлатежи

Демо-промпты

«Покажи все товары с низким остатком (меньше 10 штук) и их текущие цены»

«Создай заказ покупателя для контрагента „ООО Рога и Копыта“ на 50 штук „Widget Pro“ по 1500 рублей, потом сделай отгрузку с основного склада»

«Перемести 20 штук SKU LP15 с основного склада в магазин, затем подними отчёт по прибыли за этот месяц»

Разработка

bash
npm install        # зависимости + git-хуки (husky)
npm run build      # tsc -> dist/
npm run lint       # eslint
npm run typecheck  # tsc --noEmit
npm test           # vitest (требуется Node >=20)
npm run coverage   # vitest с покрытием

Опубликованный рантайм поддерживает Node ≥18; тестовая оснастка требует Node ≥20.

Справочник API

Основан на JSON API 1.2 МойСклад.

Лицензия

MIT


Часть WWmcp · Telegram: @vhodvai

Similar modules

Browse Inventory management