
Прокси-сервер, который оборачивает MCP-серверы с профилированием поведения, сканированием безопасности, контролем рисков и безопасным выполнением. Обнаруживает внедрение промптов, вредоносные метаданные инструментов, внедрение аргументов, риски исходного кода и раскрытие учетных данных.
MCP Safety Warden — это прокси-сервер, который оборачивает любой MCP-сервер и добавляет к его инструментам поведенческое профилирование, сканирование безопасности, контроль рисков и безопасное выполнение.
[!IMPORTANT] Безопасность MCP — активная область исследований. Недавние обзоры каталогизируют множество категорий угроз, специфичных для протокола, включая отравление инструментов, инъекции подсказок, атаки rug-pull, компрометацию цепочки поставок, кражу учётных данных и композиционные атаки на протяжении всего жизненного цикла сервера. См. Securing the MCP (OpenReview), Landscape & Threats (arXiv), When MCP Servers Attack (arXiv) и MCP-38 Taxonomy (arXiv).
Используйте как прокси для добавления контроля безопасности к любому MCP-серверу или направьте его на сервер, которым вы не владеете, и выполните полный аудит безопасности без единого вызова инструмента.
Рис. 1. Два режима работы: прокси и аудит
Поведенческое профилирование: Класс эффекта, безопасность повторных попыток, деструктивность. С помощью LLM (Anthropic, OpenAI, Gemini, Ollama) с резервным правиловым режимом. Наблюдаемая статистика (латентность p50/p95, доля отказов, размер вывода) обновляется после каждого проксированного вызова.
Сканирование безопасности: mcpsafety+ пятиэтапный конвейер (Recon, Planner, Hacker, Auditor, Supervisor). Cisco AI Defense (AST/YARA). Snyk (анализ метаданных). Интеграции с Kali и Burp Suite обогащают конвейер реальными данными сети и HTTP-зондированием. Сканирование исходного кода из GitHub с обнаружением энтропии, AST, потоков заражения и атак rug-pull.
Рис. 2. Пятиэтапный конвейер mcpsafety+, запускаемый при полном аудите безопасности любого MCP-сервера
Безопасное выполнение: Сканирование аргументов (более 20 категорий атак, второй проход с LLM). Двухуровневое сканирование инъекций вывода. Контроль рисков с альтернативами и политиками для каждого инструмента. Обнаружение отклонений при каждом вызове и отдельной проверке.
Рис. 3. Конвейер безопасного выполнения: пять проверок, через которые проходит каждый проксированный вызов инструмента
CLI: 24 подкоманды, интерактивное меню рисков, флаг --json для каждой команды, --yes для CI.
Что он обнаруживает
Без ключа обёртка работает только в правиловом режиме: классификация инструментов с меньшей уверенностью, проверка инъекций только по регулярным выражениям, отсутствие альтернатив в контроле риска, отсутствие конвейера mcpsafety+. Для полностью локальной настройки запустите Ollama, установите OLLAMA_MODEL и явно передайте --provider ollama (Ollama не определяется автоматически).
[!NOTE] Серверы stdio, требующие локальной настройки (серверы stdio, которые требуют локальной конфигурации перед запуском — отсутствующие конфигурационные файлы, учётные данные, каталоги данных или OS-зависимые зависимости) не могут быть проверены обёрткой — обнаружение инструментов завершится ошибкой, и 0 инструментов будет сохранено. Вы всё ещё можете выполнить полное сканирование исходного кода без запуска сервера, передав
--github-urlкомандамscan/onboardили параметрgithub_urlдляsecurity_scan_server. Конвейер mcpsafety+ извлечёт и проанализирует исходный код напрямую из GitHub. Серверыsseиstreamable_httpне затрагиваются.
pip install mcpsafetywarden
Со всеми дополнительными опциями:
pip install "mcpsafetywarden[all]"
Или с выбранными опциями:
pip install "mcpsafetywarden[anthropic,snyk]"
Из исходников:
git clone https://github.com/gautamvarmadatla/mcpsafetywarden
cd mcpsafetywarden
pip install .
База данных SQLite создаётся автоматически при первом запуске в каталоге пользовательских данных платформы (~/.local/share/mcpsafetywarden/ в Linux, ~/Library/Application Support/mcpsafetywarden/ в macOS, %APPDATA%\mcpsafetywarden\ в Windows). Переопределить с помощью MCP_DB_PATH.
Защита учётных данных (автоматически, не требует действий)
Секретные значения, передаваемые в register_server или onboard_server (токены Bearer, ключи API в headers или env), автоматически обнаруживаются и заменяются непрозрачными идентификаторами cref_ до того, как что-либо коснётся контекста модели. Реальные учётные данные хранятся зашифрованными в базе данных и разрешаются незаметно при подключении. Модель, история разговоров и журналы видят только cref_<id>.
Опционально: шифрование хранящихся учётных данных
pip install cryptography
python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
Установите полученный ключ как MCP_DB_ENCRYPTION_KEY перед запуском сервера. Это шифрует как учётные данные сервера, так и значения cref_ в состоянии покоя.
Вся конфигурация осуществляется через переменные окружения.
Замечание по безопасности: Никогда не сохраняйте ключи API или ключ шифрования в репозитории. Обёртка удаляет свои собственные секреты из окружения дочерних процессов перед запуском stdio-серверов.
Добавьте обёртку в claude_desktop_config.json:
{
"mcpServers": {
"mcpsafetywarden": {
"command": "mcpsafetywarden-server",
"args": [],
"env": {
"ANTHROPIC_API_KEY": "sk-ant-...",
"MCP_DB_ENCRYPTION_KEY": "<generated_fernet_key>"
}
},
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/yourname/Documents"]
}
}
}
Зарегистрируйте каждый сервер в обёртке перед использованием:
mcpsafetywarden register filesystem --transport stdio \
--command npx \
--args '["-y", "@modelcontextprotocol/server-filesystem", "/Users/yourname/Documents"]'
Для настройки обязательного шлюза, когда все вызовы инструментов должны проходить через обёртку, см. docs/DEPLOYMENT.md.
Полный справочник инструментов см. в docs/TOOLS.md.
24 подкоманды, охватывающие все 25 инструментов MCP. Каждая команда поддерживает --json для машинного вывода и --yes / -y для пропуска запросов подтверждения.
Полный справочник с флагами и примерами см. в docs/CLI.md.
Kali Linux MCP, Burp Suite MCP и Snyk интегрируются автоматически после регистрации. Kali обогащает этап Recon и ping_server реальными данными nmap/traceroute. Burp добавляет сырое HTTP-зондирование, внешние обратные вызовы и доказательства прокси. Snyk анализирует метаданные инструментов на наличие строк инъекций, подражания инструментам, жёстко закодированных секретов и 16 других проверок.
Инструкции по настройке см. в docs/INTEGRATIONS.md.
Установка в редактируемом режиме:
pip install -e ".[all]"
Запуск сервера и просмотр журналов:
mcpsafetywarden-server 2>server.log
Каждый модуль использует logging.getLogger(__name__). Сервер не вызывает logging.basicConfig сам — настройте логирование в точке входа перед импортом.
pytest tests/ -v
Установите ключ API LLM, чтобы включить тесты с помощью LLM; без него они автоматически пропускаются. Пошаговую проверку классификации, сканирования инъекций, контроля риска и применения политик см. в docs/TESTING.md.
Стандарты кода и рекомендации по pull request см. в CONTRIBUTING.md.
Лицензия Apache 2.0. Подробнее см. в LICENSE.
| Переменная | По умолчанию | Назначение |
|---|
MCP_TRANSPORT | stdio | Режим транспорта: stdio, sse или streamable_http |
MCP_HOST | 127.0.0.1 | Адрес привязки для HTTP-транспортов |
MCP_PORT | 8000 | Порт привязки для HTTP-транспортов |
MCP_AUTH_TOKEN | (не задан) | Токен Bearer для аутентификации HTTP-транспорта |
MCP_DB_ENCRYPTION_KEY | (не задан) | Ключ Fernet для шифрования хранящихся учётных данных |
ANTHROPIC_API_KEY | (не задан) | Включает Anthropic как провайдера LLM |
OPENAI_API_KEY | (не задан) | Включает OpenAI как провайдера LLM |
GEMINI_API_KEY или GOOGLE_API_KEY | (не задан) | Включает Gemini как провайдера LLM (предпочтительнее GEMINI_API_KEY) |
OLLAMA_MODEL | (не задан) | Имя модели для Ollama (например, llama3.1) |
OLLAMA_BASE_URL | http://localhost:11434/v1 | Базовый URL API Ollama |
SNYK_TOKEN | (не задан) | Включает обнаружение инъекций подсказок Snyk E001 |
MCP_SCANNER_API_KEY | (не задан) | Ключ облачного ML-движка Cisco AI Defense |
MCP_SCANNER_LLM_API_KEY | (не задан) | Ключ LLM для внутреннего AST-анализа Cisco |
MCP_DB_PATH | (не задан) | Переопределить путь к файлу базы данных SQLite |
MCP_GRAPH_POLICY | warn | Применение графа в safe_tool_call: off (отключено), warn (прикрепить контекст риска к ответу), block (жёсткая блокировка критических/высокорадиусных инструментов, если только approved=True) |
GITHUB_TOKEN | (не задан) | Персональный токен доступа GitHub для сканирования исходного кода (повышает лимит запросов с 60 до 5000 в час) |
| Инструмент | Что делает |
|---|
onboard_server | Регистрация + проверка + сканирование безопасности одним вызовом |
register_server | Регистрация сервера; опционально автоматическая проверка |
inspect_server | Обновление списка инструментов и профилей |
check_server_drift | Обнаружение отклонений схемы и списка инструментов от сохранённого эталона |
list_servers | Список всех зарегистрированных серверов |
list_server_tools | Список инструментов на сервере с краткими профилями |
preflight_tool_call | Оценка риска без выполнения |
safe_tool_call | Выполнение с контролем риска и альтернативами |
get_tool_profile | Полный поведенческий профиль с наблюдаемой статистикой |
get_retry_policy | Рекомендации по повторным попыткам и тайм-аутам |
suggest_safer_alternative | Более безопасные заменители, ранжированные LLM |
run_replay_test | Тест идемпотентности (вызов инструмента дважды) |
security_scan_server | Живой аудит безопасности (mcpsafety+, Cisco, Snyk) |
scan_all_servers | Конвейер mcpsafety+ для всех зарегистрированных серверов |
get_security_scan | Последний сохранённый отчёт о сканировании |
set_tool_policy | Постоянная политика разрешения/блокировки для инструмента |
get_run_history | Недавняя история выполнения инструмента |
ping_server | Проверка доступности с задержкой |
discover_servers | Сканирование файловой системы на предмет конфигураций MCP-клиентов и извлечение записей серверов |
onboard_discovered_servers | Регистрация обнаруженных серверов пакетно |
get_risk_graph | Построить или запросить граф рисков инвентаризации (серверы, инструменты, находки, клиенты-агенты) |
explain_tool_risk | Пройти по путям риска для инструмента: радиус поражения, композиционные риски, теги MITRE, рекомендуемое действие |
explain_client_risk | Анализ кросс-серверных рисков для всех серверов одного клиента-агента |
analyze_cve_blast_radius | Сообщить о CVE, затрагивающих несколько серверов одного клиента |
export_graph | Экспорт графа рисков в формате JSON или диаграммы Mermaid |
| Документ | Содержание |
|---|
| docs/TOOLS.md | Полный справочник всех 25 инструментов MCP |
| docs/CLI.md | Подкоманды CLI, флаги и примеры |
| docs/INTEGRATIONS.md | Настройка Kali, Burp Suite и Snyk |
| docs/DEPLOYMENT.md | Развёртывание stdio, HTTP, контейнеров и шлюзов |
| docs/TROUBLESHOOTING.md | Частые ошибки и их исправления |
| docs/SECURITY.md | Секреты, аутентификация, изоляция и детали сканирования |
| docs/TESTING.md | Шаги проверки для каждой возможности |
| docs/COMPARISON.md | Сравнение с аналогичными инструментами |
| docs/ROADMAP.md | Планируемые возможности |