Все статьи

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

Как подружить Windsurf с 1С:ERP через MCP-сервер Графон

Почему Windsurf «захлёбывается» на 1С:ERP

Windsurf Cascade — мощный агентный редактор, но типовая 1С:ERP — это не один проект на 20 файлов. Это гигабайты XML-метаданных, сотни тысяч строк BSL, формы, модули объектов, менеджеров, общие модули, подписки на события и запросы. Если открыть такую конфигурацию как обычный репозиторий, ИИ начинает читать всё подряд: модуль документа, менеджер, формы, общие модули, связанные справочники. Контекстное окно переполняется, стоимость токенов растёт в 5–10 раз, а агент начинает путать методы и придумывать несуществующие процедуры.

Проблема не в Windsurf. Проблема в способе подачи конфигурации. Ему нужен не «весь ERP», а точный срез: конкретная процедура, её вызовы, подписки, источники данных и зависимости. Именно эту задачу решает локальный MCP-сервер Графон.

Архитектура связки: Windsurf + MCP + Графон

Графон индексирует исходники 1С:ERP и строит локальный граф зависимостей. В узлах — объекты метаданных, модули, процедуры, функции, формы, подписки, запросы и роли. В рёбрах — вызовы, использование, подписки, связи метаданных и обращения к запросам. Windsurf через протокол MCP запрашивает только нужный фрагмент графа.

1С:ERP (XML/EDT) → Индексатор Графон → Граф зависимостей
                                              ↓
Windsurf Cascade ← MCP-сервер Графон ← Локальный кэш

Ключевые MCP-инструменты, которые видит Windsurf:

  • grafon_find_object — найти объект метаданных по имени.
  • grafon_get_slice — получить срез модуля по процедуре и глубине вызовов.
  • grafon_call_graph — построить граф вызовов вверх и вниз.
  • grafon_find_subscriptions — найти подписки на событие.
  • grafon_query_usage — найти использование таблиц и полей в запросах.
  • grafon_impact_analysis — оценить влияние изменения.

Настройка Windsurf и Графона за 15 минут

  1. Скачайте и установите Графон с https://grafonbase.ru.
  2. Проиндексируйте исходники ERP. Лучше указывать выгрузку в XML или проект EDT, а не .cf.
grafon index \
  --src ./src/erp \
  --project erp \
  --exclude ".git" \
  --exclude "*.bin" \
  --exclude "*.png"
  1. Добавьте MCP-сервер в настройки Windsurf. Пример конфигурации:
{
  "mcpServers": {
    "grafon": {
      "command": "grafon",
      "args": ["mcp", "--project", "erp", "--transport", "stdio"]
    }
  }
}
  1. Перезапустите Windsurf и проверьте, что в Cascade доступны инструменты grafon_*.
  2. После каждого merge или обновления конфигурации запускайте переиндексацию:
grafon index --project erp --update

Пример: доработка проведения документа

Задача: добавить списание бонусов при проведении Документ.РеализацияТоваровУслуг. Без Графона Windsurf начнёт читать объектный модуль, модуль менеджера, формы, общие модули. С Графоном агент делает MCP-запрос:

{
  "jsonrpc": "2.0",
  "id": 42,
  "method": "tools/call",
  "params": {
    "name": "grafon_get_slice",
    "arguments": {
      "project": "erp",
      "object": "Документ.РеализацияТоваровУслуг",
      "entry": "ОбработкаПроведения",
      "depth": 2
    }
  }
}

В ответ приходят точные сигнатуры, вызовы и фрагменты BSL. Windsurf сразу видит, куда встроить код, и не перечитывает ERP целиком.

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    // Стандартная проверка заполнения
    ПроверитьЗаполнение();
    
    // Новый блок: списание бонусов
    Если НужноСписатьБонусы() Тогда
        СписатьБонусыПокупателя(Отказ);
    КонецЕсли;
    
    // Типовой алгоритм проведения
    Движения.Товары.Записывать = Истина;
    Для Каждого ТекСтрокаТовары Из Товары Цикл
        Движение = Движения.Товары.Добавить();
        Движение.Период = Дата;
        Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
        Движение.Количество = ТекСтрокаТовары.Количество;
        Движение.Сумма = ТекСтрокаТовары.Сумма;
    КонецЦикла;
