Skip to main content
Glama

moysklad-mcp-ru: AI-доступ к МойСклад для Claude Code, Cursor, Codex и Cowork

🇬🇧 English version

Ведёте учёт в МойСклад — дайте ИИ прямой доступ к вашему аккаунту. Один MCP-сервер над JSON API 1.2 МойСклад: остатки, товары, заказы, контрагенты, отчёты (прибыль, обороты, деньги) и запись документов (приёмки, отгрузки, заказы, счета, возвраты) — напрямую по API, без браузера. Числа приходят из реального API, а не выдумываются моделью. Два гейта на запись не дают случайно создать или провести документ в боевом учёте. Авто-пагинация, мультикабинет, поиск по-русски. Для Claude Code, Cursor, Codex, Cowork и Claude Desktop.

PyPI MCP Registry License: MIT Тулов Тестов Сайт Звёзды

Быстрый старт, без установки в систему:

uvx moysklad-mcp-ru

Клиенты, токен и способ «попроси своего ИИ поставить»: в разделе «Установка».

⚠️ alpha. Помогает с операционкой учёта, но это инструмент, а не замена бухгалтера. Курированное ядро и срез записи выверены боем на тестовом кабинете; импортированные из доки методы — карта для разведки (пути надёжны, тела write-запросов сверяйте по доке или зовите через raw-инструменты). Подробности — в разделе «Оговорки».

Зачем это нужно

Учёт живёт в МойСклад, а ИИ-ассистент обычно бесполезен: либо ходит через браузер и спотыкается, либо выдумывает цифры, которые звучат уверенно. moysklad-mcp-ru даёт агенту прямой доступ к JSON API 1.2 вашего аккаунта:

  • Числа из реального API, а не из головы модели. Остатки, заказы, прибыль, обороты — это ответ МойСклад, с источником и полями.

  • Запись за двумя гейтами. Создание документа делает ЧЕРНОВИК; проведение (двигает учёт) — отдельный destructive-шаг с подтверждением. Запись вообще выключена, пока её явно не включить и не направить на тестовый кабинет.

  • Без браузера. Прямые HTTPS-вызовы по токену кабинета.

Скажите агенту обычными словами: «покажи остатки», «что пора дозаказать», «создай приёмку на 10 Рога от поставщика» — он подберёт метод или сценарий.

Related MCP server: moysklad-mcp-ru

Что внутри

Не «один тул на эндпоинт», а 10 generic мета-тулов над каталогом — полное покрытие API при маленькой поверхности.

ваш ИИ-агент
      │
      ▼
10 мета-тулов  ──►  каталог (endpoints.yaml)  ──►  общий core
 search / describe /                                клиент · safety · ошибки
 call / write / delete /                            пагинация · реестр
 fetch_all / map / ...                                    │
 + типизированные тулы (ms_get_stock, ms_create_document, …)  ▼
                                              МойСклад JSON API 1.2 (HTTPS)

Мета-тулы (ms_search_methods, ms_describe_method, ms_call_method, ms_write_method, ms_delete_method, ms_get_raw, ms_write_raw, ms_delete_raw, ms_fetch_all, ms_map, + тулы кабинетов).

Типизированные read-тулы: ms_get_stock, ms_get_products, ms_get_orders, ms_get_profit, ms_get_money, ms_get_turnover, ms_get_counterparties, ms_get_stores, ms_get_documents (7 типов), ms_ping. Копейки автоматически переводятся в рубли.

Тулы записи (за двумя гейтами):

Тул

Уровень

Назначение

ms_build_document

read

Preview ЛЮБОГО типа: резолв ссылок + точное тело, БЕЗ записи.

ms_create_document

write

Создать ЛЮБОЙ ролевой тип ЧЕРНОВИКОМ (applicable:false).

ms_build_purchaseorder / ms_create_purchaseorder

read / write

Типизированный заказ поставщику (для совместимости).

ms_post_document

destructive

Провести документ (applicable:true) — двигает учёт.

ms_delete_document

destructive

Удалить документ (уборка).

7 ролевых типов: purchaseorder, supply, demand, invoicein, invoiceout, salesreturn, purchasereturn.

Каталог — schema-driven из официальной доки МойСклад: 892 метода (курированное ядро выверено живьём; остальное импортировано из доки). ms_get_raw достаёт всё, чего ещё нет в каталоге.

