Проблема, которая сводит с ума: MCP-серверы жрут контекст как голодные свиньи
Вы настраиваете локальную модель через KoboldCpp с MCP или LM Studio MCP. Подключаете инструменты: файловую систему, поиск в интернете, базу данных. И тут начинается кошмар.
Каждый MCP-сервер присылает в контекст десятки тысяч токенов описаний своих инструментов. Файловый сервер — 15K токенов. Поисковый — 12K. SQL-клиент — еще 8K. В сумме легко набирается 40-50K токенов, которые просто лежат мертвым грузом в каждом промпте. А ведь это 80% вашего контекста для 128K моделей!
Типичная ошибка: загружать все инструменты сразу. Модель получает 40K токенов мусора и не может нормально думать. Результат — деградация качества ответов, потеря логики, бессмысленные повторения.
Anthropic знала ответ, но держала его при себе
В документации Claude API есть паттерн Advanced Tool Use. Суть проста: не грузи все инструменты сразу. Дай модели сначала понять задачу, а потом спроси: "Какие инструменты тебе нужны?" И только тогда загрузи их описания.
Звучит логично, правда? Но Anthropic не удосужилась сделать это для MCP. Их Model Context Protocol отлично работает в теории, но на практике превращается в машину по сжиганию токенов.
Локальные модели страдают сильнее всех. У них и так ограниченный контекст, а тут еще 40K токенов на инструменты, которые не используются в 90% запросов.
mcpx: баш-скрипт, который решает проблему за 5 минут
Встречайте mcpx — утилиту, которая реализует паттерн Advanced Tool Use для любых локальных моделей. Работает с любым MCP-хостом: KoboldCpp, LM Studio, Ollama, даже с самописными решениями.
1 Установка: проще, чем кажется
Клонируем репозиторий и ставим зависимости:
git clone https://github.com/yourusername/mcpx.git
cd mcpx
pip install -r requirements.txt
chmod +x mcpx.sh
Никаких сложных зависимостей. Только стандартный Python и пара библиотек для работы с JSON.
2 Настройка MCP-серверов
Создаем конфигурационный файл servers.json:
{
"servers": [
{
"name": "filesystem",
"command": "npx",
"args": ["@modelcontextprotocol/server-filesystem", "/home/user/documents"]
},
{
"name": "duckduckgo",
"command": "npx",
"args": ["@modelcontextprotocol/server-duckduckgo-search"]
},
{
"name": "sqlite",
"command": "python",
"args": ["sqlite_server.py", "database.db"]
}
]
}
Здесь мы определяем три сервера, но они не запускаются сразу. mcpx будет стартовать их только по требованию.
3 Запуск прокси
Запускаем mcpx как прокси для вашего MCP-хоста:
./mcpx.sh --port 3000 --config servers.json --model-endpoint http://localhost:1234
Теперь вместо прямого подключения к MCP-серверам, ваш клиент (KoboldCpp, LM Studio) подключается к mcpx на порту 3000.
Как это работает на практике: магия ленивой загрузки
Представьте сценарий: вы просите модель "Найди информацию о последних новостях в IT".
| Без mcpx | С mcpx |
|---|---|
| Загружаются все 3 сервера (40K токенов) | Загружается только список доступных серверов (500 токенов) |
| Модель видит инструменты для файлов, поиска, SQL | Модель видит только названия: "filesystem", "duckduckgo", "sqlite" |
| Контекст переполнен, качество ответов падает | Контекст чист, модель думает только о задаче |
Модель анализирует задачу и говорит: "Мне нужен поисковой сервер". mcpx получает этот запрос, запускает только duckduckgo-сервер, загружает его инструменты (12K токенов вместо 40K) и передает модели.
Экономия: 28K токенов на одном запросе. За день работы с автоматизированным агентом это сотни тысяч сэкономленных токенов.
Бонус: интеллектуальное кэширование инструментов
mcpx не просто лениво загружает инструменты. Он их кэширует. Если модель второй раз запросит тот же сервер, инструменты берутся из кэша, а не перезагружаются.
Но есть нюанс: некоторые MCP-серверы динамически меняют список инструментов в зависимости от состояния. Например, файловый сервер может показывать разные инструменты для разных директорий.
mcpx умеет обнаруживать такие серверы и отключать для них кэширование. Файловый сервер всегда загружается свежим, поисковый — кэшируется.
Сравнение с альтернативами: почему не подходят другие решения
Вы могли слышать про mcp-context-proxy. Он решает похожую проблему, но по-другому. Вместо ленивой загрузки он пытается обрезать описания инструментов, удаляя "лишние" детали.
Проблема в том, что он часто удаляет важные части. Модель получает урезанное описание, не понимает, как правильно использовать инструмент, и выдает ошибки.
| Решение | Принцип работы | Проблемы |
|---|---|---|
| mcp-context-proxy | Обрезает описания инструментов | Теряет важную информацию, вызывает ошибки |
| Ручная фильтрация | Самостоятельно выбираете инструменты | Трудоемко, требует перезапуска при смене задачи |
| mcpx | Ленивая загрузка по требованию | Требует настройки конфигурации |
Для кого mcpx станет спасением
- Разработчики локальных агентов, которые используют небольшие модели вроде AgentCPM-Explore с ограниченным контекстом
- Исследователи, тестирующие разные комбинации инструментов и не желающие каждый раз перезагружать 40K токенов
- Пользователи KoboldCpp и LM Studio, которые устали от деградации качества при подключении MCP-серверов
- Те, кто работает с длинными документами через файловые MCP-серверы и не может позволить себе тратить контекст на описания инструментов
Ограничения, о которых нужно знать заранее
mcpx не волшебная таблетка. Есть нюансы:
- Задержка при первом запросе: запуск MCP-сервера занимает 1-3 секунды. Последующие запросы к тому же серверу быстрые
- Требует настройки: нужно правильно описать все серверы в конфигурации
- Несовместимость с некоторыми клиентами: если ваш MCP-клиент ожидает сразу все инструменты, а не запрашивает их по мере необходимости, mcpx не поможет
Что дальше: будущее умных инструментов для локальных LLM
mcpx — только первый шаг. Следующая версия будет анализировать не только какие инструменты нужны, но и как их использовать наиболее эффективно.
Представьте: модель запрашивает поиск в интернете. mcpx видит, что предыдущие 5 поисковых запросов возвращали слишком много результатов. Он автоматически добавляет в инструмент параметр "max_results: 5", экономя еще несколько тысяч токенов на выводе.
Или другой сценарий: вы работаете с GLM-4.7 Flash через MCP. Модель часто ошибается в формате вызова инструментов. mcpx учится на этих ошибках и автоматически корректирует запросы, прежде чем отправить их серверу.
Пока Anthropic размышляет, как улучшить MCP для корпоративных клиентов, сообщество open-source уже решает реальные проблемы. mcpx — один из таких решений. Не идеальный, но работающий здесь и сейчас.
Попробуйте. Ваши локальные модели скажут спасибо.