Skip to content

alonehobo/1c-trusted-gateway

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

1С Trusted Gateway (Go)

Лёгкое Windows-приложение для безопасного доступа AI-агентов к данным 1С через MCP-протокол.

Вес: ~8 МБ · Запуск: мгновенный · Зависимости: нет


Что это

Trusted Gateway — посредник между AI-агентом и вашей базой 1С:

AI-агент  ──MCP (HTTP)──▶  Trusted Gateway  ──MCP/HTTP──▶  1С
                                   │
                            маскирует ФИО,
                            серийники, коды

Агент никогда не видит реальные имена, ИНН, КПП, серийные номера. Вместо этого он получает псевдонимы (Контрагент_a3f2b1c0d8). Суммы, количества, даты, перечисления, счета передаются открыто — агент может анализировать цифры, но не деанонимизировать людей.

Текст анализа от агента приложение расшифровывает локально — пользователь видит реальные имена, агент — нет.


Требования

  • Windows 10/11 (x64)
  • 1С:Предприятие 8.3 с установленным расширением MCP_Сервер.cfe (из последнего релиза)

Для сборки из исходников дополнительно нужен Go 1.21+.


Быстрый старт

  1. Скачайте последний релиз со страницы Releases — там есть TrustedGateway.exe и MCP_Сервер.cfe
  2. Установите расширение MCP_Сервер.cfe в вашу базу 1С
  3. Убедитесь, что HTTP-сервис hs/mcp опубликован и доступен
  4. Запустите TrustedGateway.exe
  5. Откроется браузер с интерфейсом на http://127.0.0.1:8767
  6. Введите URL вашего MCP-сервера и токен доступа, нажмите Подключиться

Подключение AI-агента

Шлюз работает как MCP-сервер (Streamable HTTP) на http://127.0.0.1:8767/mcp.

Claude Code

claude mcp add --transport http --scope user trusted-gateway http://localhost:8767/mcp

Cursor / другие IDE

Создайте .cursor/mcp.json (или .mcp.json в корне проекта):

{
  "mcpServers": {
    "trusted-gateway": {
      "type": "http",
      "url": "http://localhost:8767/mcp"
    }
  }
}

Доступные MCP-инструменты

Инструмент Описание
gateway_status Статус подключения к 1С, наличие сессии
gateway_query Выполнить запрос к 1С (данные автоматически маскируются с учётом типов колонок)
gateway_execute_code Выполнить произвольный код 1С (результат маскируется с рекурсивным обходом вложенных структур и массивов)
gateway_suggest_fields Агент предлагает открыть поля для анализа — пользователь одобряет одним кликом
gateway_apply_analysis Отправить анализ в шлюз для расшифровки псевдонимов
gateway_pull_note Забрать одобренные пользователем данные (ручной режим)
gateway_clear_session Очистить текущую сессию

Все инструкции для агента встроены в описания инструментов — дополнительная настройка не требуется.


Интерфейс

Вкладка Назначение
MCP Подключение к серверу, ввод запроса (слева), ответ (справа). Редактор с подсветкой 1С-синтаксиса (Ace Editor)
Результат Таблица с цветовыми индикаторами колонок: 🔒 замаскированные (оранжевые), открытые (зелёные), шифр (акцентные). Кнопка «Отправить агенту», фильтры, быстрое открытие поля по клику на замок/заголовок колонки
Анализ данных от агента Расшифрованный анализ от агента
Настройки URL, токен, белый список полей с поддержкой шаблонов *, политика типов, авто-режим (зашифрованы через Windows DPAPI)

Режимы работы:

  • Авто-режим — данные отправляются агенту сразу после выполнения запроса
  • Ручной режим — пользователь проверяет данные на вкладке «Результат» и нажимает «Отправить агенту»

Предложение полей от агента: Агент может запросить открытие полей через gateway_suggest_fields. Поля появляются как кликабельные метки — пользователь выбирает нужные и нажимает «Подтвердить». Браузерное уведомление и мигание кнопки в панели задач сигнализируют, что агент ждёт одобрения.

Белый список полей: Белый список поддерживает точные имена и простые шаблоны с *: например, Регистратор*, *Дата, Сумма*. На вкладке «Результат» замаскированное поле можно сразу открыть кликом по замку или тексту заголовка колонки — без перехода в контекстное меню.

Выделение ячеек: как в Excel — клик, перетаскивание, Shift+клик, Ctrl+C.


Маскировка данных

Шлюз использует многослойную защиту:

Слой 1 — Маскировка по типам колонок (основной)

Шлюз получает схему колонок из 1С (типы метаданных) и применяет политику по типам:

Тип колонки Действие по умолчанию
Перечисление.*, ПланСчетов.*, ПланВидовХарактеристик.* Открыто
Системные перечисления платформы без точки (ВидДвиженияНакопления, ВидСчета и т.п.) Открыто
Примитивы: Число, Дата, Булево, УникальныйИдентификатор Открыто
Классификаторы: Справочник.Валюты, СтавкиНДС, СтраныМира, БанкиРФ Открыто
Документ.* Открыто
Справочник.*, Задача.*, БизнесПроцесс.* Маскируется
Строка, ХранилищеЗначения, ДвоичныеДанные Маскируется
Составные типы с обрезанием (>10 вариантов) Решаются по видимым типам: без видимых опасных типов открываются
Колонка с несколькими типами, где хоть один — опасный Маскируется

Дополнительно exact-поля Номер и Дата по умолчанию открыты как типовые реквизиты документов; совпадение только точное, поэтому НомерПаспорта/ДатаРождения не раскрываются.

