Все статьи

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

Как настроить локальный MCP-сервер для 1С на Windows и Linux: полное руководство по Grafon

Зачем 1С-разработчику свой MCP-сервер

Любая более-менее серьёзная конфигурация — ERP, УТ, ЗУП, КА — это гигабайты XML-выгрузки, сотни тысяч строк на BSL и десятки тысяч объектов метаданных. ИИ-агент, который получает это через файловый поиск, сжигает контекстное окно за один диалог и начинает галлюцинировать: придумывать несуществующие методы общих модулей, путать параметры процедур и ссылаться на удалённые реквизиты.

Локальный MCP-сервер (Model Context Protocol) решает эту проблему архитектурно. Вместо того чтобы тащить в модель файлы целиком, агент обращается к серверу по короткому запросу и получает точный срез: сигнатуры методов, модули объектов, регистры, подписки, связи. Grafon — именно такой сервер: он строит граф зависимостей метаданных, процедур, функций и запросов 1С и отдаёт агенту минимальный контекст.

Как работает архитектура Grafon

Grafon — это локальный процесс, который:

  1. Сканирует каталог src/ с XML-выгрузкой конфигурации (Выгрузить конфигурацию в файлы).
  2. Парсит модули BSL: общие модули, модули объектов, менеджеров, форм, подписки на события.
  3. Строит граф: метаданное → методы → вызовы → зависимости → запросы.
  4. Поднимает локальный MCP-сервер (stdio или HTTP на 127.0.0.1).
  5. По запросу отдаёт агенту только релевантный узел графа.
Конфигурация XML → Парсер BSL → Граф зависимостей → MCP-сервер → Claude/Cursor/Windsurf
                                        ↑
                                   SQLite-индекс

Все данные остаются на вашей машине — ничего не улетает в облако, кроме самих промптов в API модели, которые формирует уже агент.

Установка на Windows

Шаг 1. Скачивание и распаковка

mkdir C:\Tools\grafon
cd C:\Tools\grafon

Получите архив с https://grafonbase.ru и распакуйте

Expand-Archive .\grafon-windows-x64.zip -DestinationPath . .\grafon.exe --version

Шаг 2. Индексация конфигурации

.\grafon.exe index --src "C:\Git\ERP\src" --out "C:\Tools\grafon\index\erp"

Индексация ERP-конфигурации ~300 000 строк занимает 40–90 секунд, индекс весит 200–400 МБ.

Шаг 3. Регистрация в Claude Code

Файл %USERPROFILE%\.claude\mcp.json:

{
  "mcpServers": {
    "grafon-1c": {
      "command": "C:\\Tools\\grafon\\grafon.exe",
      "args": ["serve", "--index", "C:\\Tools\\grafon\\index\\erp"],
      "env": { "GRAFON_LOG": "warn" }
    }
  }
}

Установка на Linux (Ubuntu/Debian, Astra, RED OS)

sudo mkdir -p /opt/grafon && cd /opt/grafon
curl -LO https://grafonbase.ru/downloads/grafon-linux-x64.tar.gz
tar -xzf grafon-linux-x64.tar.gz
sudo chmod +x grafon
./grafon --version

Индексация:

/opt/grafon/grafon index --src /home/dev/erp/src --out /var/lib/grafon/erp

Конфигурация для Claude Code (~/.claude/mcp.json):

{
  "mcpServers": {
    "grafon-1c": {
      "command": "/opt/grafon/grafon",
      "args": ["serve", "--index", "/var/lib/grafon/erp"]
    }
  }
}

Для systemd-режима:

[Unit]
Description=Grafon MCP for 1C
After=network.target

[Service]
ExecStart=/opt/grafon/grafon serve --http 127.0.0.1:8765 --index /var/lib/grafon/erp
Restart=on-failure
User=dev

[Install]
WantedBy=multi-user.target

Подключение Cursor и Windsurf

В Cursor откройте Settings → MCP и добавьте тот же JSON-блок, что и для Claude Code. В Windsurf — ~/.windsurf/mcp/config.json. Транспорт может быть stdio (процесс на каждый сеанс) или http (постоянный сервис — быстрее на старте, удобно для командной работы на dev-сервере).

Практические сценарии: MCP-запросы к Grafon

Агент сам вызывает инструменты. Пример задачи: «Добавь в ОбщегоНазначения метод, который пересчитывает курс по дате документа».