Что можно спросить

покажи остатки и что пора дозаказать
вытащи прибыль по товарам за прошлый месяц
кто из контрагентов должен нам денег
создай черновик приёмки: 10 «Рога» от «ООО Поставщик» по 250 ₽   (на тестовом кабинете)
проведи эту приёмку и покажи, как изменился остаток

Не уверены, с чего начать — скажите «что ты умеешь по моему кабинету» или вызовите ms_map.

Safety model

Токен кабинета двигает остатки и деньги. Каждый метод классифицирован:

  • read → выполняется сразу;

  • write (создать черновик) → требует confirm_write=true И включённой записи MOYSKLAD_ALLOW_WRITE=1;

  • destructive (провести / удалить) → ещё и i_understand_this_modifies_data=true.

Два независимых слоя: (1) процессный guard (MOYSKLAD_ALLOW_WRITE, по умолчанию ВЫКЛ, опц. пин к кабинету MOYSKLAD_WRITE_CABINETS) — защита от направления на боевой кабинет; (2) per-call гейт. Guard покрывает и сырые ms_call_method/ raw-инструменты, не только типизированные тулы. 0 мутаций, помеченных как read — проверяется тестом (test_safety_catalog) в CI. Создание всегда делает ЧЕРНОВИК; проведение — отдельный шаг.

Установка

Подробный гайд — в QUICKSTART.md. Три пути, один результат:

  1. Проще всего — попроси своего ИИ (без терминала). Открой Claude / Cowork и скажи: «установи МойСклад MCP» — агент проведёт по встроенному moysklad-mcp-install/.

  2. Скачать и кликнуть. Возьми release-zip, распакуй, двойной клик install.command (macOS) / install.bat (Windows), вставь токен.

  3. Технический. python3 install.py --client <твой-клиент> (claude-desktop / claude-code / codex / opencode).

  4. Для разработчиков. Пакет на PyPI — запуск без установки: uvx moysklad-mcp-ru. Для Claude Desktop — готовый .mcpb-бандл из релиза (двойной клик, токен вводится в окне настроек). Полный список каналов и как режется релиз — в docs/DISTRIBUTION.md.

Для путей 1–3 не нужно ни pip install, ни правки JSON: зависимости ставятся сами при первом запуске (локальный venv), от тебя — только токен.

Где взять токен: МойСклад → Настройки → Пользователи → Токены доступа. Токен хранится в ~/.moysklad-mcp/cabinets.json (локально, chmod 600, никогда в репо и не в чат). Поддержка мультикабинета — несколько аккаунтов с переключением из чата (ms_add_cabinet / ms_use_cabinet).

Проверка после установки. Поставили пакетом (uvx, pip): moysklad-mcp-ru doctor — печатает версию, число инструментов, размер каталога и состояние гейта записи, в сеть не ходит. Работаете из клона: python3 serve.py ms --selfcheck → «OK: ms ready, N tools».

Деньги

Все суммы в API — в копейках. Read-тулы отдают рубли. На записи convert_money_to_kopecks переводит цены/суммы рубли→копейки (price позиции, sum, price-объекты). Сырые мета-тулы работают в копейках как есть.

Выверено боем

  • Хост api.moysklad.ru/api/remap/1.2, списки в rows, offset+limit (макс 1000).

  • Лимит: бакет 45/3с, окно 3000 мс, тяжёлый отчёт остатков весит 5 единиц.

  • Жёстко: Accept: application/json;charset=utf-8 ровно (иначе 400 код 1062), Accept-Encoding: gzip (иначе 415).

  • Запись (демо-кабинет): веер create→read-back→проведение→движение остатков→ удаление→откат на всех 6 ролевых типах + purchaseorder. Деньги ×100 верны, supply/salesreturn +, demand/purchasereturn −, счета не двигают, удаление откатывает, возвраты создаются standalone.

Оговорки (сверяйте с живой докой)

  • Импортированные из доки методы: пути надёжны, тела write — нет. Считайте их картой разведки: подтверждайте по доке или зовите через raw-инструменты. Курированное ядро и срез записи — надёжны.

  • Кабинет затеняет env: активный кабинет в cabinets.json приоритетнее переменных окружения. Необъяснимый 401 — первым делом проверьте стор.

  • Запись только на тестовый кабинет. Не направляйте MOYSKLAD_ALLOW_WRITE=1 на боевой учёт, пока сами не проверите на тесте.

