
Создание MCP‑серверов на FastMCP: 7 ошибок, которых стоит избегать
kmoseenk 48 минут назад Создание MCP‑серверов на FastMCP: 7 ошибок, которых стоит избегать Средний 8 мин 2.3K Блог компании OTUS Искусственный интеллект Python * Туториал Перевод Автор оригинала: Itamar Syn-Hershko В...
Anthropic — What company has the best second artificial intelligence model at the end of June?
В сфере искусственного интеллекта произошло заметное событие. kmoseenk 48 минут назад Создание MCP‑серверов на FastMCP: 7 ошибок, которых стоит избегать Средний 8 мин 2. 3K Блог компании OTUS Искусственный интеллект Python * Туториал Перевод Автор оригинала: Itamar Syn-Hershko В этой статье рассмотрим 7 распространенных ошибок, которые разработчики допускают при создании MCP‑серверов на FastMCP: от отсутствующих аннотаций инструментов и слабой обработки ошибок до ответов, расходующих слишком много токенов, и пробелов в безопасности. Поговорим о конкретных способах исправления каждой ошибки.
Model Context Protocol переживает взрывной рост популярности: за первый год было создано более 10 000 репозиториев серверов, а в официальном реестре уже насчитывается более 518 серверов. Многие из них построены на FastMCP — Python‑фреймворке, который упрощает предоставление инструментов LLM‑агентам. Но «упрощает» не значит «защищает от ошибок».
Технические детали
После изучения десятков реализаций MCP‑серверов, включая собственный MCP‑сервер Google Ads от Google, снова и снова всплывают одни и те же проблемы. Ниже — семь самых распространенных ошибок и способы их исправить. Не помечать изменяющие операцииЛюбой вызов MCP‑инструмента остается для клиента «черным ящиком», пока вы явно не сообщите, что именно он делает.
Без аннотаций у клиентов вроде Claude Code и ChatGPT остаются два плохих варианта: запрашивать подтверждение у пользователя при каждом вызове, создавая лишнее трение, или автоматически одобрять всё, что опасно. В редакции спецификации MCP от 2025–03-26 появились ToolAnnotations (PR #185), которые решают эту проблему:from mcp. types import ToolAnnotations READ_ONLY = ToolAnnotations(readOnlyHint=True) MUTATING = ToolAnnotations(readOnlyHint=False, destructiveHint=True) @mcp.
tool(annotations=READ_ONLY) def get_campaigns(... tool(annotations=MUTATING) def create_campaign(... Эти аннотации — подсказки, а не гарантии: в спецификации прямо указано, что клиенты не должны доверять им, если сервер ненадежный.
Отраслевые последствия
Но для доверенных серверов они позволяют клиентам пропускать запросы подтверждения для инструментов только для чтения и помечать разрушительные операции как требующие явного одобрения. В спецификации также предусмотрены idempotentHint и openWorldHint для более точной сигнализации. Помечайте каждый инструмент.
Это одна строка, которая помогает предотвратить случайную потерю данных. Выставлять наружу сырые API‑примитивы вместо инструментов, ориентированных на результатРаспространенный шаблон: завернуть язык запросов API в инструмент search() и считать задачу закрытой. В итоге LLM приходится с нуля составлять GAQL‑запросы, мутации GraphQL или словари protobuf.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