Политика настраивается в разделе «Настройки → Политика типов»: можно добавлять свои типы/префиксы, переводить их в «открыто» или «принудительно маскировать».

Слой 2 — Автоматическая очистка ПРЕДСТАВЛЕНИЕ()

Шлюз перед отправкой в 1С вычищает ПРЕДСТАВЛЕНИЕ(X) / ПРЕДСТАВЛЕНИЕССЫЛКИ(X) / PRESENTATION(X) / REFPRESENTATION(X), подставляя на их место аргумент. Это позволяет сохранить тип колонки (ссылка, а не строка) и применить маскировку по типам вместо безусловной маскировки для типа Строка.

Вложенные скобки, строковые литералы, комментарии — уважаются. Нормализация псевдонимов (КАК/AS) выравнивает имя колонки под исходное поле.

Слой 3 — Эвристики для значений (режим совместимости)

Применяется там, где схема типов недоступна (старые версии 1С MCP без IncludeSchema):

Тип значения Действие
Пустые значения, null Не маскируются
Числа Go (int, float64, bool) Не маскируются
Числовые строки ≤15 знаков без ведущих нулей Не маскируются (суммы)
Числовые строки с ведущими нулями (00000142) Маскируются (серийники)
Числовые строки >15 знаков Маскируются (длинные коды)
ИНН, КПП, СНИЛС, ОГРН, БИК (по имени поля) Всегда маскируются
Вложенные объекты и массивы Рекурсивный обход — маскируются на любой глубине
Все остальные строки Маскируются
allow_plain поля (белый список по имени) Никогда не маскируются

Опция «Не шифровать числовые значения» — отключает маскировку для всех числовых полей (цены, суммы, количества).

Псевдонимы детерминированы: одно значение всегда даёт один и тот же псевдоним в рамках сессии (соль = HMAC от серверного токена).


Безопасность

  • Настройки (URL, токен) зашифрованы через Windows DPAPI — только ваш пользователь может расшифровать
  • Маскировка принудительна — MCP-сервер всегда возвращает маскированный режим, агент не может запросить иное
  • Нормализация псевдонимовКАК/AS в запросе приводится к имени исходного поля, чтобы агент не смог обойти список разрешённых полей переименованием
  • Только localhost — HTTP-сервер слушает только 127.0.0.1
  • Таймаут запросов — 300 секунд, лимит строк 5 000, лимит размера ответа 10 МБ
  • Защита от перебора — rate-limit на частые запросы, детекция brute-force по количеству малорезультативных запросов

Сборка из исходников

git clone https://github.com/alonehobo/1c-trusted-gateway.git
cd 1c-trusted-gateway

# Установить rsrc для встраивания иконки (только один раз)
go install github.com/akavel/rsrc@latest
rsrc -ico Icon.ico -o rsrc.syso

# Запустить тесты
go test ./...

# Собрать без консольного окна
go build -ldflags "-H windowsgui -s -w" -o TrustedGateway.exe .

Структура проекта

trusted-gateway-go/
├── main.go              # Точка входа, загрузка настроек, запуск сервера
├── tray_windows.go      # Системный трей Windows (Shell_NotifyIcon, balloon, flash)
├── web.go               # TrustedWebApp: состояние приложения, сессии
├── http_handlers.go     # HTTP-сервер, все API-эндпоинты, SSE, маршрутизация
├── mcp_server.go        # MCP-сервер для агента (Streamable HTTP, JSON-RPC 2.0)
├── mcp_client.go        # HTTP-клиент для 1С MCP (Streamable HTTP, SSE)
├── service.go           # Runtime: выполнение запросов, парсинг схемы, bundle
├── privacy.go           # Маскировка табличных данных, генерация псевдонимов
├── privacy_test.go      # Тесты маскировки по типам колонок
├── type_policy.go       # Политика маскирования по типам колонок 1С
├── type_policy_test.go  # Тесты политики типов
├── query_normalize.go   # Strip ПРЕДСТАВЛЕНИЕ(), нормализация КАК/AS
├── query_normalize_test.go
├── ner.go               # NER-маскировка свободного текста (execute_code)
├── logs.go              # Буфер логов, экспорт в UI
├── config.go            # Структуры конфигурации, загрузка из файла
├── credential_store.go  # Шифрование настроек через Windows DPAPI
├── helpers.go           # Утилиты: парсинг JSON-полей, CSV, санитизация
├── ui.go                # Встраивание HTML/CSS/JS через go:embed
├── ui.html              # HTML-каркас интерфейса
├── ui.css               # Стили интерфейса
├── ui_core.js           # Состояние приложения, SSE, общая отрисовка
├── ui_results.js        # Вкладка «Результат», таблица, фильтры, контекстное меню
├── ui_actions.js        # Действия UI: whitelist/remask/exclude/approve
├── ui_settings.js       # Вкладка «Настройки», таблицы полей и политики типов
├── ui_onboarding.js     # Онбординг и guided tour
├── ui_editor.js         # Ace Editor и автодополнение 1С-запросов
├── Icon.ico             # Иконка приложения
├── app.rc               # Ресурсный файл для встраивания иконки в EXE
├── cmd/
│   └── dump-settings/   # CLI-утилита для дампа settings.bin
└── releases/
    └── MCP_Сервер.cfe   # Расширение 1С для MCP-сервиса

Благодарность

  • ROCTUP — за проект 1c-mcp-toolkit.

About

1C Trusted Gateway — secure MCP proxy for AI agents to access 1C Enterprise databases with automatic data masking

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors