# MCP-клиент: как проверить сокращение контекста до 99,9% через mcptoon

> MCP-клиент может передавать модели длинные схемы всех подключённых инструментов ещё до начала работы. Показываю, как вынести схемы из контекста и настроить компактный `mcptoon`.

Источник: https://vibeceh.ru/guides/mcp-sokratit-rashod-tokenov-cherez-kompaktnyj-klient
Автор: Сергей Мазур · опубликовано 2026-08-20

MCP-клиент подключает модель к внешним данным и инструментам, но лишние серверы, команды и длинные описания раздувают контекст. Поэтому запрос `mcp client` часто приводит не к одной нужной функции, а к каталогу возможностей целиком. Ниже я показываю, как отделить каталог от рабочего набора и настроить компактный клиент без глубокого программирования. Базовые приёмы можно отработать на практикуме по вайб-кодингу для предпринимателей и сверить базовое понятие [MCP](/concepts/mcp).

## Что такое MCP-клиент и зачем делать его компактнее?

MCP подключает AI-приложение к внешним данным, инструментам и рабочим процессам. Клиент устанавливает соединение с MCP-сервером и решает, что показать модели. Компактный клиент хранит схемы вне контекста и отдаёт модели только имена, сокращённые описания или результат конкретного вызова.

Представь связку из трёх частей:

- AI-приложение, например Claude или ChatGPT;
- MCP-клиент, который соединяет приложение с сервером;
- MCP-сервер, который предоставляет данные и команды.

MCP задаёт способ соединения с внешними системами, а клиент решает, какие возможности показать модели. Дальше клиент может передать только нужные возможности.

`mcptoon` работает именно на этом слое. Это CLI-клиент. Он не добавляется в обычный MCP-конфиг и не передаёт модели все схемы заранее.

У инструмента есть описание. В нём лежат имя, назначение и `input_schema`, то есть схема входных параметров. Если таких инструментов много, описания начинают занимать место ещё до первого полезного действия.

Компактность здесь не означает «убрать всё». Она означает «не показывать всё сразу». Модель получает каталог имён для поиска, короткую схему для выбора параметров или данные в отдельном формате после вызова.

