Все статьи

23 сентября 2026 г.

Сравнение Claude Code и Cursor при разработке на 1С: контекст, токены и MCP-сервер Графон

Почему контекст — главный враг ИИ-агента на 1С

Конфигурации уровня ERP 2.5, УТ 11.5, ЗУП 3.1 и КА 2 — это 4–12 ГБ XML-выгрузки, 250 000–700 000 строк BSL, десятки тысяч объектов метаданных и форм. Ни Claude Code, ни Cursor не умеют «прочитать конфигурацию целиком»: любая попытка подсунуть агенту хотя бы один крупный общий модуль вроде УправлениеЗапасамиСервер — это 30–60 тыс. токенов на файл.

Дальше начинается типовой сценарий деградации:

  1. Агент читает 15–20 файлов «на всякий случай» через grep или семантический поиск.
  2. Контекстное окно заполняется нерелевантным кодом.
  3. Модель начинает путать имена процедур, придумывать несуществующие методы вида ПолучитьОстаткиПоРегиструБухгалтерииУправленческий().
  4. Вы платите за 300–500 тыс. токенов на задачу, которая должна была стоить 30 тыс.

Именно здесь расходятся Claude Code и Cursor — и именно здесь подключается Графон, локальный MCP-сервер, который отдаёт агенту не файлы, а точный срез графа зависимостей конфигурации.

Claude Code и Cursor: архитектурная разница

Claude Code

