Каждый разговор с MCP-серверами сжигает токены на синтаксис, а не на данные. Список инструментов с пяти серверов — это примерно 10 000 токенов JSON. Вызовы 20 инструментов добавляют ещё 40 000–70 000 токенов обёртки. На окне в 128K контекста уходит 30–55% — и всё на скобки и кавычки.
mcptoon — это CLI-клиент, который подключается к любому MCP-серверу (stdio или HTTP) и выдаёт TOON (Token-Optimized Object Notation) вместо JSON. Для поиска 96 инструментов JSON требует ~2 000 токенов, TOON — ~60. Экономия 97%. Для структурированных данных — 56%, для сырого HTML — 10%.
Инструмент написан на чистом Python, без зависимостей, весит 50KB. Работает с любым агентом, который умеет запускать shell-команды: Claude Code, Codex, OpenCode, Cursor, CatPaw. Платформы — Windows, macOS, Linux.
Настроил серверы один раз в ~/.mcptoon/config.json — и все агенты делят одни и те же инструменты. Флаг --toon сокращает токены на 40–60%, --compact оставляет только имена инструментов (экономия 97%), --json возвращает стандартный JSON для скриптов. Переменная MCPTOON_AGENT_TYPE=claude автоматически включает --toon.
В версии 0.2.0 добавили несколько полезных вещей. --stdin передаёт большие аргументы через пайп — это обходит ограничения командной строки Windows (32 767 символов). Команда doctor за один вызов проверяет конфиг, версию Python и доступность серверов. discover показывает здоровье всех серверов. Есть защита от tool poisoning: mcptoon обнаруживает паттерны вроде «ignore previous instructions» и скрытые теги в ответах инструментов, блокируя инъекции. Если опечатался в имени инструмента, fuzzy match предложит правильный вариант. А кросс-агентный экспорт умеет выгружать манифест в форматах OpenAI function calling, OpenAPI 3.0 и MCP tools/list.
Опасные операции (delete, drop, purge, wipe, kill) блокируются, пока не передашь --destructive. Статистика использования хранится локально и никуда не отправляется. Телеметрии нет, ключи API не сохраняются. Код — ~1 700 строк без единой сторонней библиотеки, 98 тестов. Лицензия Apache 2.0. Проект независим и не связан с Anthropic.