Anthropic описывает MCP как открытый стандарт, через который AI-приложения подключаются к внешним данным, инструментам и рабочим процессам. Подробнее: [MCP](https://docs.anthropic.com/en/docs/mcp).

## Как MCP-клиент и MCP-сервер обмениваются инструментами?

я описываю обмен так: MCP-клиент устанавливает соединение с сервером, получает список доступных команд и передаёт модели описание нужного инструмента. В описание входят имя, назначение и `input_schema`. Модель возвращает блок `tool_use`, после чего приложение выполняет вызов, а результат снова попадает в контекст.

![Кот наблюдает за схемой обмена между MCP-клиентом, моделью и сервером.](https://s3.regru.cloud/crossmark/statejnik/images/guides/mcp-sokratit-rashod-tokenov-cherez-kompaktnyj-klient/kadr-1.webp)

Сервер и клиент делают разные вещи.

MCP-сервер предоставляет:

- команды;
- данные;
- промпты;
- ресурсы.

Клиент устанавливает соединение, получает эти объекты и преобразует их в формат, который понимает AI-приложение. Модель не разговаривает с сервером напрямую.

Путь одного вызова выглядит так:

1. Клиент подключается к серверу.
2. Клиент получает описание доступных инструментов.
3. Модель выбирает инструмент и формирует `tool_use`.
4. Приложение передаёт вызов серверу.
5. Сервер возвращает результат.
6. Приложение добавляет результат в контекст модели.

Для локального сценария сервер может работать как процесс на компьютере через `stdio`. Устройство локального сервера разобрано в [гайде о MCP-сервере](/guides/mcp-svoj-server-bez-zavisimostej-dlya-bezopasnoj-lokalnoj-komandy). Anthropic рекомендует HTTP для удалённых серверов. SSE в документации назван устаревающим транспортом.

Собственный клиент особенно нужен для локальных `stdio`-серверов, MCP-промптов и MCP-ресурсов. Для удалённых серверов, доступных по URL и использующих только tools, может использоваться прямое подключение через MCP Connector, но это отдельный режим.

Главная граница проходит между сервером и моделью. Сервер знает все свои команды. Модель получает только то описание, которое передал клиент.

## Почему MCP-контекст увеличивает расход токенов?

в контекст MCP попадают описания инструментов, их `input_schema` и результаты вызовов. Длинные схемы занимают место в контекстном окне ещё до первого сообщения, а результаты увеличивают следующие запросы. Оплачиваемые input-токены и занятое место в окне связаны, но это не одна и та же метрика.

Схема инструмента может содержать имя, описание, свойства параметров и служебную структуру JSON Schema. Модели это нужно для выбора команды и заполнения аргументов. Но если клиент заранее передал схемы 20 или 30 инструментов, большая часть текста может не пригодиться в текущей задаче.

В [обсуждении MCP на GitHub](https://github.com/modelcontextprotocol/modelcontextprotocol/discussions/2812) участники приводят оценку: в типичной сессии Claude Code схемы 20-30 зарегистрированных MCP-инструментов могут занимать 15-30 КБ контекста:

Это ориентир из обсуждения, а не универсальное измерение для всех хостов и моделей.

Это место в [контекстном окне](/concepts/kontekst). Отдельно считаются токены, за которые платит API. Кэширование может удешевить повторную отправку одинаковых данных, но длинная схема всё равно остаётся видимой для модели и занимает место в контексте.

Результат вызова создаёт вторую точку расхода. Инструмент может вернуть больше данных, чем нужно для следующего шага. Тогда модель получает не только лишние определения, но и лишний ответ.

В документации Claude Code указано предупреждение, когда вывод MCP-инструмента превышает 10 000 токенов. В документации Claude Code значение по умолчанию для максимального результата составляет 25 000 токенов. Предел 10 000 токенов задаёт конкретный хост; MCP сам по себе такого безопасного предела не устанавливает.

Поэтому я разделяю две задачи:

- уменьшить список схем до начала работы;
- не пропустить в контекст огромный результат после вызова.

Компактный клиент решает первую задачу и частично помогает со второй через форматы результата. Он не делает любой MCP-вызов дешёвым автоматически.

## Какие MCP-подключения лучше оставить?

оставляй только подключения, которые нужны текущей задаче, и включай инструменты выборочно. Простое разделение серверов не экономит токены, если все команды всё равно попадают в один API-вызов. Пагинация списка инструментов может сократить объём обмена с сервером, но не уменьшает контекст, если модели позже отправляется полный список.

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

В [обсуждении MCP на GitHub](https://github.com/modelcontextprotocol/modelcontextprotocol/discussions/2036) разбирается ситуация, когда инструменты со всех подключённых серверов могут попасть в один и тот же API-вызов.

Пагинация работает похожим образом. Сервер может отдавать `tools/list` порциями, что потенциально уменьшает объём протокольного обмена. Но если клиент собирает все страницы, а потом отправляет модели все схемы, контекстная проблема остаётся.

Я бы оставлял:

- инструменты для текущего рабочего процесса;
- серверы, к которым обращаешься регулярно;
- остальные подключения в выключенном или отложенном состоянии.

В MCP Connector, или mcp коннекторе, можно включать, отключать и откладывать загрузку отдельных инструментов. В `mcptoon` похожая идея достигается иначе: каталог хранится отдельно, а модели показывается компактное представление.

Проверяй не только число серверов. Смотри на фактический набор инструментов, который попадает в запрос модели.

## Сколько токенов можно убрать компактным MCP-клиентом?

я рассматриваю benchmark самого `mcptoon`: описание 255 инструментов занимает 90 804 токена в обычном JSON, 6 174 токена в режиме `--slim` и 117 токенов в режиме `--compact`. README проекта заявляет сокращение до 99,9% для `--compact`. Это замер `mcptoon`, а не независимая гарантия для любой модели и задачи.

Сравнение выглядит так:

| Сценарий | Формат | Токены для 255 инструментов |
|---|---|---:|
| Обычный MCP discovery | JSON | 90 804 |
| `mcptoon manifest --slim` | SLIM | 6 174 |
| `mcptoon manifest --compact` | Только имена | 117 |

Для расчёта использовался `tiktoken` `cl100k_base`. Поэтому цифры нельзя переносить на любую модель и любой токенизатор без новой проверки.

Репозиторий отдельно приводит заявленную экономию:

- `--slim` сокращает объём на 93%;
- README проекта заявляет для `--compact` сокращение до 99,9%.

Я бы читал эти числа как benchmark конкретного проекта. Они показывают разницу между полной схемой и компактным представлением на одном наборе из 255 инструментов. Они не отвечают на другие вопросы:

- сколько будет стоить вся задача;
- сколько времени займёт выполнение;
- сколько повторных вызовов сделает модель;
- не ошибётся ли модель при выборе параметров.

Если слишком короткое описание приведёт к повторному вызову, часть экономии исчезнет. Поэтому сначала измеряй discovery, затем проверяй сам рабочий сценарий.

После раздела с числовым сравнением самое время перейти к практике. На практикуме для специалистов и фрилансеров и в практикуме Мастер я показываю руками, как держать инструменты отдельно, давать агенту короткие инструкции и проверять результат командами, а не верить фразе «готово».

## Как настроить компактный MCP-клиент без программирования?

эта mcp настройка начинается с установки `mcptoon`, затем добавь локальный MCP-сервер командой `mcptoon add`, проверь список через `list` и `manifest`, а после этого вызови инструмент с компактным результатом. Для `mcptoon` нужен Python, а Node.js и `npx` понадобятся только выбранному stdio-серверу; писать MCP-сервер самостоятельно не требуется.

![Собака с поднятой лапой стоит рядом с карточками команд установки mcptoon.](https://s3.regru.cloud/crossmark/statejnik/images/guides/mcp-sokratit-rashod-tokenov-cherez-kompaktnyj-klient/kadr-2.webp)

Открой терминал и выполни команду.

   ```bash
   pip install mcptoon
   ```

После установки проверь, что команда доступна:

   ```bash
   mcptoon --help
   ```

В примере используется сервер `fetch`, который запускается через `npx`.

   ```bash
   mcptoon add fetch --stdio npx -y @modelcontextprotocol/server-fetch
   ```

`mcptoon` сохранит сервер в собственном конфиге. Для этого шага нужны Node.js и доступная команда `npx`.

Убедись, что добавленный сервер виден клиенту.

   ```bash
   mcptoon list
   ```

Если список пустой или команда завершается ошибкой, не переходи к вызову. Сначала проверь путь к Node.js, расположение конфига и вывод `doctor`.

Режим `--compact` подходит для первичного поиска.

   ```bash
   mcptoon manifest --compact
   ```

Модель получает короткий каталог имён без полных схем параметров. Это самый маленький из трёх режимов.

Переключись на `--slim`, когда нужно понять параметры инструмента.

   ```bash
   mcptoon manifest --slim
   ```

В этом режиме остаются параметры, но описание компактнее обычного JSON. Его используй перед выбором аргументов, если одного имени недостаточно.

Перед вызовом посмотри конкретный инструмент через `inspect`.

   ```bash
   mcptoon inspect fetch fetch
   ```

Полная схема нужна в момент, когда модель должна правильно заполнить параметры. Не держи её в постоянном каталоге без причины.

Передай URL и попроси компактный формат результата.

   ```bash
   mcptoon call fetch fetch '{"url":"https://modelcontextprotocol.io"}' --toon
   ```

`--toon` применяется и к manifest, и к результатам вызова, а `--compact` и `--slim` предназначены для discovery и сокращения описаний схем.

Агент должен уметь выполнять shell-команды и знать порядок действий.

   ' --toon\n\nНе подключай тот же MCP-сервер повторно через обычный mcpServers-конфиг.\nЕсли команда завершилась ошибкой, покажи её вывод и не сообщай, что задача выполнена." />

Для Claude Code такие инструкции можно положить в `SKILL.md` или `AGENTS.md`. Смысл инструкции простой: используй CLI через shell вместо ожидания нативного MCP-инструмента.

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

   ```bash
   mcptoon manifest --compact
   mcptoon manifest --slim
   mcptoon call fetch fetch '{"url":"https://modelcontextprotocol.io"}' --toon
   ```

Если ручной вызов работает, а агент его не запускает, проблема находится в инструкции или в доступе агента к shell.

## Почему компактный клиент не вставляется в MCP JSON?

`mcptoon` не является MCP-сервером и не подключается через поле `mcpServers`. Обычный агентский конфиг описывает серверы для нативного MCP-подключения, а `mcptoon` хранит свои серверы в `~/.mcptoon/config.json` и вызывается отдельными shell-командами.

Обычная конфигурация Claude Code может лежать на разных уровнях:

- пользовательский файл `~/.claude.json`;
- локальная конфигурация проекта;
- общий проектный файл `.mcp.json`.

Это настройки самого хоста. В них описываются MCP-серверы, которые хост подключает напрямую.

У `mcptoon` другая схема:

1. сервер добавляется через `mcptoon add`;
2. запись сохраняется в `~/.mcptoon/config.json`;
3. агент запускает `mcptoon manifest`, `inspect` или `call` через shell;
4. результат команды попадает в диалог.

> `mcptoon` - это CLI-инструмент, а не MCP-сервер. Он не подключается к JSON-конфигурации `mcpServers`. Вместо этого агент вызывает `mcptoon` через shell-команды, а схемы остаются вне контекста.
> - [Репозиторий `mcptoon`](https://github.com/activeing123/mcptoon)

Не вставляй строку `mcptoon` в `mcpServers` в надежде получить компактный режим. Так смешиваются два разных способа подключения.

Сервер может существовать только в `~/.mcptoon/config.json`, а агенту достаточно разрешения на запуск shell-команд и инструкции из `SKILL.md` или `AGENTS.md`.

Если один и тот же сервер подключён нативно и через `mcptoon`, модель может получить два набора инструментов. Удали дубликат из обычного MCP-конфига или не добавляй сервер в `mcptoon`.

## Что делать, если MCP-клиент не запускается?

сначала отдели проблему сервера от проблемы хоста. Проверь `mcptoon list`, `mcptoon doctor`, абсолютные пути к Node.js и скрипту, а на Windows запускай `npx` через `cmd /c npx`, если прямой вызов не находится. Конфиг ищи в каталоге, который читает конкретный клиент.

Начни с базовой проверки:

```bash
mcptoon list
mcptoon doctor
mcptoon manifest --toon
```

Если не работает уже `list`, проблема связана с установкой или конфигурацией клиента. Если `manifest` не видит инструмент, проверь запись сервера. Если `manifest` работает, а агент молчит, смотри инструкцию агента.

Частые причины такие:

- Windows не находит `npx`;
- NVM виден в терминале, но недоступен GUI-приложению;
- сервер добавлен не в тот конфиг;
- относительный путь работает в shell, но не работает из приложения;
- путь к Node.js или скрипту сервера указан неверно.

На Windows для запуска `npx` может понадобиться такая запись:

```bash
mcptoon add fetch --stdio cmd /c npx -y @modelcontextprotocol/server-fetch
```

Если используется NVM, приложение может не получить тот же `PATH`, что и терминал. Проверь путь к Node.js:

```bash
where node
where npx
```

Если приложение всё равно не видит Node.js, укажи абсолютный путь. Такой же подход используй для скрипта сервера:

```bash
mcptoon add my-server --stdio node C:/projects/my-server/dist/index.js
```

GUI-приложение может запускать процесс с другим рабочим каталогом. Относительный путь к Node.js или скрипту в терминале при этом работает, а из приложения ломается.

Для Windows используй прямые слеши или экранированные обратные слеши:

```text
C:/projects/my-server/dist/index.js
```

Не ищи конфиг только в папке проекта. Обычные MCP-конфиги хоста могут лежать на пользовательском или проектном уровне. `mcptoon` использует собственный путь:

```text
~/.mcptoon/config.json
```

Если после ручной проверки команды работают, но расширение или агент говорит «инструмент недоступен», это отдельный этап. Соединение сервера и передача инструмента модели могут расходиться. В одном из описанных случаев обходом стал Claude Code CLI вместо расширения VS Code.

## Что делать, если модель путает инструменты или не понимает результат?

не используй `--compact` для всех этапов подряд. Он показывает только имена и подходит для поиска. `--slim` добавляет параметры для выбора инструмента, а `--toon` сжимает структурированный результат. Слишком короткая схема может ухудшить выбор аргументов, а сжатый результат может потребовать проверки.

![Мужчина закрывает лицо ладонью перед карточками режимов compact, slim и inspect.](https://s3.regru.cloud/crossmark/statejnik/images/guides/mcp-sokratit-rashod-tokenov-cherez-kompaktnyj-klient/kadr-3.webp)

У сокращения есть цена. Динамическая загрузка уменьшает число схем в контексте, но добавляет отдельный шаг discovery: найти домен, загрузить нужный инструмент и только потом вызвать его.

В [обсуждении MCP на GitHub](https://github.com/modelcontextprotocol/modelcontextprotocol/discussions/2036) описан случай, когда языковая модель иногда забывает загрузить нужный домен.

Поэтому модель может:

- забыть нужную область;
- загрузить не тот домен;
- выбрать инструмент, который потом не использует;
- неправильно заполнить параметры по короткой схеме;
- не разобрать сжатый результат;
- сделать повторный вызов.

Используй режимы по назначению:

| Режим | Что показывает | Когда использовать |
|---|---|---|
| `--compact` | Только имена | Первичный поиск |
| `--slim` | Имена и сокращённые параметры | Выбор аргументов |
| `inspect` | Подробное описание инструмента | Проверка перед вызовом |
| `--toon` | Структурированный результат | Получение данных после вызова |

Моя рабочая последовательность такая:

1. `manifest --compact` для поиска.
2. `manifest --slim` для понимания параметров.
3. `inspect` для спорного или важного вызова.
4. `call ... --toon` для структурированного результата.
5. Повторная проверка, если модель неверно прочитала ответ.

Не считай сокращение успешным только потому, что цифра токенов стала меньше. Если модель чаще ошибается и повторяет вызов, итоговая экономия уменьшается.

У MCP нет безопасного универсального предела размера результата одного вызова. Один большой ответ может уничтожить выигрыш от компактного manifest. Для данных оставляй ограничение длины, усечение по умолчанию и полный вывод только по отдельному запросу, если такие параметры поддерживает конкретная обвязка.

## Вопросы и ответы

MCP tool передаёт модели описание команды, получает от неё `tool_use`, выполняет вызов через приложение и возвращает результат. Компактный клиент меняет не сам сервер, а способ показа его инструментов модели: вместо всех схем сразу можно отдавать имена, сокращённые параметры и отдельный результат.

`mcp tool` - отдельная команда или функция, которую MCP-сервер делает доступной модели. Выражение `mcp plugins` обычно используют для набора подключаемых возможностей, но в базовом протоколе MCP описываются tools, resources и prompts. Клиент передаёт имя, назначение и `input_schema`, затем приложение выполняет сформированный моделью `tool_use` и возвращает результат.

Если под mcp memory ты имеешь в виду сохранение данных между шагами, это отдельная задача: LLM получает в контексте описания инструментов и результаты вызовов. Если подключено много MCP-инструментов, схемы могут занять 15-30 КБ контекстного окна ещё до первого сообщения. Компактный клиент сокращает представление этих схем, но не гарантирует меньший итоговый расход всей задачи.

Сначала оставь подключения, которые нужны текущему рабочему процессу. Затем используй `manifest --compact` для поиска, `--slim` для параметров и `inspect` перед важным вызовом. Простое разделение серверов не даст экономии, если все инструменты всё равно попадут в один API-вызов.

Минимальный пример выглядит так: ```bash pip install mcptoon mcptoon add fetch --stdio npx -y @modelcontextprotocol/server-fetch mcptoon manifest --compact mcptoon manifest --slim mcptoon call fetch fetch '{"url":"https://modelcontextprotocol.io"}' --toon ```

Обычные конфиги Claude Code могут храниться на пользовательском или проектном уровне. `mcptoon` использует собственный файл `~/.mcptoon/config.json`. Добавляй серверы через `mcptoon add`, а не вручную в `mcpServers`.

Локальный MCP-сервер запускается как процесс на компьютере, в том числе через `stdio`. Для такого сценария клиент соединяется с процессом и получает его инструменты и данные. В примере `mcptoon` запускает локальный сервер через `npx`.

MCP-агент использует shell-команды, если так настроена инструкция, и обращается к `mcptoon` для поиска, проверки и вызова инструментов. Если агент подключает сервер напрямую, он может получить полный набор схем, поэтому маршрут вызова должен быть явно описан в `SKILL.md` или `AGENTS.md`.

MCP-сервисом в этой статье выступает внешний источник данных или инструмент, доступный через MCP-сервер. Оставляй только нужные сервисы и инструменты. Все подключённые серверы могут попасть в один API-вызов, поэтому само количество конфигов не показывает реальный размер контекста.

- [MCP - Anthropic](https://docs.anthropic.com/en/docs/mcp)
- [Tool use with Claude - Anthropic](https://docs.anthropic.com/en/docs/build-with-claude/tool-use)
- [MCP Connector - Anthropic](https://docs.anthropic.com/en/docs/agents-and-tools/mcp-connector)
- [Connect Claude Code to tools via MCP - Anthropic](https://docs.anthropic.com/en/docs/claude-code/mcp)
- [mcptoon - GitHub](https://github.com/activeing123/mcptoon)
- [MCP discussion #2812 - GitHub](https://github.com/modelcontextprotocol/modelcontextprotocol/discussions/2812)
- [MCP discussion #2036 - GitHub](https://github.com/modelcontextprotocol/modelcontextprotocol/discussions/2036)
- [VSCode Extension: MCP tools not exposed to AI assistant - GitHub](https://github.com/anthropics/claude-code/issues/11448)
- [MCP tool not available to model despite successful registration - GitHub](https://github.com/anthropics/claude-code/issues/27159)
- [Build an MCP client - Model Context Protocol](https://modelcontextprotocol.io/docs/develop/build-client)
- [Tool design practical approaches and trade-offs - AWS](https://aws.amazon.com/blogs/machine-learning/mcp-tool-design-practical-approaches-and-tradeoffs/)
- [Tool-space interference in the MCP era - Microsoft Research](https://www.microsoft.com/en-us/research/blog/tool-space-interference-in-the-mcp-era-designing-for-agent-compatibility-at-scale/)
- [Agent skills and tool definitions - BSwen](https://docs.bswen.com/blog/2026-03-25-agent-skills/)
