MCP-серверы

MCP-сервер - это зависимость, которая разговаривает с вашей моделью

Он работает на вашей машине с вашими правами, как любой пакет. В отличие от пакета, описания его инструментов попадают в контекст модели, где читаются как инструкции. Безопасность MCP-сервера должна закрывать обе половины.

описания - это промпт, а не документацияstdio-серверы наследуют ваше окружениесхема может измениться после одобрения
Риски

Риски безопасности MCP-серверов, конкретно

Ничего экзотического. Всё это следует из того, как устроен протокол, и из того, где люди держат свои ключи.

tool poisoning

Описание - часть промпта

Имя инструмента, его описание и схема параметров уходят в модель обычным текстом. Сервер может написать описание, которое велит модели прочитать файл и передать его содержимое аргументом, и отличить это от законной инструкции модель не в состоянии.

путь через промпт

передача ключа

Локальный сервер получает всё, что вы дали

Локальные MCP-серверы работают по stdio дочерними процессами. Они получают то окружение, которое вы им передали, а это обычно означает долгоживущий токен в переменной. С этого момента ключ уже не в ваших руках.

ключ наружу

дрейф схемы

Вы одобрили версию, а не поведение

Описания и схемы инструментов могут поменяться на следующем обновлении. Сервер, который вы смотрели в марте, не обязательно тот же, что работает в июне, и ничто в протоколе не делает эту смену заметной.

тихая подмена

область токена

Токен выдан на одно, потрачен на другое

Удалённые серверы хранят access-токены от вашего имени. Сервер, который принимает или пересылает токен, выданный для другого ресурса, превращается в удобного посредника для доступа к тому, что вы никогда не разрешали.

расползание прав

нет записи

Проверить можно только то, что вы записали

В большинстве конфигураций нигде не записано, какой MCP-инструмент запускался, с какими аргументами и против какого хоста. Проблема всплывает по чужому расписанию, обычно в счёте или в уведомлении об утечке.

слепая зона

Общее здесь такое: описания инструментов читает модель, а ключ лежит там, где сервер до него дотянется. Почините вторую половину, и первой станет нечем поживиться.

Аутентификация

Аутентификация MCP и OAuth 2.1

Локальные и удалённые MCP-серверы аутентифицируются совершенно по-разному, и эта разница весит больше, чем можно подумать по инструкциям по установке.

Локально, по stdio

Шага аутентификации нет вообще. Сервер - это дочерний процесс, который вы сами запустили, и доверия он заслуживает ровно столько же, сколько окружение, с которым вы его запустили. Токен, который вы экспортировали, теперь и его токен тоже.

доверие = ваше окружение

Удалённо, по HTTP

Профиль авторизации MCP построен на OAuth 2.1: клиент находит сервер авторизации, вы подтверждаете доступ в браузере, а клиент держит короткоживущий access-токен и refresh-токен за ним.

доверие = область токена

01 · Короткоживущий лучше долгоживущего
OAuth-токен, который можно отозвать в панели провайдера, - позиция получше, чем personal access token, вставленный в конфиг два месяца назад.
02 · Токен должен называть своего адресата
Профиль MCP ожидает токен, привязанный к тому ресурсу, для которого он выдан. Сервер, готовый принять токен, выписанный где-то ещё, - это архитектура, от которой стоит отказаться.
03 · Токены утекают на обновлении
Refresh-токены живут дольше всего остального в этом потоке и обычно оказываются открытым текстом в файле в домашнем каталоге. Sallyport запечатывает их в хранилище и обновляет внутри приложения.
Лучшие практики

Восемь проверок перед установкой MCP-сервера

Ничего из этого не требует продукта. Это тот же разбор, который вы устроили бы любой зависимости, плюс два вопроса, специфичных для MCP.

  1. 01

    Зафиксируйте версию

    Ставьте конкретную версию, а не то, во что сегодня разворачивается latest. Сервер, который обновляет сам себя, может поменять описания инструментов после того, как вы их одобрили.

  2. 02

    Читайте описания инструментов, а не README

    README написан для вас. Описания написаны для модели. Прочитайте те, что модель действительно получит.

  3. 03

    Считайте, что локальный сервер оставит себе всё

    Stdio-сервер - это дочерний процесс с вашими правами. Дайте ему самый узкий ключ, которого хватит для работы, и уж точно не рутовый токен, который просто оказался под рукой.

  4. 04

    OAuth лучше вставленного ключа

    Отзываемый короткоживущий токен лучше, чем personal access token в переменной окружения, даже если настройка займёт на пять минут больше.

  5. 05

    Проверьте, чем ограничен токен

    Один ресурс, один адресат. Сервер, которому нужен широкий токен или который принимает токен, выданный для другого, уже сообщает вам, как он себя поведёт.

  6. 06

    Один сервер - одна задача

    Собрать пять сервисов за одним MCP-сервером значит свести все ключи в один процесс. Разнесите их, и худший случай станет меньше.

  7. 07

    Записывайте вызовы

    Если вы не можете сказать, что сервер делал в прошлый вторник, вы ему доверяете, а не проверяете его. Логи - это то, что превращает инцидент в инцидент с известными границами.

  8. 08

    Перепроверяйте на обновлениях

    Относитесь к смене схемы инструмента как к подъёму версии зависимости: смотрите дифф. Эту проверку почти никто не делает, поэтому она и работает как атака.

