11 октября 2026 г.
Настройка Claude Code для расширений 1С (.cfe): MCP-сервер Графон по шагам
Почему расширения .cfe ломают контекст ИИ-агента
Расширение конфигурации (.cfe) — это не «ещё один модуль». Это отдельный набор метаданных, который заимствует объекты из базовой конфигурации и подменяет их обработчики через &Перед, &После и &Вместо. Агенту, чтобы понять одну процедуру в расширении, нужно знать:
- сигнатуру оригинального метода в базовой конфигурации;
- есть ли ещё обработчики этого события в цепочке расширений;
- какие переменные контекста расширение добавляет в заимствованный объект;
- какие подписки на события сработают после записи.
Если отдать всё это Claude Code «в лоб» через обычные файлы, типовой проект УТ 11 или ERP на 3-5 ГБ XML съедает окно контекста за 2–3 запроса. Дальше идут галлюцинации: агент «изобретает» методы, путает ПродолжитьВызов() с Выполнить() и предлагает синтаксис, которого в BSL нет.
Решение — подключить Claude Code к MCP-серверу Графон, который держит локальный граф метаданных, вызовов и подписок и отдаёт агенту только релевантный срез.
---
Архитектура связки «Claude Code + Графон + .cfe»
┌─────────────┐ MCP (stdio/HTTP) ┌──────────────┐ XML/BSL ┌────────────┐
│ Claude Code │ ───────────────────▶ │ Графон MCP │ ◀────────── │ src/ │
│ (агент) │ ◀─────────────────── │ (локально) │ граф │ base+ext │
└─────────────┘ точный срез └──────────────┘ └────────────┘
Ключевое: Графон не «индексирует текст», а строит граф. В узлах — объекты метаданных, модули, процедуры, подписки, обработчики расширений. В рёбрах — вызывает, переопределяет, заимствует, обрабатывает событие.
---
Шаг 1. Подготовка Графона
- Выгрузите базовую конфигурацию и расширение в XML (
Конфигуратор → Администрирование → Выгрузить конфигурацию в файлы). - Сложите их в одну рабочую папку, например:
./src/base/ # XML базы- ./src/extension/ # XML расширения (.cfe)
- Запустите индексацию:
grafon index --root ./src --project erp-ut-ext
grafon serve --port 7777
Графон сам распознаёт, что extension/ содержит .cfe-описания, и помечает заимствованные объекты как overridden.
---
Шаг 2. Подключение MCP к Claude Code
Добавьте сервер в конфиг проекта (.mcp.json в корне или ~/.claude/settings.json для глобального использования):
{
"mcpServers": {
"grafon": {
"command": "grafon-mcp",
"args": ["--project", "erp-ut-ext"],
"env": {
"GRAFON_URL": "http://127.0.0.1:7777",
"GRAFON_SCOPE": "extension"
}
}
}
}
GRAFON_SCOPE=extension заставляет MCP-сервер по умолчанию возвращать только заимствованные объекты и их переопределения — то, что реально нужно при работе с .cfe.
Проверка подключения внутри Claude Code:
/mcp
В списке должен появиться grafon со всеми доступными инструментами.
---
Шаг 3. CLAUDE.md под расширение
Создайте файл CLAUDE.md в корне проекта — это системный промпт для агента. Ключевые правила:
# Контекст проекта
Это расширение .cfe для конфигурации УТ 11.4. Префикс объектов: Расш_.
Правила работы с кодом
- Перед правкой любой процедуры сначала вызывай grafon.getRelatedFiles.
- Для поиска переопределений используй grafon.resolveExtensionOverrides.
- Никогда не редактируй XML базовой конфигурации — только ./src/extension.
- При генерации обработчиков всегда добавляй ПродолжитьВызов() в конце, если это &Вместо.
- Не придумывай имена методов: проверяй через grafon.findSymbol.
Правила поиска
- Модуль объекта: grafon.getModule(object, "ObjectModule")
- Модуль менеджера: grafon.getModule(object, "ManagerModule")
- Подписки на событие: grafon.traceSubscription
---
Практика: MCP-инструменты, которые экономят токены
1. Найти все переопределения события
Запрос от Claude Code:
{
"method": "tools/call",
"params": {
"name": "grafon.resolveExtensionOverrides",
"arguments": {
"object": "Документ.РеализацияТоваровУслуг",
"event": "ПриЗаписи"
}
}
}
Ответ (срез, а не весь модуль):
{
"base": "Document.РеализацияТоваровУслуг.ObjectModule:1274",
"overrides": [
{
"file": "extension/Documents/РеализацияТоваровУслуг/Ext/ObjectModule.bsl",
"line": 42,
"decorator": "&После",
"symbol": "Расш_ПриЗаписиПосле"
}
],
"chain": ["base.ПриЗаписи", "ext.Расш_ПриЗаписиПосле"]
}
Вместо 40 000 токенов XML агент получает 180 токенов JSON.
2. Показать связанные файлы перед правкой
grafon.getRelatedFiles
symbol: Расш_ПроверитьЗаполнение
depth: 2
Вернёт модуль объекта, общий модуль расширения и подписку — ровно то, что нужно прочитать.
3. Найти подписки, которые сработают после записи
grafon.traceSubscription
event: ПриЗаписи
object: Документ.РеализацияТоваровУслуг
---
Пример BSL: правка заимствованного обработчика
Задача: расширение должно блокировать проведение, если контрагент помечен как «заблокирован».
&НаСервере
&Вместо("ОбработкаПроведения")
Процедура Расш_ОбработкаПроведения(Отказ, РежимПроведения)
Если НЕ Расш_ПроверитьКонтрагента() Тогда
Отказ = Истина;
Сообщить("Контрагент заблокирован. Проведение невозможно.");
Возврат;
КонецЕсли;
// Всегда прокидываем вызов базовой логики
ПродолжитьВызов(Отказ, РежимПроведения);
КонецПроцедуры
&НаСервереБезКонтекста
Функция Расш_ПроверитьКонтрагента()
Возврат Истина; // TODO: реальная проверка через граф
КонецФункции
Без графа агент часто забывает ПродолжитьВызов() или ставит его до собственной проверки, ломая штатную логику. С Графоном Claude Code видит оригинальную сигнатуру и цепочку декораторов и подставляет аргументы корректно.
---
Сценарий: генерация нового обработчика подписки
Промпт в Claude Code:
Добавь в расширение подписку наПриЗаписидокументаПоступлениеТоваровУслуг, которая пишет в регистр сведенийРасш_ЛогИзменений. Используй MCP Графон, чтобы проверить, что такой подписки ещё нет.
Агент вызывает grafon.findSymbol("Расш_ЛогИзменений"), убеждается, что регистр уже заимствован, и генерирует:
&НаСервере
Процедура Расш_ПриЗаписиПоступления(Источник, Отказ) Экспорт
Запись = РегистрыСведений.Расш_ЛогИзменений.СоздатьМенеджерЗаписи();
Запись.Документ = Источник.Ссылка;
Запись.Дата = ТекущаяДатаСеанса();
Запись.Пользователь = Пользователи.ТекущийПользователь();
Запись.Записать();
КонецПроцедуры
---
Сравнение: с Графоном и без
| Метрика | Без MCP | Claude Code + Графон | Выигрыш |
|---|---|---|---|
| Токенов на 1 правку (УТ 11) | 180 000 | 14 000 | 12.8× |
| Стоимость сессии (Sonnet) | ~$2.70 | ~$0.21 | 12× |
| Время до первого корректного патча | 4–7 мин | 30–50 сек | ~8× |
| Галлюцинации (метод/параметр) | 1–2 на ответ | <0.1 | ~10× |
| Понимание цепочки &Вместо | Часто неверно | Всегда точно | — |
| Работа с подписками | Только вручную | traceSubscription | — |
---
Best practices для команды
- Один проект — один индекс Графона. Не смешивайте ERP и ЗУП в одном индексе, если расширения разные.
- Обновляйте индекс после каждой выгрузки.
grafon index --incrementalдостраивает граф за секунды. - Держите
CLAUDE.mdв репозитории. Правила должны обновляться в том же PR, что и код. - Ограничивайте
GRAFON_SCOPE. Для задач «только расширение» не давайте агенту полный доступ к базе — это ещё раз сокращает контекст. - Ревью через
getRelatedFiles. Перед мержем попросите агента вывести список затронутых символов через MCP — получите автоматический impact-анализ.
---
Итог
Claude Code сам по себе — отличный агент для BSL. Но на расширениях .cfe он бесполезен без графового контекста: слишком много связей между базой и расширением. MCP-сервер Графон закрывает эту дыру: строит локальный граф, отдаёт по запросу точный срез файлов и сигнатур, снижает расход токенов на порядок и убирает галлюцинации в обработчиках &Вместо, &Перед и &После.
Настройка занимает 15 минут: индексация проекта, .mcp.json, CLAUDE.md — и команда получает ИИ-ассистента, который действительно понимает архитектуру вашего расширения 1С.