Documentation menu
Source

Configuration

For most setups, open Configure in install.sh. It stores shared settings in ~/.qwen-mm-plugins/config as KEY=VALUE lines with mode 600. Qwen-MM-Plugins components launched by any harness read that file. A process environment variable overrides the same key in the file.

Use QWEN_MM_CONFIG=/path/to/file to select another file, or QWEN_MM_CONFIG_DIR=/path/to/dir to change the directory containing the default config file. These bootstrap variables must be set in the process environment because they determine which file is read.

Run bash install.sh configure for the interactive menu, or pass one or more catalog fields for non-interactive configuration:

bash install.sh configure DASHSCOPE_API_KEY="$DASHSCOPE_API_KEY" QWEN_MM_NATIVE_MODE=1
bash install.sh configure 'QWEN_MM_CACHE=/path/with spaces/cache'
bash install.sh configure QWEN_MM_CACHE=  # remove the override and restore the default

All arguments are validated before writing. Values must be single-line strings; spaces and = are supported. The command preserves other settings, keeps permissions at 600, and prints only key names, never values. Environment variables continue to take precedence.

Installed MCP entry points also support --set KEY=VALUE and --unset KEY, for example qwen-mm-plugins-blender --set BLENDER_PORT=9876. --set rejects empty or whitespace-only values with exit status 2 before writing any entries. To remove an override and restore its default, use qwen-mm-plugins-blender --unset BLENDER_PORT.

Model output mode

QWEN_MM_NATIVE_MODE=1 is the default. MCP tools return native image content blocks so a multimodal host model can inspect the original visual result directly.

Set QWEN_MM_NATIVE_MODE=0 when the host model is text-only. Every returned image block is replaced at the same position by a generated caption, while existing text blocks (file metadata, PDF text layers, video timestamps, and similar context) are preserved. The caption path uses DASHSCOPE_BASE_URL and QWEN_MM_API_VL_MODEL. Credentials are selected by endpoint: DashScope uses DASHSCOPE_API_KEY, OrcaRouter uses ORCAROUTER_API_KEY, OpenRouter uses OPENROUTER_API_KEY, and Cheaper Inference uses CHEAPER_INFERENCE_API_KEY. Any other OpenAI-compatible endpoint set as DASHSCOPE_BASE_URL uses DASHSCOPE_API_KEY, which is sent only to that URL's origin (scheme, host, port). Authentication-free local endpoints need no key configuration. A failed caption call produces an explicit Visual content unavailable text block instead of exposing base64 or silently dropping the image.

Enabling text-only mode sends tool-result images—including local files and application or desktop screenshots—to the configured VL endpoint. Use it only when that data may be shared with the endpoint. Invalid mode values fail safe to native mode and do not trigger an upload.

Search selection

Leave QWEN_MM_SEARCH_BACKEND unset or set it to auto to select the first configured key in this fixed order: Serper, Tavily, Exa, Serply. Set it to serper, tavily, exa, or serply to pin one provider; a missing matching key then raises an error instead of falling back. image_search always uses Serper Lens and therefore always requires SERPER_API_KEY.

Configure catalog

This is the complete catalog shown by the installer's Configure action. Defaults and grouping come from CONFIG_FIELDS; — means unset or disabled.

<!-- BEGIN GENERATED CONFIG CATALOG --> <!-- Generated by scripts/gen_env_docs.py from src/shared/env.py CONFIG_FIELDS. -->

Media APIs & endpoints

VariableDefaultPurpose
DASHSCOPE_API_KEY—vision, OCR, grounding, text-only image captions, ASR, generation, memory builds (secret)
ORCAROUTER_API_KEY—OpenAI-compatible calls to api.orcarouter.ai (secret)
OPENROUTER_API_KEY—OpenAI-compatible calls to openrouter.ai (secret)
CHEAPER_INFERENCE_API_KEY—OpenAI-compatible calls to api.cheaperinference.com (secret)
MINIMAX_API_KEY—MiniMax text-to-speech generation (secret)
DASHSCOPE_BASE_URLDashScope compat URLoverride the DashScope OpenAI-compatible base URL
DASHSCOPE_UPLOAD_POLICY_URLinferred for official DashScope hostsoverride the model-bound temporary OSS policy endpoint used for oversized Omni and VL media
QWEN_MM_API_VL_MODELqwen3.7-plusdefault VL model for vision_chat, OCR, grounding, text-only image captions, and video-spatio VLM tools
QWEN_MM_API_OMNI_MODELqwen3.8-omni-flashdefault Omni model for audio/video understanding tools, omni-memory, and Omni ChatCut
SAM3_SERVER_URL—segmentation SAM3 server URL
ASR_SERVER_URLS—self-hosted ASR fallback URLs (comma-separated)

