# moysklad-mcp [Health: Active]

**Category:** 💻 Developer Tools  
**Repository:** https://github.com/theYahia/moysklad-mcp  
**GitHub Stars:** 6  
**Views:** 0  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/moysklad-mcp

## Description
MCP server for MoySklad (МойСклад) — products, stock, orders, counterparties.

## Claude Desktop Quick Installation
Install path detected from listing signals. Uses `npx` (confidence: high):

```json
"mcpServers": {
  "moysklad-mcp": {
    "command": "npx",
    "args": ["-y","@theyahia/moysklad-mcp"]
  }
}
```

## Documentation & README

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

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

[![npm](https://img.shields.io/npm/v/@theyahia/moysklad-mcp)](https://www.npmjs.com/package/@theyahia/moysklad-mcp)
[![license](https://img.shields.io/npm/l/@theyahia/moysklad-mcp)](./LICENSE)

![Демонстрация: вопрос «сколько футболок на складе и сколько из них в резерве» — агент вызывает get_stock и отвечает таблицей остатков и резервов](https://raw.githubusercontent.com/theYahia/WWmcp/main/servers/moysklad/assets/demo.svg)

Часть **[WWmcp](https://github.com/theYahia/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_TOKEN`                       | Bearer-токен (предпочтительно) |
| `MOYSKLAD_LOGIN` + `MOYSKLAD_PASSWORD` | HTTP 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_BUCKET`                 | `20`    | Сколько запросов разрешено в трёхсекундном окне      |
| `MOYSKLAD_MAX_CONCURRENT`              | `5`     | Максимум параллельных запросов (МойСклад допускает 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 МойСклад](https://dev.moysklad.ru/doc/api/remap/1.2/).

## Лицензия

MIT

---

Часть [WWmcp](https://github.com/theYahia/WWmcp) · Telegram: [@vhodvai](https://t.me/vhodvai)

