mcp-сервер для очистки данных от privacy
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-03-18 15:44:28 +03:00
.gitignore init commit 2026-03-18 15:44:28 +03:00
go.mod init commit 2026-03-18 15:44:28 +03:00
main.go init commit 2026-03-18 15:44:28 +03:00
main_test.go init commit 2026-03-18 15:44:28 +03:00
README.md init commit 2026-03-18 15:44:28 +03:00

Secret Guardian

MCP-сервер на Go для обнаружения и маскирования секретов (API-ключей, паролей, токенов) в файлах и тексте. Работает по протоколу JSON-RPC 2.0 через stdin/stdout. Без внешних зависимостей — только стандартная библиотека Go.

Возможности

  • 25+ встроенных правил — AWS, GCP, Azure, OpenAI, Anthropic, Stripe, GitHub, GitLab, Slack, JWT, приватные ключи, строки подключения к БД и др.
  • Анализ энтропии Шеннона — обнаружение высокоэнтропийных строк (порог 4.5), которые могут быть секретами, даже если не попадают под шаблоны
  • Параллельное сканирование — worker pool (min(8, NumCPU)) для быстрого сканирования директорий
  • Оптимизация через литеральные префиксы — O(n) проверка strings.Contains перед regex, отсеивает ~95% строк без запуска regex
  • Пользовательские правила — загрузка из ~/.secret-guardian/custom_rules.json с горячей перезагрузкой по mtime
  • Аудит-лог — SHA256-отпечатки обнаруженных секретов в ~/.secret-guardian/audit.log, без хранения самих значений
  • Маскирование***REDACTED*** для коротких секретов, частичное раскрытие (первые 4 + последние 4 символа) для длинных

Установка

go build -o secret-guardian main.go

Требования: Go 1.22+

Использование

Как MCP-сервер

Secret Guardian работает как stdio-транспорт для MCP. Добавьте в конфигурацию вашего MCP-клиента:

{
  "mcpServers": {
    "secret-guardian": {
      "command": "/path/to/secret-guardian"
    }
  }
}

MCP-инструменты

Инструмент Описание
safe_read_file Чтение файла с автоматическим маскированием секретов
scan_secrets Параллельное сканирование директории
check_text Проверка произвольного текста на секреты
list_rules Список активных правил обнаружения
add_rule Добавление пользовательского правила
audit_log Просмотр журнала аудита

Примеры вызовов (JSON-RPC)

Проверка текста:

{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"check_text","arguments":{"text":"aws_key = AKIAIOSFODNN7EXAMPLE"}}}

Сканирование директории:

{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"scan_secrets","arguments":{"directory":"./src","min_confidence":"high"}}}

Безопасное чтение файла:

{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"safe_read_file","arguments":{"file_path":".env"}}}

Пользовательские правила

Создайте файл ~/.secret-guardian/custom_rules.json:

[
  {
    "name": "my_internal_token",
    "pattern": "(?P<secret>INT_[A-Za-z0-9]{32})",
    "confidence": "high",
    "description": "Internal service token"
  }
]

Именованная группа (?P<secret>...) определяет, какая часть совпадения будет маскироваться. Файл перечитывается автоматически при изменении.

Ограничения

  • Максимальный размер файла: 10 МБ
  • Минимальная длина строки для анализа энтропии: 16 символов
  • Пропускаемые директории: .git, node_modules, __pycache__, vendor, dist, build и др.
  • Бинарные файлы пропускаются (проверка NUL-байт в первых 8192 байтах)

Тестирование

go test ./...          # все тесты
go test -v ./...       # подробный вывод
go test -bench=. ./... # бенчмарки

Архитектура

Весь код — один файл main.go (~1300 строк). Пайплайн обработки:

Вход (файл/текст) → Проверка на бинарность → Сопоставление правил (prefix + regex) →
Анализ энтропии Шеннона → Маскирование → Аудит-лог → Выход

Оптимизации v3

  1. Prefix pre-filtering — из каждого regex извлекается литеральный префикс для быстрого strings.Contains перед regex
  2. FindAllStringSubmatchIndex — возврат байтовых индексов без аллокации строк
  3. Confidence как uint8 — числовое сравнение вместо строкового в горячем цикле
  4. Единый проход — read → binary check → detect → redact без повторного strings.Split
  5. sync.Pool — для переиспользования []Detection слайсов при сканировании
  6. Буферизованный аудит — файл держится открытым, запись через bufio.Writer