Структура

core/                 ← вендорный движок ilyautov/marketplaces-mcp-ru (MIT, не менялся)
moysklad_mcp/         ← специфика МойСклад: server.py, build.py, money.py, refs.py,
                        write_guard.py, endpoints.yaml(+curated), workflows.yaml, entities.yaml
tests/                ← 70 офлайн-тестов
scripts/              ← ingest_moysklad.py (парсер доки), package_release.py
serve.py              ← лаунчер (авто-venv): python3 serve.py ms [--selfcheck]
install.py + .command/.bat/.sh + moysklad-mcp-install/   ← установка под 4 клиента
.mcp.json + .claude-plugin/ .codex-plugin/ .cursor-plugin/   ← плагин-манифесты
docs/                 ← исследование, аудит, RUNBOOK-и, точки возобновления (dev-доки)

Лицензия

MIT. Вендорный core/ — под MIT Ильи Утова, см. NOTICE. Архитектура (schema-driven каталог, safety-гейт, единые ошибки, авто-пагинация) переиспользует сильнейшие идеи marketplaces-mcp-ru.

Нашли косяк — заводите issue. Это alpha и открытый код: ставьте, проверяйте на своих данных, экспериментируйте.


mcp-name: io.github.ilyautov/moysklad-mcp-ru


Кто это сделал

Илья Утов, лаборатория AI Frontier. Как эти инструменты устроены внутри, пишу в Telegram и LinkedIn.

Рядом стоят:

  • humanizer-ru: убирает следы нейросети из русского текста

  • marketplaces-mcp-ru: Wildberries, Ozon, Яндекс Маркет и Авито прямо из агента

  • small-business-ru: 34 скилла для малого бизнеса, считают налоги и проверяют контрагента по ИНН

  • consilium-principis: совет мыслителей, где каждая цитата сверяется дословно

  • hefest: химическая безопасность завода, целиком офлайн

Все проекты одним списком, разобранные по назначению: ilyautov.github.io. Исходники: github.com/ilyautov. Пригодилось, поставьте звезду: по ней это находят другие.

Available Tools

36 tools
ms_add_cabinetA
Idempotent

Add or update a cabinet (a named set of API credentials), from chat.

⚠️ This puts the key into the chat transcript — requires i_understand_key_goes_to_chat=true. The terminal-free safe alternative is the installer (install.py / double-click), where the key never enters chat.

Args: credentials: dict with the required fields for this service ({fields}). For Ozon: {{"client_id": "...", "api_key": "..."}}; for WB: {{"token": "..."}}. name: optional label. If omitted, the cabinet is named after the real shop name fetched from the marketplace (falls back to "main"). i_understand_key_goes_to_chat: must be true to proceed. Saved to ~/.marketplace-mcp/cabinets.json (local, chmod 600), never echoed.

Inputs: credentials (required), name, i_understand_key_goes_to_chat. Returns: result

ms_build_documentA
Read-only

PREVIEW any role document: resolve names to refs and show the EXACT body ms_create_document would send (money already kopecks). READS only; no write.

Args: doc_type: one of demand | supply | purchaseorder | invoiceout | invoicein | salesreturn | purchasereturn. agent: counterparty name — supplier for supply/invoicein/purchasereturn/ purchaseorder, customer for demand/invoiceout/salesreturn. organization: own legal entity; omit to auto-use the only one on the cabinet. store: warehouse name. supply/demand move stock, so a store is expected; optional for the others. positions: list of {"product": name, "quantity": n, "price": rubles, optional "discount" %, "vat" %}. moment/name/description: optional. moment is "YYYY-MM-DD HH:MM:SS". Returns {"ok": true, "doc_type", "body", "resolved", "summary"} or an error.

Inputs: agent (required), doc_type (required), name, store, +4 more. Returns: result

ms_build_purchaseorderA
Read-only

PREVIEW a purchase order: resolve names to refs and show the EXACT body ms_create_purchaseorder would send (money already kopecks). Performs READS to resolve names; sends NO write. Inspect the body/summary before creating.

