Skip to main content
Glama

qwen-local-mcp

An MCP server that lets Codex, Claude Code, or any MCP client delegate a bounded coding task to a local Qwen model running in Ollama.

The big model plans; the small local model does the grunt work (read, search, edit, run tests) inside one repository, with hard guardrails:

  • Edits are confined to a workspace under a configured repositories root.

  • No deletes, renames, commits, pushes, package installs, or network access.

  • Refuses to edit on main/master; use a feature branch or worktree.

  • Only allowlisted commands run (pytest, unittest, ruff, mypy, npm/pnpm/yarn test/lint/build/typecheck, dotnet test/build, cargo, go, cmake/ctest, and read-only git status/git diff). No shell is ever spawned.

  • Secret files (.env, keys, credentials.json, ...) and dependency/build directories are invisible to the model.

  • Tool results are clipped so a 32k context never silently loses the system prompt.

  • Stops early when the model repeats a rejected call, and keeps a wall-clock budget under Codex's tool timeout so you always get a report back.

Requirements

  • Windows, macOS, or Linux with Python 3.11+

  • Ollama running locally with the model pulled:

ollama pull qwen3.5:9b

Related MCP server: qodercli-mcp

Install

git clone https://github.com/d1dac0/qwen-local-mcp.git
cd qwen-local-mcp
python -m venv .venv
.venv/Scripts/pip install -r requirements.txt   # Windows
# .venv/bin/pip install -r requirements.txt     # macOS / Linux

Claude Code

claude mcp add --scope user --transport stdio qwen-local -- "<path>/.venv/Scripts/python.exe" "<path>/server.py"

Codex

Add to ~/.codex/config.toml:

[mcp_servers.qwen_local]
command = "<path>/.venv/Scripts/python.exe"
args = ["<path>/server.py"]
cwd = "<path>"
enabled = true
enabled_tools = ["qwen_delegate"]
startup_timeout_sec = 120
tool_timeout_sec = 900

Usage

The server exposes one tool, qwen_delegate(task, workspace):

  • workspace: absolute path of the repository (or a subfolder) to work in. Must be under the repositories root.

  • task: a self-contained instruction naming the files and the acceptance check, e.g. "test_calc.py fails. Fix the bug in calc.py so python -m pytest -q passes, then run it and report the exit code."

The result is a report with the model's summary, every tool call, and the exact commands and exit codes it ran.

Configuration

All optional, via environment variables:

Variable

Default

Purpose

QWEN_WORKER_REPOSITORIES_ROOT

~/source/repos

Every workspace must live under this root

QWEN_WORKER_MODEL

qwen3.5:9b

Ollama model tag

QWEN_WORKER_CONTEXT_TOKENS

32768

Ollama num_ctx

QWEN_WORKER_MAX_STEPS

20

Max agent turns per task

QWEN_WORKER_MAX_SECONDS

840

Wall-clock budget per task

OLLAMA_HOST

http://127.0.0.1:11434

Ollama base URL

Python tooling (python, pytest, ruff, mypy) is resolved from the workspace's own .venv/venv when present, so tests see the project's dependencies.

Tools the model gets

Tool

Notes

list_files

Skips VCS, dependency, cache, and build-output dirs

read_file

Paged with start_line/max_lines; UTF-8 only

search_code

Case-insensitive literal search, path:line: text

edit_file

One exact, unique replacement; preserves CRLF/LF

create_file

Never overwrites

run_command

Allowlisted executables, argument paths checked, no shell

License

MIT

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Wraps the local Qoder CLI into an MCP server, enabling any MCP client to delegate coding tasks to a local Qoder agent with session management, sandboxed permissions, and model selection.
    3
    58 npm
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    This server lets MCP clients delegate coding tasks to a locally installed Qwen Code CLI, enabling second opinions, parallel work, and clean separation from the main context.
    6
    35 npm
    MIT