Подключение Qwen Code к инструментам через MCP
Qwen Code может подключаться к внешним инструментам и источникам данных через Model Context Protocol (MCP) . MCP-серверы предоставляют Qwen Code доступ к вашим инструментам, базам данных и API.
Что можно делать с помощью MCP
Подключив MCP-серверы, вы можете поручить Qwen Code:
- Работать с файлами и репозиториями (читать, искать, записывать — в зависимости от включенных инструментов)
- Выполнять запросы к базам данных (проверка схемы, запросы, формирование отчетов)
- Интегрировать внутренние сервисы (оборачивать ваши API в MCP-инструменты)
- Автоматизировать рабочие процессы (повторяющиеся задачи, доступные как инструменты/промпты)
Если вы ищете «одну команду для начала работы», перейдите к разделу Быстрый старт.
Быстрый старт
Qwen Code загружает MCP-серверы из раздела mcpServers в вашем settings.json. Настроить серверы можно двумя способами:
- Путем прямого редактирования
settings.json - С помощью команд
qwen mcp(см. Справочник CLI)
Добавление первого сервера
- Добавьте сервер (пример: удаленный HTTP MCP-сервер):
qwen mcp add --transport http my-server http://localhost:3000/mcp- Запустите Qwen Code и откройте диалог управления MCP для просмотра и настройки серверов:
qwenЗатем введите:
/mcp- Если Qwen Code уже был запущен до добавления сервера, перезапустите его в том же проекте. Затем попросите модель использовать инструменты из этого сервера.
Где хранится конфигурация (области видимости)
Большинству пользователей достаточно только двух областей видимости:
- Область видимости пользователя (по умолчанию):
~/.qwen/settings.jsonдля всех проектов на вашем компьютере - Область видимости проекта:
.qwen/settings.jsonв корне вашего проекта
Запись в область видимости пользователя:
qwen mcp add --scope user --transport http my-server http://localhost:3000/mcpИнформацию о расширенных уровнях конфигурации (системные настройки по умолчанию и правила приоритета) см. в разделе Настройки.
Настройка серверов
Выбор транспорта
| Транспорт | Когда использовать | Поле(я) JSON |
|---|---|---|
http | Рекомендуется для удаленных сервисов; хорошо подходит для облачных MCP-серверов | httpUrl (+ опционально headers) |
sse | Устаревшие серверы, поддерживающие только Server-Sent Events | url (+ опционально headers) |
stdio | Локальный процесс (скрипты, CLI, Docker) на вашем компьютере | command, args (+ опционально cwd, env) |
Если сервер поддерживает оба варианта, отдавайте предпочтение HTTP, а не SSE.
Настройка через settings.json или qwen mcp add
Оба подхода создают одинаковые записи mcpServers в вашем settings.json — используйте тот, который вам удобнее.
Stdio-сервер (локальный процесс)
JSON (.qwen/settings.json):
{
"mcpServers": {
"pythonTools": {
"command": "python",
"args": ["-m", "my_mcp_server", "--port", "8080"],
"cwd": "./mcp-servers/python",
"env": {
"DATABASE_URL": "$DB_CONNECTION_STRING",
"API_KEY": "${EXTERNAL_API_KEY}"
},
"timeout": 15000
}
}
}CLI (по умолчанию записывает в область видимости пользователя):
qwen mcp add pythonTools -e DATABASE_URL=$DB_CONNECTION_STRING -e API_KEY=$EXTERNAL_API_KEY \
--timeout 15000 python -m my_mcp_server --port 8080HTTP-сервер (удаленный streamable HTTP)
JSON:
{
"mcpServers": {
"httpServerWithAuth": {
"httpUrl": "http://localhost:3000/mcp",
"headers": {
"Authorization": "Bearer your-api-token"
},
"timeout": 5000
}
}
}CLI:
qwen mcp add --transport http httpServerWithAuth http://localhost:3000/mcp \
--header "Authorization: Bearer your-api-token" --timeout 5000SSE-сервер (удаленный Server-Sent Events)
JSON:
{
"mcpServers": {
"sseServer": {
"url": "http://localhost:8080/sse",
"timeout": 30000
}
}
}CLI:
qwen mcp add --transport sse sseServer http://localhost:8080/sse --timeout 30000Использование промптов и ресурсов MCP
Помимо инструментов, Qwen Code обнаруживает и предоставляет доступ к двум другим примитивам MCP.
Промпты (слэш-команды)
Любой промпт, который сервер анонсирует через prompts/list, становится исполняемой слэш-командой. После обнаружения введите /, и вы увидите промпт в списке (с меткой MCP: <server>); выполните его как любую другую команду:
/my_prompt --arg1="value" --arg2="value"
# positional form also works:
/my_prompt "value" "value"
# show the prompt's arguments:
/my_prompt helpСообщения промпта отправляются модели, которая затем выполняет соответствующие действия.
Обнаружение нестрогое к заявленной возможности
prompts: некоторые серверы реализуютprompts/list, но опускаютpromptsв своих возможностяхinitialize. Qwen Code в любом случае пытается выполнитьprompts/list, поэтому эти промпты все равно отображаются. Сервер, у которого действительно нет промптов, просто отвечаетMethod not found, что игнорируется.
Ресурсы
Ресурсы, которые сервер анонсирует через resources/list, обнаруживаются для каждого сервера. Откройте диалог управления с помощью /mcp и выберите сервер, чтобы увидеть количество его Resources наряду с инструментами и промптами. Выберите View resources, чтобы просмотреть URI ресурсов сервера; при выборе одного из них отображаются его описание и MIME-тип, а также точная ссылка @server:uri для вставки в сообщение. Как и в случае с промптами, возможность resources не обязательно должна быть заявлена.
Внедрите содержимое ресурса в ваше сообщение с помощью синтаксиса @server:uri — введите @, затем имя сервера, двоеточие и URI ресурса:
summarize @myserver:file:///docs/spec.md and list the open questionsВвод @myserver: показывает список автозаполнения ресурсов этого сервера; продолжайте ввод для фильтрации, сопоставляя (без учета регистра) либо URI ресурса, либо его понятное имя/название. Вам не обязательно знать URI наизусть — до того как вы дойдете до двоеточия, ввод части имени сервера также предложит подходящие серверы, предоставляющие ресурсы, чтобы вы могли выбрать один и сразу перейти к списку его ресурсов. При отправке считывается указанный ресурс, и его содержимое добавляется к вашему сообщению (текст инлайн, бинарные данные как вложения); ссылка @server:uri сохраняется в промпте, чтобы модель знала, на что она смотрит. Префикс server должен совпадать с настроенным MCP-сервером — в противном случае токен обрабатывается как обычный путь к файлу, поэтому существующие ссылки @path/to/file остаются без изменений. Чтение ресурсов отключено в ненадежных папках.
Прогрессивная доступность и таймауты обнаружения
Qwen Code обнаруживает MCP-серверы в фоновом режиме после того, как пользовательский интерфейс уже становится интерактивным. Вы видите первый промпт CLI через несколько сотен миллисекунд, даже если одному из ваших MCP-серверов требуется несколько секунд (или он вообще не отвечает), а список инструментов модели обновляется примерно в течение одного кадра (~16 мс) после завершения каждым сервером рукопожатия обнаружения.
- Интерактивный режим: пользовательский интерфейс появляется мгновенно; индикатор статуса MCP в правом нижнем углу показывает
N/M MCP servers ready, пока обнаружение находится в процессе. Отправка промпта до завершения работы MCP просто означает, что модель видит инструменты, готовые в данный момент; последующие промпты видят больше инструментов по мере подключения серверов. - Неинтерактивный режим (
--prompt, stream-json, ACP): CLI по-прежнему ожидает завершения обнаружения MCP перед отправкой первого промпта, поэтому скриптовые/канальные вызовы видят тот же полный набор инструментов, что и при устаревшем синхронном поведении.
discoveryTimeoutMs для каждого сервера
Каждый MCP-сервер получает таймаут только для обнаружения, который ограничивает время, разрешенное для начального рукопожатия (connect + tools/list + prompts/list + resources/list). Значения по умолчанию:
- stdio-серверы: 30 с
- удаленные HTTP / SSE-серверы: 5 с (сетевые риски выше)
Переопределяйте для каждого сервера при необходимости:
{
"mcpServers": {
"slow-stdio": {
"command": "node",
"args": ["./slow-server.js"],
"discoveryTimeoutMs": 60000,
},
"flaky-remote": {
"httpUrl": "https://example.com/mcp",
"discoveryTimeoutMs": 10000,
},
},
}Существующее поле timeout — это таймаут вызова инструмента (используется для каждого запроса tools/call, по умолчанию 10 минут), и на него не влияет discoveryTimeoutMs — длительный вызов инструмента не является патологией запуска.
Откат прогрессивного MCP
Если вам нужно старое синхронное поведение (CLI ожидает каждый MCP-сервер перед отображением любого UI), установите QWEN_CODE_LEGACY_MCP_BLOCKING=1 в вашем окружении. Это сохранено как аварийный выход как минимум на один релиз.
Безопасность и управление
Доверие (пропуск подтверждений)
- Доверие серверу (
trust: true): обходит запросы подтверждения для этого сервера (используйте с осторожностью).
Аутентификация OAuth
Qwen Code поддерживает аутентификацию OAuth 2.0 для MCP-серверов. Это полезно при доступе к удаленным серверам, требующим аутентификации.
Базовое использование
При добавлении MCP-сервера с учетными данными OAuth Qwen Code автоматически обработает процесс аутентификации:
qwen mcp add --transport sse oauth-server https://api.example.com/sse/ \
--oauth-client-id your-client-id \
--oauth-redirect-uri https://your-server.com/oauth/callback \
--oauth-authorization-url https://provider.example.com/authorize \
--oauth-token-url https://provider.example.com/tokenВажно: настройка Redirect URI
Процесс OAuth требует redirect URI, куда провайдер авторизации отправляет код аутентификации.
-
Локальная разработка: По умолчанию Qwen Code использует
http://localhost:7777/oauth/callback. Это работает при запуске Qwen Code на вашем локальном компьютере с локальным браузером. -
Удаленные/облачные развертывания: При запуске Qwen Code на удаленных серверах, облачных IDE или веб-терминалах перенаправление по умолчанию на localhost НЕ будет работать. Вы ДОЛЖНЫ настроить
--oauth-redirect-uriтак, чтобы он указывал на общедоступный URL, который может принимать OAuth-callback.
Пример для удаленных серверов:
qwen mcp add --transport sse remote-server https://api.example.com/sse/ \
--oauth-redirect-uri https://your-remote-server.example.com/oauth/callbackРучная настройка через settings.json
Вы также можете настроить OAuth, отредактировав settings.json напрямую:
{
"mcpServers": {
"oauthServer": {
"url": "https://api.example.com/sse/",
"oauth": {
"enabled": true,
"clientId": "your-client-id",
"clientSecret": "your-client-secret",
"authorizationUrl": "https://provider.example.com/authorize",
"tokenUrl": "https://provider.example.com/token",
"redirectUri": "https://your-server.com/oauth/callback",
"scopes": ["read", "write"]
}
}
}
}Свойства конфигурации OAuth:
| Свойство | Описание |
|---|---|
enabled | Включить OAuth для этого сервера (boolean) |
clientId | Идентификатор клиента OAuth (string, опционально при динамической регистрации) |
clientSecret | Секрет клиента OAuth (string, опционально для публичных клиентов) |
authorizationUrl | Конечная точка авторизации OAuth (string, автообнаружение, если не указано) |
tokenUrl | Конечная точка токена OAuth (string, автообнаружение, если не указано) |
scopes | Требуемые области действия OAuth (массив строк) |
redirectUri | Пользовательский redirect URI (string). Критично для удаленных развертываний. По умолчанию http://localhost:7777/oauth/callback |
tokenParamName | Имя параметра запроса для токенов в SSE URL (string) |
audiences | Аудитории, для которых действителен токен (массив строк) |
Управление токенами
Токены OAuth автоматически:
- Сохраняются в
~/.qwen/mcp-oauth-tokens.json(в виде открытого текста, режим 0600) по умолчанию. Если установленоQWEN_CODE_FORCE_ENCRYPTED_FILE_STORAGE=true, Qwen Code использует хранилище на основе связки ключей (keychain), где это доступно, или~/.qwen/mcp-oauth-tokens-v2.jsonс шифрованием AES-256-GCM. - Обновляются по истечении срока действия (если доступны токены обновления)
- Проверяются перед каждой попыткой подключения
[!WARNING] By default, OAuth tokens are stored unencrypted on disk. On shared or multi-user machines, set
QWEN_CODE_FORCE_ENCRYPTED_FILE_STORAGE=trueto protect credentials.
Используйте диалог /mcp в Qwen Code для проверки MCP-серверов и интерактивного управления аутентификацией.
Фильтрация инструментов (разрешение/запрет инструментов для каждого сервера)
Используйте includeTools / excludeTools для ограничения инструментов, предоставляемых сервером (с точки зрения Qwen Code).
Пример: включить только несколько инструментов:
{
"mcpServers": {
"filteredServer": {
"command": "python",
"args": ["-m", "my_mcp_server"],
"includeTools": ["safe_tool", "file_reader", "data_processor"],
"timeout": 30000
}
}
}Глобальные списки разрешений/запретов
Объект mcp в вашем settings.json определяет глобальные правила для всех MCP-серверов:
mcp.allowed: список разрешенных имен MCP-серверов (ключи вmcpServers)mcp.excluded: список запрещенных имен MCP-серверов
Оба списка поддерживают glob-шаблоны: * соответствует любой последовательности символов, а ? — одному символу (например, "*puppeteer*" соответствует каждому серверу, имя которого содержит puppeteer). Записи без glob-символов сопоставляются точно. Если сервер соответствует обоим спискам, mcp.excluded имеет приоритет.
Пример:
{
"mcp": {
"allowed": ["my-trusted-server", "*-internal"],
"excluded": ["experimental-server"]
}
}Устранение неполадок
- Сервер показывает “Disconnected” в
qwen mcp list: убедитесь, что URL/команда верны, затем увеличьтеtimeout. - Stdio-сервер не запускается: используйте абсолютный путь
commandи перепроверьтеcwd/env. - Переменные окружения в JSON не разрешаются: убедитесь, что они существуют в окружении, где запускается Qwen Code (окружения оболочки и GUI-приложения могут отличаться).
Справочник
Структура settings.json
Конфигурация для конкретного сервера (mcpServers)
Добавьте объект mcpServers в ваш файл settings.json:
// ... file contains other config objects
{
"mcpServers": {
"serverName": {
"command": "path/to/server",
"args": ["--arg1", "value1"],
"env": {
"API_KEY": "$MY_API_TOKEN"
},
"cwd": "./server-directory",
"timeout": 30000,
"trust": false
}
}
}Свойства конфигурации:
Обязательные (одно из следующего):
| Свойство | Описание |
|---|---|
command | Путь к исполняемому файлу для транспорта Stdio |
url | URL конечной точки SSE (например, "http://localhost:8080/sse") |
httpUrl | URL конечной точки потоковой передачи HTTP |
Опциональные:
| Свойство | Тип/По умолчанию | Описание |
|---|---|---|
args | array | Аргументы командной строки для транспорта Stdio |
headers | object | Пользовательские HTTP-заголовки при использовании url или httpUrl |
env | object | Переменные окружения для процесса сервера. Значения могут ссылаться на переменные окружения с помощью синтаксиса $VAR_NAME или ${VAR_NAME} |
cwd | string | Рабочий каталог для транспорта Stdio |
timeout | number (по умолчанию: 600 000) | Таймаут запроса в миллисекундах (по умолчанию: 600 000 мс = 10 минут) |
trust | boolean (по умолчанию: false) | Если true, обходит все подтверждения вызова инструментов для этого сервера (по умолчанию: false) |
includeTools | array | Список имен инструментов для включения из этого MCP-сервера. Если указано, только перечисленные здесь инструменты будут доступны с этого сервера (поведение белого списка). Если не указано, по умолчанию включены все инструменты сервера. |
excludeTools | array | Список имен инструментов для исключения из этого MCP-сервера. Перечисленные здесь инструменты не будут доступны модели, даже если они предоставляются сервером. Примечание: excludeTools имеет приоритет над includeTools — если инструмент есть в обоих списках, он будет исключен. |
targetAudience | string | OAuth Client ID, добавленный в белый список защищенного IAP приложения, к которому вы пытаетесь получить доступ. Используется с authProviderType: 'service_account_impersonation'. |
targetServiceAccount | string | Адрес электронной почты учетной записи службы Google Cloud для имперсонации. Используется с authProviderType: 'service_account_impersonation'. |
Управление MCP-серверами с помощью qwen mcp
Вы всегда можете настроить MCP-серверы путем ручного редактирования settings.json, но CLI обычно быстрее.
Добавление сервера (qwen mcp add)
qwen mcp add [options] <name> <commandOrUrl> [args...]| Аргумент/Опция | Описание | По умолчанию | Пример |
|---|---|---|---|
<name> | Уникальное имя сервера. | — | example-server |
<commandOrUrl> | Команда для выполнения (для stdio) или URL (для http/sse). | — | /usr/bin/python или http://localhost:8 |
[args...] | Опциональные аргументы для команды stdio. | — | --port 5000 |
-s, --scope | Область видимости конфигурации (user или project). | user | -s user |
-t, --transport | Тип транспорта (stdio, sse, http). | stdio | -t sse |
-e, --env | Задать переменные окружения. | — | -e KEY=value |
-H, --header | Задать HTTP-заголовки для транспортов SSE и HTTP. | — | -H "X-Api-Key: abc123" |
--timeout | Задать таймаут подключения в миллисекундах. | — | --timeout 30000 |
--trust | Доверять серверу (обходить все запросы подтверждения вызова инструментов). | — (false) | --trust |
--description | Задать описание для сервера. | — | --description "Local tools" |
--include-tools | Разделенный запятыми список инструментов для включения. | все инструменты включены | --include-tools mytool,othertool |
--exclude-tools | Разделенный запятыми список инструментов для исключения. | нет | --exclude-tools mytool |
--oauth-client-id | OAuth client ID для аутентификации MCP-сервера. | — | --oauth-client-id your-client-id |
--oauth-client-secret | OAuth client secret для аутентификации MCP-сервера. | — | --oauth-client-secret your-client-secret |
--oauth-redirect-uri | OAuth redirect URI для callback аутентификации. | http://localhost:7777/oauth/callback | --oauth-redirect-uri https://your-server.com/oauth/callback |
--oauth-authorization-url | URL авторизации OAuth. | — | --oauth-authorization-url https://provider.example.com/authorize |
--oauth-token-url | URL токена OAuth. | — | --oauth-token-url https://provider.example.com/token |
--oauth-scopes | Области действия OAuth (через запятую). | — | --oauth-scopes scope1,scope2 |
Флаги
--oauth-*применяются только к--transport sseи--transport http. Их комбинация с--transport stdioотклоняется.
Удаление сервера (qwen mcp remove)
qwen mcp remove <name>