Omni ChatCut

VariableDefaultPurpose
QWEN_MM_OMNI_CHATCUT_MODEL_CONFIG—path to the shared Omni, image-provider, and video-provider connection JSON
QWEN_MM_DUBBING_SERVER_URL—external IndexTTS2/Demucs/TEN-VAD service used by video translation

Search providers

VariableDefaultPurpose
QWEN_MM_SEARCH_BACKENDautotext search backend (auto: serper > tavily > exa > serply; or choose one)
SERPER_API_KEY—Serper web_search / web_extractor and Serper-only image_search (secret)
TAVILY_API_KEY—Tavily web_search / web_extractor (secret)
EXA_API_KEY—Exa web_search / web_extractor (secret)
SERPLY_API_KEY—Serply web_search / web_extractor (secret)

Runtime paths & limits

VariableDefaultPurpose
QWEN_MM_CACHEOS cache dircache dir for derived render artifacts
QWEN_MM_FFMPEG_TIMEOUT120ffmpeg/ffprobe timeout seconds
QWEN_MM_CHAT_TIMEOUTtool-specific (600; Omni 1800)OpenAI-compatible chat request timeout seconds
QWEN_MM_NATIVE_MODE11 returns MCP images; 0 sends images to the VL endpoint and returns captions
QWEN_MM_MAX_TOTAL_FRAMES600max frames sampled from a video

OSS storage (serve large media by URL)

VariableDefaultPurpose
OSS_AK—OSS access key id (secret)
OSS_SK—OSS access key secret (secret)
OSS_ENDPOINT—OSS endpoint
OSS_BUCKET—upload destination for build clips and oversized API media
OSS_VIDEO_CLIP_PREFIXtmp/video_clipskey prefix for uploaded video clips
OSS_URL_EXPIRY7200signed-URL TTL seconds

Video-memory

VariableDefaultPurpose
GRAPH_MEMORY_PATH—graph_memory.json path (overrides a passed video path)
EMBEDDINGS_PATH—embeddings.npz path
CUTOFF_SEC—time cutoff (seconds) for retrieval

Omni-memory

VariableDefaultPurpose
MEM_LOCAL_DIRvideo directoryoptional shared root for namespace memories; defaults beside the input video

Blender / FreeCAD hosts

VariableDefaultPurpose
BLENDER_BINARY—path to the Blender executable
BLENDER_HOSTlocalhostBlender addon host
BLENDER_PORT9876Blender addon port
FREECAD_BINARY—path to the FreeCAD executable
FREECAD_RPC_HOSTlocalhostFreeCAD RPC host
FREECAD_RPC_PORT9875FreeCAD RPC port
FREECAD_MOD_DIR—FreeCAD Mod dir for the bundled addon

edu-agent (Node / headless Chromium)

VariableDefaultPurpose
NODE_PATH—Node.js module resolution path
PUPPETEER_EXECUTABLE_PATH—headless Chromium executable for Puppeteer
<!-- END GENERATED CONFIG CATALOG -->

Advanced environment-only switches

These switches are intentionally not written by Configure. Set them only for the named compatibility or runtime behavior.

VariableDefaultPurpose
QWEN_MM_AUDIO_RAW_B64offSend Omni audio as raw base64 for OpenAI-spec servers such as vLLM; DashScope uses data:;base64,<payload>
QWEN_MM_AUTOLAUNCHoffLaunch a local Blender/FreeCAD application on the first tool call; plugin manifests may preset it
QWEN_MM_NO_AUTO_INSTALLoffDisable automatic Blender/FreeCAD binary downloads
FREECAD_ONLY_TEXT_FEEDBACKoffOmit screenshots normally attached to FreeCAD tool results
OSS_BUCKET_NAME—Legacy video-memory alias; OSS_BUCKET takes precedence

Capability-specific context and prerequisites remain in each capability's Skill and cookbook.