Ленивая загрузка MCP-инструментов: кто её поддерживает и как

Большинство людей думают, что затраты на MCP-сервер заложены в коде. Они ошибаются.

Если вы создаете MCP-сервер, вы сталкиваетесь с двумя типами затрат на токены:

  • Фиксированные затраты: определения инструментов, загружаемые в контекст при каждом шаге.
  • Переменные затраты: размер ответа, который возвращает инструмент.

Вы контролируете переменные затраты. Вы можете использовать пагинацию результатов или ограничивать размер вывода.

Вы не контролируете фиксированные затраты. Это задача хоста (клиента).

Если у вас десять серверов с множеством инструментов, вы можете потратить 40 000 токенов еще до того, как модель прочитает ваше первое сообщение. Это происходит потому, что хост загружает определения всех инструментов заранее.

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

Проблема? Большинство клиентов пока это не поддерживают.

Текущий статус ленивой загрузки:

  • Claude Code: Поддерживает. Инструменты загружаются по запросу через инструмент поиска.
  • Cursor, Devin и другие: Не поддерживают. Они загружают всё сразу.

Если ваш контекст раздувается на клиенте, в котором нет ленивой загрузки, у вас есть два варианта:

  1. Использовать ленивый прокси Направьте ваш хост на прокси-сервер вместо ваших реальных серверов. Прокси предоставляет только два инструмента: search_tools и execute_tool. Он загружает ваши реальные определения только по запросу. Это уменьшает контекст, но лишает возможности тонкой настройки прав доступа.

  2. Использовать паттерн роутера Если один сервер становится слишком большим, не добавляйте в него новые инструменты. Вместо этого создайте один инструмент с параметром операции. Например, используйте один инструмент "docs" с командами вроде "list", "get" или "search". Это уменьшает количество схем, которые должен загрузить хост.

Резюме стратегии:

  • От 6 до 15 инструментов: Ничего не делайте. Затраты слишком малы, чтобы беспокоиться.
  • Много инструментов в одном сервере: Используйте паттерн роутера.
  • Много разных серверов: Используйте ленивый прокси.

Проверьте поведение вашего клиента, прежде чем тратить часы на оптимизацию кода. Решение может быть вовсе не в вашем сервере.

Источник: https://dev.to/ismaestro/lazy-loading-mcp-tools-which-clients-support-it-and-how-4414

Дополнительное обучающее сообщество: https://t.me/GyaanSetuAi