# Отравление инструментов и внедрение инструкций

> Как содержимое сервера MCP может управлять моделью - отравление описаний инструментов и внедрение инструкций через данные, что об этом говорит спецификация 2026-07-28 и что остаётся на хосте

Страница: https://mcpdoc.ru/security/threats/
Указатель сайта: https://mcpdoc.ru/llms.txt

Модель читает всё, что присылает сервер: описания инструментов, результаты вызовов, тексты шаблонов, содержимое ресурсов. Если в этом тексте спрятаны указания, модель может им последовать. Протокол MCP от этого не защищает. Он требует считать такое содержимое ненадёжным и оставляет решение за хостом и пользователем.

требования протокола сверены со спецификацией 2026-07-28 4 октября 2026

## Что здесь из спецификации, а что нет

Термины «отравление инструментов» (tool poisoning) и «внедрение инструкций» (prompt injection) пришли из исследований безопасности. В спецификации `2026-07-28` и в официальном документе Security Best Practices этих названий нет. Ниже описание классов атак дано по публикациям исследователей и отделено от требований протокола.

## Два класса атак

| Класс | Где спрятаны указания | Кто их подложил |
|---|---|---|
| отравление инструментов | в описании или схеме инструмента, которые видит модель, но обычно не читает пользователь | владелец сервера |
| внедрение инструкций через данные | в результате вызова, ресурсе или тексте шаблона: письме, странице, записи в трекере | любой, кто может записать данные туда, откуда сервер их читает |

**Отравление инструментов.** Термин ввела компания Invariant Labs в [публикации от 1 апреля 2025](https://invariantlabs.ai/blog/mcp-security-notification-tool-poisoning-attacks). По её описанию, вредоносный сервер может не только вывести данные пользователя, но и изменить поведение агента по отношению к другим, доверенным серверам. Это утверждение исследователей об изученных ими клиентах, а не свойство протокола.

**Внедрение инструкций.** Общий класс уязвимостей приложений с языковыми моделями. В перечне рисков OWASP он значится как [LLM01: Prompt Injection](https://genai.owasp.org/llmrisk/llm01-prompt-injection/). Для MCP важен непрямой вариант: указания приходят не от пользователя, а в данных, которые вернул инструмент. Сервер при этом может быть полностью честным.

## Что требует спецификация

Требования собраны со страниц спецификации `2026-07-28`. Ни одно из них не обещает, что атака невозможна.

| Требование | Кому | Сила | Где |
|---|---|---|---|
| считать аннотации инструментов ненадёжными, если они получены не от доверенного сервера | клиенту | обязан | [Tools](https://mcpdoc.ru/protocol/tools/) |
| оставлять человеку возможность отклонить вызов инструмента | приложению | следует | Tools |
| показывать, какие инструменты доступны модели, и отмечать момент вызова | приложению | следует | Tools |
| показывать пользователю параметры до вызова, чтобы данные не утекли незаметно | клиенту | следует | Tools |
| проверять результат инструмента, прежде чем передавать его модели | клиенту | следует | Tools |
| очищать результат инструмента перед выдачей | серверу | обязан | Tools |
| проверять входные и выходные данные шаблонов, чтобы не допустить внедрения | всем | обязаны | [Prompts](https://mcpdoc.ru/protocol/prompts/) |
| не менять поведение и не принимать решения о безопасности по названию и версии, которые сообщила другая сторона | всем | не следует | базовый протокол |
| не загружать автоматически схемы по сетевым ссылкам `$ref` | всем | не должны | базовый протокол |

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

## Sampling как отдельный риск

Функция Sampling позволяла серверу просить у клиента ответ языковой модели. В обосновании её перевода в устаревшие ([SEP-2577](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2577)) сказано, что она создаёт поверхность для внедрения инструкций и вывода данных и что отказ от неё этот риск снижает. Статус и сроки - на странице [«Что устарело»](https://mcpdoc.ru/protocol/deprecations/).

## Что остаётся на хосте и пользователе

Это советы по реализации. Правилами MCP они не являются.

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

## Что читать дальше

- [Модель доверия](https://mcpdoc.ru/security/best-practices/) - что протокол определяет, а что нет.
- [Защита сервера](https://mcpdoc.ru/security/server/) - обязанности сервера.
- [Уязвимости и инциденты](https://mcpdoc.ru/security/incidents/) - уязвимости в конкретных программах.