Args: agent: supplier counterparty name (поставщик) — required. organization: own legal entity; omit to auto-use the only one on the cabinet. store: warehouse name (optional). positions: list of {"product": name, "quantity": n, "price": rubles, optional "discount" %, "vat" %}. moment/name/description: optional fields. moment is "YYYY-MM-DD HH:MM:SS". Returns {"ok": true, "body", "resolved", "summary"} or an error envelope.

Inputs: agent (required), name, store, moment, +3 more. Returns: result

ms_call_methodA
Read-only

Execute one READ endpoint from the catalog by operation_id.

Target API: https://dev.moysklad.ru/doc/api/remap/1.2/.

Reads only: nothing here changes data, so it runs without confirmation. To change data use ms_write_method, to delete use ms_delete_method.

Args: operation_id: id from the catalog (see ms_search_methods). path_values: values for {placeholders} in the path. query: query-string parameters. body: JSON request body (a few read endpoints take one). Returns JSON: {"ok": true, "status", "data"} or the error envelope.

Inputs: operation_id (required), body, query, path_values. Returns: result

ms_check_authA
Read-only

Check whether the required credentials are present in the environment.

Does NOT reveal secret values — only reports which variables are set. Returns JSON: {"ready": bool, "missing": [str], "required": [str]}.

Inputs: no named parameters. Returns: result

ms_create_documentA

Create ANY role document as a DRAFT (applicable=false — not posted, moves nothing). WRITE — requires confirm_write=true AND MOYSKLAD_ALLOW_WRITE=1. Posting is a separate destructive step (ms_post_document). One body shape fits every order-like document (live-verified 2026-06-26 on all 6 types).

Args: doc_type: one of demand | supply | purchaseorder | invoiceout | invoicein | salesreturn | purchasereturn. agent / organization / store / positions / moment / name / description: same as ms_build_document. confirm_write: required (write gate). Returns the created document envelope {"ok": true, "data": {... "id" ...}}, or the guard/gate/validation error (nothing sent).

Inputs: agent (required), doc_type (required), name, store, +5 more. Returns: result

ms_create_purchaseorderA

Create a purchase order as a DRAFT (applicable=false — not posted, moves nothing). WRITE — requires confirm_write=true. Posting is separate (ms_post_document). Writes also require MOYSKLAD_ALLOW_WRITE=1 (off by default).

Args: same as ms_build_purchaseorder, plus confirm_write. Returns the created document envelope {"ok": true, "data": {... "id" ...}}, or the guard/gate error (nothing sent).

Inputs: agent (required), name, store, moment, +4 more. Returns: result

ms_delete_documentA
Destructive

DELETE a document — e.g. remove a test draft to clean up. DESTRUCTIVE — requires both confirmations.

Args: doc_type: one of demand|supply|purchaseorder|invoiceout|invoicein| salesreturn|purchasereturn. doc_id: document id. Returns {"ok": true, "status": 200} on success, or the guard/gate error.

Inputs: doc_id (required), doc_type (required), confirm_write, i_understand_this_modifies_data. Returns: result

ms_delete_methodA
Destructive

Execute one DESTRUCTIVE endpoint: deletes or irreversibly changes data.

Target API: https://dev.moysklad.ru/doc/api/remap/1.2/.

Both confirm_write=true and i_understand_this_modifies_data=true are required; nothing is sent without both.

Args: operation_id: id from the catalog (see ms_search_methods). path_values: values for {placeholders} in the path. query: query-string parameters. body: JSON request body. confirm_write: must be true. i_understand_this_modifies_data: must be true. Returns JSON: {"ok": true, "status", "data"} or the error envelope.

Inputs: operation_id (required), body, query, path_values, +2 more. Returns: result

ms_delete_rawA
Destructive

Delete data at ANY path, including paths not in the catalog.

Target API: https://dev.moysklad.ru/doc/api/remap/1.2/.

DELETE only. Both confirm_write=true and i_understand_this_modifies_data=true are required.

Args: path: full path beginning with '/'. method: DELETE. host: host override; defaults to the service's default host. query: query-string parameters. body: JSON request body. confirm_write: must be true. i_understand_this_modifies_data: must be true. Returns JSON: {"ok": true, "status", "data"} or the error envelope.

