1c-odata-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@1c-odata-mcp show me overdue receivables and unpaid invoices"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
foxnaim · MCP-сервер к 1С через OData на TypeScript: данные 1С для AI-агентов, родственник адаптера erp_1c_odata в orderhub
Готовая основа под клиентский проект. Стек: TypeScript. Лицензия MIT сохранена, история коммитов и авторы оригинального проекта сохранены.
1c-odata-mcp — универсальный MCP-сервер для 1С:Предприятие через OData
🤖 Устанавливаете с помощью ИИ? Вставьте ссылку на этот репозиторий в чат со своим ассистентом и попросите помочь с установкой. Ассистенту: коннектор ставится локально, на компьютер пользователя, и подключается к его базе 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 | 🟡 средняя |
Локальная файловая база ( | то же + выдать веб-серверу права на папку базы | 🟡 средняя |
Нет веб-сервера / доступа к конфигуратору | 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 и др.) — веб-чат в браузере локальный коннектор запустить не может.
Опубликуйте OData в 1С и добавьте нужные объекты в «Состав» (подробно — docs/CONNECTING.md; если OData ещё не включён — docs/ODATA-SETUP.md).
Пропишите сервер в 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": "..." } } } }Перезапустите Claude Desktop (полностью) и спросите: «проверь соединение с 1С». Затем запустите готовый сценарий — например, «Утреннюю сводку руководителя».
Полная настройка (адрес OData по площадкам, авторизация, запуск из исходников, Claude Code, диагностика ошибок) — в docs/CONNECTING.md.
Начните с готовых сценариев
После подключения не нужно придумывать вопросы: сервер отдаёт клиенту готовые сценарии (MCP prompts). В Claude Desktop они в меню «+» → 1c-odata, в других клиентах — как slash-команды. Сценарий только читает данные и ничего не меняет в 1С.
Сценарий | Кому | Что делает |
| руководителю | Деньги на счетах, кто просрочил оплату, неоплаченные счета, что пора платить — четыре блока и действия на сегодня |
| бухгалтеру | Проверка месяца, разбор каждой проблемы через карточку счёта до документа и чек-лист: что исправить и в каком порядке |
| менеджеру, бухгалтеру | Находит контрагента по названию или ИНН и выводит данные для акта сверки за период |
Пример диалога
Ниже — 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).
Чтение и аналитика:
Инструмент | Что делает |
| Список баз / организаций (для параметров |
| Карточка организации: ИНН/КПП/ОГРН, ОКВЭД, налоговый орган, адреса, банковский счёт, директор и главный бухгалтер |
| Карта объектов базы и поля конкретного объекта (из |
| Поиск контрагента (по названию/ИНН) с полным наименованием и ролями по договорам (покупатель, поставщик, комитент…) и его карточка; |
| Поиск документов — по виду ( |
| Дебиторка (сч. 62) / кредиторка (сч. 60) по контрагентам, на дату ( |
| Неоплаченные и частично оплаченные счета покупателям: оплачено по регистру «Оплата счетов», остаток, отгрузка по счёту, сальдо покупателя по 62 для сверки |
| Деньги сейчас или на дату: остатки 50/51/52/55/57 по каждому банковскому счёту и кассе, итоги «доступно», «спецсчета», «в пути» |
| Остатки товаров (сч. 41/10/43), можно на дату в прошлом ( |
| ОСВ по счёту за период ( |
| Карточка счёта за период: каждое движение — дата, документ, содержание, Дт/Кт, корреспондирующий счёт и аналитика, остаток после движения; сальдо на начало и конец сверено с регистром. Отбор по контрагенту ( |
| Откуда сложилось сальдо: из каких документов состоит остаток на дату и с какого времени он висит — по документам расчётов из сальдо 1С или по истории движений на несколько лет назад |
| Данные для акта сверки с контрагентом по 60/62/76: сальдо на начало и конец «в пользу организации / контрагента», строки по документам, обороты, итоги по договорам ( |
| Проверка месяца ( |
| Проводки одного документа (любого |
| Хронология документа для аудита: учётная дата ( |
| Продажи за период / движение денег (банк + касса) |
| Продажи/закупки с разбивкой по контрагенту, месяцу, договору, категории (ИП/ЮрЛицо/…) |
| Приход/расход по виду операции, месяцу, контрагенту, статье ДДС — «сколько заплатили ИП за год», «проценты по депозиту» |
| Уплаченные налоги и взносы за период, с разбивкой по виду налога |
| Хронология движений по сделке (код в назначении платежа) или договору |
| История взаиморасчётов с покупателем / поставщиком |
| Точная сохранённая настройка счетов расчётов для договора, контрагента или группы — подробнее |
| Проверка соединения и авторизации |
Запись (✍️ требует включения, работает через dry-run → confirm=true):
Инструмент | Что делает |
| Контрагент (+ телефон/email/адрес/ОГРН) |
| Расчётный счёт (банк по БИК) / контактное лицо (директор) |
| Номенклатура (папка, артикул, признак услуги) |
| Договор (вид, номер, валюта, тип цен, руководитель контрагента) |
| Счёт покупателю / счёт на оплату поставщика (непроведёнными) |
| Поступление от поставщика / реализация покупателю |
| Возврат товаров от покупателя / поставщику |
| Перемещение товаров между складами |
| Оприходование / списание товаров |
| Инвентаризация товаров на складе |
| Реализация услуг (акт) |
| Акт об оказании услуг (доходы/расходы по номенклатурной группе) |
| Оплата от покупателя (поступление на р/с) / платёжное поручение |
| Списание с расчётного счёта (исходящий платёж, вид операции обязателен) |
| Приходный / расходный кассовый ордер (ПКО / РКО) |
| Счёт-фактура выданный / полученный (на основании реализации / поступления) |
| Папка (группа) справочника / перемещение в папку |
| Изменение реквизитов (PATCH) |
| Документ по образцу существующего — со всеми реквизитами |
| Редактирование строк документа |
| Провести / отменить проведение (1С формирует проводки); с |
| Настройка счетов расчётов и авансов для договора, контрагента или группы (регистр «Счета учёта расчётов с контрагентами») — подробнее |
| Сумма единственной строки расшифровки платежа существующего непроведённого рублёвого банковского документа — по сумме документа (платёж, взаиморасчёты, НДС по ставке строки) — подробнее |
| Договор и счета расчётов/авансов по сохранённым настройкам — в существующий непроведённый банковский документ — подробнее |
| Группа контрагентов / перенос контрагента в группу (с проверкой цепочки и версии) |
| Статус операции записи по |
| Пометить на удаление / снять пометку (мягкое удаление) |
Все инструменты проверены на живой базе 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 задают план счетов, регистр бухгалтерии, коды счетов по
умолчанию, аналитические префиксы и виды операций акта и оплаты. Без настройки сохраняются
прежние значения БП РФ. Параметры, приоритеты и синтетический пример для Беларуси —
Настройка учёта.
Безопасность
По умолчанию сервер работает только на чтение. Запись включается осознанно, через два независимых предохранителя:
Глобальный рубильник
READ_ONLY=false.Пер-базовый флаг
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 toolsread.accounting.check_month_closeПроверка закрытия месяцаARead-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Карточка счётаARead-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ОСВ по счётуARead-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Откуда сложилось сальдоARead-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Прочитать точную настройку счетов расчётовARead-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Проводки документаARead-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Прочитать точную настройку счетов расчётовARead-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Деньги на счетах и в кассеARead-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Движение денежных средствBRead-only
Приход и расход денег за период по проведённым банковским и кассовым документам. Возвращает приток, отток и сальдо. Можно ограничить организацией. Период — даты YYYY-MM-DD.
Inputs: to (required), from (required), database, organization. Returns: net, scan, inflow, period, +4 more
read.analytics.get_creditorsКредиторская задолженностьARead-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Движения по сделке/договоруARead-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Дебиторская задолженностьARead-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Остатки товаровARead-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Разбивка платежей за периодARead-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Разбивка закупок за периодARead-only
Суммирует проведённые поступления товаров/услуг (закупки) за период с разбивкой по поставщику / месяцу / договору / итогу. Можно фильтровать конкретным поставщиком, категорией контрагента или договором. Отвечает на вопросы вроде «топ поставщиков за год», «закупки по месяцам», «сколько закупили у ИП». Период — даты YYYY-MM-DD.
Inputs: to (required), from (required), limit, groupBy, +5 more. Returns: scan, total, groups, period, +6 more
read.analytics.get_salesПродажи за периодARead-only
Сумма выручки по проведённым документам реализации за период (по полю СуммаДокумента). Можно ограничить организацией. Период задаётся датами YYYY-MM-DD.
Inputs: to (required), from (required), database, organization. Returns: scan, total, period, database, +2 more
read.analytics.get_sales_breakdownРазбивка продаж за периодARead-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Уплаченные налоги и взносы за периодARead-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Неоплаченные счета покупателямARead-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Хронология документа (аудит)ARead-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Поиск контрагентаARead-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Карточка контрагентаARead-only
Возвращает полную карточку контрагента по его Ref_Key: реквизиты (ИНН/КПП), наименования, код. Ref_Key берётся из find_counterparty.
Inputs: ref (required), database. Returns: inn, kpp, ref, code, +6 more
read.counterparty.get_customer_historyИстория по покупателюARead-only
Документы реализации и счета по контрагенту-покупателю за период. Показывает, что и на какие суммы продавали клиенту. Ref_Key — из find_counterparty.
Inputs: ref (required), to, from, limit, +2 more. Returns: note, rows, count, period, +2 more
read.counterparty.get_reconciliationДанные для акта сверкиARead-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История по поставщикуARead-only
Документы поступления по контрагенту-поставщику за период. Показывает закупки у поставщика. Ref_Key — из find_counterparty.
Inputs: ref (required), to, from, limit, +2 more. Returns: note, rows, count, period, +2 more
read.document.get_documentДокумент целикомARead-only
Возвращает документ по типу и Ref_Key со всеми полями, включая табличные части. Ref_Key берётся из search_documents или истории взаиморасчётов.
Inputs: ref (required), entitySet (required), database. Returns: object
read.document.search_documentsПоиск документовARead-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Карточка организации (реквизиты)ARead-only
Полные реквизиты организации (юрлица) из настроек 1С: ИНН/КПП/ОГРН, полное и сокращённое наименование, дата регистрации, ОКВЭД, налоговый орган, контактная информация (юридический/фактический/почтовый адрес, телефон, email), основной банковский счёт, а также директор и главный бухгалтер. Для ИП директором считается сам предприниматель (берётся из карточки организации); для ООО и т.п. — из регистра «Ответственные лица организаций», если он опубликован в OData (если нет — вернётся заметка, что нужно добавить в «Состав OData»). Работает для любой организации базы — по названию (organization) или автоматически, если она в базе одна.
Inputs: database, organization. Returns: inn, kpp, ref, name, +13 more
read.schema.describe_entityОписание объектаARead-only
Показывает поля (с типами) и связи конкретного объекта 1С из $metadata. Принимает техническое имя EntitySet, напр. 'Catalog_Контрагенты' или 'Document_РеализацияТоваровУслуг'. Используйте перед поиском, чтобы узнать доступные поля.
Inputs: entitySet (required), database. Returns: keys, class, fields, entitySet, +1 more
read.schema.list_entitiesКарта объектов базыARead-only
Возвращает карту бизнес-объектов 1С, сгруппированную по классам: справочники, документы, регистры, перечисления и т.д. Используйте, чтобы понять, какие данные доступны в базе. Можно отфильтровать по классу и/или подстроке имени.
Inputs: class, search, database. Returns: groups, database, odataVersion
read.system.health_checkПроверка соединенияARead-only
Проверяет доступность OData-сервиса 1С и корректность авторизации для выбранной базы. Перечитывает $metadata и обновляет кеш схемы; возвращает версию OData и число видимых объектов. Вызывайте первым, если другие инструменты выдают ошибки.
Inputs: database. Returns: label, status, baseUrl, database, +5 more
read.system.list_databasesСписок баз 1СARead-only
Показывает настроенные базы 1С, к которым подключён сервер, и какая из них основная. Имя базы передаётся в параметр database остальных инструментов. Вызывайте, если нужно понять, какие базы доступны или сравнить данные нескольких баз.
Inputs: no named parameters. Returns: default, databases
read.system.list_organizationsОрганизации базыARead-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Провести / отменить проведение документаADestructive
Проводит документ (влияет на учёт) или отменяет проведение. По умолчанию предпросмотр (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Пометить на удалениеADestructive
Ставит/снимает пометку на удаление у объекта (как в 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
Scored across 75 tools
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.
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.
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.
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
Cloud-hosted MCP server for secure AI access to enterprise data sources via CData Connect AI.
Read-only finance MCP server. Connects your banks, cards, payment apps, books and payroll into one ledger for your AI. Can't move money. Open source (AGPL-3.0), free during beta.
Connect your ads, shop, analytics, social, CRM and finance platforms once, then let Claude, ChatGPT, Cursor or any MCP client read, join and explain your numbers. Public statistics from the World Bank, IMF, Eurostat, OECD, WHO and SEC filings come as context, searchable and chartable from the same tools. Read-only by design, every number carries its source.
One governed MCP endpoint for 40+ business systems. Read-only, source-cited answers.
Related MCP Servers
- AlicenseAqualityDmaintenanceBridges AI agents to 1C:Enterprise via OData, enabling natural language queries of business entities like counterparties and invoices with read-only access.867 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables 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.9MIT
- AlicenseNot gradedqualityCmaintenanceEnables 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.2MIT
- AlicenseNot gradedqualityBmaintenanceEnables 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.4MIT