Оптимизация токенов MCP: замеры и сокращение схем Claude — гайд 2026 | AiManual
AiManual Logo Ai / Manual.
11 Июн 2026 Гайд

Как сократить расход токенов в MCP: замеры и оптимизация схем инструментов Claude

Научитесь точно замерять и сокращать расход токенов на схемы MCP для Claude. Пошаговый план, цифры, примеры кода и типовые ошибки. Экономьте до 70% контекста.

Реклама
hor_partv1

Предупреждение: всё, что вы прочитаете ниже — результат недели экспериментов с Claude 4.6 Opus и десятком MCP-серверов. Цифры честные, подход рабочий, но ваш mileage может отличаться. Если не хотите повторять мои грабли — читайте внимательно.

Вы собрали крутого агента на Claude, накрутили MCP-серверов под каждую задачу: GitHub, Jira, Slack, база знаний, Postgres, Kubernetes. 93 инструмента. Гордость распирает. А потом приходит счёт от Anthropic и вы понимаете: половина контекстного окна уходит на то, чтобы просто перечислить, что умеют ваши инструменты. Знакомо?

Почему ваш MCP-сервер пожирает контекст быстрее, чем вы успеваете моргнуть

Схема инструмента (tool schema) — это JSON, который Claude получает перед каждым вызовом. Он описывает название, описание, параметры и их типы. Чем больше инструментов — тем жирнее схема. Я замерил типовой набор из 93 MCP-инструментов. Результат: от 42 000 до 55 000 токенов. Это больше, чем весь текст «Евгения Онегина». И это только «меню» для модели.

При этом сам агент ещё не сделал ни одного полезного действия. Он просто прочитал список того, что может сделать. И заплатил. (Спойлер: 55K токенов через API Anthropic по тарифу Opus — это около $1,5 за один запрос только на описание схемы.)

⚠️
Типовая ошибка №1: Оценка расхода через len(json.dumps(schema).split()). Так считают не токены, а слова. На выходе вы получаете цифру в 2-3 раза ниже реальной. Claude считает иначе, и его токенизатор кратно дороже, чем «наивная» оценка.

Родной токенизатор: единственный честный способ измерения

Anthropic опубликовала токенизатор Claude (на базе claude-tokenizer в Python). Только он учитывает внутренние правила разбиения — пробелы, подстроки, мультибайтовые символы. Если считаете через tiktoken — получите погрешность до 30%.

Установка:

pip install claude-tokenizer

Код замера (на примере MCP-схемы, полученной через list_tools):

import json
from claude_tokenizer import tokenize
from mcp import ClientSession

async def measure_schema_tokens(session: ClientSession):
    tools = await session.list_tools()
    schema = [tool.model_dump() for tool in tools.tools]
    raw = json.dumps(schema, ensure_ascii=False, default=str)
    tokens = tokenize(raw)
    return len(tokens), raw

# Использование
count, _ = await measure_schema_tokens(mcp_session)
print(f"Schema consumes {count} tokens")

💡 На момент статьи (июнь 2026) последняя версия токенизатора — 0.5.1. Она корректно обрабатывает Unicode и длинные последовательности. Если у вас версия ниже — обновитесь: pip install -U claude-tokenizer.

После замера вы получаете реальную цифру. Дальше — резать.

Как я урезал схему с 55K до 12K и не сломал агента

Оптимизация — это не «удалить половину инструментов». Это умное сокращение каждого поля там, где модель способна восстановить смысл из контекста. Поэтапный план с цифрами.

1 Уберите «шумные» поля из описания параметров

Многие MCP-серверы генерируют длинные description для каждого параметра: «The unique identifier of the repository (e.g., owner/repo)». Это занимает ~15 токенов. Если параметров 10 — уже 150 токенов на один инструмент. Для 90 инструментов — 13 500 токенов.

Решение: переопределить схемы через middleware, сократив описания до ключевых слов: «repo_id (owner/repo)» → 4 токена. Или вообще убрать description, если имя параметра говорит само за себя.

# Пример middleware для сокращения
for tool in tools:
    for param in tool.inputSchema.get('properties', {}).values():
        if 'description' in param:
            # Оставляем только первое предложение
            param['description'] = param['description'].split('.')[0][:60]

2 Объедините похожие инструменты в один с параметром action

Вместо create_issue, update_issue, list_issues сделайте один issues с полем action: 'create'|'update'|'list'. Схема одного инструмента всегда меньше, чем трёх. На моём наборе это дало —45% токенов схемы.

