Skip to main content
Glama
minmax

qwen-cli-mcp

qwen-cli-mcp

MCP-сервер, который делегирует задачи кодирования вашему локально установленному Qwen Code CLI.

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

Родственный проект pi-cli-mcp — та же архитектура, те же принципы, за рулём qwen. Авторитетный дизайн-документ — SPEC.md.

Используйте его, когда ваш основной агент (Claude Code, Cursor, сам pi, любой MCP-клиент) должен передать работу qwen: второе мнение от другого семейства моделей, расследование, которое вы хотите держать вне основного контекстного окна, или параллельная работа.

Установка

npx -y qwen-cli-mcp         # no install
npm install -g qwen-cli-mcp # or global

Требуется Node ≥ 22 и рабочий qwen в PATH (npm i -g @qwen-code/qwen-code).

Claude Code

claude mcp add-json qwen -s user '{
  "type": "stdio",
  "command": "npx",
  "args": ["-y", "qwen-cli-mcp"],
  "timeout": 3600000
}'
claude mcp list | grep '^qwen:'    # expect: ✔ Connected

Щедрый timeout важен: реальная делегированная задача может выполняться минутами.

Любой другой MCP-клиент

{
  "mcpServers": {
    "qwen": { "command": "npx", "args": ["-y", "qwen-cli-mcp"] }
  }
}

Держите имя сервера коротким (qwen): оно становится частью имён инструментов, которые видит ваша модель.

⚠️ Режим одобрения по умолчанию — yolo. Делегирование полезно только тогда, когда делегат может действовать, поэтому этот сервер запускает qwen с полным одобрением инструментов по умолчанию — внутри cwd, от вашего имени. Сузьте его с помощью QWEN_MCP_APPROVAL_MODE, approval_mode на каждый вызов или allowed_tools. Для работы только с анализом передавайте allowlist-ы вида allowed_tools: "read,grep,ls".

Инструменты

Инструмент

Назначение

qwen

Запустить сессию. Возвращает [session: <uuid>], результат и статистику.

qwen_reply

Продолжить завершённую или прерванную сессию — включая убитую по таймауту.

qwen_models

Перечислить модели, которые qwen реально может достичь прямо сейчас (живой пробник через control plane).

qwen_send

Доставить сообщение в выполняющийся прямо сейчас ход (abort / steer / follow_up; только stream-транспорт).

qwen_running

Перечислить ходы, выполняющиеся прямо сейчас, до которых может дотянуться qwen_send.

qwen_sessions

Перечислить известные сессии, новые сверху, с их рабочими каталогами.

qwen

Аргумент

Примечания

prompt

Обязателен. Должен быть самодостаточным — qwen не видит вашу беседу.

cwd

Абсолютный путь; по умолчанию — cwd этого сервера.

model

Значение -m. По умолчанию — собственные настройки qwen; qwen_models перечисляет допустимые значения.

approval_mode

plan | default | auto-edit | auto | yolo. Серверный дефолт: см. предупреждение выше.

allowed_tools

Разрешённый список инструментов через запятую, передаётся как --allowed-tools.

effort

lowmax — усилие рассуждения. Только stream-транспорт — у qwen нет CLI-флага для этого.

system_prompt_append

Добавляется к системному промпту qwen для этого запуска.

transport

stream (по умолчанию) или print. Обычно опускайте.

timeout_ms

Время выполнения для этого запуска. Запуск, убитый по дедлайну, остаётся возобновляемым через qwen_reply.

Что возвращается

Только финальный результат qwen плюс агрегированная статистика — никогда не транскрипт, аргументы инструментов или сырой stdout:

[session: 0927adc5-a840-4b68-93ca-5ca344c9fafb]

Refactored retry() in src/http.rs; all 12 tests pass.

---
qwen: qwen3-coder-plus · 6 turns · 5 tool calls: bash×2, read×2, edit · 18k in / 310 out · 41s

Ответ — это конверт result, который qwen выдаёт в конце хода — никаких догадок по выбору ответа. Конверт ошибки (error_max_turns, error_during_execution) приводит к провалу вызова, сохраняя всё, что qwen успел сказать, так что работа остаётся возобновляемой. Поток, завершившийся без конверта результата, сообщается как сломанный, никогда не подменяется сырым выводом.

Сессии

qwen возвращает идентификатор сессии; qwen_reply возобновляет её с --resume. Беседа живёт в собственном хранилище сессий qwen, поэтому продолжения работают после перезапуска этого сервера — карта «сессия → каталог» сохраняется в ~/.local/state/qwen-mcp/sessions.json.

Одновременные ответы на одну сессию сериализуются в рамках одного серверного процесса: два процесса qwen, пишущих в один файл сессии, испортили бы его. Предостережение о межпроцессном взаимодействии: если вы запускаете два MCP-клиента против двух серверных процессов и оба отвечают на один и тот же идентификатор сессии одновременно, ничто их не сериализует. На практике сессией владеет один клиент; для жёсткой гарантии держите один серверный процесс.

