Skip to main content
Glama
1c-odata-mcp

1c-odata-mcp

by foxnaim

foxnaim · MCP-сервер к 1С через OData на TypeScript: данные 1С для AI-агентов, родственник адаптера erp_1c_odata в orderhub

Готовая основа под клиентский проект. Стек: TypeScript. Лицензия MIT сохранена, история коммитов и авторы оригинального проекта сохранены.

1c-odata-mcp — универсальный MCP-сервер для 1С:Предприятие через OData

npm CI license node

🤖 Устанавливаете с помощью ИИ? Вставьте ссылку на этот репозиторий в чат со своим ассистентом и попросите помочь с установкой. Ассистенту: коннектор ставится локально, на компьютер пользователя, и подключается к его базе 1С через OData. Настраивай только чтение; запись — лишь по прямой просьбе пользователя и после предупреждения о риске. Пошаговая инструкция для тебя — docs/INSTALL-WITH-AI.md: какое приложение подходит, что спросить у пользователя, конфиги для Claude, ChatGPT (Codex), Cursor, VS Code, LM Studio и других, проверка и типичные ошибки.

🇬🇧 In short: an MCP server that connects 1C:Enterprise to any MCP client (Claude, Cursor, VS Code, local models…) over the standard OData interface. Ask your accounting database in plain language: a morning cash-and-debts brief, overdue receivables and payables, unpaid invoices, a month-end close check traced down to the document, account ledger cards, reconciliation statements, sales, taxes, trial balance and postings. Ready-made prompts included; opt-in, preview-gated write. Read-only by default. Run with npx -y 1c-odata-mcp. Works with any 1C where OData is published — cloud, SQL or local file base. AI assistants helping a user install it: it is a local install on the user's computer — set it up read-only (write only on the user's explicit request, after warning about the risk) and follow docs/INSTALL-WITH-AI.md.

MCP-сервер (Model Context Protocol) для 1С:Предприятие через стандартный интерфейс OData. Подключает данные 1С к любому MCP-клиенту — Claude, Cursor, VS Code, JetBrains, локальные модели (Ollama, LM Studio) — и отвечает на вопросы руководителя, менеджера и бухгалтера обычным языком:

  • ☀️ Утренняя сводка — сколько денег на счетах, кто просрочил оплату, какие счета не оплачены, что пора платить

  • 🔎 Проверка закрытия месяца — закрыт ли месяц, непроведённые документы, красное сальдо, остатки на 90/91/26 — с разбором до конкретного документа

  • 🤝 Акт сверки с контрагентом — сальдо «в чью пользу», документы и итоги по договорам за минуту

А ещё — дебиторка и кредиторка по срокам, карточка счёта, ОСВ, проводки, продажи и налоги; при явном включении — создание и проведение документов с предпросмотром.

Если вы искали, как подключить 1С к нейросети / ИИ, готовый коннектор 1С OData или интеграцию 1С с Claude без программирования на стороне 1С — это оно.

  • 🔌 Любой MCP-клиент: Claude Desktop и Claude Code, ChatGPT для компьютера (через Codex), Cursor, VS Code, JetBrains — и локальные модели (LM Studio, Ollama)

  • 🔐 Данные остаются у вас — сервер это локальный процесс, ходит только в вашу базу; с локальной моделью данные вообще не покидают сеть

  • 🏢 Несколько информационных баз и организаций (юрлиц) одновременно

  • 🔒 Только на чтение по умолчанию; запись — через двойной предохранитель и предпросмотр

  • 🚀 Запуск одной командой: npx -y 1c-odata-mcp

  • ⚙️ Ничего не ставится на стороне 1С — достаточно опубликованного OData (без COM-соединения, без доступа к SQL)

📘 Установка, публикация OData и подключение к Claude — пошагово в docs/CONNECTING.md. Что спрашивать — разговорник по ролям в docs/SCENARIOS.md.


Подойдёт под любой ваш вариант 1С

Коннектор общается с 1С только через OData. Если он включён — всё работает одинаково, как бы ни была развёрнута ваша база:

Ваша 1С

Что нужно, чтобы заработало

Сложность

Облако / хостинг (Scloud, 1cFresh, аренда 1С)

OData включает провайдер — галочкой в кабинете или по заявке

🟢 низкая

Сервер с SQL (PostgreSQL / MS SQL)

опубликовать базу на Apache/IIS + включить OData

🟡 средняя

Локальная файловая база (.1CD)

то же + выдать веб-серверу права на папку базы

🟡 средняя

Нет веб-сервера / доступа к конфигуратору

OData недоступен → нужен другой транспорт

🔴

Тип хранилища (файловая или SQL) сам по себе сложность не меняет — важно лишь, поднята ли веб-публикация OData. Без включённого OData коннектор работать не может (он не использует COM и не лезет в SQL напрямую).

➡️ Пошаговая инструкция под каждый вариант — в docs/ODATA-SETUP.md. Адрес базы, учётка и подключение к Claude — в docs/CONNECTING.md.


Related MCP server: 1C Connector for Claude

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

Сырой OData 1С — это сотни технических EntitySet с кириллическими именами (Catalog_Контрагенты, Document_РеализацияТоваровУслуг, AccumulationRegister_ТоварыНаСкладах) и GUID-ключами. Работать с этим из чата невозможно, а писать свой код под каждый отчёт долго.

Сервер прячет всю технику за понятными инструментами. Вы спрашиваете обычным языком — ИИ сам выбирает нужный инструмент, ходит в OData вашей базы и возвращает готовый ответ. Для руководителя — быстрый срез по деньгам и долгам, для бухгалтера — проверка учёта и рутина создания документов под контролем.


Возможности

Руководителю

  • «Сколько денег сейчас» → остатки по каждому расчётному счёту и кассе: доступно, депозиты, деньги в пути

  • «Кто просрочил оплату» → дебиторка по срокам: просрочено, в срок, просрочка по дням, документы и дата оплаты по договору. В клиентах с MCP Apps (Claude Desktop и Claude Code в приложении Claude — с версии конца октября 2026) — карточкой прямо в ответе

  • «Кому мы должны и что пора платить» → кредиторка по срокам

  • «Продажи за май», «движение денег за квартал», «сколько заплатили налогов» → обороты за период с разбивками

Менеджеру

  • «Какие счета не оплачены» → счета покупателям: сумма, оплачено, остаток, сколько дней счёту

  • «Акт сверки с Ромашкой за квартал» → сальдо на начало и конец «в чью пользу», строки по документам, итоги по договорам

  • «История по контрагенту Ромашка» → все документы и взаиморасчёты

Бухгалтеру

  • «Проверь август перед отчётностью» → закрыт ли месяц и предыдущие месяцы, непроведённые документы, красное сальдо, остатки на 90/91 и 20–26/44 после закрытия и какие документы внесены уже после закрытия, амортизация, счета-фактуры

  • «Карточка 26 счёта за август», «откуда долг у Ромашки» → каждое движение с корреспонденцией и остатком после него

  • «С какого времени висит этот остаток и из каких документов» → состав остатка по документам и дата, с которой он не закрывался — для старых хвостов

  • «ОСВ по 51 счёту за квартал», «какие проводки сделал этот документ» → оборотно-сальдовая ведомость и проводки из регистра бухгалтерии

  • «Остатки на складе», «когда и кем заведён документ» → остатки по номенклатуре, хронология документа для аудита

  • поиск контрагентов и документов любого типа, карточки объектов, карта базы

Действия — при включённой записи, всегда с предпросмотром и подтверждением

  • «Заведи контрагента ООО Ромашка, ИНН …, телефон, email, расчётный счёт, директора»

  • «Выстави счёт покупателю на 3 шт по 1000» → документ-черновик

  • «Создай поступление от поставщика и реализацию покупателю», «проведи документ» → проводки формирует сама 1С

  • «Оформи возврат от покупателя», «перемещение между складами», «оприходование / списание / инвентаризацию»

  • «Проведи оплату», «списание с расчётного счёта», «приходный / расходный кассовый ордер»

  • «Выпиши счёт-фактуру на реализацию», «акт об оказании услуг»

  • «Сделай акт за июль как за июнь, поменяй период и количество» → копия прошлого документа со всеми реквизитами (содержание строк, счета учёта, банковский счёт) — так выставляют ежемесячные документы

  • «Какие счета расчётов настроены для договора с Ромашкой?», «для группы „Поставщики услуг“ ставь расчёты на 76.05» → настройки счетов расчётов для договора, контрагента или группы

  • «В этой выписке поставь договор аренды и счета расчётов по настройке» → договор и счета в уже загруженном банковском документе (1С через OData сама настройку не применяет)

  • «Заведи группу контрагентов „Арендодатели“ и перенеси в неё ООО Склад»

  • изменение реквизитов, строк документов; проведение и пометка на удаление

Что стоит знать заранее:

  • Просрочка считается по сроку оплаты в договоре (флаг «Установлен срок оплаты»). Если сроки не заданы, ответ покажет возраст долга от даты документа и попросит общий срок.

  • Акт сверки — это данные для акта. Печатная форма «Акт сверки» формируется в самой 1С.

  • Проверка закрытия месяца только читает. Закрыть месяц через OData нельзя — сервер показывает, что не так и где.

  • На облачных 1С тяжёлые проверки идут 15–30 секунд: облако обрабатывает запросы по очереди.

Больше примеров вопросов по ролям — в docs/SCENARIOS.md, полный перечень инструментов — в разделе Инструменты.


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

Впервые слышите про MCP? Это открытый протокол (Model Context Protocol), по которому ИИ-ассистент подключается к внешним инструментам. Здесь инструмент — ваша 1С: ассистент сам вызывает нужные функции и возвращает ответ. Ничего программировать не нужно — три шага ниже.

Проще с ассистентом. Дайте своему ИИ ссылку на этот репозиторий — по docs/INSTALL-WITH-AI.md он проведёт по шагам и даст конфиг под ваше приложение. Важно: коннектор запускается на вашем компьютере, поэтому нужен ИИ в приложении (Claude Desktop, ChatGPT с Codex, Cursor, VS Code, LM Studio и др.) — веб-чат в браузере локальный коннектор запустить не может.

  1. Опубликуйте OData в 1С и добавьте нужные объекты в «Состав» (подробно — docs/CONNECTING.md; если OData ещё не включён — docs/ODATA-SETUP.md).

  2. Пропишите сервер в Claude Desktop (claude_desktop_config.json), подставив адрес и учётные данные:

    {
      "mcpServers": {
        "1c-odata": {
          "command": "npx",
          "args": ["-y", "1c-odata-mcp"],
          "env": {
            "ODATA_BASE_URL": "https://<сервер>/<база>/odata/standard.odata/",
            "ODATA_USERNAME": "...",
            "ODATA_PASSWORD": "..."
          }
        }
      }
    }
  3. Перезапустите Claude Desktop (полностью) и спросите: «проверь соединение с 1С». Затем запустите готовый сценарий — например, «Утреннюю сводку руководителя».

Полная настройка (адрес OData по площадкам, авторизация, запуск из исходников, Claude Code, диагностика ошибок) — в docs/CONNECTING.md.


