Когда Model Context Protocol (MCP) инструменты работают неэффективно, причина редко кроется в самом протоколе — чаще всего дело в их проектировании. Многие команды просто предоставляют существующий API как есть, полагая, что большая языковая модель сама разберётся. Для простых сценариев это может сработать, но часто приводит к неудачным вызовам, неверным значениям параметров и повторным попыткам, которые расходуют контекст и ухудшают производительность.

В публикации AWS Machine Learning Blog выделены две ключевые проблемы. Первая — раздувание контекста (bloat): определения инструментов загружаются в контекст модели при каждом вызове, независимо от того, используются они или нет. Несколько подключённых MCP-серверов могут занять значительный объём контекста ещё до того, как пользователь задаст первый вопрос. Вторая — путаница (confusion): из-за ухудшения рассуждений модель делает неверный выбор инструмента и параметров. Повторные попытки усугубляют ситуацию, увеличивая раздувание.

ПодходВлияние на раздувание и путаницу
Улучшение описаний и сообщений об ошибкахПутаница снижается, раздувание растёт
Схемные ограничения (enums, значения по умолчанию)Путаница снижается, раздувание незначительно
Разделение инструментов и ленивая загрузкаРаздувание снижается, путаница может возрасти при плохом именовании
Сокращение полей в ответахРаздувание снижается (до 2/3 по данным Anthropic), путаница не меняется

Инженеры часто пытаются решить путаницу, обогащая описания инструментов более чёткими определениями, примерами использования и естественно-языковыми отображениями. Это помогает, но каждый добавленный символ увеличивает раздувание. Контекстная инженерия (context engineering) — подход, формирующий то, что видит модель и когда, — позволяет сбалансировать эти эффекты.

Улучшение описаний инструментов снижает путаницу, но увеличивает раздувание; ключ — поиск баланса.

Kiro CLI showing fractions assessment search results from the v2-descriptions agent, with the /agent swap v3-schema command being entered
Kiro CLI showing fractions assessment search results from the v2-descriptions agent, with the /agent swap v3-schema command being entered · Источник: AWS Machine Learning Blog

Один из эффективных методов — схемные ограничения. Переименование параметров в понятные модели названия (например, resource_class вместо content_bucket), установка значений по умолчанию для наиболее частых случаев и использование enums для полей с конечным набором значений снижают путаницу без значительного роста контекста. AWS Prescriptive Guidance рекомендует ограничивать количество параметров инструмента примерно восемью.

Другой подход — реструктуризация инструментов. Разделение многоцелевого инструмента на несколько специализированных даёт модели более ясные варианты. Ленивая загрузка (lazy loading) выносит сложные описания из постоянно загружаемого контекста в отдельный инструмент, доступный по требованию. Это снижает раздувание, но требует аккуратного именования, чтобы не усилить путаницу.

Сокращение объёмов ответов также важно. Если инструмент возвращает 50 полей на результат, достаточно часто оставить лишь 5 ключевых для принятия решения, а детали запрашивать отдельно. По данным Anthropic, такой подход сокращает количество токенов в ответе примерно на две трети. Правильные сообщения об ошибках — ещё один способ повысить эффективность: вместо «нет результатов» указать, что именно нужно изменить, направляя следующую попытку модели.