mcp-сервер для очистки данных от privacy
- Go 100%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .gitignore | ||
| go.mod | ||
| main.go | ||
| main_test.go | ||
| README.md | ||
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
- Prefix pre-filtering — из каждого regex извлекается литеральный префикс для быстрого
strings.Containsперед regex - FindAllStringSubmatchIndex — возврат байтовых индексов без аллокации строк
- Confidence как uint8 — числовое сравнение вместо строкового в горячем цикле
- Единый проход — read → binary check → detect → redact без повторного
strings.Split - sync.Pool — для переиспользования
[]Detectionслайсов при сканировании - Буферизованный аудит — файл держится открытым, запись через
bufio.Writer