Запрос агента к серверу:

{
  "method": "tools/call",
  "params": {
    "name": "find_symbol",
    "arguments": { "query": "КурсВалютыНаДату", "kind": "function" }
  }
}

Ответ:

{
  "symbol": "ОбщегоНазначения.КурсВалютыНаДату",
  "signature": "Функция КурсВалютыНаДату(Валюта, Дата, Курс = Неопределено) Экспорт",
  "module_path": "CommonModules/ОбщегоНазначения/Ext/Module.bsl",
  "callers": ["Документ.РеализацияТоваровУслуг.МодульОбъекта"],
  "dependencies": ["РегистрСведений.КурсыВалют"]
}

Агент получает ровно это — 200 токенов вместо 15 000 строк модуля. Далее он пишет корректный код:

// Пересчитывает сумму документа по актуальному курсу на дату.
//
Функция ПересчитатьСуммуПоКурсу(Документ, Сумма) Экспорт

Курс = ОбщегоНазначения.КурсВалютыНаДату(
Документ.Валюта,
Документ.Дата,
Документ.Курс);

Если Курс = 0 Тогда
ВызватьИсключение НСтр("ru='Не удалось получить курс валюты'");
КонецЕсли;

Возврат Сумма / Курс;

КонецФункции

Для поиска подписок на события используется отдельный инструмент:

{ "method": "tools/call",
  "params": { "name": "find_subscriptions",
              "arguments": { "event": "ПриЗаписи", "object": "Документ.РеализацияТоваровУслуг" } } }

Сравнение: Графон vs без Графона

| Сценарий | Без MCP (файловый доступ) | С MCP + Grafon | Экономия |
|---|---|---|---|
| Найти сигнатуру метода | 15 000 токенов | 180 токенов | ~83× |
| Правка модуля объекта | 40 000 токенов | 2 500 токенов | 16× |
| Анализ подписок на событие | 120 000 токенов | 1 200 токенов | 100× |
| Рефакторинг общей функции | 60 000 токенов | 4 000 токенов | 15× |
| Время отклика агента (задача) | 45–90 сек | 6–12 сек | ~7× |
| Доля галлюцинаций в предложенном BSL | высокая | близка к нулю | — |

Средняя экономия по реальным проектам — до 10× по токенам и в 5–7 раз по времени.

Командная работа: один сервер на всех

На Linux-сервере удобно поднять Grafon в HTTP-режиме и разрешить подключение по локальной сети:

/opt/grafon/grafon serve --http 0.0.0.0:8765 --index /var/lib/grafon/erp --auth-token secret

В клиентах указывается URL и токен. При обновлении конфигурации индекс пересобирается инкрементально:

git pull && /opt/grafon/grafon reindex --index /var/lib/grafon/erp --changed-only

Инкрементальная переиндексация изменённых модулей занимает секунды, поэтому сервер можно держать актуальным после каждого git pull.

Типичные ошибки при настройке

  • Индексация только Ext-каталога. Сканируйте родительский src/, иначе граф не увидит связи Configuration.xml.
  • Один индекс на все конфигурации. Держите отдельные индексы под ERP, УТ, ЗУП — иначе получаете шум в результатах.
  • Отсутствие --auth-token при HTTP-транспорте. Обязательно для сетевого режима, иначе сервер доступен всем в LAN.
  • Устаревший индекс после рефакторинга. Встройте reindex в pre-push hook.

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

  1. Выгрузить конфигурацию в файлы (Конфигуратор → Конфигурация → Выгрузить в файлы).
  2. Установить Grafon на рабочую станцию (Windows) и на dev-сервер (Linux).
  3. Запустить index, убедиться по логу, что найдено >99% модулей.
  4. Зарегистрировать MCP-сервер в Claude Code, Cursor, Windsurf.
  5. Проверить инструменты find_symbol, find_subscriptions, module_context.
  6. Настроить инкрементальный reindex в CI-пайплайне.
  7. Замерить токены до/после по одной и той же задаче.

Локальный MCP-сервер для 1С — это не «модная игрушка», а инфраструктурный элемент, который превращает ИИ-ассистента из болтливого «наставника по BSL» в точного инженерного агента, работающего с вашей конфигурацией как с компилятором — по символам, а не по мегабайтам текста.