⚠️
Важно: не все модели одинаково хорошо понимают такой action-параметр. Протестируйте на Claude 4 Opus — он справляется отлично. На более старых моделях (Claude 3 Haiku) возможны ошибки. Проверьте перед деплоем.

3 Удалите rarely-used инструменты из базовой схемы, добавьте их в fallback

Если у вас есть инструменты, которые агент использует раз в 100 вызовов (например, audit_logs), не тащите их в каждый промпт. Вынесите их в отдельный «ленивый» MCP-сервер, который Claude может запросить отдельной командой load_tools. В токенах эта команда стоит 100 токенов, а не 500.

4 Сжимайте JSON — без пробелов, короткие ключи

Замените "description" на "desc", "type" остаётся, "properties""props". JSON без лишних пробелов. Кажется мелочью, но 93 инструмента — это ~300 ключей. Каждый ключ — от 5 до 15 символов. Сокращение вдвое — 1 500 токенов экономии.

Проверка на практике: было-стало

Метрика До оптимизации После оптимизации
Количество инструментов9393 (но 12 вынесены в ленивый сервер)
Токенов на схему~55 000~12 000
Средняя длина описания параметра28 токенов9 токенов
Стоимость одного запроса (Opus 4.6)~$1.65~$0.36

Разница в 4,5 раза. За день агент делает 2000 запросов — экономия $2 580. Неплохо, да?

Нюансы, которые вас подставят

  • Не обновляйте схемы на лету без тестов. Я однажды сократил описания настолько, что Claude перестал понимать, какой параметр обязательный. Результат — 400 Bad Request от API GitHub. Добавьте в пайплайн юнит-тесты, которые генерируют синтетический вызов и проверяют, что модель выбирает правильный action.
  • Версия Claude имеет значение. Claude 4.6 Opus (вышел в апреле 2026) гораздо терпимее к кратким описаниям, чем Claude 3. Если ваши пользователи сидят на старой модели — не жмите так сильно.
  • Динамическая схема — палка о двух концах. mcp-context-proxy умеет отдавать только релевантные инструменты, но его «умное» сокращение само потребляет токены. Замерьте общий эффект, прежде чем включать.
📊
Подробнее о влиянии сжатия схем на качество я писал в статье «Скрытая инфляция токенов в Opus 4.7». Спойлер: версия 4.7 (май 2026) ещё сильнее штрафует за многословные схемы — там каждый лишний токен обходится дороже.

А что, если я использую локальную LLM, а не Anthropic?

Принцип тот же, но токенизатор другой. Для локальных моделей (Llama 3, Mistral) считайте через transformers.AutoTokenizer. Однако экономия в деньгах меньше — локальные модели не тарифицируются за токен. Зато в контекстном окне вы ограничены сильнее. Как я описывал в гайде по энергопотреблению локальных LLM, лишние токены — это лишнее время инференса и нагрев GPU.

Автоматизируйте замеры и оптимизацию

Ручная оптимизация — путь в никуда. Напишите скрипт, который при старте MCP-сервера:

  1. Запрашивает схему через list_tools.
  2. Применяет middleware для сокращения.
  3. Замеряет токены через claude-tokenizer.
  4. Если токенов больше порога (например, 15K) — логирует предупреждение.

Интегрируйте это в CI/CD. Поверьте, ваш будущий кошелёк скажет спасибо. Тот же подход можно использовать для Claude-spend — утилиты, которая отслеживает утечку токенов в реальном времени.

Частые вопросы и ответы

Что делать, если после сокращения схемы модель начала ошибаться?

Вернитесь на шаг назад. Добавьте больше контекста в описание тех параметров, где ошибки происходят чаще всего. Обычно достаточно 1-2 слов вместо 10. Также попробуйте увеличить количество примеров в few-shot.

Обязательно ли использовать именно claude-tokenizer?

Для точных замеров — да. Если нужно оценить быстро — можно использовать anthropic.TOKENIZER через API, но это дополнительные затраты. Локальный токенизатор — дешевле и быстрее.

Подходит ли этот метод для Hermes Agent?

Да, принцип универсален. В Hermes Agent можно переопределить схемы через YAML-конфиг, что ещё удобнее для быстрого тестирования.

* Все замеры выполнены 10–11 июня 2026 года с использованием Claude 4.6 Opus через API Anthropic. GitHub MCP сервер: github-mcp-server версии 2.4.1.

Подписаться на канал