Inputs: path (required), body, host, query, +3 more. Returns: result

ms_describe_methodA
Read-only

Return the full catalog record for one endpoint: method, host, path, scope, safety level, pagination style, rate limit, params and doc URL.

Inputs: operation_id (required). Returns: result

ms_fetch_allA
Read-only

Auto-paginate a read endpoint and return every row in one response.

Handles offset, last_id, cursor (Ozon v4/v5), page and WB lastChangeDate styles. The array path is taken from the catalog automatically.

Args: operation_id: a read endpoint from the catalog. query / body / path_values: base parameters (cursor fields are managed). items_path: override the array path (default: the endpoint's own). limit: page size to request. max_items: hard cap to protect context (default 10000). Returns JSON: {"ok", "items", "total_fetched", "pages_fetched", "truncated"}.

Inputs: operation_id (required), body, limit, query, +3 more. Returns: result

ms_get_counterpartiesA
Read-only

Counterparties (customers and suppliers). Balance fields in kopecks.

Args: limit/offset: pagination. filter: MoySklad filter (e.g. "name~ООО"). rubles: convert kopeck balance fields to rubles (default true). Returns JSON: {"ok": true, "data": {"meta", "rows": [ counterparties ]}}.

Inputs: limit, filter, offset, rubles. Returns: result

ms_get_documentsA
Read-only

List a role document by type. Document total in "sum" (kopecks).

Args: doc_type: one of demand | supply | purchaseorder | invoiceout | invoicein | salesreturn | purchasereturn. limit/offset: pagination. filter: MoySklad filter (e.g. "moment>=2026-06-01 00:00:00"). rubles: convert "sum" and money fields to rubles (default true). Returns JSON: {"ok": true, "data": {"meta", "rows": [ documents ]}}.

Inputs: doc_type (required), limit, filter, offset, +1 more. Returns: result

ms_get_moneyA
Read-only

Cash balances by account/cashbox (kopecks). For cashflow over time use ms_call_method('ms_get_report_money_plotseries', ...) from the map.

Args: rubles: convert kopeck balances to rubles (default true). Returns JSON: {"ok": true, "data": {"meta", "rows": [ {account, balance, ...} ]}}.

Inputs: rubles. Returns: result

ms_get_ordersA
Read-only

List customer orders. Document total is "sum" (kopecks in raw API).

Args: limit: page size, max 1000. offset: pagination offset. filter: optional MoySklad filter (e.g. "moment>=2026-06-01 00:00:00"). rubles: convert "sum" and money fields to rubles (default true). Returns JSON: {"ok": true, "data": {"meta", "rows": [ orders ]}}.

Inputs: limit, filter, offset, rubles. Returns: result

ms_get_productsA
Read-only

List products/services/bundles (assortment) with prices and stock.

Args: limit: page size, max 1000. offset: pagination offset. filter: optional MoySklad filter expression (e.g. "archived=false"). rubles: convert kopeck money fields to rubles (default true). Returns JSON: {"ok": true, "data": {"meta", "rows": [ products ]}}. Sale prices and buy price are kopecks in the raw API; rubles=true converts them.

Inputs: limit, filter, offset, rubles. Returns: result

ms_get_profitA
Read-only

Profitability by product (sale, cost, profit, margin). Money in kopecks.

Args: moment_from / moment_to: period bounds "YYYY-MM-DD HH:MM:SS" (report needs them). limit/offset: pagination (rows under "rows"). rubles: kopecks→rubles (default true). Returns JSON: {"ok": true, "data": {"meta", "rows": [ ... ]}}.

Inputs: limit, offset, rubles, moment_to, +1 more. Returns: result

ms_get_rawA
Read-only

Read ANY endpoint by path, including ones missing from the catalog.

Target API: https://dev.moysklad.ru/doc/api/remap/1.2/.

Safe verbs only (GET, HEAD, OPTIONS). To change data use ms_write_raw, to delete use ms_delete_raw.

Args: path: full path beginning with '/', e.g. "/api/remap/1.2/async". method: safe verb, GET by default. host: host override; defaults to the service's default host. query: query-string parameters. body: JSON request body (rare on reads; some APIs want one). Returns JSON: {"ok": true, "status", "data"} or the error envelope.

Inputs: path (required), body, host, query, +1 more. Returns: result

ms_get_sectionA
Read-only

List all endpoints in one section.

Args: section: section name (see ms_list_sections), e.g. "statistics". Returns JSON list of {operation_id, method, path, safety, summary}.

Inputs: section (required). Returns: result

ms_get_stockA
Read-only

Current stock snapshot, grouped by product (fast /report/stock/all/current).

Args: stock_type: quantity | freeStock | reserve | inTransit | stock. Default quantity. include_zero: include zero-stock lines (adds include=zeroLines). Returns JSON: {"ok": true, "data": [ {assortmentId, <stock_type>}, ... ]}. No money in this report, so values are returned as-is (quantities).

Inputs: stock_type, include_zero. Returns: result

ms_get_storesB
Read-only

Warehouses/stores (small dictionary). No money fields.

Returns JSON: {"ok": true, "data": {"meta", "rows": [ {name, id, ...} ]}}.

Inputs: limit, offset. Returns: result

ms_get_turnoverA
Read-only

Turnover by product: opening/income/outcome/closing in qty and money (kopecks).

Args: moment_from / moment_to: period bounds "YYYY-MM-DD HH:MM:SS" (required by the report). limit/offset: pagination. rubles: kopecks→rubles (default true). Returns JSON: {"ok": true, "data": {"meta", "rows": [ ... ]}}.

Inputs: limit, offset, rubles, moment_to, +1 more. Returns: result

ms_get_workflowA
Read-only

Return the full plan for one workflow: ordered steps (each naming a catalog operation_id and why), interpretation guidance, and common mistakes to avoid.

Args: name: workflow name (see {svc}_list_workflows).

Inputs: name (required). Returns: result

ms_list_cabinetsA
Read-only

List configured cabinets for this marketplace and which one is active.

Returns JSON: {"active": str|null, "cabinets": [names], "fields_needed": [...]}. Secret values are never returned.

Inputs: no named parameters. Returns: result

ms_list_sectionsA
Read-only

List API sections and how many catalog endpoints each contains.

Inputs: no named parameters. Returns: result

ms_list_workflowsA
Read-only

List ready-made analytical workflows (recipes) for this marketplace.

Returns JSON: [{name, category, when_to_use}]. Use {svc}_get_workflow to fetch the full step-by-step plan for one.

Inputs: no named parameters. Returns: result

ms_mapA
Read-only

The big picture: business entities this API covers and the go-to methods for each. Call with no args to see the whole map ("you are here"); pass entity="reviews" (or stocks/prices/orders/…) to list every method of one entity. Use this before guessing — it orients you fast.

Inputs: entity. Returns: result

ms_pingA
Read-only

Live connectivity + auth check: GET assortment?limit=1.

Returns {"ok": true, "status": 200, "data": {...}} when the token works, or the canonical error envelope (auth/forbidden/network/...) otherwise. Use this on the cabinet to confirm the token before anything else.

Inputs: no named parameters. Returns: result

ms_post_documentA
Destructive

POST / провести a document: sets applicable=true, which MOVES STOCK AND MONEY in the books. DESTRUCTIVE — requires confirm_write=true AND i_understand_this_modifies_data=true. Separate from creation on purpose.

Args: doc_type: one of demand|supply|purchaseorder|invoiceout|invoicein| salesreturn|purchasereturn. doc_id: document id (the "id" field returned by create). Returns the updated document envelope, or the guard/gate error (nothing sent).

Inputs: doc_id (required), doc_type (required), confirm_write, i_understand_this_modifies_data. Returns: result

ms_remove_cabinetA
Destructive

Delete a stored cabinet. If it was active, another becomes active.

Args: name: the cabinet to remove.

Inputs: name (required). Returns: result

ms_search_methodsA
Read-only

Search the endpoint catalog by keyword (works in Russian and English).

Args: query: free text, e.g. "остатки", "stocks", "update price". limit: max results (1-50). Returns JSON list of matching endpoints (best first).

Inputs: query (required), limit. Returns: result

ms_set_keyA
Idempotent

Change / rotate the API key from chat (e.g. the old one expired or leaked).

⚠️ The key goes into the chat transcript — requires i_understand_key_goes_to_chat=true. The safe, terminal-free alternative is the installer, where the key never enters chat. Use a scoped key and rotate it in the seller cabinet if it was exposed.

Args: credentials: dict with the required fields ({fields}). cabinet: which cabinet to update. Default: the active one (so "my key expired" just works). If there is none, the cabinet is named from the marketplace's shop name, else "main". i_understand_key_goes_to_chat: must be true to proceed. On success the key is validated against the marketplace and the shop name is reported. Saved locally (chmod 600), never echoed back.

Inputs: credentials (required), cabinet, i_understand_key_goes_to_chat. Returns: result

ms_use_cabinetA
Idempotent

Switch the active cabinet. Subsequent API calls use its credentials.

Args: name: the cabinet to activate (see ms_list_cabinets).

Inputs: name (required). Returns: result

ms_write_methodA

Execute one WRITE endpoint from the catalog: create or update data.

Target API: https://dev.moysklad.ru/doc/api/remap/1.2/.

Requires confirm_write=true; nothing is sent without it. Irreversible operations live in ms_delete_method, reads in ms_call_method.

Args: operation_id: id from the catalog (see ms_search_methods). path_values: values for {placeholders} in the path. query: query-string parameters. body: JSON request body. confirm_write: must be true. Returns JSON: {"ok": true, "status", "data"} or the error envelope.

Inputs: operation_id (required), body, query, path_values, +1 more. Returns: result

ms_write_rawA

Create or update data at ANY path, including paths not in the catalog.

Target API: https://dev.moysklad.ru/doc/api/remap/1.2/.

POST, PUT and PATCH only; requires confirm_write=true.

Args: method: POST, PUT or PATCH. path: full path beginning with '/'. host: host override; defaults to the service's default host. query: query-string parameters. body: JSON request body. confirm_write: must be true. Returns JSON: {"ok": true, "status", "data"} or the error envelope.

Inputs: path (required), method (required), body, host, +2 more. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.7/5.0

    Scored across 36 tools

    Disambiguation3/5

    Several tool pairs overlap significantly: ms_add_cabinet vs ms_set_key, ms_build_purchaseorder vs ms_build_document, and ms_create_purchaseorder vs ms_create_document all serve nearly identical purposes with only subtle distinctions. Generic tools (ms_call_method, ms_write_method, ms_get_raw) also partially overlap with the specialized report and document tools. The detailed descriptions help mitigate confusion, but an agent could easily misselect among these.

    Naming Consistency4/5

    All tools use the ms_ prefix and snake_case, with mostly verb_noun patterns (ms_list_sections, ms_get_products, ms_create_document). Minor deviations exist: ms_map, ms_ping, ms_get_raw, and ms_fetch_all are less strictly verb_noun, but the convention remains predictable overall.

    Tool Count2/5

    36 tools is heavy for a single API wrapper, exceeding the 25+ threshold. The set includes redundant convenience wrappers (e.g., ms_build_purchaseorder duplicating ms_build_document) and multiple overlapping cabinet management tools, so several tools do not clearly earn their place.

    Completeness4/5

    The generic catalog, raw, and method-call tools provide workarounds for any missing operation, so there are no dead ends for the MoySklad API. However, the specialized surface lacks explicit update/delete tools for many entity types and has no dedicated document update tool, requiring fallback to generic calls.

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      C
      quality
      B
      maintenance
      MCP server for MoySklad (МойСклад) warehouse and CRM management API. 21 tools covering the full order lifecycle: products, stock, counterparties, customer orders, shipments, supplies, warehouses, organizations, reports, and webhooks.
      60
      70 npm
      10
      MIT
    • F
      license
      Not graded
      quality
      D
      maintenance
      Enables AI agents to read and write MoySklad inventory, orders, reports, and documents via JSON API 1.2 with safety gates.
      -
    • A
      license
      A
      quality
      B
      maintenance
      Provides AI assistants with direct access to the Moysklad (МойСклад) JSON API for reading inventory, products, orders, and reports, and creating/posted documents with safety controls.
      36
      35 PyPI
      3
      MIT
    • F
      license
      Not graded
      quality
      C
      maintenance
      Enables AI assistants to query live MoySklad data — inventory, sales, cash flow, documents, and analytics — through read-only MCP tools that match the dashboard's metrics.
      -