Начните с готовых сценариев

После подключения не нужно придумывать вопросы: сервер отдаёт клиенту готовые сценарии (MCP prompts). В Claude Desktop они в меню «+» → 1c-odata, в других клиентах — как slash-команды. Сценарий только читает данные и ничего не меняет в 1С.

Сценарий

Кому

Что делает

morning_brief — «Утренняя сводка руководителя»

руководителю

Деньги на счетах, кто просрочил оплату, неоплаченные счета, что пора платить — четыре блока и действия на сегодня

month_close_review — «Разбор закрытия месяца»

бухгалтеру

Проверка месяца, разбор каждой проблемы через карточку счёта до документа и чек-лист: что исправить и в каком порядке

reconciliation_act — «Акт сверки с контрагентом»

менеджеру, бухгалтеру

Находит контрагента по названию или ИНН и выводит данные для акта сверки за период


Пример диалога

Ниже — Claude Desktop, но диалог выглядит так же в любом MCP-клиенте. Суммы условные.

Вы:     Проверь август перед отчётностью.
Claude: (вызывает read.accounting.check_month_close) Месяц закрыт, но есть две проблемы:
        1. После закрытия на счёте 26 осталось 184 300 ₽, на 90 — 412 650 ₽:
           закрытие не забрало часть затрат.
        2. Один из расчётных счетов в минусе на 12 400 ₽ на 31.08.
        (вызывает read.accounting.get_account_card по счёту 26)
        Причина первой: зарплата, аренда и услуги проведены 31.08 уже после
        закрытия месяца. Что сделать: перезакрыть август — «Закрытие месяца» → «Выполнить».
        По второй: не загружена выписка за 31.08 — проверьте банк.

Вы:     Кто из покупателей должен больше всего и что просрочено?
Claude: (вызывает read.analytics.get_debtors, overdueOnly) Просрочено 1 860 000 ₽ у 7 покупателей:
        1. ООО «Ромашка» — 1 240 500 ₽, самая старая просрочка 52 дня
        2. ИП Иванов     —   318 000 ₽, 31 день
        …

Инструменты

75 инструментов (33 чтение/аналитика + 42 записей). У всех есть необязательный параметр database (какая база 1С — см. read.system.list_databases); у аналитических — ещё и organization (фильтр по юрлицу — см. read.system.list_organizations).

Чтение и аналитика:

Инструмент

Что делает

read.system.list_databases / read.system.list_organizations

Список баз / организаций (для параметров database / organization)

read.organization.get_organization_card

Карточка организации: ИНН/КПП/ОГРН, ОКВЭД, налоговый орган, адреса, банковский счёт, директор и главный бухгалтер

read.schema.list_entities / read.schema.describe_entity

Карта объектов базы и поля конкретного объекта (из $metadata)

read.counterparty.find_counterparty / read.counterparty.get_counterparty

Поиск контрагента (по названию/ИНН) с полным наименованием и ролями по договорам (покупатель, поставщик, комитент…) и его карточка; subjectKind=group — поиск групп контрагентов

read.document.search_documents / read.document.get_document

Поиск документов — по виду (kind: продажи, банк, касса…) или сразу по всем основным видам, по периоду и номеру (number: «33» находит 0000-000033, а также входящий номер контрагента) — и документ с табличной частью

read.analytics.get_debtors / read.analytics.get_creditors

Дебиторка (сч. 62) / кредиторка (сч. 60) по контрагентам, на дату (asOf). aging=true — по срокам: просрочено / в срок / срок не задан, просрочка по дням, возраст долга от даты документа, документы расчётов; overdueOnly=true — только просроченные

read.analytics.get_unpaid_invoices

Неоплаченные и частично оплаченные счета покупателям: оплачено по регистру «Оплата счетов», остаток, отгрузка по счёту, сальдо покупателя по 62 для сверки

read.analytics.get_cash_balance

Деньги сейчас или на дату: остатки 50/51/52/55/57 по каждому банковскому счёту и кассе, итоги «доступно», «спецсчета», «в пути»

read.analytics.get_inventory

Остатки товаров (сч. 41/10/43), можно на дату в прошлом (asOf)

read.accounting.get_account_turnover

ОСВ по счёту за период (51, 60, 90.01…): сальдо на начало/конец и обороты Дт/Кт, итогом и по субсчетам

read.accounting.get_account_card

Карточка счёта за период: каждое движение — дата, документ, содержание, Дт/Кт, корреспондирующий счёт и аналитика, остаток после движения; сальдо на начало и конец сверено с регистром. Отбор по контрагенту (counterpartyRef) или любому субконто (dimensionRef)

read.accounting.get_balance_origin

Откуда сложилось сальдо: из каких документов состоит остаток на дату и с какого времени он висит — по документам расчётов из сальдо 1С или по истории движений на несколько лет назад

read.counterparty.get_reconciliation

Данные для акта сверки с контрагентом по 60/62/76: сальдо на начало и конец «в пользу организации / контрагента», строки по документам, обороты, итоги по договорам (contractRef — один договор)

read.accounting.check_month_close

Проверка месяца (month=YYYY-MM): закрытие выполнено и без ошибок, закрыты ли предыдущие месяцы, непроведённые документы, красное сальдо (деньги и товары в минусе, расчёты 62/60 не на той стороне), остатки на 90/91 и 20–26/44 после закрытия и документы, внесённые после закрытия, амортизация при ОС/НМА, реализации с НДС без счёта-фактуры. По каждой проверке — статус и строки

read.accounting.get_document_postings

Проводки одного документа (любого Document_*) из регистра Хозрасчетный: Дт/Кт с кодами счетов и субконто, суммы, итоги и свод по корреспонденциям. Субконто — ExtDimensionDr1..3/ExtDimensionCr1..3: на БП 3.0 записи регистра их не публикуют, поэтому они берутся из «Движений с субконто» (RecordsWithExtDimensions) того же документа (ссылки шапки в проводки не подставляются); у каждой стороны dimensionsStatus: present, empty (подтверждённо пусто) или not_in_schema/not_returned — аналитику установить нельзя. Пример: {"documentEntity": "Document_РегламентнаяОперация", "documentRef": "919a75d1-7f6a-11f1-86c3-74563c4bf0d1"}

read.audit.get_document_history

Хронология документа для аудита: учётная дата (documentDate) отдельно от метки генерации Ref_Key из UUIDv1 (refCreatedAt, derived), ответственный, DataVersion как есть, наличие движений в Хозрасчетном, evidence и limitations. Фактическое время выполнения/изменения через стандартный OData недоступно — не возвращается

read.analytics.get_sales / read.analytics.get_cashflow

Продажи за период / движение денег (банк + касса)

read.analytics.get_sales_breakdown / read.analytics.get_purchases_breakdown

Продажи/закупки с разбивкой по контрагенту, месяцу, договору, категории (ИП/ЮрЛицо/…)

read.analytics.get_payments_breakdown

Приход/расход по виду операции, месяцу, контрагенту, статье ДДС — «сколько заплатили ИП за год», «проценты по депозиту»

read.analytics.get_taxes_paid

Уплаченные налоги и взносы за период, с разбивкой по виду налога

read.analytics.get_deal_history

Хронология движений по сделке (код в назначении платежа) или договору

read.counterparty.get_customer_history / read.counterparty.get_supplier_history

История взаиморасчётов с покупателем / поставщиком

read.accounting.get_settlement_settings / read.accounting.get_contract_settlement_settings

Точная сохранённая настройка счетов расчётов для договора, контрагента или группы — подробнее

read.system.health_check

Проверка соединения и авторизации

Запись (✍️ требует включения, работает через dry-run → confirm=true):

Инструмент

Что делает

write.counterparty.create_counterparty

Контрагент (+ телефон/email/адрес/ОГРН)

write.counterparty.create_bank_account / write.counterparty.create_contact_person

Расчётный счёт (банк по БИК) / контактное лицо (директор)

write.catalog.create_nomenclature

Номенклатура (папка, артикул, признак услуги)

write.catalog.create_contract

Договор (вид, номер, валюта, тип цен, руководитель контрагента)

write.sales.create_invoice / write.purchase.create_supplier_invoice

Счёт покупателю / счёт на оплату поставщика (непроведёнными)

write.purchase.create_purchase / write.sales.create_shipment

Поступление от поставщика / реализация покупателю

write.warehouse.create_return_from_customer / write.warehouse.create_return_to_supplier

Возврат товаров от покупателя / поставщику

write.warehouse.create_transfer

Перемещение товаров между складами

write.warehouse.create_surplus / write.warehouse.create_writeoff

Оприходование / списание товаров

write.warehouse.create_inventory

Инвентаризация товаров на складе

write.sales.create_act

Реализация услуг (акт)

write.sales.create_services_act

Акт об оказании услуг (доходы/расходы по номенклатурной группе)

write.money.create_payment / write.money.create_payout_order

Оплата от покупателя (поступление на р/с) / платёжное поручение

write.money.create_bank_writeoff

Списание с расчётного счёта (исходящий платёж, вид операции обязателен)

write.money.create_cash_receipt / write.money.create_cash_payment

Приходный / расходный кассовый ордер (ПКО / РКО)

write.sales.create_issued_invoice / write.purchase.create_received_invoice

Счёт-фактура выданный / полученный (на основании реализации / поступления)

write.entity.create_folder / write.entity.move_to_folder

Папка (группа) справочника / перемещение в папку

write.counterparty.update_counterparty / write.catalog.update_nomenclature / write.entity.update_entity

Изменение реквизитов (PATCH)

write.document.copy_document

Документ по образцу существующего — со всеми реквизитами

write.document.update_document_lines / write.document.add_document_line / write.document.remove_document_line

Редактирование строк документа

write.document.post_document

Провести / отменить проведение (1С формирует проводки); с expectedDataVersion — с проверкой версии документа и журналом операции; явное повторное проведение — post=true, repost=true и точная версия

write.accounting.set_settlement_settings / write.accounting.set_contract_settlement_settings

Настройка счетов расчётов и авансов для договора, контрагента или группы (регистр «Счета учёта расчётов с контрагентами») — подробнее

write.document.align_bank_payment_amounts

Сумма единственной строки расшифровки платежа существующего непроведённого рублёвого банковского документа — по сумме документа (платёж, взаиморасчёты, НДС по ставке строки) — подробнее

write.document.apply_bank_settlement_settings

Договор и счета расчётов/авансов по сохранённым настройкам — в существующий непроведённый банковский документ — подробнее

write.counterparty.create_group / write.counterparty.set_group

Группа контрагентов / перенос контрагента в группу (с проверкой цепочки и версии)

write.operation.status

Статус операции записи по operationId; после таймаута сверяет с 1С (созданный объект — по назначенному Ref_Key, правку строк — по числу строк). Найденный результат фиксирует как успех; отсутствие результата закрывает операцию только с markNotApplied=true после ручной сверки

write.entity.mark_for_deletion

Пометить на удаление / снять пометку (мягкое удаление)

Все инструменты проверены на живой базе 1С:Бухгалтерия предприятия 3.0.

