Сервер MCP — это программа, которая предоставляет AI-приложению инструменты, данные или многократно используемые промпты через Model Context Protocol. Совместимые приложения получают общий способ обнаруживать и использовать эти возможности независимо от того, служит ли базовой системой сайт документации, файловая система или бизнес-API.
Это руководство проводит через один пример: от подключения к серверу до AI-ответа, который можно проверить. Сначала вы изучите публичный сервер документации Microsoft и самостоятельно выполните поиск. Затем подключите его к агенту Quickchat AI, выберете разрешённые агенту инструменты и проследите путь от вопроса до ответа и записи вызова инструмента в Inbox.
Вы увидите обе стороны интеграции: инструменты, которые предлагает сервер, и инструмент, который агент действительно использует для ответа на вопрос.
Начните с объяснения хоста, клиента и сервера, перейдите к упражнению в Inspector или сразу к разговору в Quickchat AI и обзору Inbox. Для Inspector нужны Node.js и доступ к интернету. Для примера в Quickchat AI нужны аккаунт и AI-кредиты на тестовый ответ. Публичный сервер Microsoft не требует аккаунта Microsoft или ключа API.
Что такое сервер MCP?
Сервер MCP предоставляет совместимым AI-приложениям интерфейс для использования инструментов и доступа к информации. Слово сервер описывает его роль, а не расположение: это может быть небольшая программа на вашем ноутбуке или размещённый сервис, доступный по URL.
Например, сервер файловой системы может предоставлять доступ к выбранным файлам. Корпоративный сервер знаний может отвечать на вопросы по утверждённым документам. Сервер поставщика SaaS может предоставлять операции его сервиса. Доступ конкретного вызывающего зависит от реализации и её разрешений.
Архитектура MCP разделяет три зоны ответственности:
| Часть | Что делает | В примере поиска документации |
|---|---|---|
| Хост | AI-приложение, которое координирует модель, взаимодействие с пользователем и разрешённые соединения | Ваш AI-ассистент или приложение для программирования |
| Клиент | Компонент внутри хоста, который общается с одним сервером | Соединение с сервисом документации |
| Сервер | Программа, предоставляющая возможности через MCP | Сервис поиска документации |
Один хост может использовать несколько серверов. У каждого соединения есть собственный клиентский компонент. Показанные сервисы иллюстрируют, как серверы MCP связывают AI-приложение с разными API.
Сервер может предоставлять любые из трёх основных видов возможностей:
| Возможность | Значение | Пример |
|---|---|---|
| Инструменты | Операции с названиями, описаниями и схемами входных данных | Поиск документации или создание обращения |
| Ресурсы | Контекстные данные, идентифицируемые по URI | Чтение доступного документа |
| Промпты | Многократно используемые шаблоны взаимодействия, предоставляемые сервером | Запуск пошаговой проверки документа |
Сервер может предлагать одну или несколько таких возможностей. В этом руководстве поиск документации является инструментом: вы отправляете запрос и получаете результаты. Ресурс представляет собой отдельный интерфейс для чтения данных, идентифицируемых по URI.
Как MCP работает как протокол
Протокол представляет собой набор правил, определяющих общение систем. Представьте его как общий язык со строгими грамматическими правилами. Например, HTTP определяет, как браузер запрашивает страницу и как веб-сервер отвечает. Браузер и сервер выполняют работу, а протокол задаёт порядок их общения.
MCP применяет этот принцип к инструментам и данным AI-приложений. Он определяет, как клиент узнаёт о возможностях сервера, запрашивает выполнение операции и получает её результат.
В типичном приложении с инструментами клиент MCP обнаруживает доступные инструменты. Хост предоставляет модели нужные определения. После выбора инструмента клиент отправляет структурированный запрос серверу, который выполняет операцию и возвращает результат. Затем хост передаёт результат модели, чтобы помочь ей ответить пользователю.
Сервер MCP обеспечивает интеграцию с базовой системой. Хост по-прежнему контролирует доступность инструментов, правила выполнения и то, как результаты попадают в разговор.
В примере ниже повторяются два названия методов:
tools/listзапрашивает инструменты, которые сервер предоставляет вызывающему, включая схемы входных данных.tools/callзапрашивает выполнение именованного инструмента со структурированными аргументами.
Сообщения используют JSON-RPC 2.0. Для получения результата сервер может вызвать API, выполнить поиск в индексе или прочитать локальный файл. Например, сервер, подключённый к Google Drive, может преобразовать запрос MCP на поиск файлов в вызов Google Drive API и вернуть подходящие файлы. Это адаптер API, который с одной стороны общается через MCP, а с другой с исходным сервисом.
Чем отличаются локальные и удалённые серверы MCP?
Локальный сервер MCP обычно работает как процесс на вашем компьютере. Удалённый сервер MCP работает как отдельный сетевой сервис, к которому клиент обращается по URL конечной точки.
Расположение влияет на то, что вы настраиваете и обслуживаете. Удалённая конечная точка является сетевым адресом; локальная конфигурация запускает программу.
| Локальный сервер | Удалённый сервер | |
|---|---|---|
| Типичная конфигурация | Команда запуска и аргументы | URL конечной точки |
| Стандартный транспорт | stdio, то есть стандартный ввод и вывод | Streamable HTTP |
| Кто его запускает? | Ваш компьютер или среда выполнения | Поставщик или ваша инфраструктура |
| Что проверить в доступе | Программу, доступ к файловой системе и переданные учётные данные | Поставщика, запрашиваемые разрешения и доступные инструменты |
| Пример | Сервер, читающий выбранные локальные файлы | Публичная конечная точка документации Microsoft Learn |
Это стандартные транспорты MCP. Streamable HTTP может возвращать ответ JSON или передавать результаты потоком через Server-Sent Events.
Публичные серверы документации могут быть доступны без учётных данных. Защищённые сервисы часто просят войти и подтвердить доступ через OAuth. Проверьте и место запуска сервера, и системы, к которым он обращается: программа на вашем ноутбуке всё равно может вызывать удалённый API.
Как самостоятельно попробовать сервер MCP?
Используйте MCP Inspector, чтобы напрямую вызвать публичный сервер документации Microsoft. Inspector является отладочным клиентом с браузерным интерфейсом; он позволяет увидеть инструменты, входные и возвращённые данные без добавления языковой модели в эксперимент.
Microsoft описывает эту конечную точку как публичную, не требующую аутентификации и бесплатную. Она предлагает поиск документации, получение страниц и поиск примеров кода. Здесь вы проверите только поиск документации.
- Установите Node.js 22.19.0 или новее, включая npm. Проверьте установленную версию командой
node --version. - Откройте терминал и оставьте его работать во время упражнения. Для установки Inspector и доступа к серверу документации нужен интернет.
- Используйте именно указанную ниже версию Inspector, чтобы интерфейс совпадал со скриншотами. Установка запускает официальный пакет Inspector на вашем компьютере.
Шаг 1: подключитесь к серверу документации
Задайте транспорт и конечную точку, чтобы Inspector отправлял запросы MCP нужному сервису.
npx --yes @modelcontextprotocol/inspector@2.13.0
Откройте локальный URL для браузера, который напечатает Inspector. URL запуска может содержать токен сеанса; не раскрывайте его. Официальное руководство Inspector объясняет браузерный интерфейс и интерфейс командной строки.
В Inspector выберите Add Servers, затем + Add manually. Введите:
| Поле | Значение |
|---|---|
| Server ID | microsoft-learn |
| Transport | streamable-http |
| URL | https://learn.microsoft.com/api/mcp |
Выберите Add, затем включите microsoft-learn в списке серверов. Дождитесь соединения.
Inspector подключается к размещённому серверу документации Microsoft через его публичную конечную точку.
Inspector отправляет сообщения протокола, которые ожидает конечная точка. Открытие того же адреса в браузере вместо этого отправляет запрос веб-страницы.
Шаг 2: изучите инструмент и его входные данные
Перед запуском прочитайте определение инструмента. Название идентифицирует операцию, описание объясняет её применение, а схема входных данных задаёт допустимые аргументы.
Откройте Tools и выберите Microsoft Docs Search. Его имя в протоколе: microsoft_docs_search. Сервер также предлагает получение страниц и поиск примеров кода; этот пример использует инструмент поиска документации.
Сервер предоставляет название инструмента, описание и поля ввода. Inspector создаёт форму на основе этого определения.
Инструмент принимает поисковую фразу в поле query. Inspector отправляет следующие аргументы:
{
"query": "What is Azure Blob Storage?"
}
Inspector помещает эти аргументы в запрос MCP.
Обнаружение инструментов превращает адрес сервера в операции, которые можно проверить до запуска.
Определение инструмента даёт AI-хосту те же сведения, которые вы сейчас читаете. Хост может использовать их для представления инструмента модели; сервер по-прежнему обязан проверить фактический запрос и применить разрешения.
Шаг 3: вызовите инструмент и проверьте результат
Выполните поиск, затем сравните возвращённый отрывок с первоисточником.
Введите в query приведённый ниже текст, затем выберите Execute Tool:
What is Azure Blob Storage?
Наш запуск вернул десять результатов. Первым был What is Azure Blob storage?, с фрагментом об объектном хранилище Microsoft и полем contentUrl, указывающим на документацию. Результаты ответа содержали поля title, content и contentUrl.
Поиск вернул заголовок, отрывок и URL источника для каждого результата.
Откройте возвращённый обзор Azure Blob Storage и сравните фрагмент с источником. Проверьте, что страница относится к тому же продукту и подтверждает утверждение, которое вы включили бы в ответ.
Исходная страница первого результата. Ответ MCP содержит ссылку; переход по ней даёт окружающий контекст.
Страница источника даёт контекст, необходимый для проверки результата поиска и основанного на нём AI-ответа.
Вы уже изучили инструмент и использовали его через MCP. Теперь предоставьте его агенту, чтобы он мог выбирать, когда искать, и использовать результат в ответе.
По завершении отключитесь в Inspector и остановите процесс в терминале сочетанием Ctrl+C.
Что проверить, если вызов не удался?
| Что вы видите | Что проверить дальше |
|---|---|
| Конечная точка возвращает 405 во вкладке браузера | Используйте Inspector с транспортом HTTP вместо открытия конечной точки как веб-страницы |
| Inspector не может подключиться | Проверьте точный URL, доступ к сети и поддержку выбранного транспорта сервером |
| Клиент сообщает о неподдерживаемой версии протокола | Обновите клиент или проверьте поддерживаемые сервером версии. Идентификаторы версий MCP выглядят как даты; клиент должен использовать версию, которую поддерживает сервер |
| Инструмент отклоняет аргументы | Сравните фактические входные данные с текущей схемой инструмента, включая обязательные поля и типы |
| Защищённый сервер просит войти | Завершите поддерживаемый процесс авторизации; публичный пример Microsoft не должен его требовать |
| Вызов успешен, но результат нерелевантен | Сузьте запрос и проверьте источник; успешная передача данных не определяет качество поиска |
Как использовать сервер MCP в разговоре с Quickchat AI?
Подключите тот же сервер Microsoft Learn к агенту, дайте ему ответить на вопрос с помощью инструмента поиска, а затем проверьте запись вызова в Inbox. Приведённые ниже скриншоты сделаны в локально запущенном приложении Quickchat AI с демонстрационным агентом MCP Explorer.
Шаг 1: создайте агента и задайте инструкции
Дайте агенту чёткое правило, когда использовать поиск документации. Сервер предоставляет определение инструмента, а ваш Main Prompt объясняет агенту, как использовать его в разговоре.
- Создайте аккаунт Quickchat AI или войдите в существующий. Используйте агента, созданного при регистрации. В существующем аккаунте меню агента предлагает Add new AI Agent.
- При начальной настройке выберите Set up manually. Введите
MCP Explorerв Name your AI Agent иAnswer questions about Microsoft products using Microsoft Learn documentation.в Describe what you want your agent to do. - Выберите Next. Для этого примера можно пройти необязательные шаги Knowledge Base, внешних приложений и развёртывания, ничего не добавляя. На этапе выбора тарифа выберите Skip for now.
- Откройте Identity, найдите Main Prompt, выберите Edit, вставьте инструкции ниже и сохраните их. Если используете существующего агента, также установите его Name на
MCP Explorer.
You are MCP Explorer, a Microsoft documentation assistant. For questions about Microsoft products, call microsoft_docs_search using the visitor's exact question as the query. Base your answer only on the returned documentation. Answer in two short sentences and include one Microsoft Learn URL from the search results. If the results do not support an answer, say so.
Промпт объясняет агенту, когда искать, что отправлять и как использовать возвращённую документацию.
Промпт направляет разговор. Определение инструмента объясняет агенту, как выполнить вызов.
Шаг 2: подключите Microsoft Learn и выберите инструменты
Quickchat AI обнаруживает инструменты сервера и показывает их как отдельные переключатели. Выберите операции, необходимые этому агенту для работы.
- Откройте Actions & MCPs, выберите Add Action, затем MCP.
- Выберите Enter a URL manually и вставьте
https://learn.microsoft.com/api/mcpв MCP server URL. - Выберите Connect. Установите MCP action name на
Microsoft Learn.
Та же конечная точка, которую вы использовали в Inspector, теперь подключена к агенту.
Сервер предоставляет три инструмента. В Tools установите переключатели так:
| Инструмент | Настройка для этого примера | Назначение |
|---|---|---|
microsoft_docs_search | Включён | Поиск в документации Microsoft и получение отрывков со ссылками на источники |
microsoft_code_sample_search | Выключен | Поиск примеров кода |
microsoft_docs_fetch | Выключен | Получение содержимого страницы документации |
Выключите Default tool activation, чтобы инструменты, которые сервер добавит позже, оставались выключенными до вашей проверки. Выберите Save и убедитесь, что Action Microsoft Learn включена в Actions & MCPs.
Включён один из трёх обнаруженных инструментов. Можно вернуться к этой панели и включать или выключать отдельные инструменты при изменении задач агента.
Эти переключатели управляют доступными этому агенту инструментами. Они позволяют подключить сервер, не предоставляя агенту все его операции.
Шаг 3: запустите тестовый вопрос
Используйте Testing, чтобы запустить повторяемый разговор с агентом. Этот тест должен привести к поиску документации и ответу со ссылкой на источник Microsoft Learn.
- Откройте Testing и выберите Create Dataset.
- Назовите набор данных
MCP lookup, выберите Paste messages и введите этот единственный вопрос:
What is Azure Blob Storage?
- Выберите Create, затем Run. Назовите запуск
Documentation search onlyи выберите Start Run. - Дождитесь завершения разговора. Запуск использует сохранённый промпт и включённые инструменты агента и генерирует ответ за AI-кредиты.
Сохраните этот набор данных, чтобы повторно запускать тот же вопрос после изменения промпта или выбора инструментов.
В первом тесте мы одновременно запросили определение и пример использования. Агент преобразовал это в более широкий поисковый запрос, который вернул менее точный первый результат. Мы упростили тест до вопроса выше и добавили в промпт using the visitor’s exact question as the query. Следующий запуск искал именно эту фразу и первым вернул обзор Azure Blob Storage. Промпт для копирования уже содержит это уточнение.
Шаг 4: проследите ответ и вызов инструмента в Inbox
Откройте ссылку View для разговора в завершённом запуске, чтобы перейти к его записи в Inbox. Можно проверить и ответ, и вызов инструмента, на который он опирается.
Inbox хранит разговор и активность инструментов вместе. Подробные изображения ниже показывают ответ и развёрнутый вызов.
Сохранённый разговор помечен как Simulation. Агент объясняет Blob Storage, приводит примеры использования и добавляет ссылку на источник.
Выберите 1 action called, затем Show full, чтобы развернуть сохранённый предварительный просмотр ответа. В нашем запуске запись показывает:
| Поле | Записанное значение | Что проверить |
|---|---|---|
| Инструмент | microsoft_docs_search | Агент использовал включённый вами поиск документации |
| Аргумент | query: "What is Azure Blob Storage?" | Поиск соответствует вопросу посетителя |
| Статус | Success | Вызов инструмента завершился |
| Предварительный просмотр ответа | What is Azure Blob storage?, затем отрывок документации | Возвращённый отрывок подтверждает ответ |
Inbox связывает ответ с названием инструмента, входными данными и сохранённым предварительным просмотром ответа. Также откройте ссылку Microsoft Learn в ответе, чтобы проверить исходную страницу.
Проверьте весь путь от вопроса до ответа. Инструмент может успешно выполниться, но вернуть материал, для которого нужен более узкий запрос или более точный промпт.
Теперь у вас есть рабочий агент, который использует сервер MCP в разговоре, сохранённый тест и доступная для проверки запись вызова. Руководство по настройке удалённого MCP описывает другие серверы и варианты подключения.
Как удалённые серверы MCP обрабатывают вход и разрешения?
Аутентификация устанавливает, кто делает вызов. Авторизация определяет, какие данные и операции этот вызывающий может использовать.
Спецификация авторизации MCP описывает OAuth для защищённых HTTP-ресурсов. Клиент обнаруживает сведения об авторизации, получает токен доступа к серверу MCP и включает его в запросы. Публичные серверы могут не требовать такого входа.
Проверка доступа должна выполняться в системе, управляющей ресурсом. Сообщение в чате с заявлением о статусе администратора не подтверждает личность и не даёт разрешений.
Перед подключением сервера к бизнес-информации проверьте поставщика, разрешённые инструменты и права базовой учётной записи. Сервер с одной общей сервисной учётной записью автоматически не наследует права каждого пользователя чата на документы. Инструментам только для чтения и инструментам, отправляющим сообщения или обновляющим записи, также нужны разные правила одобрения.
OAuth не устраняет prompt injection из возвращённых документов и результатов инструментов. Хост должен воспринимать содержимое как данные и отдельно применять политику выполнения. Эти границы описаны в официальных рекомендациях по безопасности. Конкретное упражнение с разрешённым и запрещённым доступом приведено в руководстве по аутентификации и авторизации MCP.
Чем MCP отличается от API, вызова функций и RAG?
MCP даёт AI-приложениям общий способ обнаружения и вызова инструментов. API, вызов функций и поиск решают связанные задачи в разных частях приложения.
Повторно используемая часть — это интерфейс для AI. Кто-то по-прежнему должен реализовывать и поддерживать соединение с базовым сервисом.
| Понятие | Задача | Связь с MCP |
|---|---|---|
| API сервиса | Предоставляет операции и данные системы | Сервер MCP часто вызывает его внутри |
| HTTP | Переносит запросы и ответы по сети | Streamable HTTP передаёт сообщения MCP |
| Вызов функций | Позволяет модели запрашивать операцию со структурированными аргументами | Хост может через MCP обнаруживать инструменты и выполнять эти запросы |
| RAG | Получает информацию для поддержки генерируемого ответа | Инструмент MCP может предоставлять этап поиска |
Если в существующем приложении нужна одна простая операция, прямой вызов его API может быть проще. HTTP Action в Quickchat AI является одним из способов подключения агента к документированному API. MCP полезен, когда несколько совместимых AI-приложений должны повторно использовать одну интеграцию. Например, компания может предоставить доступ к своей вики через один сервер MCP и сделать его поисковые инструменты доступными разным ассистентам. Изменения базового API вики обрабатывает сопровождающий сервера.
Вызов функций является способом, которым модель просит приложение запустить инструмент, как объясняет документация по использованию инструментов. Клиент MCP может обнаружить определения инструментов и отправить эти запросы серверу на выполнение. Инструмент также может получать документы для процесса RAG, который использует найденную информацию как основу ответа, как описано в оригинальной работе о RAG.
Подробные варианты реализации рассмотрены в статьях MCP и HTTP и инструменты MCP и собственные конечные точки API.
Как получить сервер MCP для бизнеса?
Выбирайте сервер исходя из возможностей, которые нужно предоставить, и того, кто будет его обслуживать.
| Вариант | Когда подходит | Следующий шаг |
|---|---|---|
| Использовать сервер поставщика | Сервис уже предлагает нужные операции | Проверьте официальную документацию, поддерживаемые клиенты и запрашиваемые разрешения |
| Создать сервер | Нужен собственный интерфейс к внутренним данным или операциям | Выберите официальный MCP SDK и реализуйте возможности и контроль доступа |
| Предоставить существующего AI-Агента | Другие AI-приложения должны задавать вопросы вашему Агенту с базой знаний | Размещённый сервер Агента Quickchat AI предоставляет URL и инструмент вопросов без написания серверного кода |
Направление соединения определяет нужную настройку. В примере выше ваш агент вызывает сервер Microsoft. В случае размещённого сервера агента другое AI-приложение вызывает вашего агента.
Проверьте направление стрелки перед выбором инструкции. Добавление внешнего сервера даёт Агенту инструменты; предоставление Агента делает его инструментом другого приложения.
Документация канала MCP объясняет, как предоставить доступ к агенту и управлять им. Другие примеры агентов, использующих внешние серверы, приведены в руководствах про ассистента планирования Calendly и чатбота центра помощи Notion.
Отдельное соединение для управления аккаунтом позволяет ассистенту помогать с настройкой вашего аккаунта Quickchat AI. Руководства по подключению доступны для ChatGPT и Claude. Этот интерфейс аккаунта служит другой цели, чем собственный инструмент агента для вопросов.
Где найти серверы MCP?
Найдите сервер в этих каталогах, затем проверьте инструкции провайдера по настройке и запрашиваемые разрешения:
| Каталог | Для чего использовать |
|---|---|
| Официальный MCP Registry | Поиск опубликованных серверов и их метаданных |
| Эталонные серверы MCP | Изучение учебных реализаций; это не готовый промышленный каталог |
| Claude Marketplace | Поиск коннекторов и плагинов для Claude |
| Плагины ChatGPT | Поиск интеграций в текущем каталоге ChatGPT |
Запись в каталоге является отправной точкой. Документация провайдера объясняет, какие клиенты поддерживаются и как подключиться.
Необязательные проверки соединения: проверьте пример публичного соединения, чтобы инициализировать соединение и получить список инструментов конечной точки документации Microsoft Learn или Cloudflare без их выполнения, либо проверьте направление соединения по публичному URL и намеченной цели. Эти проверки не принимают учётные данные и не изменяют вашу учётную запись.
Частые вопросы
Что такое сервер MCP простыми словами?
Сервер MCP — это программа, которая даёт AI-приложению стандартный доступ к инструментам, данным или многократно используемым промптам. Например, сервер документации может предоставлять поисковый инструмент, возвращающий подходящие фрагменты и ссылки. AI-приложение решает, как использовать эти результаты.
Что означает MCP в AI?
MCP означает Model Context Protocol. Он определяет сообщения, с помощью которых AI-приложения и серверы обнаруживают возможности, запрашивают информацию и вызывают инструменты. Сервер реализует протокол; само MCP является стандартом связи.
Чем сервер MCP отличается от API?
API предоставляет интерфейс к программному обеспечению. Сервер MCP предоставляет возможности через общий интерфейс для AI-приложений, включая обнаружение инструментов и структурированные вызовы. Многие серверы MCP внутри вызывают существующее API, поэтому оба могут быть частями одной интеграции.
Что такое удалённый сервер MCP?
Удалённый сервер MCP работает вне процесса клиента и доступен по сети, обычно через конечную точку Streamable HTTP. Некоторые удалённые серверы предоставляют публичные данные без входа. Защищённые серверы могут требовать OAuth или другой поддерживаемый способ аутентификации.
Сервер MCP, плагин и коннектор означают одно и то же?
Плагин или коннектор является функцией или пакетом продукта; сервер MCP является реализацией протокола. Продукт может использовать сервер MCP за своим коннектором, а плагин может содержать соединение MCP наряду с другими возможностями. Проверьте конкретный продукт и интеграцию.
Нужно ли программировать, чтобы пользоваться сервером MCP?
К существующему серверу MCP можно подключиться через совместимое приложение без написания серверного кода. В этом руководстве Inspector используется для поиска в публичной документации, а Quickchat AI для разговора с агентом. Для Inspector нужен Node.js; для шагов в Quickchat AI нужны аккаунт и AI-кредиты.
Работает ли MCP только с Claude?
MCP является открытым протоколом, а не функцией одного AI-приложения или модели. Совместимый хост может подключиться к серверу, если поддерживает его транспорт, версию протокола, аутентификацию и возможности. Проверьте документацию хоста для конкретной нужной интеграции.
Заменяет ли MCP вызов функций или RAG?
MCP может предоставлять инструменты процессу вызова функций и открывать поиск для конвейера RAG. Вызов функций определяет, как модель запрашивает операцию; RAG получает сведения для поддержки генерации. MCP стандартизирует связь с сервером, предоставляющим эти возможности.
Безопасно ли использовать серверы MCP?
Безопасность зависит от кода сервера, предоставляемых данных и действий, а также разрешений, применяемых хостом и сервером. Используйте надёжного поставщика, выдавайте только необходимый доступ и проверяйте действия с существенными последствиями. Вход через OAuth не делает результаты инструмента невосприимчивыми к prompt injection.