Безопасность MCP-серверов: чек-лист
Что проверять перед подключением чужого MCP. Изоляция, env-vars, autoApprove, audit log, защита креденшелов.
Обновлено:
MCP — мощная штука, и поэтому к ним надо относиться так же серьёзно, как к npm-пакетам или плагинам браузера. Чужой MCP получает доступ к вашему окружению (env-vars), может делать сетевые запросы, читать файлы (если ему дали соответствующий тул).
1. Перед установкой — проверьте автора
Минимум:
- Open-source ли? Source code на GitHub доступен?
- Сколько ⭐ / форков на GitHub? Активный ли репо?
- Кто автор? Известная организация / трастовый разработчик / random anon?
- Когда был последний коммит? Если 2+ года назад — настораживает.
- Glama score (если есть)? AAA / AA / A — норма. F или not-tested — повод задуматься.
Все 7 публичных MCP семьи Atomno Labs — open-source MIT, hosted org atomno-labs,
проверяются Glama-analyzer’ом.
2. Env-vars: храните секреты правильно
Никогда не коммитьте mcp.json с реальными токенами в публичный репозиторий.
❌ Плохо:
{
"mcpServers": {
"atomno-fns-check": {
"env": { "MCP_FNS_CHECK_TOKEN": "atl_REAL_LIVE_TOKEN_xxx" }
}
}
}
✅ Хорошо:
{
"mcpServers": {
"atomno-fns-check": {
"env": { "MCP_FNS_CHECK_TOKEN": "${env:MCP_FNS_CHECK_TOKEN}" }
}
}
}
Затем — настоящий токен в ~/.zshrc / ~/.bashrc / системных env-vars.
В Cursor / Cline переменные ${env:VAR} подставляются из текущего окружения процесса IDE.
3. autoApprove — только для read-only
В Cline / Continue / Cursor можно настроить autoApprove: список тулов, которые агент вызывает
без подтверждения у пользователя.
Безопасно автоапрувить:
get_*— чтения данных.check_*— проверки.search_*— поиск.list_*— выборки.
НЕ автоапрувьте:
create_*— создание чего-либо в провайдере (например, платежей в ЮKassa!).delete_*— удаление.update_*— изменение.- Любые тулы с финансовыми последствиями.
Пример безопасного autoApprove для mcp-fns-check (все тулы только читают):
"autoApprove": ["check_inn", "check_ogrn", "mass_address_check", "director_disqualification"]
Для mcp-yukassa (commercial) — никаких автоапрувов. Каждый платёж — явное подтверждение.
4. Изоляция MCP-процессов
Каждый MCP — отдельный процесс. Это значит:
- Если один MCP скомпрометирован, он не получает доступ к другим MCP.
- MCP не делит память с IDE.
- Креденшелы одного MCP не доступны другому (env-vars передаются индивидуально).
Это хорошо. Это — feature. Не пытайтесь обойти изоляцию через shell-инъекции в args.
5. Project-scope MCP в git
Если используете project-scope (.cursor/mcp.json в корне проекта или .mcp.json для Claude Code)
и коммитите в репозиторий — он попадёт ко всем кто склонирует репо.
Правила:
- Коммитьте только команду и args, не env-vars с секретами.
- В env используйте
${env:VAR}-подстановки (см. п.2 выше). - Документируйте в README, какие env-vars нужны.
6. Audit log — следите что делает агент
Cursor / Claude / Cline пишут логи всех MCP-вызовов:
- Какой тул вызван.
- С какими аргументами.
- Что вернулось.
Регулярно проверяйте — особенно после exposure нового MCP. Если агент вызвал что-то странное — это повод разобраться.
В Cursor: Settings → MCP → Logs.
7. Disclaimer от Atomno Labs
Все MCP семьи atomno-mcp-*:
- ✅ Не делают write-операций без env-токена (для open-core / commercial).
- ✅ Не отправляют ваши данные на наши сервера для open-source MCP (всё локально).
- ✅ Hosted backend (Pro / commercial) — все вызовы аудируются, audit log выдаётся клиенту.
- ✅ Source code открыт для всех 7 публичных MCP.
- ❌ Не аффилированы с провайдерами данных (ФНС, Росреестр, ЮKassa, 1С, и т.д.).
Полные условия — в Terms of Service.
Чек-лист перед production-использованием
- Source code MCP проверен (репо, автор, активность).
- Env-vars не в git (
.gitignoreкорректный). -
autoApproveтолько для read-only тулов. - Audit log включён, проверяется еженедельно.
- Для commercial MCP — sandbox-режим протестирован.
- Лимиты провайдера известны и учтены.
- Команда знает какие MCP подключены и зачем.