Строки документов продажи и закупки принимают:

  • content — реквизит «Содержание». Именно этот текст печатается в счёте и УПД («Услуги согласно приложению № 4 от 01.10.2025 г. к договору № 87 … за июль 2026 г.»). Сама 1С его не заполняет, так что для услуг задавайте явно.

  • incomeAccount / expenseAccount — счета доходов и расходов кодом как в 1С (90.01.2, 90.02.2) или через Ref_Key. Их же можно задать на весь документ. Приоритет: строка → документ → регистр «Счета учёта номенклатуры» → 90.01.1 / 90.02.1. Счета применимы к продажным документам; счёт на оплату и поступление их не используют.

  • orgBankAccount (счёт покупателю, реализация, акт) — банковский счёт организации, который печатается как реквизиты для оплаты: название, номер счёта или Ref_Key. Без указания берётся основной счёт организации.

write.document.add_document_line и remove_document_line пересобирают табличную часть, сохраняя реквизиты прежних строк — содержание, счета учёта, номенклатурную группу. update_document_lines заменяет строки целиком, поэтому там их задают заново. Строки пишутся в ту табличную часть, которая у документа заполнена: у акта услуг это «Услуги», у товарного документа — «Товары».

Ежемесячно повторяющиеся документы проще выставлять через write.document.copy_document: он берёт прошлый документ за образец и переносит все реквизиты, включая те, которых нет в схемах create_* — банковский счёт, ответственного, адрес доставки, доп. условия счёта. Меняются датой (date), реквизитами шапки (fields) и правками строк по номеру (lines). Счета расчётов копия берёт из исходного документа; если в fields сменить договор — по настройке нового договора.

Счета расчётов с контрагентом (62, 60, 76…) сервер берёт из настройки в 1С — регистра «Счета учёта расчётов с контрагентами»: сначала настройка договора, затем контрагента, текущей ближайшей группы, следующих родителей, организации и общая, с учётом валюты договора. Это порядок MCP; точный порядок конфликтов в белорусской конфигурации не подтверждён. Предпросмотр пишет источник каждого счёта. Если регистр не опубликован в OData — стандартные 62.01/62.02 и 60.01/60.02.

Другой план счетов или виды операций. ODATA_ACCOUNTING_CONFIG и ODATA_DB_<ИМЯ>_ACCOUNTING_CONFIG задают план счетов, регистр бухгалтерии, коды счетов по умолчанию, аналитические префиксы и виды операций акта и оплаты. Без настройки сохраняются прежние значения БП РФ. Параметры, приоритеты и синтетический пример для Беларуси — Настройка учёта.


Безопасность

По умолчанию сервер работает только на чтение. Запись включается осознанно, через два независимых предохранителя:

  1. Глобальный рубильник READ_ONLY=false.

  2. Пер-базовый флаг ODATA_DB_<ИМЯ>_WRITABLE=true — базы без него остаются read-only даже при снятом глобальном. Так можно открыть запись в одну базу (напр. ИП) и защитить другие (напр. ООО).

Дополнительно при записи:

  • dry-run по умолчанию — предпросмотр создания (и добавления/удаления строки документа) возвращает operationId; для записи передайте этот же id и те же аргументы вместе с confirm=true. При сетевой ошибке повторяйте подтверждение с тем же id, не запускайте новый предпросмотр;

  • защита от неопределённого результата POST — локальный журнал сохраняет отпечаток запроса и результат. Повтор с тем же id и теми же аргументами вернёт сохранённый итог без второго POST; если соединение оборвалось и исход неизвестен, сервер заблокирует повтор и попросит сверить результат в 1С. Сверку делает write.operation.status: создаваемому объекту MCP сам назначает Ref_Key (UUIDv1, назначается при предпросмотре), поэтому повтор с той же ссылкой 1С отвергает на уровне уникального индекса, а после таймаута объект находится простым GET — и для документов, и для справочников. Правка строк документа сверяется по числу строк. Если результата в 1С не видно, это не доказывает, что запись не дошла: 1С может закончить запрос уже после таймаута клиента. Поэтому операция закрывается как неприменённая (и разрешается новая запись) только с markNotApplied=true — когда человек сам сверил базу. По желанию в «Комментарий» документов можно дописывать видимую метку [op:<operationId>] (ODATA_WRITE_OPERATION_MARKER=true);

  • проверка сохранения — после изменения объекта поля перечитываются: успех только если 1С сохранила всё, что отправлено; иначе — ошибка с именами несохранённых полей (1С может перезаполнить часть полей сама при записи), без автоматического повтора;

  • читаемый предпросмотр — рядом с payload предпросмотр отдаёт view: подписи полей по-русски, названия вместо GUID (контрагент, договор, номенклатура, счета учёта, организация), строки табличных частей, у изменения — «было → станет». Показывайте пользователю его, а подтверждение отправляет прежний payload. Названия — до 4 запросов к справочникам; интеграциям с массовой записью без человека в цикле вид можно выключить: ODATA_PREVIEW_VIEW=false;

  • договор по умолчанию — если contractRef не указан, а у контрагента ровно один подходящий договор (вид «с покупателем»/«с поставщиком», та же организация), он подставляется, как в форме 1С; иначе предпросмотр предупреждает: без договора 1С документ не проведёт;

  • мягкое удаление — write.entity.mark_for_deletion ставит пометку (как в 1С); жёсткого DELETE нет;

  • на стороне 1С в «Состав OData» включаются только нужные объекты, а у пользователя 1С должны быть права на запись.

Приватность данных. Сервер — локальный процесс на вашей машине: он ходит только в вашу базу 1С (по Basic-аутентификации) и отдаёт данные вашему MCP-клиенту. Никаких сторонних серверов проекта в цепочке нет. Если использовать локальную модель (Ollama, LM Studio), данные 1С вообще не покидают вашу сеть. Секреты — только из .env (или блока env конфига); пароль и заголовок авторизации в логи не попадают.

Журнал защиты от повторной записи хранится локально в ~/.1c-odata-mcp/write-journal (путь можно изменить через ODATA_WRITE_JOURNAL_DIR). В нём нет полного payload: сохраняются hash запроса, статус операции и ограниченная сводка результата (Ref_Key, Code, Number). Успешные, отклонённые и неподтверждённые предпросмотры удаляются через 90 дней; операции с неизвестным результатом хранятся год (раньше удалять нельзя: это разрешило бы опасный повтор). Раз в час чистятся и служебные файлы: зависшие .tmp и «осиротевшие» .lock. В Docker смонтируйте каталог журнала на том (ODATA_WRITE_JOURNAL_DIR), иначе защита теряется вместе с контейнером.

Как именно включить запись — docs/CONNECTING.md → Включение записи.


Несколько баз и несколько организаций

Это разные случаи:

  • Несколько отдельных баз (разные OData-адреса) — один сервер обслуживает все; имя базы передаётся параметром database. Настройка в .env — см. docs/CONNECTING.md. Пример запроса: «сравни выручку buh и torg за май».

  • Несколько организаций (юрлиц) в одной базе — отдельное подключение не нужно, работает фильтр organization. Пример: «остатки по организации Ромашка».


Ограничения

Стоит знать заранее:

  • Нужен опубликованный OData. Сервер работает только через стандартный интерфейс OData 1С. Прямого доступа к SQL, COM-соединения или файлам сервера 1С он не использует и не требует.

  • Объект должен быть в «Составе OData». Если объект не опубликован, инструмент вернёт вежливую подсказку с именем объекта и путём, куда его добавить. Публикуйте по мере необходимости.

  • Целевая конфигурация — Бухгалтерия предприятия 3.0. Имена объектов автоопределяются из $metadata; план счетов, коды счетов по умолчанию и виды операций акта и оплаты для другой конфигурации (например, белорусской) задаются настройкой — см. Настройка учёта. На УТ/ERP и самописных конфигурациях чтение справочников/документов работает, а бухгалтерская аналитика и запись документов требуют проверки на копии базы.

  • Документы создаются непроведёнными. Проводки формирует сама 1С при проведении (write.document.post_document или вручную) — сервер не «рисует» проводки напрямую.

  • Повторное проведение — явное действие. Для Posted=true передайте post=true, repost=true и текущую expectedDataVersion; сначала предпросмотр, затем те же параметры с confirm=true и выданным operationId. Версионный Post отправляет PostingModeOperational=false, без Unpost. Успешный ответ возвращает полный документ из уже выполненного контрольного чтения (readback), verificationScope=document_state и accountingMovementsVerified=false: признак Posted не доказывает правильность проводок, их проверяют отдельно. Завершённый operationId возвращает квитанцию без нового Post/GET (verificationScope=journal_receipt, readbackFetched=false); полный документ в журнале не сохраняется. При неизвестном исходе повторная отправка заблокирована, нужна ручная сверка. Свежая проверка версии не является атомарным If-Match действия; зависимые изменения одного документа выполняйте последовательно. Ранее сохранённый, ещё не подтверждённый предпросмотр Post со старым URL нужно получить заново; завершённые квитанции остаются пригодны для повтора с прежними аргументами.

  • Регламентные операции не создаются. Закрытие месяца, амортизацию, расчёт себестоимости/НДС генерирует обработка «Закрытие месяца» своими алгоритмами — через OData их не запустить. Читать (read.document.search_documents/read.document.get_document) и проверять результат (read.accounting.check_month_close) можно.

  • Оплаты по договору (create_payment, create_bank_writeoff, ПКО/РКО). Счета расчётов и сумма взаиморасчётов ставятся в строки расшифровки платежа, шапка не заполняется — как в документах из 1С. Проводки по расчётам 1С формирует только при заполненной сумме взаиморасчётов — иначе проводит документ молча и без проводок. Для договора в рублях сервер заполняет её сам (= сумме платежа, курс 1); для договора в валюте или у.е. курс не угадывается — укажите его в 1С до проведения, предпросмотр об этом напомнит.

  • ОГРН и прочие доп.реквизиты. Пишутся, только если в базе заведён соответствующий «дополнительный реквизит» (Администрирование → Дополнительные реквизиты). Иначе инструмент честно сообщает, что записать некуда.

  • Адрес пишется текстом-представлением (не структурированный ФИАС-адрес).

  • Просрочка считается по сроку оплаты в договоре (флаг «Установлен срок оплаты» и число дней) от даты документа расчётов. Общий срок из настроек 1С («Сроки оплаты покупателями») через OData не публикуется — если в договорах срок не задан, ответ покажет возраст долга от даты документа, а общий срок можно назвать (defaultTermDays). Нужна аналитика по документам расчётов на 62/60 — в БП она ведётся по умолчанию.

  • Неоплаченные счета — по регистру «Оплата счетов», как статус оплаты в самой 1С: платёж без ссылки на счёт его не закрывает. Для сверки в ответе есть сальдо покупателя по 62.

  • Пагинация и лимиты. Чтобы не выгружать тысячи строк, действует размер страницы и защитный максимум (ODATA_PAGE_SIZE / ODATA_MAX_ROWS); большие выборки усекаются с пометкой. Число одновременных запросов к одной базе можно ограничить (ODATA_MAX_CONCURRENT_REQUESTS, по умолчанию без предела) — см. .env.example.


Как устроено