Транспорты

stream (по умолчанию)

print

команда

--input-format stream-json --output-format stream-json

-p --output-format stream-json

процесс

остаётся живым, говорит на control plane через stdin

один процесс на ход, завершается по окончании

доставка в середине

qwen_send (прерывание / управление / follow_up)

невозможно: qwen ничего не читает во время работы

дедлайн / отмена

сначала собственный interrupt qwen, сигналы только как запасной вариант

SIGTERM, затем SIGKILL

stream — дефолт, потому что он надмножество: тот же поток сообщений, плюс выполняющийся ход остаётся доступным, а прерванный завершается в протоколе, сохраняя хвост потока. Выбирайте на каждый вызов через transport или задайте дефолт через QWEN_MCP_TRANSPORT=print.

Этот сервер никогда ничего не отправляет в qwen по своей инициативе. Ни автоматического завершения перед дедлайном, ни внедрённых инструкций: qwen_send срабатывает только когда вызывающий вызывает его.

Окружение

Переменная

Значение по умолчанию

Смысл

QWEN_MCP_BIN

qwen

Путь к бинарнику qwen.

QWEN_MCP_APPROVAL_MODE

yolo

Режим одобрения по умолчанию для каждого вызова. См. предупреждение выше.

QWEN_MCP_MODEL

не задано

Модель по умолчанию для каждого вызова.

QWEN_MCP_TRANSPORT

stream

Транспорт по умолчанию: stream или print.

QWEN_MCP_TIMEOUT_MS

1800000

Время выполнения по умолчанию; timeout_ms переопределяет его на вызов.

QWEN_MCP_MAX_TIMEOUT_MS

86400000

Потолок того, что может запросить timeout_ms.

QWEN_MCP_MAX_CONCURRENT

4

Одновременные процессы qwen.

QWEN_MCP_MAX_OUTPUT

не задано

Ограничение на ответ. Не задано — значит без усечения.

QWEN_MCP_STDERR_LIMIT

1500

Хвост stderr, включаемый в ответ.

QWEN_MCP_STDERR_KEEP_EVENTS

не задано

1 пересылает stderr дословно, включая строки протокола.

QWEN_MCP_MAX_CAPTURE

16000000

Защита буфера чтения от вышедшего из-под контроля потока.

QWEN_MCP_MAX_LINE

8000000

Самая длинная строка сообщения от qwen, после которой она отбрасывается.

QWEN_MCP_MAX_FRAME

8000000

Самый длинный кадр JSON-RPC от клиента.

QWEN_MCP_MAX_SESSIONS

200

Запомненные сессии, прежде чем самая старая будет отброшена.

QWEN_MCP_KILL_GRACE_MS

5000

Период ожидания SIGTERM → SIGKILL.

QWEN_MCP_INTERRUPT_GRACE_MS

5000

Сколько времени получает interrupt до сигналов (только stream).

QWEN_MCP_INIT_TIMEOUT_MS

15000

Таймаут рукопожатия инициализации (только stream).

QWEN_MCP_MODELS_TIMEOUT_MS

60000

Бюджет на весь запуск пробы qwen_models.

QWEN_MCP_STATE

~/.local/state/qwen-mcp/sessions.json

Карта «сессия → cwd».

QWEN_MCP_WRAP

не задано

Префикс команды, например, обёртка песочницы вокруг qwen.

Дизайн

  • Процесс на вызов. Собственные файлы сессий qwen — источник истины, именно поэтому продолжения переживают перезапуск этого сервера.

  • Контракт на проводе — собственный протокол stream-json qwen, говорим напрямую — сообщения с разделителями строк в stdout, управляющие запросы и пользовательские ходы в stdin. Его формы заимствованы из @qwen-code/sdk через import type, поэтому изменение в апстриме ломает сборку, а не сервер. Ноль зависимостей во время выполнения.

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

  • Ни один процесс не переживает свой запрос. Таймауты, отмены и завершение работы вычищают всё дерево процессов qwen; ничего не остаётся ни на одном пути.

Разработка

TypeScript (нативный tsc), Biome, Vitest. Тесты гоняют реальный бинарник сервера через stdio против фикстуры, говорящей на протоколе qwen; живые тесты против установленного qwen — опциональны.

npm run hooks          # once per clone: git hooks from .githooks/
npm run build          # tsc -> dist/
npm test               # unit + type tests, no API access, no tokens
npm run test:live      # 4 live tests against the real qwen binary (spends tokens)
npm run check          # format + types + tests
npm run fix            # biome --write

Лицензия

MIT

-
license - not tested
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Related MCP Connectors

  • MCP server for generating rough-draft project plans from natural-language prompts.

  • MCP Server for Slima - AI Writing IDE for Novel Authors with AI Beta Reader.

  • MCP server for Clipkit — gives AI agents a video toolbox via the Clipkit schema.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/minmax/qwen-cli-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server