Ленивая загрузка MCP-инструментов: кто её поддерживает и как
Большинство людей думают, что затраты на MCP-сервер заложены в коде. Они ошибаются.
Если вы создаете MCP-сервер, вы сталкиваетесь с двумя типами затрат на токены:
- Фиксированные затраты: определения инструментов, загружаемые в контекст при каждом шаге.
- Переменные затраты: размер ответа, который возвращает инструмент.
Вы контролируете переменные затраты. Вы можете использовать пагинацию результатов или ограничивать размер вывода.
Вы не контролируете фиксированные затраты. Это задача хоста (клиента).
Если у вас десять серверов с множеством инструментов, вы можете потратить 40 000 токенов еще до того, как модель прочитает ваше первое сообщение. Это происходит потому, что хост загружает определения всех инструментов заранее.
Решение — ленивая загрузка (lazy loading). Это означает, что хост загружает только крошечный инструмент поиска, а остальные определения подтягивает только по мере необходимости.
Проблема? Большинство клиентов пока это не поддерживают.
Текущий статус ленивой загрузки:
- Claude Code: Поддерживает. Инструменты загружаются по запросу через инструмент поиска.
- Cursor, Devin и другие: Не поддерживают. Они загружают всё сразу.
Если ваш контекст раздувается на клиенте, в котором нет ленивой загрузки, у вас есть два варианта:
Использовать ленивый прокси Направьте ваш хост на прокси-сервер вместо ваших реальных серверов. Прокси предоставляет только два инструмента:
search_toolsиexecute_tool. Он загружает ваши реальные определения только по запросу. Это уменьшает контекст, но лишает возможности тонкой настройки прав доступа.Использовать паттерн роутера Если один сервер становится слишком большим, не добавляйте в него новые инструменты. Вместо этого создайте один инструмент с параметром операции. Например, используйте один инструмент "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