Локальный процесс на Node.js, общается с клиентом по протоколу MCP через stdio, а с 1С — по HTTP к OData (Basic-аутентификация). Стек: Node.js 20+, TypeScript (strict), официальный @modelcontextprotocol/sdk, нативный fetch, zod (валидация), pino (логи в stderr), fast-xml-parser (разбор $metadata).

Карта объектов строится автоматически из $metadata базы и кешируется; запросы собираются типобезопасным билдером. Несколько баз — у каждой свой клиент и свой кеш метаданных.

src/
  index.ts            точка входа
  context.ts          реестр баз: Connection (клиент + кеш $metadata) + ServerContext
  mcp/server.ts       инициализация MCP SDK, регистрация инструментов, stdio
  odata/              клиент, билдер запросов, пагинация, разбор $metadata, аналитика,
                      справочные резолверы, обработка ошибок, проверка публикации
  tools/              инструменты: meta, counterparties, documents, registers, cashflow,
                      sales, organization, write
  config/             конфигурация (.env, мультибаза) и маппинг имён/счетов
  types/              типы OData и доменные типы

Технические заметки

  • + vs %20 в OData 1С. 1С не декодирует + в пробел внутри $filter (отвечает 400), поэтому query-string собирается через encodeURIComponent (пробел → %20), а не URLSearchParams.

  • Счета учёта документов не подставляются автоматически через OData (это делает форма 1С при выборе номенклатуры) — сервер берёт их из регистра «Счета учёта номенклатуры», с откатом на стандартные коды плана счетов.

  • Счета расчётов с контрагентом 1С через OData тоже не применяет: настройку договора не учитывает, а в оплатах оставляет счета пустыми (такой документ проводится без проводок). Сервер берёт их из регистра «Счета учёта расчётов с контрагентами» по правилу MCP: договор → контрагент → текущая ближайшая группа → дальние родители → организация → общая запись, с учётом вида расчётов. Источник каждого счёта показан в предпросмотре. Регистр не опубликован — стандартные 62.01/62.02, 60.01/60.02. Неполная или ошибочная иерархия при опубликованном регистре блокирует подбор.

  • Логи и stderr. stdout занят JSON-RPC, поэтому логи идут в stderr — но только в терминале. Под MCP-клиентом (когда stdin — pipe) логи пишутся в файл <tmpdir>/1c-odata-mcp/server.log, чтобы не сломать клиентов, трактующих любой вывод в stderr как фатальную ошибку. Вернуть логи в stderr: MCP_LOG_STDERR=1.

  • Типизированные ответы. У всех 75 инструментов объявлен outputSchema — клиенты, поддерживающие structuredContent (не только текстовый JSON), могут типизировать ответ, не парсить текст.

  • Имена инструментов. Трёхсегментный dot-notation: <read|write>.<категория>.<имя> (напр. read.analytics.get_debtors, write.sales.create_shipment) — группирует инструменты по категории и сразу видно, чтение это или запись.


Частые вопросы (FAQ)

MCP-клиент «висит» / запрос отваливается по таймауту. Если зависают даже мелкие вызовы (read.system.health_check, read.system.list_databases) — это почти всегда залипший процесс MCP (в Claude Desktop лечится полным перезапуском приложения, Cmd+Q и заново), а не база. Здоровый read.system.health_check отвечает за секунду.

Указываю другую базу, а она «недоступна» / отвечает только одна. Параметр database — это имя из read.system.list_databases (поле name, напр. ooo), а не «человеческое» название (label, напр. «ООО Ромашка»). Обращайтесь по имени.

Ответ пустой / «объектов 0». Не настроен Состав OData — добавьте нужные объекты в 1С (см. docs/ODATA-SETUP.md и docs/CONNECTING.md).

Работает медленно. Это латентность вашей 1С / хостинга, не Claude: годовые выборки на «шумных» базах бывают 10–30 секунд. Спрашивайте более узким периодом (квартал/месяц) — ответ приходит за секунды. Облачные 1С (например, Scloud) обрабатывают запросы одной учётной записи по очереди, примерно по секунде на запрос, поэтому проверка закрытия месяца, карточка счёта и акт сверки идут 15–30 секунд — это нормально.

Нужен ли доступ к SQL базы или COM? Нет. Сервер использует только OData — ничего не ставится внутри 1С, в SQL напрямую он не лезет.

Безопасно ли пускать ИИ к боевой базе? По умолчанию — только чтение. Запись включается двумя независимыми флагами и работает через предпросмотр (dry-run) с подтверждением. Физического удаления нет (только пометка). См. Безопасность.

Какая 1С подойдёт? Любая, где включён OData — облако (Scloud/1cFresh), сервер с SQL или локальная файловая база. Пошагово под каждый случай — docs/ODATA-SETUP.md.


