Как написать MCP-сервер и какие риски у подключения чужих MCP-серверов?
- Что такое tool poisoning?
- Как сделать MCP-сервер для базы знаний?
MCP-сервер объявляет инструменты (имя, описание, JSON-схема параметров), ресурсы (данные по адресам) и промпты; SDK берёт на себя протокол, остаётся написать обработчики. Локальный сервер работает через stdio, удалённый — по HTTP с авторизацией OAuth. Риски чужого сервера: он получает данные и права пользователя, его описания инструментов попадают в промпт и могут содержать скрытые инструкции (tool poisoning), а возвращаемые данные — инъекции.
- Инструменты делать узкими: «найти статью», «прочитать статью», а не «выполнить SQL»
- Права проверяются в коде сервера по пользователю, а не в описании инструмента
- Чужие серверы — только из доверенных источников, с фиксированной версией и минимальными правами
А ещё Опасные действия — с подтверждением пользователя на стороне клиента
Подробно
Пример (Python SDK, схематично):
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("kb")
@mcp.tool()
def search(query: str) -> list[dict]:
"""Найти статьи базы знаний по запросу."""
return kb.search(query, limit=5)
mcp.run()
Хорошие инструменты: понятные имена и описания, ограниченные результаты, понятные ошибки, идемпотентность чтения.
Риски чужих серверов:
- доступ к данным и действиям от имени пользователя;
- вредоносные инструкции в описаниях инструментов;
- подмена поведения при обновлении сервера;
- инъекции через возвращаемый контент.
Защита: доверенные источники, фиксированные версии, ревью описаний, минимальные права, подтверждения, аудит вызовов.
Что хотят услышать
- Инструменты, ресурсы, промпты; транспорты.
- Узкие инструменты и проверка прав в коде.
- Tool poisoning и инъекции через данные.
- Меры защиты при подключении чужих серверов.
Проверьте себя
Несколько верных вариантов. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗MCP-сервер не может выполнять действия, только читать данные пользователя
- ✓Сервер действует с правами пользователя и видит его данные
- ✓Описания инструментов чужого сервера могут нести скрытые инструкции
- ✗Чужой сервер безопасен, если его описания инструментов выглядят безобидно при установке
- ✓Данные, которые возвращает сервер, могут содержать инъекцию
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.