КонецПроцедуры

Функция НужноСписатьБонусы()
Возврат Константы.ИспользоватьБонусныеПрограммы.Получить()
И Ссылка.Партнер <> Неопределено;
КонецФункции

Если изменить общий модуль БонусныеПрограммы, Графон покажет всех вызывающих и подписки. Windsurf не придётся угадывать.

// Пример запроса, который Графон связывает с таблицами и объектами
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|   Товары.Номенклатура,
|   Товары.Количество,
|   Товары.Сумма
|ИЗ
|   Документ.РеализацияТоваровУслуг.Товары КАК Товары
|ГДЕ
|   Товары.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Ссылка);

Поиск подписок и анализ влияния

Частая задача в ERP: понять, что сработает при записи документа. Запрос к Графону:

{
  "jsonrpc": "2.0",
  "id": 43,
  "method": "tools/call",
  "params": {
    "name": "grafon_find_subscriptions",
    "arguments": {
      "project": "erp",
      "event": "ПриЗаписи",
      "source": "Документ.РеализацияТоваровУслуг"
    }
  }
}

Результат Windsurf получает в структурированном виде:

| Подписка | Обработчик | Модуль | Строка |
|---|---|---|---|
| Бонусы_ПриЗаписи | СписатьБонусы | ОбщийМодуль.БонусныеПрограммы | 215 |
| Взаиморасчёты_ПриЗаписи | ПересчитатьДолг | ОбщийМодуль.Взаиморасчёты | 88 |
| Права_ПриЗаписи | ПроверитьДоступ | ОбщийМодуль.ПраваПользователей | 341 |

Такой срез экономит десятки тысяч токенов и исключает ложные выводы.

Сценарии для команды разработки

  • Онбординг: новый разработчик спрашивает Windsurf, как проходит проведение реализации, и получает ответ на основе графа, а не догадок.
  • Code review: агент проверяет, что изменение не ломает вызовы из других подсистем.
  • Рефакторинг: перенос логики из модуля объекта в общий модуль с поиском всех вызовов.
  • Оптимизация запросов: Графон показывает, где используются таблицы и поля.
  • Оценка изменений: grafon_impact_analysis строит цепочку «кто вызывает — что сломается».

Без Графона vs с Графоном

| Параметр | Windsurf + файлы 1С:ERP | Windsurf + MCP Графон |
|---|---|---|
| Контекст на задачу | 120 000–400 000 токенов | 12 000–35 000 токенов |
| Время ответа | 3–8 минут | 30–90 секунд |
| Стоимость запроса | $0,6–2,5 | $0,05–0,25 |
| Галлюцинации методов | высокий риск | низкий |
| Точность связей | ручной поиск | граф до 3–5 уровней |
| Обновление после merge | не автоматизировано | переиндексация проекта |

Best practices

  • Индексируйте исходники XML или EDT, а не .cf.
  • Исключайте .git, bin, картинки и временные каталоги.
  • Запускайте grafon index --update после каждого merge.
  • Для анализа берите depth: 2–3, чтобы не перегружать контекст.
  • Проверяйте BSL в Конфигураторе или EDT: ИИ не заменяет синтаксический контроль.
  • Не давайте агенту право на commit без review.
  • Используйте Графон локально: данные не уходят во внешние сервисы.

Вывод

Windsurf и 1С:ERP могут работать вместе, если между ними поставить правильный слой доступа к знаниям. Графон превращает гигабайты XML и BSL в локальный граф зависимостей. Windsurf через MCP получает только точные процедуры, вызовы, подписки и запросы. Это снижает расход токенов до 10 раз, ускоряет задачи и убирает галлюцинации. Начните с индексации одной подсистемы ERP, подключите MCP-сервер и сравните результат на первой же доработке.