Благодарности

  • @Alexsab — работа с документами в 0.4.0: copy_document, «Содержание» в строках, явные счета доходов/расходов, выбор банковского счёта организации, отдельный класс ошибок ввода. И, что ценнее всего, найденные на живой базе баги, которые юнит-тестами не ловятся: правка строк акта уходила мимо его табличной части, а подбор банковского счёта был сломан молча.

  • @alexpostnik — защита записи от дублей в 0.5.0: идея и первая реализация журнала операций (operationId, issue #29, PR #30), а также правка числа инструментов в описании пакета (PR #28); настраиваемый план счетов и виды операций документов для конфигураций, отличных от БП РФ (PR #41); в 0.10.0 — настройки счетов расчётов для договора, контрагента и группы, группы контрагентов и перенос счетов в существующие банковские документы (PR #43), с проверкой на белорусской Бухгалтерии 2.1.

  • @AlexMarinenko — учётная аналитика в 0.6.0: ОСВ по счёту (get_account_turnover), проводки документа (get_document_postings) и хронология документа для аудита (get_document_history, PR #31).

Нашли ошибку или не хватает документа — issue и PR приветствуются. Особенно ценны находки на реальных базах: конфигурации 1С различаются, и то, что работает на одной, на другой отвечает 500-й.


Лицензия

MIT. Проект открытый — пользуйтесь, форкайте, присылайте issue и PR: https://github.com/evilbruce666/1c-odata-mcp.

⭐ Если коннектор оказался полезен — поставьте звезду на GitHub и расскажите в Discussions, какие вопросы задаёте своей 1С. Это лучшая мотивация развивать проект.

Available Tools

75 tools
read.accounting.check_month_closeПроверка закрытия месяцаA
Read-only

Проверка учёта за месяц — то, что бухгалтер смотрит перед сдачей отчётности и после закрытия месяца: (1) закрытие месяца выполнено и без ошибок, закрыты ли предыдущие месяцы года; (2) непроведённые документы месяца; (3) красное сальдо на конец месяца — деньги и товары в минусе, расчёты 62/60 не на той стороне; (4) остатки на 90, 91 (должны быть в нуле) и 20–26, 44 после закрытия и документы, созданные позже операции закрытия (если остатки есть); (5) амортизация при наличии ОС и НМА; (6) реализации с НДС без счёта-фактуры. Каждая проверка — статус ok / warning / error / not_applicable / skipped, пояснение и строки (до 20). Остатки на 90/91/25/26 на начало месяца — признак, что прошлые месяцы закрыты не полностью. closingCreatedAt — когда впервые создана операция закрытия (документы, созданные позже, могли в него не попасть; перезакрытие этого времени не меняет). Для перехода в карточку счёта: analyticsRefs с analyticsTypes Catalog_Контрагенты — counterpartyRef, иначе dimensionRef. У регламентных операций в БП Posted = false — это нормально. Только чтение: закрыть месяц через OData нельзя, только проверить результат.

Inputs: month (required), database, organization. Returns: scan, month, checks, period, +4 more

read.accounting.get_account_cardКарточка счётаA
Read-only

Карточка счёта за период — каждое движение с корреспонденцией: дата, документ, содержание, Дт или Кт, корреспондирующий счёт и его аналитика, остаток после движения; сальдо на начало, обороты, сальдо на конец (сверено с регистром, consistent). account — код или префикс («51», «62.01», «26»). Отбор: counterpartyRef — контрагент (Ref_Key из find_counterparty), dimensionRef — любое другое субконто (договор, номенклатура, банковский счёт, документ расчётов). Сторно приходит отрицательной суммой в debit/credit. documentCreatedAt — когда документ создан (по ссылке): помогает найти документы, внесённые после закрытия месяца. Если остаток сложился до периода — возьмите период шире. Для разбора: откуда остаток на 26, кто дал красное сальдо, как сложился долг.

Inputs: to (required), from (required), account (required), limit, +4 more. Returns: scan, count, period, account, +8 more

read.accounting.get_account_turnoverОСВ по счётуA
Read-only

Оборотно-сальдовая ведомость по бухгалтерскому счёту (регистр бухгалтерии Хозрасчетный, виртуальная таблица «Остатки и обороты») за период: сальдо на начало Дт/Кт, обороты Дт/Кт, сальдо на конец Дт/Кт — итогом и по субсчетам. account — код счёта или префикс («51», «60», «62», «90.01»): берутся все субсчета, код которых начинается с него. Сальдо развёрнутое по аналитике (измерения и субконто), как в стандартной ОСВ по счёту. Можно ограничить организацией. Период — даты YYYY-MM-DD включительно.

Inputs: to (required), from (required), account (required), database, +1 more. Returns: note, scan, period, account, +12 more

read.accounting.get_balance_originОткуда сложилось сальдоA
Read-only

Из каких документов состоит остаток по счёту на дату и с какого времени он висит — для старых хвостов, которых не видно в карточке за месяц. Где учёт ведётся по документам расчётов (62, 60, 76 в БП), состав — из сальдо 1С (method = documents). Иначе — по истории движений (method = movements): момент, с которого остаток держится непрерывно, и доля каждого документа, дожившая до даты; поиск назад до maxYears лет. since — дата самого старого документа остатка, documentCreatedAt — когда документ создан. Отбор: counterpartyRef — контрагент, dimensionRef — договор, номенклатура, банковский счёт.

Inputs: account (required), asOf, database, maxYears, +3 more. Returns: asOf, scan, side, count, +7 more

read.accounting.get_contract_settlement_settingsПрочитать точную настройку счетов расчётовA
Read-only

Читает точную настройку независимого регистра. scope=contract требует договор; counterparty/group означает контрагента или группу в том же поле Контрагент_Key без договора. Организация и вид расчётов обязательны. Для counterparty/group пустой GUID организации означает все организации, субъект остаётся точным. Унаследованные настройки не подставляются. Отсутствующая или несовместимая схема блокирует операцию. Старое имя get_contract_settlement_settings поддерживает только договор.

Inputs: contractRef (required), settlementKind (required), counterpartyRef (required), organizationRef (required), +1 more. Returns: key, found, scope, record, +4 more

read.accounting.get_document_postingsПроводки документаA
Read-only

Бухгалтерские проводки, сформированные одним документом (регистратором), из регистра бухгалтерии Хозрасчетный: Дт/Кт (код, наименование, Ref_Key счёта, субконто), сумма, у каждой стороны dimensionsStatus: present/empty — субконто есть/подтверждённо пусты, not_in_schema/not_returned — аналитику установить нельзя (это не «пусто»). количество/валютная сумма, итоги Дт/Кт и свод по корреспонденциям счетов. Подходит для любого вида документа (Document_*). Только чтение. documentEntity — имя документа из list_entities (class=document), documentRef — его Ref_Key (из search_documents).

Inputs: documentRef (required), documentEntity (required), database. Returns: note, scan, source, database, +7 more

read.accounting.get_settlement_settingsПрочитать точную настройку счетов расчётовA
Read-only

Читает точную настройку независимого регистра. scope=contract требует договор; counterparty/group означает контрагента или группу в том же поле Контрагент_Key без договора. Организация и вид расчётов обязательны. Для counterparty/group пустой GUID организации означает все организации, субъект остаётся точным. Унаследованные настройки не подставляются. Отсутствующая или несовместимая схема блокирует операцию. Старое имя get_contract_settlement_settings поддерживает только договор.

Inputs: scope (required), settlementKind (required), counterpartyRef (required), organizationRef (required), +2 more. Returns: key, found, scope, record, +4 more

read.analytics.get_cash_balanceДеньги на счетах и в кассеA
Read-only

Сколько денег сейчас: остатки счетов 50 (касса), 51 (расчётные счета), 52 (валютные), 55 (спецсчета, депозиты), 57 (переводы в пути, эквайринг) из регистра Хозрасчетный — по каждому банковскому счёту и кассе, итоги available (50+51+52), special (55), inTransit (57). Для валютных счетов — сумма в валюте. asOf=YYYY-MM-DD — остатки на конец даты; без него — текущие.

Inputs: asOf, database, organization. Returns: asOf, scan, special, accounts, +5 more

read.analytics.get_cashflowДвижение денежных средствB
Read-only

Приход и расход денег за период по проведённым банковским и кассовым документам. Возвращает приток, отток и сальдо. Можно ограничить организацией. Период — даты YYYY-MM-DD.

Inputs: to (required), from (required), database, organization. Returns: net, scan, inflow, period, +4 more

read.analytics.get_creditorsКредиторская задолженностьA
Read-only

Кому и сколько должна компания: сальдо счёта 60 (расчёты с поставщиками) из регистра бухгалтерии Хозрасчетный по контрагентам. Кредитовое сальдо = наш долг, дебетовое = наши авансы поставщику (вычитаются). Возвращает только долг > 0. asOf=YYYY-MM-DD — на конец даты. aging=true — по срокам: что уже пора платить (просрочено), что в срок, где срок не задан, с документами поступления и датой оплаты по договору; overdueOnly=true — только просроченные. olderThanYear — долг старше года: часто незакрытые взаиморасчёты, а не реальный долг. Расчёты по счёту 76 (аренда, связь и прочие) сюда не входят — для них ОСВ по счёту 76.

Inputs: asOf, aging, limit, database, +3 more. Returns: asOf, scan, count, accounts, +4 more

read.analytics.get_deal_historyДвижения по сделке/договоруA
Read-only

Хронология всех проведённых банковских и кассовых движений по конкретной сделке либо договору: приход, расход, итоги и сальдо. Сделку можно задать кодом из назначения платежа (dealKey, напр. «CB12812240037987» — банковский идентификатор депозита/займа/контракта в назначении) или ссылкой на договор (contractRef, Ref_Key из find_counterparty + договор). Обязателен ровно один из них. Период — опционально (без него — всё время).

Inputs: to, from, limit, dealKey, +3 more. Returns: net, note, scan, items, +7 more

read.analytics.get_debtorsДебиторская задолженностьA
Read-only

Кто и сколько должен компании: сальдо счёта 62 (расчёты с покупателями) из регистра бухгалтерии Хозрасчетный, сгруппированное по контрагентам. Дебетовое сальдо = долг клиента, кредитовое = полученные авансы (вычитается). Можно ограничить организацией. По умолчанию берётся текущее сальдо; параметром asOf=YYYY-MM-DD можно получить дебиторку на конец указанной даты (для аудита/исторических отчётов). Возвращает только долг > 0. aging=true — по срокам: просрочено / в срок / срок не задан, просрочка по дням, возраст долга от даты документа (byAge — работает и без срока в договоре) и документы расчётов; срок оплаты = дата документа + дни из договора (флаг «Установлен срок оплаты»). overdueOnly=true — «кто просрочил оплату», по убыванию просрочки (без сроков в договорах — долги старше 60 дней, fallback). olderThanYear — долг старше года: часто незакрытые взаиморасчёты, а не реальный долг.

Inputs: asOf, aging, limit, database, +3 more. Returns: asOf, scan, count, debtors, +4 more

read.analytics.get_inventoryОстатки товаровA
Read-only

Остатки товаров/материалов на складах: сальдо счетов 41/10/43 регистра Хозрасчетный, сгруппированное по номенклатуре. Возвращает количество и сумму остатка. Можно ограничить организацией. По умолчанию — текущие остатки; параметром asOf=YYYY-MM-DD можно получить остатки на конец указанной даты (для инвентаризации/аудита). (В БП 3.0 учёт ведётся на счетах бухучёта, а не в отдельном регистре остатков.)

Inputs: asOf, limit, database, organization. Returns: asOf, scan, count, items, +4 more

read.analytics.get_payments_breakdownРазбивка платежей за периодA
Read-only

Суммирует проведённые банковские и кассовые документы за период с разбивкой по выбранному признаку (вид операции / месяц / контрагент / статья ДДС / итог). Фильтры: направление (приход/расход), контрагент (Ref_Key), категория контрагента (ИП/ЮрЛицо/ФизЛицо/Нерезидент/Госорган), статья ДДС (по коду/имени/Ref), подстрока в назначении платежа (напр. «аренда»), вид операции. Отвечает на вопросы вроде «сколько процентов получили за год от такого-то банка», «сколько заплатили ИП за год», «куда уходили деньги по статьям ДДС», «приход по месяцам». Период — даты YYYY-MM-DD. Контрагент в банковских документах хранится полиморфно — фильтр применяется на стороне коннектора; статья ДДС / назначение / период / организация — на сервере 1С.

Inputs: to (required), from (required), groupBy, database, +7 more. Returns: net, scan, groups, inflow, +8 more

read.analytics.get_purchases_breakdownРазбивка закупок за периодA
Read-only

Суммирует проведённые поступления товаров/услуг (закупки) за период с разбивкой по поставщику / месяцу / договору / итогу. Можно фильтровать конкретным поставщиком, категорией контрагента или договором. Отвечает на вопросы вроде «топ поставщиков за год», «закупки по месяцам», «сколько закупили у ИП». Период — даты YYYY-MM-DD.

Inputs: to (required), from (required), limit, groupBy, +5 more. Returns: scan, total, groups, period, +6 more

read.analytics.get_salesПродажи за периодA
Read-only

Сумма выручки по проведённым документам реализации за период (по полю СуммаДокумента). Можно ограничить организацией. Период задаётся датами YYYY-MM-DD.

Inputs: to (required), from (required), database, organization. Returns: scan, total, period, database, +2 more

read.analytics.get_sales_breakdownРазбивка продаж за периодA
Read-only

Суммирует проведённые реализации (СуммаДокумента) за период с разбивкой по контрагенту / месяцу / договору / итогу. Можно фильтровать конкретным контрагентом, категорией контрагента (ИП/ЮрЛицо/ФизЛицо/Нерезидент/Госорган) или договором. Отвечает на вопросы вроде «топ покупателей за год», «выручка по месяцам», «сколько продали ИП», «продажи по конкретному договору». Период — даты YYYY-MM-DD.

Inputs: to (required), from (required), limit, groupBy, +5 more. Returns: scan, total, groups, period, +6 more

read.analytics.get_taxes_paidУплаченные налоги и взносы за периодA
Read-only

Сумма уплаченных налогов/страховых взносов за период: исходящие банковские списания с ВидОперации=«ПеречислениеНалога» (это надёжный маркер уплаты налога в БП 3.0; покрывает ЕНП, НДФЛ, страховые взносы, налог УСН/ПСН, налог на прибыль и т.п.). По умолчанию — итог; разбивка по статье ДДС / месяцу / получателю (обычно ФНС/Казначейство) / итог. Параметр cashflowItem уточняет конкретный вид налога (напр. «УСН», «Страховые», «НДФЛ», «ЕНП»). Отвечает на вопросы вроде «сколько налогов мы заплатили в прошлом году», «сколько ушло страховых взносов в квартал», «помесячная нагрузка по налогам». Период — даты YYYY-MM-DD.

Inputs: to (required), from (required), groupBy, database, +2 more. Returns: scan, total, groups, period, +5 more

read.analytics.get_unpaid_invoicesНеоплаченные счета покупателямA
Read-only

Счета на оплату покупателям за период и их оплата: сумма счёта, оплачено (по регистру «Оплата счетов» — платежи со ссылкой на счёт), остаток, отгружено по счёту (реализации со ссылкой на счёт), статус unpaid / partial / paid / overpaid, сколько дней счёту. status=open (по умолчанию) — неоплаченные и частично оплаченные, с текущим сальдо покупателя по 62 (customerBalance) для сверки; all — все. Счета старше 90 дней видны только с явным from. Период — по дате счёта; без from — последние 90 дней.

Inputs: to, from, limit, status, +2 more. Returns: scan, count, period, status, +6 more

read.audit.get_document_historyХронология документа (аудит)A
Read-only

Что можно доказуемо сказать о времени документа по данным стандартного OData. Возвращает раздельно: documentDate (Document.Date — учётная дата, не время действия) и refCreatedAt (метка генерации Ref_Key, выведенная из UUIDv1; confidence=derived — НЕ проверенное время создания/выполнения/проведения). Фактическое время выполнения и последнего изменения через стандартный OData недоступны и не возвращаются. Также: ответственный (реквизит документа, не автор), DataVersion как есть (не интерпретируется), наличие движений в регистре Хозрасчетный (только факт наличия), evidence и limitations. Только чтение. documentEntity — Document_* из list_entities, documentRef — Ref_Key.

Inputs: documentRef (required), documentEntity (required), database. Returns: scan, database, document, evidence, +4 more

read.counterparty.find_counterpartyПоиск контрагентаA
Read-only

Ищет контрагентов по части названия или по ИНН; subjectKind=group ищет группы в том же справочнике, all — оба вида. По умолчанию только контрагенты. Возвращает Parent_Key как parentRef и DataVersion как dataVersion для безопасного изменения группы. Возвращает список совпадений с Ref_Key (используйте его в get_counterparty и истории взаиморасчётов), полным наименованием и ролями по видам договоров (roles: покупатель, поставщик, комитент…; contracts — число договоров) — помогает выбрать из однофамильцев. Пример: «найди контрагента Ромашка» или «контрагент с ИНН 7701234567».

Inputs: query (required), limit, database, subjectKind. Returns: note, rows, count, truncated

read.counterparty.get_counterpartyКарточка контрагентаA
Read-only

Возвращает полную карточку контрагента по его Ref_Key: реквизиты (ИНН/КПП), наименования, код. Ref_Key берётся из find_counterparty.

Inputs: ref (required), database. Returns: inn, kpp, ref, code, +6 more

read.counterparty.get_customer_historyИстория по покупателюA
Read-only

Документы реализации и счета по контрагенту-покупателю за период. Показывает, что и на какие суммы продавали клиенту. Ref_Key — из find_counterparty.

Inputs: ref (required), to, from, limit, +2 more. Returns: note, rows, count, period, +2 more

read.counterparty.get_reconciliationДанные для акта сверкиA
Read-only

Взаиморасчёты с контрагентом за период для акта сверки — по данным организации: сальдо на начало и конец «в пользу организации / контрагента», строки по документам (дата, документ, номер, договор, дебет, кредит; printNumber — номер как в печатной форме), обороты, разбивка по договорам, организация. Проверяются счета 60, 62 и 76 (без 76.АВ/76.ВА), в accounts — те, где есть движения или остатки; зачёт аванса внутри расчётов с тем же контрагентом в строки не попадает, как в акте сверки 1С. counterpartyRef — Ref_Key из find_counterparty, contractRef — только один договор. Сам документ «Акт сверки» печатается из 1С.

Inputs: to (required), from (required), counterpartyRef (required), database, +2 more. Returns: scan, count, lines, period, +10 more

read.counterparty.get_supplier_historyИстория по поставщикуA
Read-only

Документы поступления по контрагенту-поставщику за период. Показывает закупки у поставщика. Ref_Key — из find_counterparty.

Inputs: ref (required), to, from, limit, +2 more. Returns: note, rows, count, period, +2 more

read.document.get_documentДокумент целикомA
Read-only

Возвращает документ по типу и Ref_Key со всеми полями, включая табличные части. Ref_Key берётся из search_documents или истории взаиморасчётов.

Inputs: ref (required), entitySet (required), database. Returns: object

read.document.search_documentsПоиск документовA
Read-only

Ищет документы по периоду, номеру, контрагенту, организации, статусу проведения и сумме. Тип задаётся видом (kind: продажи, покупки, банк, касса…) или техническим именем entitySet из list_entities; без обоих — по всем основным видам документов сразу («все документы за 10 сентября», «документ №33»). number — номер как его называет человек: «33» находит 0000-000033, а также входящий номер документа контрагента (накладной поставщика). Нумерация в 1С каждый год своя — по одному номеру обычно несколько документов разных лет; уточняйте период. Редкие виды (зарплата, регламентные операции) — только через entitySet.

Inputs: to, from, kind, limit, +7 more. Returns: note, rows, count, truncated, +1 more

read.organization.get_organization_cardКарточка организации (реквизиты)A
Read-only

Полные реквизиты организации (юрлица) из настроек 1С: ИНН/КПП/ОГРН, полное и сокращённое наименование, дата регистрации, ОКВЭД, налоговый орган, контактная информация (юридический/фактический/почтовый адрес, телефон, email), основной банковский счёт, а также директор и главный бухгалтер. Для ИП директором считается сам предприниматель (берётся из карточки организации); для ООО и т.п. — из регистра «Ответственные лица организаций», если он опубликован в OData (если нет — вернётся заметка, что нужно добавить в «Состав OData»). Работает для любой организации базы — по названию (organization) или автоматически, если она в базе одна.

Inputs: database, organization. Returns: inn, kpp, ref, name, +13 more

read.schema.describe_entityОписание объектаA
Read-only

Показывает поля (с типами) и связи конкретного объекта 1С из $metadata. Принимает техническое имя EntitySet, напр. 'Catalog_Контрагенты' или 'Document_РеализацияТоваровУслуг'. Используйте перед поиском, чтобы узнать доступные поля.

Inputs: entitySet (required), database. Returns: keys, class, fields, entitySet, +1 more

read.schema.list_entitiesКарта объектов базыA
Read-only

Возвращает карту бизнес-объектов 1С, сгруппированную по классам: справочники, документы, регистры, перечисления и т.д. Используйте, чтобы понять, какие данные доступны в базе. Можно отфильтровать по классу и/или подстроке имени.

Inputs: class, search, database. Returns: groups, database, odataVersion

read.system.health_checkПроверка соединенияA
Read-only

Проверяет доступность OData-сервиса 1С и корректность авторизации для выбранной базы. Перечитывает $metadata и обновляет кеш схемы; возвращает версию OData и число видимых объектов. Вызывайте первым, если другие инструменты выдают ошибки.

Inputs: database. Returns: label, status, baseUrl, database, +5 more

read.system.list_databasesСписок баз 1СA
Read-only

Показывает настроенные базы 1С, к которым подключён сервер, и какая из них основная. Имя базы передаётся в параметр database остальных инструментов. Вызывайте, если нужно понять, какие базы доступны или сравнить данные нескольких баз.

Inputs: no named parameters. Returns: default, databases

read.system.list_organizationsОрганизации базыA
Read-only

Список организаций (юрлиц) внутри выбранной базы 1С. Название организации передаётся в параметр organization аналитических инструментов (get_sales, get_debtors, get_cashflow, get_inventory и др.), чтобы получить данные по одному юрлицу.

Inputs: database. Returns: count, organizations

write.accounting.set_contract_settlement_settingsСохранить точную настройку счетов расчётовA

Создаёт отсутствующую настройку (create) либо меняет явно указанные ресурсы (update) с expectedDataVersion и If-Match, когда DataVersion опубликован. Только если metadata не содержит DataVersion, update требует singleWriter=true (владелец подтвердил отсутствие параллельных изменений); If-Match не отправляется, атомарной защиты от конкуренции нет. Предпросмотр связан с текущей записью. scope=contract требует договор; counterparty/group сохраняет настройку точного контрагента/группы без договора. Проверяет организацию, IsFolder и отсутствие удаления; для договора также владельца, организацию и валюту. Сначала предпросмотр; подтверждение с теми же аргументами и operationId. Глобальные настройки и удаление недоступны. Старое имя set_contract_settlement_settings поддерживает только договор. Прочее не получает толкование займа/расхода.

Inputs: mode (required), accounts (required), contractRef (required), settlementKind (required), +7 more. Returns: ref, note, notes, dryRun, +10 more

write.accounting.set_settlement_settingsСохранить точную настройку счетов расчётовA

Создаёт отсутствующую настройку (create) либо меняет явно указанные ресурсы (update) с expectedDataVersion и If-Match, когда DataVersion опубликован. Только если metadata не содержит DataVersion, update требует singleWriter=true (владелец подтвердил отсутствие параллельных изменений); If-Match не отправляется, атомарной защиты от конкуренции нет. Предпросмотр связан с текущей записью. scope=contract требует договор; counterparty/group сохраняет настройку точного контрагента/группы без договора. Проверяет организацию, IsFolder и отсутствие удаления; для договора также владельца, организацию и валюту. Сначала предпросмотр; подтверждение с теми же аргументами и operationId. Глобальные настройки и удаление недоступны. Старое имя set_contract_settlement_settings поддерживает только договор. Прочее не получает толкование займа/расхода.

Inputs: mode (required), scope (required), accounts (required), settlementKind (required), +8 more. Returns: ref, note, notes, dryRun, +10 more

write.catalog.create_contractСоздать договорA

Заводит договор контрагента (подчинённый справочник): владелец — контрагент, организация, ВИД договора, номер/дата, валюта/тип цен и (опц.) руководитель/подписант. ВАЖНО: вид договора (kind) обязателен и его НЕЛЬЗЯ выбирать самостоятельно — уточните у пользователя, т.к. один контрагент может быть и покупателем, и поставщиком. Номер по умолчанию «б/н», дата — сегодня. По умолчанию предпросмотр (dry-run); создание — при confirm=true.

Inputs: kind (required), counterpartyRef (required), date, name, +9 more. Returns: ref, code, note, notes, +10 more

write.catalog.create_nomenclatureСоздать номенклатуруA

Создаёт новую позицию номенклатуры (товар/услуга). ПО УМОЛЧАНИЮ предпросмотр (dry-run): покажите пользователю payload и только после согласия повторите с confirm=true. Можно указать артикул, папку (folder — имя группы или Ref_Key) и пометить услугой (isService). Запись идёт в боевую базу.

Inputs: name (required), folder, article, confirm, +4 more. Returns: ref, code, note, notes, +10 more

write.catalog.update_nomenclatureИзменить номенклатуруA

Изменяет реквизиты номенклатуры по Ref_Key (наименование/полное имя/артикул). По умолчанию предпросмотр (dry-run); применение — при confirm=true. Указывайте только меняемые поля.

Inputs: ref (required), name, article, confirm, +2 more. Returns: ref, note, notes, dryRun, +10 more

write.counterparty.create_bank_accountСоздать банковский счёт контрагентаA

Заводит расчётный счёт контрагента (подчинённый справочник): банк по БИК + номер счёта. Можно сделать счёт основным. По умолчанию dry-run; создание — при confirm=true. Ref контрагента — из find_counterparty.

Inputs: bik (required), ownerRef (required), accountNumber (required), label, +5 more. Returns: ref, code, note, notes, +10 more

write.counterparty.create_contact_personСоздать контактное лицо (директор и т.п.)A

Заводит контактное лицо контрагента (директор, бухгалтер, менеджер): ФИО + должность. Можно сделать основным контактным лицом. По умолчанию dry-run; создание — при confirm=true.

Inputs: name (required), ownerRef (required), confirm, database, +5 more. Returns: ref, code, note, notes, +10 more

write.counterparty.create_counterpartyСоздать контрагентаA

Создаёт нового контрагента в справочнике. ПО УМОЛЧАНИЮ это предпросмотр (dry-run) — сначала покажите пользователю, что будет создано, и только после явного согласия вызовите повторно с confirm=true. Запись идёт в боевую базу, поэтому без подтверждения не создавайте.

Inputs: name (required), inn, kpp, ogrn, +8 more. Returns: ref, code, note, notes, +10 more

write.counterparty.create_groupСоздать группу контрагентовA

Создаёт только явно названную группу контрагентов в указанной группе parentRef; пустой GUID parentRef означает корень. Проверяет родителя и иерархию, сначала предпросмотр, затем confirm с тем же operationId и контрольное чтение. Не создаёт произвольные бизнес-группы без поручения владельца.

Inputs: name (required), parentRef (required), confirm, database, +1 more. Returns: ref, note, notes, dryRun, +10 more

write.counterparty.set_groupУказать группу отдельного контрагентаA

Меняет только Parent_Key отдельного контрагента (subjectKind=counterparty, IsFolder=false). Перемещение самих групп запрещено: безопасность глубины их потомков не проверяется. parentRef — точная группа или пустой GUID для корня. Проверяет отсутствие удаления и цикла; expectedDataVersion обязателен, PATCH с If-Match, предпросмотр/confirm/operationId и контроль сохранения остальных полей. Удаление недоступно.

Inputs: ref (required), parentRef (required), subjectKind (required), expectedDataVersion (required), +3 more. Returns: ref, note, notes, dryRun, +10 more

write.counterparty.update_counterpartyИзменить контрагентаA

Изменяет реквизиты контрагента по Ref_Key (наименование/ИНН/КПП/полное имя). По умолчанию предпросмотр (dry-run); применение — при confirm=true. Указывайте только меняемые поля.

Inputs: ref (required), inn, kpp, name, +7 more. Returns: ref, note, notes, dryRun, +10 more

write.document.add_document_lineДобавить строку в документA

Добавляет одну позицию в табличную часть «Товары» существующего НЕПРОВЕДЁННОГО документа (счёт/поступление/реализация), сохраняя прежние строки со всеми их реквизитами (содержание, счета учёта, номенклатурная группа). dry-run/confirm.

Inputs: ref (required), line (required), entitySet (required), confirm, +2 more. Returns: ref, note, notes, dryRun, +10 more

write.document.align_bank_payment_amountsВыровнять сумму расшифровки банковского документаA

Выравнивает единственную строку «Расшифровки платежа» существующего НЕПРОВЕДЁННОГО банковского поступления или списания по сумме документа: сумма платежа и сумма взаиморасчётов = сумма документа, курс и кратность 1, НДС по ставке строки. Для случая, когда сумма в шапке есть, а в строке пусто или другая — иначе 1С проведёт документ с неверными проводками по расчётам. Только рубли и договор в рублях без условных единиц; несколько строк, валюта и неизвестная ставка НДС — отказ, суммы не угадываются. Нужна точная expectedDataVersion; предпросмотр показывает «было → станет», остальные поля сохраняются, контрольное чтение после записи. Проведение — отдельным вызовом post_document.

Inputs: ref (required), entitySet (required), expectedDataVersion (required), confirm, +2 more. Returns: object

write.document.apply_bank_settlement_settingsПрименить счета расчётов к существующему банковскому документуA

Применяет унаследованные счета расчётов/авансов и выбранный договор к существующему НЕПРОВЕДЁННОМУ банковскому документу с точной expectedDataVersion/If-Match. Явная сторона supplier/customer обязательна, включая договор Прочее. Необязательный counterpartyRef заполняет только нулевую ссылку контрагента документа; требует существующий неудалённый элемент и точного владельца договора. Замена заполненного контрагента и подбор по названию/договору запрещены. Поддерживает опубликованные GUID и составной тип контрагента. Контрольное чтение проверяет договор, оба счёта, суммы платежа, налог и аналитику; пересчитанные курс, кратность и сумма взаиморасчётов не сравниваются с прежними. Условные единицы с иной валютой документа пока не поддержаны, курс не угадывается; несколько строк отклоняются. Предпросмотр связан с payload, документом, явно выбранным контрагентом, договором и результатом подбора. Отмена проведения и проведение выполняются отдельными вызовами; unknown удерживается без повторной записи.

Inputs: ref (required), side (required), entitySet (required), contractRef (required), +5 more. Returns: object

write.document.copy_documentСкопировать документA

Создаёт новый документ по образцу существующего: читает его целиком и записывает копию со ВСЕМИ реквизитами — содержание строк, счета учёта, банковский счёт, ответственный, адрес доставки, доп. условия. Это главный способ выставить ежемесячно повторяющийся документ: инструменты create_* собирают документ из полей схемы и всё остальное теряют. Копия создаётся НЕПРОВЕДЁННОЙ, с новым номером (1С нумерует сама) и датой (по умолчанию сегодня). Правки: date — дата; fields — реквизиты шапки техническими именами (как в update_entity); lines — правки строк по номеру (напр. количество и содержание). Сумма документа пересчитывается по строкам, если не задана явно в fields. Счета расчётов — как в исходном документе; если в fields сменён договор — по настройке нового договора. По умолчанию dry-run; запись — при confirm=true.

Inputs: ref (required), entitySet (required), date, lines, +4 more. Returns: ref, code, note, notes, +10 more

write.document.post_documentПровести / отменить проведение документаA
Destructive

Проводит документ (влияет на учёт) или отменяет проведение. По умолчанию предпросмотр (dry-run); Для повторного проведения Posted=true задайте repost=true, post=true и expectedDataVersion. Версионный Post использует PostingModeOperational=false без Unpost; проверяет состояние документа, не проводки. применение — при confirm=true. ВНИМАНИЕ: проведение меняет учётные данные — используйте осознанно.

Inputs: ref (required), entitySet (required), post, repost, +4 more. Returns: ref, done, note, action, +11 more

write.document.remove_document_lineУдалить строку документаA

Удаляет строку (по номеру LineNumber, начиная с 1) из табличной части «Товары» существующего НЕПРОВЕДЁННОГО документа. Нельзя удалить последнюю строку. dry-run/confirm.

Inputs: ref (required), entitySet (required), lineNumber (required), confirm, +2 more. Returns: ref, note, notes, dryRun, +10 more

write.document.update_document_linesИзменить строки документаA

Заменяет табличную часть «Товары» существующего документа новым набором строк и пересчитывает сумму. Поддержаны: счёт покупателю, поступление, реализация (и товарами, и услугами), акт об оказании услуг. Строки пишутся в ту табличную часть, которая у документа заполнена («Товары» или «Услуги»). Документ должен быть НЕПРОВЕДЁННЫМ (если проведён — сначала отмените проведение через post_document). По умолчанию dry-run; применение — при confirm=true.

Inputs: ref (required), lines (required), entitySet (required), confirm, +1 more. Returns: ref, note, notes, dryRun, +10 more

write.entity.create_folderСоздать папку (группу) справочникаA

Создаёт папку/группу в иерархическом справочнике 1С (по умолчанию — Контрагенты). Опционально вкладывает в родительскую папку (parent — имя папки или Ref_Key). В 1С «папки» = группы справочника; отдельных тегов в типовой Бухгалтерии нет. dry-run/confirm.

Inputs: name (required), parent, confirm, database, +2 more. Returns: ref, code, note, notes, +10 more

write.entity.mark_for_deletionПометить на удалениеA
Destructive

Ставит/снимает пометку на удаление у объекта (как в 1С) — мягкое удаление, физически данные не стираются. По умолчанию предпросмотр (dry-run); для применения повторите с confirm=true. Полезно, чтобы убрать ошибочно созданную запись.

Inputs: ref (required), entitySet (required), mark, confirm, +1 more. Returns: ref, note, dryRun, payload, +4 more

write.entity.move_to_folderПереместить объект в папкуB

Перемещает элемент справочника (напр. контрагента) в папку/группу — задаёт родителя (Parent_Key). folder — имя папки или Ref_Key. По умолчанию справочник Контрагенты. dry-run/confirm.

Inputs: ref (required), folder (required), confirm, database, +1 more. Returns: ref, note, notes, dryRun, +10 more

write.entity.update_entityИзменить объект (общий)A

Изменяет произвольные поля объекта 1С через PATCH по Ref_Key. Имена полей — технические (узнать через describe_entity), напр. {"ИНН":"7701234567"}. По умолчанию предпросмотр (dry-run); применение — при confirm=true. Мощный инструмент: меняйте только те поля, что указали. После записи поля перечитываются: успех — только если 1С сохранила всё. Договор и счета расчётов банковских документов этим инструментом не меняются — write.document.apply_bank_settlement_settings.

Inputs: ref (required), fields (required), entitySet (required), confirm, +1 more. Returns: ref, note, notes, dryRun, +10 more

write.money.create_bank_writeoffСоздать списание с расчётного счётаA

Создаёт документ «Списание с расчётного счёта» (исходящий платёж с банка). НЕПРОВЕДЁННЫЙ; провести — post_document. Вид операции ОБЯЗАТЕЛЕН и не угадывается (напр. «ОплатаПоставщику», «ПеречислениеНалога», «ПеречислениеЗП», «ПереводНаДругойСчет», «ПрочееСписание»). Для оплаты поставщику с договором заполняется расшифровка: счёт расчётов — по настройке договора, источник виден в предпросмотре (обычно 60), сумма взаиморасчётов — для рублёвого договора. dry-run/confirm.

Inputs: amount (required), operationKind (required), date, comment, +9 more. Returns: ref, code, note, notes, +10 more

write.money.create_cash_paymentСоздать расходный кассовый ордер (РКО)A

Создаёт «Расходный кассовый ордер» (выдача наличных из кассы). НЕПРОВЕДЁННЫЙ; провести — post_document. Вид операции ОБЯЗАТЕЛЕН (напр. «ОплатаПоставщику», «ВыдачаПодотчетномуЛицу», «ВзносНаличнымиВБанк», «ВыплатаЗаработнойПлатыПоВедомостям»). Для оплаты по договору заполняется расшифровка: счёт расчётов — по настройке договора, источник виден в предпросмотре, сумма взаиморасчётов — для рублёвого договора. dry-run/confirm.

Inputs: amount (required), operationKind (required), date, basis, +9 more. Returns: ref, code, note, notes, +10 more

write.money.create_cash_receiptСоздать приходный кассовый ордер (ПКО)A

Создаёт «Приходный кассовый ордер» (приём наличных в кассу). НЕПРОВЕДЁННЫЙ; провести — post_document. Вид операции ОБЯЗАТЕЛЕН (напр. «ОплатаПокупателя», «ПрочийПриход», «ПолучениеНаличныхВБанке», «ВозвратОтПодотчетногоЛица»). Для оплаты по договору заполняется расшифровка: счёт расчётов — по настройке договора, источник виден в предпросмотре, сумма взаиморасчётов — для рублёвого договора. dry-run/confirm.

Inputs: amount (required), operationKind (required), date, basis, +9 more. Returns: ref, code, note, notes, +10 more

write.money.create_paymentСоздать оплату от покупателяA

Создаёт «Поступление на расчётный счёт» (оплата от покупателя) на сумму, по контрагенту и договору. Документ НЕПРОВЕДЁННЫЙ; при проведении проводка Дт 51 Кт 62 (счёт расчётов — по настройке договора, источник виден в предпросмотре). Сумма взаиморасчётов для рублёвого договора заполняется сама; для договора в валюте или у.е. курс укажите в 1С, иначе 1С проведёт оплату без проводок. Банковский счёт организации берётся по названию или первый. dry-run/confirm.

Inputs: amount (required), contractRef (required), counterpartyRef (required), date, +6 more. Returns: ref, code, note, notes, +10 more

write.money.create_payout_orderСоздать платёжное поручение (исходящее) контрагентуA

Создаёт документ «Платёжное поручение» — исходящую выплату контрагенту (напр. оплата по агентскому договору / услугам, зеркало платёжки, уже ушедшей в банк). Документ ВСЕГДА создаётся НЕПРОВЕДЁННЫМ (Posted=false) — эта операция намеренно не проводит документ, проведение делайте отдельно через post_document, если вообще нужно. Номер (number) — задаётся явно вызывающим (обычно чтобы совпасть с номером уже отправленной банковской платёжки), не генерируется автоматически. По умолчанию dry-run (confirm=false); создание — при confirm=true. Счёт организации и валюта — резолвятся автоматически, если не заданы.

Inputs: amount (required), number (required), purposeText (required), recipientText (required), +20 more. Returns: ref, code, note, notes, +10 more

write.operation.statusСтатус операции записиA

Состояние операции записи по operationId из предпросмотра. После потери ответа созданный объект сверяется по назначенной ссылке (старые операции — по метке), строки документа — по числу строк, настройка регистра — по точному составному ключу и отпечатку проверяемых полей. Совпадение фиксирует успех без повторной отправки. Для изменения группы, Post/Unpost и неподтверждённого результата регистра ответ unverifiable удерживает повтор и требует ручной сверки. Отсутствие объекта само по себе не разрешает новый запрос: 1С могла ещё выполнять его, сколько бы времени ни прошло, — ответ not_found. Закрыть операцию как not_applied можно только с markNotApplied=true после того, как человек сам сверил базу. Новый предпросмотр допустим после not_applied либо rejected с устранённой причиной. Ничего не записывает в 1С.

Inputs: operationId (required), database, markNotApplied. Returns: ref, note, number, status, +4 more

write.purchase.create_purchaseСоздать поступление от поставщикаA

Создаёт документ «Поступление товаров и услуг» (закупка у поставщика) с табличной частью «Товары». Документ НЕПРОВЕДЁННЫЙ; провести — вручную в 1С или post_document (тогда 1С сформирует проводки Дт 41/19 Кт 60; счёт расчётов — по настройке договора, источник виден в предпросмотре). Позиции могут нести content (Содержание строки) — для услуг вроде доставки. По умолчанию dry-run; создание — при confirm=true. Контрагент — поставщик, договор — вида «СПоставщиком».

Inputs: lines (required), counterpartyRef (required), date, confirm, +6 more. Returns: ref, code, note, notes, +10 more

write.purchase.create_received_invoiceСоздать счёт-фактуру полученныйA

Создаёт «Счёт-фактура полученный» НА ОСНОВАНИИ поступления товаров и услуг. Реквизиты наследуются от основания; дату входящего счёта-фактуры продавца указывают вручную (в поступлении её нет). НЕПРОВЕДЁННЫЙ; провести — post_document. dry-run/confirm.

Inputs: baseDocumentRef (required), date, confirm, database, +4 more. Returns: ref, code, note, notes, +10 more

write.purchase.create_supplier_invoiceЗарегистрировать счёт от поставщикаA

Создаёт документ «Счёт на оплату поставщика» — регистрирует входящий счёт-основание для оплаты (подходит для предоплаты, когда товар ещё не пришёл). Проводок НЕ делает (счёт не проводится), счета учёта не нужны. Табличная часть «Товары» вмещает и товары, и услуги (напр. доставку — задайте content/Содержание). Реквизиты входящего счёта: incomingNumber/incomingDate. По умолчанию dry-run; создание — при confirm=true. Контрагент — поставщик, договор — вида «СПоставщиком».

Inputs: lines (required), counterpartyRef (required), date, comment, +9 more. Returns: ref, code, note, notes, +10 more

write.sales.create_actСоздать акт (реализация услуг)A

Создаёт «Реализация (акт, накладная)» с табличной частью УСЛУГИ (без склада/остатков). Документ НЕПРОВЕДЁННЫЙ; проводки при проведении Дт 62 Кт 90.01 (без 41; счёт расчётов — по настройке договора, источник виден в предпросмотре). ВАЖНО для услуг: задавайте content в строке — это «Содержание», текст, который печатается в акте и УПД (номер приложения, номер договора, период оказания). 1С его не заполнит. Счета доходов/расходов при необходимости задаются явно (напр. 90.01.2 / 90.02.2). dry-run/confirm. Контрагент — покупатель; позиции — услуги-номенклатура.

Inputs: lines (required), counterpartyRef (required), date, confirm, +9 more. Returns: ref, code, note, notes, +10 more

write.sales.create_invoiceСоздать счёт покупателюA

Создаёт счёт на оплату покупателю (документ) с табличной частью «Товары». Документ создаётся НЕПРОВЕДЁННЫМ (черновик) — провести можно вручную в 1С или инструментом post_document. Для услуг задавайте content в строке — это «Содержание», именно оно печатается в счёте. По умолчанию предпросмотр (dry-run); создание — при confirm=true. Контрагент и (опц.) договор — по Ref_Key; позиции — по Ref_Key номенклатуры.

Inputs: lines (required), counterpartyRef (required), date, confirm, +6 more. Returns: ref, code, note, notes, +10 more

write.sales.create_issued_invoiceСоздать счёт-фактуру выданныйA

Создаёт «Счёт-фактура выданный» НА ОСНОВАНИИ реализации (или иного документа отгрузки). Реквизиты (организация, контрагент, договор, суммы, НДС) наследуются от документа-основания. НЕПРОВЕДЁННЫЙ; провести — post_document. dry-run/confirm.

Inputs: baseDocumentRef (required), date, confirm, database, +3 more. Returns: ref, code, note, notes, +10 more

write.sales.create_services_actСоздать акт об оказании услугA

Создаёт «Акт об оказании производственных услуг» (услуги с учётом доходов/расходов по номенклатурной группе). Отличается от create_act тем, что требует номенклатурную группу (субконто счёта 90.01) — она НЕ угадывается. Проводки Дт 62 Кт 90.01, НДС 90.03 (счёт расчётов — по настройке договора, источник виден в предпросмотре). НЕПРОВЕДЁННЫЙ; провести — post_document. dry-run/confirm.

Inputs: lines (required), counterpartyRef (required), nomenclatureGroupRef (required), date, +8 more. Returns: ref, code, note, notes, +10 more

write.sales.create_shipmentСоздать реализацию покупателюA

Создаёт документ «Реализация товаров и услуг» (отгрузка покупателю) с табличной частью «Товары». Документ НЕПРОВЕДЁННЫЙ; провести — вручную в 1С или post_document (тогда 1С сформирует проводки Дт 62 Кт 90, Дт 90 Кт 41 и др.; счёт расчётов — по настройке договора, источник виден в предпросмотре). Позиции могут нести content (Содержание строки — печатается в УПД) и свои счета доходов/расходов. По умолчанию dry-run; создание — при confirm=true. Контрагент — покупатель, договор — вида «СПокупателем».

Inputs: lines (required), counterpartyRef (required), date, confirm, +9 more. Returns: ref, code, note, notes, +10 more

write.warehouse.create_inventoryСоздать инвентаризацию товаровA

Создаёт документ «Инвентаризация товаров на складе» (сверка факт/учёт). Документ НЕ проводится (движений не делает) — служит основанием для оприходования/списания. dry-run/confirm. Для каждой позиции: фактическое и учётное количество.

Inputs: lines (required), date, confirm, database, +3 more. Returns: ref, code, note, notes, +10 more

write.warehouse.create_return_from_customerСоздать возврат товаров от покупателяA

Создаёт документ «Возврат товаров от покупателя» с табличной частью «Товары». НЕПРОВЕДЁННЫЙ; провести — post_document (проводки сторнируют реализацию: Дт 90.02 Кт 41, Дт 62 Кт 90.01 со знаком минус; счёт расчётов — по настройке договора, источник виден в предпросмотре). dry-run/confirm. Контрагент — покупатель.

Inputs: lines (required), counterpartyRef (required), date, confirm, +8 more. Returns: ref, code, note, notes, +10 more

write.warehouse.create_return_to_supplierСоздать возврат товаров поставщикуA

Создаёт документ «Возврат товаров поставщику» с табличной частью «Товары». НЕПРОВЕДЁННЫЙ; провести — post_document (проводки сторнируют поступление: Дт 60 Кт 41/19; счёт расчётов — по настройке договора, источник виден в предпросмотре). dry-run/confirm. Контрагент — поставщик.

Inputs: lines (required), counterpartyRef (required), date, confirm, +6 more. Returns: ref, code, note, notes, +10 more

write.warehouse.create_surplusСоздать оприходование товаровA

Создаёт документ «Оприходование товаров» (излишки). НЕПРОВЕДЁННЫЙ; провести — post_document (проводки Дт 41 Кт 91.01). Можно указать документ-основание — инвентаризацию. dry-run/confirm.

Inputs: lines (required), date, confirm, database, +4 more. Returns: ref, code, note, notes, +10 more

write.warehouse.create_transferСоздать перемещение товаровA

Создаёт документ «Перемещение товаров» между складами. НЕПРОВЕДЁННЫЙ; провести — post_document (проводки Дт 41(склад-получатель) Кт 41(склад-отправитель)). dry-run/confirm.

Inputs: lines (required), toWarehouse (required), fromWarehouse (required), date, +4 more. Returns: ref, code, note, notes, +10 more

write.warehouse.create_writeoffСоздать списание товаровA

Создаёт документ «Списание товаров» (недостача/порча). НЕПРОВЕДЁННЫЙ; провести — post_document (проводки Дт 94 Кт 41). Можно указать документ-основание — инвентаризацию. dry-run/confirm.

Inputs: lines (required), date, confirm, database, +4 more. Returns: ref, code, note, notes, +10 more

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    A3.5/5.0

    Scored across 75 tools

    Disambiguation3/5

    Most tools target distinct resources and actions, but several direct overlaps exist: read.accounting.get_settlement_settings and read.accounting.get_contract_settlement_settings have near-identical descriptions (same for the write pair), write.entity.create_folder vs write.counterparty.create_group, write.entity.move_to_folder vs write.counterparty.set_group, and generic write.entity.update_entity vs specific update_counterparty/update_nomenclature. An agent can usually pick correctly from descriptions, but these duplicate pairs create real misselection risk.

    Naming Consistency4/5

    Names follow a clear namespaced pattern (read.<domain>.<verb_noun>, write.<domain>.<verb_noun>), e.g. read.analytics.get_sales, write.warehouse.create_writeoff. Minor deviations exist: write.operation.status lacks a verb, and legacy alias pairs carry different names for the same tool, but the overall convention is predictable.

    Tool Count1/5

    75 tools is far beyond a comfortable surface for an accounting-domain MCP; there are also literal duplicate aliases and many near-duplicate document creators (create_act, create_services_act, create_shipment, create_invoice, create_supplier_invoice). The surface is heavy enough to overwhelm tool selection and should be consolidated.

    Completeness4/5

    Coverage is deep: schema introspection, document search/get, extensive read analytics (sales, debtors, cashflow, settlement settings), plus writes for most document types, catalogs, and entity updates. Gaps are minor: no hard delete/rollback of documents (only mark_for_deletion), and some entities (e.g. price lists, users) are only reachable via generic update_entity rather than dedicated tools.

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      Bridges AI agents to 1C:Enterprise via OData, enabling natural language queries of business entities like counterparties and invoices with read-only access.
      8
      67 npm
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables users to ask natural-language questions about live 1C:Enterprise data and receive answers from read-only OData sources, covering sales, inventory, items, and counterparties; supports direct connections or an SSH tunnel for IP-allowlisted installations.
      9
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables MCP clients such as Cursor and Claude to query and inspect 1C:Enterprise infobase data via COM without configuration extensions or changes, using 1C query language and metadata tools.
      2
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables ChatGPT's desktop Codex app to query a live 1C (1С) database through OData in read-only mode, so users can ask plain-language questions about sales, stock, items, and counterparties, and get answers, charts, and dashboards without exports or programming.
      4
      MIT