14 сентября 2026 г.
Подключение Model Context Protocol к 1С:Предприятие: MCP-сервер Графон для BSL и метаданных
Почему MCP стал точкой входа ИИ в 1С
Model Context Protocol (MCP) — открытый протокол, который превращает внешние инструменты в «руки» LLM-агента: модель не переписывает весь проект в контекст, а вызывает типизированные инструменты и получает ровно тот фрагмент, который нужен для задачи. Для 1С:Предприятие это критично: типовая ERP или ЗУП — это гигабайты XML-выгрузки, десятки тысяч процедур и функций, тысячи форм и подписок на события.
Без MCP агент работает «по-файловому»: он читает модули целиком, склеивает их в промпт и на третьем-четвёртом шаге теряет нить. С MCP-сервером Графон агент сначала строит запрос к графу зависимостей, затем получает сигнатуры, связи и только потом — тела нужных методов.
Что Графон даёт поверх «голого» MCP
Графон — локальный MCP-сервер для конфигураций 1С. Он делает три вещи, которые вручную агент не сделает никогда:
- Индексация конфигурации. Разбирает выгрузку в XML/EDT, строит граф метаданных: объекты, реквизиты, табличные части, формы, движения, регистры.
- Граф кода BSL. Связывает процедуры и функции по вызовам, экспортным методам, директивам компиляции (
&НаСервере,&НаКлиенте,&НаСервереБезКонтекста), обработчикам подписок и расширений. - Граф запросов. Разбирает тексты запросов на языке 1С, связывает их с таблицами метаданных и местами использования временных таблиц.
На выходе — индексы, к которым MCP-клиент обращается за миллисекунды, вместо перекачки сотен мегабайт XML.
Архитектура подключения
┌──────────────────┐ stdio / JSON-RPC ┌──────────────────┐
│ ИИ-агент │ ◄──────────────────► │ Графон MCP-сервер│
│ Claude Code / │ listTools │ (локально) │
│ Cursor / │ callTool │ │
│ Windsurf / │ └────────┬─────────┘
│ Roo Code │ │
└──────────────────┘ │ индексация
▼
┌──────────────────────┐
│ Граф конфигурации 1С │
│ • метаданные (XML) │
│ • модули BSL │
│ • формы, подписки │
│ • тексты запросов │
└──────────────────────┘
Сервер работает локально и по stdio — исходники конфигурации не покидают рабочую машину или корпоративный контур. Это ключевое требование для проектов под NDA и для контуров с 152-ФЗ.
Установка и первичная индексация
# 1. Установка
npm i -g grafon-mcp-server
2. Индексация выгрузки конфигурации (XML/EDT)
grafon init --config ./src/cf --out ./.grafon --workers 8
3. Инкрементальное обновление после изменения модулей
grafon reindex --watch ./src/cf
Для большой ERP первичная индексация занимает единицы минут на SSD, инкрементальная — секунды. Дальше сервер стартует как MCP-процесс.
Подключение к агентам
Claude Code (.mcp.json в корне проекта)
{
"mcpServers": {
"grafon": {
"command": "grafon",
"args": ["serve", "--root", "./src/cf"],
"env": { "GRAFON_LOG": "warn" }
}
}
}
Cursor (.cursor/mcp.json)
{
"mcpServers": {
"grafon": {
"command": "grafon",
"args": ["serve", "--root", "./src/cf"]
}
}
}
Windsurf (~/.codeium/windsurf/mcp_config.json)
{
"mcpServers": {
"grafon": {
"command": "grafon",
"args": ["serve", "--root", "./src/cf"]
}
}
}
После перезапуска агента достаточно выполнить /mcp — сервер покажет список инструментов.
Инструменты Графона, доступные агенту
| Инструмент | Назначение | Что возвращает |
|---|---|---|
| search_metadata | Поиск объектов по имени/синониму/типу | Список объектов с реквизитами |
| get_object_schema | Схема объекта метаданных | Реквизиты, ТЧ, формы, движения |
| find_symbol | Поиск процедур/функций по имени | Файл, строка, сигнатура |
| get_call_graph | Кто вызывает и что вызывает | Прямые и обратные связи |
| get_dependencies | Граф зависимостей от точки входа | Транзитивное замыкание |
| find_query_usage | Где используется таблица в запросах | Модули и строки |
| get_event_subscriptions | Подписки на события для объекта | Обработчики и модули |
| describe_slice | Точный срез файлов под задачу | Только релевантные фрагменты |
Пример вызова через JSON-RPC:
{
"method": "tools/call",
"params": {
"name": "get_dependencies",
"arguments": {
"symbol": "Документ.РеализацияТоваровУслуг.ОбработкаПроведения",
"depth": 2,
"includeBodies": true
}
}
}
Ответ содержит сигнатуры, тела двух уровней и список подписок — обычно это 4–12 КБ вместо 3–8 МБ выгрузки.
Практический сценарий: правка проведения документа
Задача: «Добавь проверку отрицательных остатков при проведении РеализацииТоваровУслуг».
Промпт агенту с MCP:
Найди обработчик проведения документа РеализацияТоваровУслуг,
покажи граф вызовов на 2 уровня вглубь, найди все движения
по регистру ТоварыНаСкладах и подписки на события, которые
влияют на этот документ. Затем предложи патч.
Агент последовательно вызывает find_symbol → get_call_graph → get_dependencies → get_event_subscriptions, и только после этого читает тела методов. Типичный BSL-фрагмент, который он получает на вход:
&НаСервере
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
// Проверка заполнения ключевых реквизитов
Если НЕ ПроверитьЗаполнение() Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
Движения.ТоварыНаСкладах.Записывать = Истина;
Движения.ТоварыНаСкладах.Очистить();
// Движения формируются на сервере без контекста
СформироватьДвижения(Отказ);
Если Отказ Тогда
Возврат;
КонецЕсли;
// Гарантировать контроль остатков (для ERP-схемы)
БлокировкаДанных = Новый БлокировкаДанных;
ЭлементБлокировки = БлокировкаДанных.Добавить("РегистрНакопления.ТоварыНаСкладах");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.ИсточникДанных = Движения.ТоварыНаСкладах;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
БлокировкаДанных.Заблокировать();
КонецПроцедуры
&НаСервереБезКонтекста
Процедура СформироватьДвижения(Отказ)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Реализация.Номенклатура КАК Номенклатура,
| СУММА(Реализация.Количество) КАК Количество
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК Реализация
|ГДЕ
| Реализация.Ссылка = &Ссылка
|СГРУППИРОВАТЬ ПО
| Реализация.Номенклатура";
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Движение = Движения.ТоварыНаСкладах.Добавить();
Движение.Период = Дата;
Движение.Номенклатура = Выборка.Номенклатура;
Движение.Количество = Выборка.Количество;
КонецЦикла;
КонецПроцедуры
Агент видит, что метод СформироватьДвижения вызывается только здесь, а ОбработкаПроведения дополнительно триггерится подпиской ПроверитьОстатки — и не трогает остальные 800 модулей конфигурации.
Сравнение: с Графоном и без
| Метрика | Без MCP (прямая загрузка) | С Графоном | Выигрыш |
|---|---|---|---|
| Токенов на задачу «правка проведения» | 180 000–420 000 | 12 000–35 000 | ~10× |
| Время ответа агента | 4–9 мин | 20–60 сек | 5–8× |
| Стоимость сессии (флагманская модель) | $3–7 | $0,25–0,6 | ~10× |
| Точность попадания в нужный метод | 40–60% | 92–98% | галлюцинации почти исчезают |
| Качество при инкрементальной правке | падает с размером конфигурации | стабильно | — |
Сценарии, где MCP-подключение окупается сразу
- Аудит расширений. Графон показывает, какие подписки и обработчики переопределены в расширениях, и агент анализирует конфликты с типовой.
- Миграция на 8.3.2x / ERP 2.5. Массовый поиск устаревших методов и мест вызова — через
find_symbolиget_call_graph. - Оптимизация запросов.
find_query_usageнаходит все запросы, обращающиеся к таблице, и агент предлагает переиндексацию или замену соединения. - Ревью кода в CI. Локальный запуск Графона в пайплайне + агент, который оставляет комментарии по графу вызовов.
Ограничения и best practices
- Индексируйте всю конфигурацию, а не отдельные модули — граф строится по экспортным связям.
- Для EDT-проектов используйте
--format edt, иначе часть подписок не попадёт в индекс. - Обновляйте индекс в
pre-commitили по--watch, иначе агент будет работать со устаревшим графом. - Ограничивайте
depthвget_dependencies: глубина 3+ на ERP даёт избыточный ответ. - Не отключайте локальный режим — MCP-сервер по stdio принципиально не требует доступа в интернет.
Итог
Подключение Model Context Protocol к 1С:Предприятие перестаёт быть экспериментом, когда появляется сервер, понимающий метаданные и BSL. Графон превращает конфигурацию в граф зависимостей и отдаёт агенту только нужный срез: 10× меньше токенов, 5–8× быстрее цикл правки, предсказуемое качество на ERP, УТ, ЗУП и КА. Настроив .mcp.json один раз, вы получаете ИИ-ассистента, который действительно знает вашу конфигурацию — без галлюцинаций и без выгрузки гигабайтов XML в контекст.