GLM Subagent
FreeNot checkedUses GLM (Zhipu/Z.ai) as a ~10x cheaper file-editing subagent for AI coding agents.
About
Uses GLM (Zhipu/Z.ai) as a ~10x cheaper file-editing subagent for AI coding agents.
README
GLM (Zhipu / Z.ai) as a ~10x cheaper delegate for your AI coding agent. Your expensive
main model — Claude Opus, Copilot's default, or Codex — orchestrates and reviews; GLM does
the actual work, billed on cheap GLM tokens. GLM exposes an Anthropic-compatible /v1/messages
endpoint, so it drops into anything that already speaks Anthropic. This repo wraps it as an
MCP server with four tools, plus one-command installers for Claude Code, GitHub Copilot,
and Codex. The same server powers every edition.
How it works
flowchart TD
You["You"]
Main["Main agent (Claude Opus / Copilot / Codex)<br/>orchestrates + reviews"]
Srv["glm MCP server (stdio)<br/>4 tools"]
Rt["Router<br/>peak-aware model pick + cost bias"]
Zai[/"Z.ai Anthropic endpoint<br/>POST /v1/messages"/]
Loop["glm_agent tool loop<br/>read_file / write_file / edit_file<br/>list_dir / run_bash — on your repo"]
Led[("usage.jsonl<br/>every GLM call: model + tokens")]
Repo[("your repo")]
You --> Main -->|"glm_agent(task, workdir)"| Srv
Srv --> Rt --> Zai
Zai -->|"tool calls"| Loop
Loop -->|"tool results"| Zai
Loop -->|"reads / writes / runs"| Repo
Zai --> Led
Srv -->|"summary + GLM STATS<br/>(model, tokens, est. cost)"| Main
Main -->|"review · diff · revert"| You
Plain-English walkthrough:
- You ask the main agent for work.
- The main agent delegates via
glm_agent— it passes a goal plus an absoluteworkdir. - The server's router picks a GLM model (peak-aware) and calls the Z.ai
/v1/messagesendpoint; the cost bias keeps GLM the default. - GLM runs its own agent loop (
read_file/write_file/edit_file/list_dir/run_bash) directly against your repo, then stops with a summary. - The server returns a concise summary + a
GLM STATSblock (model, tokens, est. cost) to the main agent. - The main agent reviews; every GLM call is also appended to the
usage.jsonlledger.
Token economics. Delegated work bills GLM tokens (~10x cheaper). The main model only pays for orchestration + review. A near-100% GLM share requires the full-GLM launcher (claude/glm-code.mjs), because a hybrid main agent always carries per-turn session context — that context is the floor on its token share.
The four tools
| Tool | Cost | What it does |
|---|---|---|
glm_agent |
GLM tokens | GLM as a real coding agent in your repo (read/write/edit/run). dry_run: true previews a diff and writes nothing; after a real run a git-checkpoint revert line is printed. |
glm_delegate |
GLM tokens (opt-in) | Pure text generation — text in, text out. Hidden by default (glm_agent handles text-only tasks too); set GLM_DELEGATE=on to expose it. |
glm_recommend |
free (local) | GLM-vs-main-model advisory: which engine, which GLM model, confidence, and reasons. No GLM call. |
glm_status |
free (local) | Peak window, active model, usage-ledger totals (proof of GLM spend), and config health. No GLM call. |
Live progress. glm_agent streams MCP progress notifications while it runs —
current iteration, token count, and tok/s — shown live in Claude Code and mapped to
tool.execution_progress in VS Code Copilot. This heartbeat also keeps long calls alive on clients that
reset their timeout on progress, and cancelling a run stops GLM promptly (partial changes are shown
and revertable). max_tokens defaults to auto (uncapped/generous; the orchestrating agent may
pass a number to cap a call). The server uses an idle/stall timeout (GLM_STALL_TIMEOUT_MS, 2 min),
so an actively-streaming turn is never cut off. If a very long run is still cancelled by your client's
tool-call timeout, raise it with MCP_TOOL_TIMEOUT / CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT.
Install
(a) Claude Code
npx glm-mcp-claude --key YOUR_ZAI_KEY
Installs globally by default (user-scoped): the MCP server, a full-tool glm subagent, a
PreToolUse auto-routing hook, and an optional glm-code full-GLM launcher. Restart
Claude Code, then run glm_status to confirm api_key_loaded: true.
Full details: claude/README.md.
(b) GitHub Copilot / VS Code
npx glm-mcp-copilot --key YOUR_ZAI_KEY # current workspace
npx glm-mcp-copilot --global --key YOUR_ZAI_KEY # every workspace
Installs the MCP server in agent mode, a GLM custom agent (subagent), a PreToolUse
auto-routing hook, and delegation instructions files. Reload the VS Code window, open
Copilot Chat in Agent mode, start the glm server.
Full details: copilot/README.md.
(c) Codex
Install the published Codex package:
npx glm-mcp-codex --key YOUR_ZAI_KEY
Installs a Codex MCP registration, a glm custom agent, the glm-delegate skill, and an advisory
UserPromptSubmit/PreToolUse hook. The config gives GLM tools a 30-minute timeout and prompts before
mutating calls. Restart Codex, review the hook with /hooks, and run glm_status.
Full details: codex/README.md.
(d) Any MCP client / Glama / Docker
The standalone glm-mcp package — no installer needed for Cursor, Windsurf, Claude Desktop, Glama, etc.:
{
"mcpServers": {
"glm": {
"command": "npx",
"args": ["-y", "glm-mcp"],
"env": { "GLM_API_KEY": "YOUR_ZAI_KEY" }
}
}
}
For containers, the repo-root Dockerfile runs the same server:
docker build -t glm-mcp .
docker run --rm -i -e GLM_API_KEY=YOUR_ZAI_KEY glm-mcp
The server boots and answers MCP introspection without a key — set GLM_API_KEY only for
actual GLM calls.
Editions at a glance
| Claude Code -> claude/ | GitHub Copilot (VS Code) -> copilot/ | Codex -> codex/ | |
|---|---|---|---|
| npm package | glm-mcp-claude |
glm-mcp-copilot |
glm-mcp-codex |
| Install | npx glm-mcp-claude --key ... |
npx glm-mcp-copilot --key ... (+ --global) |
npx glm-mcp-codex --key ... |
| MCP server | user-scoped (claude mcp add glm -s user) |
VS Code agent mode (mcp.json) |
~/.codex/config.toml (or trusted project config) |
| Subagent | glm subagent (~/.claude/agents/glm.md) |
GLM custom agent (glm.agent.md) |
glm custom agent (~/.codex/agents/glm.toml) |
| Auto-routing hook | PreToolUse, Task matcher (glm_subagent_router.mjs) |
PreToolUse, fires on all calls (glm_router_hook.mjs) |
UserPromptSubmit + PreToolUse, advisory only |
| Delegation policy | appended to ~/.claude/CLAUDE.md |
.instructions.md files |
glm-delegate skill + optional AGENTS.md snippet |
| Full-GLM launcher | glm-code.mjs (Claude only) |
— | |
| Docs | claude/README.md | copilot/README.md | codex/README.md |
Parity. All three editions expose the same four tools and a subagent while using the same
server underneath. Codex uses its native custom-agent, skill, and hook surfaces; its hook is advisory
only and must be trusted by the user. Only Claude ships the standalone glm-code full-GLM launcher.
Configuration
All knobs live in .env (git-ignored). Location per edition: Claude
~/.claude/glm-mcp/.env (set during install); Copilot ~/.glm-mcp/glm-mcp/.env; Codex
~/.codex/glm-mcp/.env. Codex sets tool_timeout_sec = 1800 because its default MCP tool timeout is
60 seconds. Full reference with comments: claude/glm-mcp/.env.example.
| Var | Default | Meaning |
|---|---|---|
GLM_API_KEY |
— | Your Z.ai / Zhipu GLM Coding Plan key. Required for GLM calls. |
GLM_BASE_URL |
https://api.z.ai/api/anthropic |
Anthropic-compatible endpoint (/v1/messages). |
GLM_USE_HAIKU |
off |
off calls GLM directly so all tokens stay on GLM; on allows the Haiku-orchestrated subagent (spends some Claude tokens). |
GLM_COST_BIAS |
7 |
How hard to favor GLM. 7 ≈ 98–100% of eligible tasks to GLM. Lower (e.g. 1.5) to send more hard tasks to the main model; 0 = capability only. |
GLM_MAX_CONCURRENT |
1 |
GLM caps in-flight requests (~1); keep at 1 unless your tier allows more. |
GLM_CAP |
off |
off = generous (up to GLM_MAX_TOKENS_CEILING); on enforces GLM_MAX_TOKENS. |
GLM_MAX_TOKENS |
32768 |
Hard per-call limit applied only when GLM_CAP=on. |
GLM_MAX_TOKENS_CEILING |
131072 |
Generous default used when the cap is off. |
GLM_MAX_RETRIES |
4 |
Retries on 429 / concurrency / 5xx with exponential backoff. |
GLM_TIMEOUT_MS |
300000 |
Per GLM HTTP request timeout (5 min). |
GLM_AGENT_MAX_ITERS |
30 |
Max tool-loop turns for glm_agent before it stops. |
GLM_AGENT_BASH_TIMEOUT_MS |
120000 |
Per-run_bash command timeout inside glm_agent. |
GLM_OFFPEAK_MODEL |
glm-5.2 |
Candidate model(s) for auto off-peak. Comma list allowed; router auto-picks. |
GLM_PEAK_MODEL |
glm-5.2 |
Candidate model(s) for auto at peak. Comma list allowed; include a no-surcharge model (e.g. glm-4.7) to dodge the peak tax. |
GLM_CHEAP_MODEL |
glm-4.5-air |
The cheap model (used in the full-GLM launcher's Haiku slot). |
GLM_PEAK_START_CN |
14 |
Peak window start, China hour (UTC+8). |
GLM_PEAK_END_CN |
18 |
Peak window end (exclusive), China hour (UTC+8). |
Peak-aware routing & cost
China peak window is 14:00–18:00 (UTC+8). The glm-5.x family carries a surcharge at peak
(~3x peak / ~2x off-peak), so when auto lands on a glm-5.x model at peak the router routes
less work to GLM; if you list a no-surcharge model (e.g. GLM_PEAK_MODEL=glm-5.2,glm-4.7) the
router prefers it at peak and GLM stays fine to use. The cost bias keeps GLM the default either
way — even at peak it is cheaper than the main model.
What stays on the main model: sensitive / secret code, vision input, parallel fan-out,
128K context, latency-tight loops, and heavy dependent tool-loops (the router's hard overrides).
Proof it's really GLM
usage.jsonlledger — every GLM call is appended on disk withmodel+input_tokens+output_tokens. Claude:~/.claude/glm-mcp/usage.jsonl; Copilot:~/.glm-mcp/glm-mcp/usage.jsonl. Independent of the Z.ai dashboard.glm_status— prints the cumulative ledger totals (calls, tokens, per-model counts).=== GLM STATS ===block — printed after everyglm_agentrun: model, tokens delegated, iterations, files changed, est. cost vs Opus.
If the ledger is empty, GLM was never called — the work ran on the main model.
Oversight & safety
dry_run: trueonglm_agent— GLM proposes a full diff and writes nothing; approve before applying.- Git checkpoint revert line — printed after every real
glm_agentrun (when the workdir is a git repo), so you can undo in one command. - Key isolation —
GLM_API_KEYlives only in the git-ignored.env; it is never baked into the npm packages (scripts/publish-server.mjsscans every pack for.env/usage.jsonl/node_modulesand fails loudly). - Data residency — GLM traffic goes to Z.ai servers in China. Keep secrets and regulated code
on the main model; the router's
sensitiveflag forces it there.
Development / CI
CI (see .github/workflows/ci.yml) runs: syntax checks on the server
and every installer/hook/script, the keyless stdio smoke (scripts/smoke-stdio.mjs)
that asserts the four-tool MCP handshake with no key on disk, a Docker introspection test
(initialize piped into the built image), and an npm-pack secret scan
(scripts/publish-server.mjs). PRs welcome — see
CONTRIBUTING.md.
License
MIT © djerok · Canonical repo: https://github.com/djerok/glm-mcp
Install GLM Subagent in Claude Desktop, Claude Code & Cursor
unyly install glm-subagentInstalls into Claude Desktop, Claude Code, Cursor & VS Code — handles npx, uvx and build-from-source repos for you.
First time? Get the CLI: curl -fsSL https://unyly.org/install | sh
Or configure manually
Run in your terminal:
claude mcp add glm-subagent -- npx -y glm-mcpStep-by-step: how to install GLM Subagent
FAQ
Is GLM Subagent MCP free?
Yes, GLM Subagent MCP is free — one-click install via Unyly at no cost.
Does GLM Subagent need an API key?
No, GLM Subagent runs without API keys or environment variables.
Is GLM Subagent hosted or self-hosted?
Self-hosted: the server runs locally on your machine via the install command above.
How do I install GLM Subagent in Claude Desktop, Claude Code or Cursor?
Open GLM Subagent on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
Fetch
Web content fetching and conversion for efficient LLM usage.
AWS KB Retrieval
Retrieval from AWS Knowledge Base using Bedrock Agent Runtime.
by modelcontextprotocolSpring AI MCP Server
Provides auto-configuration for setting up an MCP server in Spring Boot applications.
llm-analysis-assistant
A very streamlined mcp client that supports calling and monitoring stdio/sse/streamableHttp, and can also view request responses through the /logs page. It also
by xuzexin-hzCompare GLM Subagent with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All ai MCPs
