6 октября 2026 г.
Как передавать только сигнатуры методов 1С в промпт нейросети: MCP-подход на практике
Почему полный дамп конфигурации ломает ИИ-агента
Типовая ERP или УТ на 1С — это 1.2–3.5 ГБ XML-выгрузки, 4000–9000 модулей и сотни тысяч строк на BSL. Разработчик, который подключает Claude Code или Cursor «в лоб» — через cat всех общих модулей или индексацию корня выгрузки, — получает предсказуемую деградацию:
- контекстное окно переполняется на первых же 20–30 модулях, агент начинает «забывать» ранее прочитанное;
- каждый запрос стоит 3–12 долларов на моделях класса Opus/GPT, потому что 80% токенов — это тела функций, которые не относятся к задаче;
- агент галлюцинирует имена процедур, придумывает несуществующие параметры и «изобретает» методы общих модулей, которых нет в конфигурации;
- время ответа растёт с 20 секунд до 5–12 минут.
Ключевая ошибка — передавать в промпт реализацию. Для 90% задач (найти вызов, понять контракт, собрать план рефакторинга, дописать проверку типа) агенту нужны только сигнатуры и связи между ними. Реализация подгружается точечно — по запросу, для 1–3 конкретных методов.
Что такое сигнатура метода 1С и что в неё входит
Сигнатура в 1С — это объявление процедуры или функции без тела:
Функция ПолучитьЦеныНоменклатуры(Номенклатура, Дата, ТипЦен, ИгнорироватьОтсутствие = Ложь) Экспорт
Процедура ЗаполнитьТЧПоДокументу(Документ, ТабличнаяЧасть, ТолькоНовые = Истина) Экспорт
Минимальный полезный набор полей для ИИ-агента:
- Имя (
ПолучитьЦеныНоменклатуры) - Тип — процедура или функция
- Параметры и значения по умолчанию
- Признак Экспорт и, для расширений, признак директивы компиляции (
&НаСервере,&НаКлиенте,&НаСервереБезКонтекста) - Модуль-владелец (
ОбщийМодуль.ЦеныСервер,Документ.РеализацияТоваровУслуг.МодульОбъекта) - Возвращаемый тип, если он выводится из тела или из документирующего комментария
- Входящие вызовы — кто вызывает этот метод (рёбра графа)
Этого достаточно, чтобы агент собрал корректный вызов, не подтягивая 300 КБ чужого кода.
Архитектура: локальный граф + MCP-сервер Графон
Графон работает как локальный анализатор и MCP-сервер. Схема:
Выгрузка 1С (XML + BSL)
│
▼
[ Парсер Графона ] ──► Граф зависимостей (SQLite/локальный индекс)
│ • метаданные и модули
│ • процедуры/функции и их сигнатуры
│ • рёбра вызовов и подписки на события
│ • запросы и используемые поля
▼
[ MCP-сервер Графона ] ◄── stdio / HTTP ── Claude Code, Cursor, Windsurf
│
▼
ИИ-агент получает только сигнатуры и точечный срез кода
Граф строится один раз. Дальше агент делает запросы, а не читает файлы. Для модели это выглядит как обычный tool-use: MCP-сервер отдаёт JSON с сигнатурами.
Как это выглядит в запросе агента
Агент вызывает инструмент search_methods и явно просит вернуть только сигнатуры:
{
"jsonrpc": "2.0",
"id": 41,
"method": "tools/call",
"params": {
"name": "search_methods",
"arguments": {
"nameMask": "%Цен%Номенклатуры%",
"moduleType": "ОбщийМодуль",
"exportOnly": true,
"signaturesOnly": true,
"limit": 50
}
}
}
Ответ содержит десятки строк вместо мегабайтов:
{
"result": {
"methods": [
{
"module": "ОбщийМодуль.ЦеныСервер",
"name": "ПолучитьЦеныНоменклатуры",
"kind": "Функция",
"export": true,
"signature": "ПолучитьЦеныНоменклатуры(Номенклатура, Дата, ТипЦен, ИгнорироватьОтсутствие = Ложь)",
"callers": 14,
"returns": "ТаблицаЗначений"
}
]
}
}
Дальше агент запрашивает граф вызовов:
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "get_call_graph",
"arguments": {
"method": "ОбщийМодуль.ЦеныСервер.ПолучитьЦеныНоменклатуры",
"depth": 2,
"direction": "callers"
}
}
}
И только теперь — тело одного конкретного метода через get_method_body. Ровно один вызов, ровно один метод.
Практический кейс: рефакторинг общего модуля
Задача: добавить новый параметр УчитыватьСкидки в ПолучитьЦеныНоменклатуры, не сломав 14 вызовов.
Без Графона. Разработчик просит агента прочитать ЦеныСервер и все объекты, где встречается имя метода. В контекст улетает 600–900 КБ кода, агент находит 9 из 14 вызовов и пропускает вызовы через Вычислить() и подписки.
С Графоном. Промпт:
Найди все вызовы ОбщийМодуль.ЦеныСервер.ПолучитьЦеныНоменклатуры
через MCP-инструмент get_call_graph (depth=3).
Верни только сигнатуры вызывающих методов и строки вызовов.
Не загружай тела вызывающих методов.
Агент получает 14 рёбер графа, 14 сигнатур и список строк. Итоговый контекст — около 18 КБ вместо 900 КБ. Задача решается за один проход, без «дочитывания» модулей.
Сравнение: с Графоном и без
| Параметр | Без Графона (полный контекст) | С Графоном (MCP + сигнатуры) |
|---|---|---|
| Что попадает в контекст | 1.2–3.5 ГБ XML + тела модулей | 20–80 КБ релевантного среза |
| Токенов на задачу | 180 000 – 900 000 | 12 000 – 45 000 |
| Время ответа агента | 4–12 минут | 20–60 секунд |
| Стоимость запроса | $3–12 | $0.2–0.8 |
| Поиск вызовов | фрагментарный, по regex | полный граф, включая подписки |
| Выдуманные имена методов | 15–30% | 0–2% |
| Точность сигнатуры | часто искажена | байт-в-байт из парсера |
Разница в токенах — до 10 раз, и это не маркетинговая оценка, а прямое следствие того, что в промпт больше не попадают тела функций.
Настройка в Claude Code, Cursor и Windsurf
Минимальный конфиг MCP-клиента:
{
"mcpServers": {
"grafon": {
"command": "grafon",
"args": ["mcp", "--config", "./grafon.config.json"],
"env": { "GRAFON_INDEX": "./.grafon/index.db" }
}
}
}
Правила, которые стоит добавить в системный промпт агента:
- сначала
search_methodsсsignaturesOnly: true, и только потом — тела; - запрещено передавать в контекст модуль целиком без явного запроса пользователя;
- для поиска зависимостей всегда использовать
get_call_graph, а не текстовый поиск по выгрузке; - при генерации вызова обязательна проверка сигнатуры через
get_method_signatureперед выводом кода.
Чек-лист формирования промпта
- Указывайте модуль-владелец, а не только имя метода — в 1С полно одноимённых процедур.
- Ставьте
signaturesOnly: trueиlimit— защита от «простыни» в ответе. - Для больших модулей запрашивайте граф вызовов с
depth: 2–3, глубже почти никогда не нужно. - Просите возвращать
returnsиexport, иначе агент начнёт угадывать типы. - Тело метода — отдельным вызовом, только для тех методов, которые реально меняются.
- Фиксируйте в промпте, что выгрузка 1С доступна только через MCP — это отключает попытки агента читать файлы напрямую.
Ограничения
- Динамические вызовы (
Вычислить,Выполнить) граф видит не полностью — это ограничение самой платформы, а не парсера. - Расширения и заимствованные объекты требуют отдельной настройки индексации, иначе сигнатуры будут от базовой конфигурации.
- Граф нужно перестраивать после существенных изменений кода, иначе агент получит устаревшие сигнатуры.
- Для форм с большим объёмом клиентского кода сигнатуры обработчиков полезны, но директивы компиляции нужно передавать обязательно.
Итог
Передача только сигнатур методов 1С в промпт — это не оптимизация «на потом», а базовое условие работоспособности ИИ-агента на реальной конфигурации. Локальный граф и MCP-сервер Графон превращают гигабайты метаданных в компактный контракт: агент видит, какие методы существуют, что они принимают и кто их вызывает — и не тратит контекст на реализацию, которая в 95% случаев ему не нужна. Итог — до 10 раз меньше токенов, ответы за десятки секунд и код, который компилируется с первого раза, потому что имена и параметры взяты из парсера, а не из воображения модели.