Это CLI-агент, работающий в терминале. Ключевые свойства:

  • Нет постоянного индекса репозитория — вместо него агент использует glob, grep, read и субагентов для параллельного поиска.
  • Поддерживает MCP «из коробки», конфигурируется через .mcp.json.
  • Длинные цепочки рассуждений и автономные циклы (до десятков tool-call'ов подряд).
  • Хорошо держит 200k+ контекста, но заполняет его сам же результатами поиска.

Cursor

Это форк VS Code с векторным RAG-индексом. Ключевые свойства:

  • Строит embeddings по чанкам репозитория и подтягивает «похожие» фрагменты по семантике.
  • Отличный inline-автокомплит (Tab) — но именно он слабо работает на BSL из-за отсутствия качественной языковой поддержки.
  • Composer/Agent-режим умеет многошаговые правки, поддерживает MCP.
  • Векторный индекс на 12 ГБ XML строится часами и постоянно «шумит»: чанк формы Документ.Реализация.Форма.ФормаДокумента теряет связь с обработчиком проведения в модуле объекта.

| Критерий | Claude Code | Cursor |
|---|---|---|
| Формат | CLI / терминал | IDE (форк VS Code) |
| Индексация | Поиск по файлам в реальном времени | Векторный RAG-индекс |
| Понимание связей 1С | Среднее (через чтение) | Низкое (чанки рвут граф) |
| Длинные цепочки правок | Сильные | Средние |
| Автодополнение кода | Нет | Отличное (но не для BSL) |
| MCP | Да | Да |
| Стоимость на крупной задаче | Высокая без MCP | Высокая без MCP |

Вывод: на 1С оба инструмента упираются в одну и ту же стену — отсутствие структурной модели конфигурации.

Что делает Графон

Графон — локальный инструмент, который:

  1. Разбирает всю выгрузку конфигурации (XML метаданных + BSL + формы + права).
  2. Строит граф: ОбъектМетаданных → Форма → Модуль → Процедура → Вызов → ОбъектМетаданных, плюс отдельные рёбра для Подписка → Источник → Обработчик и Запрос → Таблица.
  3. Поднимает MCP-сервер, через который агент запрашивает ровно тот срез, который нужен.

Никаких «прочитай 20 файлов» — агент делает один точный вызов.

Архитектура

Выгрузка 1С (XML + BSL)
        │
        ▼
[Индексатор Графона] ──► SQLite-граф (метаданные, символы, вызовы)
        │
        ▼
[MCP-сервер Grafon] ◄── JSON-RPC ──► Claude Code / Cursor / Windsurf
        │
        ▼
Точный срез: сигнатуры + тела только связанных методов

Подключение

.mcp.json для Claude Code:

{
  "mcpServers": {
    "grafon": {
      "command": "grafon",
      "args": ["mcp", "--base", "/data/erp25", "--index", "/data/.grafon/erp25.db"]
    }
  }
}

Для Cursor — тот же файл в ~/.cursor/mcp.json. Инструменты, которые получает агент:

  • grafon.find_symbol — найти процедуру/функцию по имени.
  • grafon.callers — кто вызывает этот метод (обратный граф).
  • grafon.event_subscribers — все подписки на событие объекта.
  • grafon.object_slice — минимальный срез модулей объекта и его форм.
  • grafon.query_tables — какие таблицы читает/пишет запрос.
  • grafon.impact — что сломается при изменении сигнатуры.

Практический сценарий: контроль остатков в реализации

Задача агенту: «Добавь проверку отрицательных остатков в Документ.РеализацияТоваровУслуг.ОбработкаПроведения».

Без Графона

Агент в Cursor запускает семантический поиск, вытягивает 40+ чанков, включая формы, печатные формы и отчёты. Claude Code делает то же через grep, рекурсивно читая Documents/РеализацияТоваровУслуг/Ext/ObjectModule.bsl и соседние модули менеджера. Результат — таблица ниже.

С Графоном

Агент делает один MCP-вызов:

{
  "method": "tools/call",
  "params": {
    "name": "grafon.object_slice",
    "arguments": {
      "object": "Document.РеализацияТоваровУслуг",
      "include": ["ObjectModule", "ManagerModule", "Forms.ФормаДокумента"],
      "calls": { "depth": 1 }
    }
  }
}

И получает ~7 000 строк контекста вместо 90 000 — только модуль объекта, вызванные им процедуры из общего модуля УправлениеЗапасамиСервер с сигнатурами, и связи с регистром накопления ТоварыНаСкладах.

Сравнение по токенам и времени

| Метрика | Без Графона (Claude Code) | Без Графона (Cursor) | С Графоном |
|---|---|---|---|
| Токенов на задачу | ~420 000 | ~380 000 | ~38 000 |
| Время до рабочего патча | 18–25 мин | 12–20 мин | 4–7 мин |
| Галлюцинаций (несуществующие методы) | 3–6 | 5–8 | 0–1 |
| Правок «не по месту» | 2–4 | 3–5 | 0 |
| Стоимость задачи (условно) | 100% | 90% | 9–12% |

То есть до 10x экономии на токенах — ровно то, что даёт граф зависимостей вместо сырых файлов.

Живые примеры BSL, где граф критичен

Типовая ошибка ИИ-агента без графа — правка обработчика подписки без учёта источника. Агент видит:

Процедура НоменклатураПриЗаписи(Источник, Отказ) Экспорт
    Если Источник.ЭтоНовый() Тогда
        Источник.Артикул = СформироватьАртикул(Источник);
    КонецЕсли;
КонецПроцедуры

и «улучшает» его, не зная, что подписка навешана на три объекта: Справочник.Номенклатура, Справочник.ХарактеристикиНоменклатуры и ПланВидовХарактеристик.ВидыХарактеристикНоменклатуры. Графон-вызов grafon.event_subscribers мгновенно возвращает:

{
  "event": "ПриЗаписи",
  "subscriptions": [
    { "name": "ЗаполнениеАртикула", "source": "Catalog.Номенклатура", "handler": "ОбщийМодуль.РаботаСНоменклатурой.НоменклатураПриЗаписи" },
    { "name": "ЗаполнениеАртикула", "source": "Catalog.ХарактеристикиНоменклатуры", "handler": "ОбщийМодуль.РаботаСНоменклатурой.НоменклатураПриЗаписи" },
    { "name": "ЗаполнениеАртикула", "source": "ChartOfCharacteristicTypes.ВидыХарактеристикНоменклатуры", "handler": "ОбщийМодуль.РаботаСНоменклатурой.НоменклатураПриЗаписи" }
  ]
}

После этого агент пишет корректный обработчик:

Процедура НоменклатураПриЗаписи(Источник, Отказ) Экспорт
    Если Источник.ЭтоНовый() Или Источник.Артикул = "" Тогда
        Артикул = СформироватьАртикул(Источник);
        Если Источник.Метаданные().Имя = "ВидыХарактеристикНоменклатуры" Тогда
            Источник.Артикул = "Х-" + Артикул;
        Иначе
            Источник.Артикул = Артикул;
        КонецЕсли;
    КонецЕсли;

Если НоменклатураИспользуетсяВДокументах(Источник) Тогда
Отказ = Истина;
ОбщегоНазначения.СообщитьПользователю(
НСтр("ru = 'Запись запрещена: номенклатура используется в документах.'"));
КонецЕсли;
КонецПроцедуры

Функция НоменклатураИспользуетсяВДокументах найдена Графоном через grafon.callers с глубиной 1 — агент не изобрёл её, а взял существующую сигнатуру.

Когда что выбирать

  • Claude Code + Графон — крупный рефакторинг, миграции, разбор цепочек вызовов на 5+ уровней, работа в CI (агент может запускаться в пайплайне и делать автопатчи).
  • Cursor + Графон — ежедневная разработка в IDE: правка форм, отладка, написание новых общих модулей с мгновенным автокомплитом. Графон закрывает слабое место Cursor — потерю связей в векторном индексе.
  • Windsurf + Графон — командные сессии и code review.

Все три инструмента через MCP получают одну и ту же структурную модель конфигурации. Это и есть смысл Графона: он не привязан к конкретной IDE или модели, он устраняет первопричину перерасхода токенов.

Чеклист внедрения

  1. Выгрузить конфигурацию в XML (Конфигурация → Выгрузить в файлы).
  2. Проиндексировать: grafon index --base /data/erp25.
  3. Прописать MCP-сервер в .mcp.json (Claude Code) и ~/.cursor/mcp.json (Cursor).
  4. Добавить в системный промпт правило: «Перед правкой BSL всегда вызывай grafon.callers и grafon.event_subscribers».
  5. Замерить baseline: токены и время на 3 типовых задачах до и после.
  6. Включить grafon.impact в code review, чтобы агент показывал список затрагиваемых объектов.

После шага 5 обычно фиксируется падение расхода токенов в 8–10 раз и полное исчезновение галлюцинаций имён методов — потому что агент больше ничего не выдумывает, а читает граф.