Через гейт

Проксируйте свои MCP-серверы вместо того, чтобы им доверять

Sallyport встаёт перед теми MCP-серверами, с которыми говорит ваш агент. Их вызовы поднимаются по той же лестнице, что и всё остальное, и попадают в тот же журнал.

  1. 01

    Одно подключение для агента

    Claude Code, Cursor или любой MCP-клиент подключается к Sallyport. Sallyport показывает http.request, ssh.exec и те внешние серверы, которые вы настроили.

  2. 02

    Внешние серверы остаются позади

    Проксируются и локальные stdio-серверы, и удалённые серверы с OAuth 2.1. Sallyport запечатывает их токены в хранилище и обновляет внутри приложения.

  3. 03

    Каждый вызов идёт по лестнице

    Закрытое хранилище отказывает. Ключ с подтверждением каждого вызова поднимает карточку. В остальных случаях запуск покрывает то подтверждение сессии, которое вы уже дали.

  4. 04

    Журнал это фиксирует

    Зашифровано и связано хешами прямо по ходу дела, чтобы ответ на вопрос «что этот сервер делал в прошлый вторник» существовал раньше, чем он вам понадобится.

Честное ограничение: локальный stdio-сервер MCP, который вы настроили сами, получает привязанный к нему ключ. Проксирование даёт подтверждение и запись по его вызовам; забрать ключ обратно из процесса, который вы решили запустить, оно не может.

Частые вопросы

Вопросы о безопасности MCP-серверов

Что такое атака tool poisoning?
MCP-сервер вписывает инструкции в текст, который модель читает как метаданные инструмента: описание, имя параметра, сообщение об ошибке. Модель принимает это за указание и действует. Детектирование тут мало что даёт: подложенная инструкция выглядит ровно как настоящая. Работает другое - сделать так, чтобы выполнить её было нечем.
Как понять, что MCP-сервер вредоносный?
Часто никак, и это честный ответ. Зато можно прочитать описания инструментов, которые получит модель, зафиксировать версию, выдать самый узкий рабочий ключ и записывать вызовы. Эти четыре шага превращают неизвестность в неизвестность с границами.
Есть ли в MCP встроенная аутентификация?
Для удалённых серверов профиль авторизации построен на OAuth 2.1 с подтверждением в браузере и access-токенами с областью действия. Для локальных серверов по stdio шага аутентификации нет вовсе: сервер - это дочерний процесс, работающий с вашими правами.
Где лежат мои OAuth-токены для MCP?
По умолчанию открытым текстом в файле в домашнем каталоге, то есть ровно там, куда в первую очередь смотрит зловред, собирающий ключи. Sallyport держит их в зашифрованном хранилище и обновляет внутри приложения.
Может ли Sallyport запустить MCP-сервер в песочнице?
Нет, и мы не будем утверждать обратное. Sallyport контролирует и записывает то, что делают через него вызовы внешнего сервера. Он не помещает процесс сервера в песочницу, не разбирает содержимое запросов и не закрывает хост фаерволом.

Поставьте гейт перед своими MCP-серверами

Бесплатная загрузка. Apple Silicon, macOS 14 или новее. Аккаунт не нужен. Никогда.

$brew install --cask olegsotnikov/tap/sallyport

macOS 14+ · Apple Silicon

Sallyport

Sallyport выполняет API-вызовы и SSH-команды за вашего ИИ-агента. Ключи остаются в локальном хранилище на вашем Mac; вы подтверждаете каждый запуск, и каждое действие попадает в запечатанный журнал.

© 2026 Sallyport · Открытый код по лицензии Apache-2.0 · Oleg Sotnikov