glm-mcp 是一个把 GLM(智谱 / Z.ai)作为低成本委托方的 MCP 服务器,供 AI 编程客户端使用。其定位是:让昂贵的主模型(Claude Opus、Copilot 默认模型或 Codex)负责编排与审查,由 GLM 承担实际编码工作并按便宜的 GLM token 计费。由于 GLM 提供兼容 Anthropic 的 /v1/messages 端点,可以直接嵌入任何已经支持 Anthropic 协议的工具。仓库将其封装为带四个工具的 MCP 服务器,并提供 Claude Code、GitHub Copilot、Codex 的一键安装器,同一服务器驱动所有版本。
用途与工作方式:用户向主智能体提出任务;主智能体通过 glm_agent 进行委托,传入一个目标(goal)和一个绝对工作目录(workdir)。服务器的路由器会挑选一个 GLM 模型(感知高峰时段)并调用 Z.ai 的 /v1/messages 端点;成本偏好使 GLM 保持为默认选项。GLM 运行自己的智能体循环(read_file / write_file / edit_file / list_dir / run_bash),直接针对用户仓库工作,随后以摘要结束。服务器把简洁摘要以及一个 GLM STATS 块(模型、token 数、预估成本)返回给主智能体。主智能体进行审查;每一次 GLM 调用也会被追加到 usage.jsonl 账本中。
Token 经济学说明:被委托的工作按 GLM token 计费(便宜约 10 倍),主模型只为编排与审查付费。若要接近 100% 的 GLM 份额,需要使用全 GLM 启动器(claude/glm-code.mjs),因为混合模式的主智能体每轮都会携带会话上下文,这部分上下文是其 token 份额的下限。
实时进度:glm_agent 在运行时流式发送 MCP 进度通知,包括当前迭代、token 数与 tok/s,在 Claude Code 中实时显示,并映射到 VS Code Copilot 的 tool.execution_progress。这种心跳也能让长调用在会因进度而重置超时的客户端上保持存活,取消运行会及时停止 GLM(部分改动会显示且可回滚)。max_tokens 默认是 auto(不设上限或宽松设置;编排智能体可传入数字来限制某次调用)。服务器使用空闲/停滞超时(GLM_STALL_TIMEOUT_MS,默认 2 分钟),因此正在活跃流式输出的回合不会被截断。如果很长的运行仍被客户端工具调用超时取消,可用 MCP_TOOL_TIMEOUT / CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT 提高。
安装方式(按版本): (a) Claude Code:默认全局安装(用户级):MCP 服务器、一个具备完整工具的 glm 子智能体、一个 PreToolUse 自动路由 hook,以及可选的 glm-code 全 GLM 启动器。重启 Claude Code,然后运行 glm_status 确认 api_key_loaded: true。详见 claude/README.md。 (b) GitHub Copilot / VS Code:在 agent 模式安装 MCP 服务器、一个 GLM 自定义智能体(子智能体)、一个 PreToolUse 自动路由 hook 以及委托说明文件。重新加载 VS Code 窗口,在 Agent 模式打开 Copilot Chat,启动 glm 服务器。详见 copilot/README.md。 安装已发布的 Codex 包:会安装 Codex MCP 注册、一个 glm 自定义智能体、glm-delegate 技能,以及一个建议性的 UserPromptSubmit / PreToolUse hook。配置给 GLM 工具 30 分钟超时,并在变更类调用前提示。重启 Codex,用 /hooks 审查 hook,然后运行 glm_status。详见 codex/README.md。 (d) 任意 MCP 客户端 / Glama / Docker:独立的 glm-mcp 包——Cursor、Windsurf、Claude Desktop、Glama 等无需安装器。容器场景下,仓库根目录的 Dockerfile 运行同一服务器。服务器无需 key 即可启动并响应 MCP 自省;仅在真正发起 GLM 调用时设置 GLM_API_KEY。
版本一览与对等性:三个版本都暴露相同的四个工具和一个子智能体,底层使用同一服务器。Codex 使用其原生的自定义智能体、技能与 hook 接口;其 hook 仅为建议性,必须由用户信任。只有 Claude 附带独立的 glm-code 全 GLM 启动器。所有开关都在 .env(已被 git 忽略)中。各版本位置:Claude ~/.claude/glm-mcp/.env(安装时设置);Copilot ~/.glm-mcp/glm-mcp/.env;Codex ~/.codex/glm-mcp/.env。Codex 设置 tool_timeout_sec = 1800,因为其默认 MCP 工具超时为 60 秒。带注释的完整参考见 claude/glm-mcp/.env.example。
感知高峰的路由与成本:中国高峰时段为 14:00–18:00(UTC+8)。glm-5.x 系列在高峰时有附加费(约高峰 3 倍 / 非高峰 2 倍),所以当 auto 在高峰落到 glm-5.x 模型时,路由器会向 GLM 分配更少工作;若列出一个无附加费的模型(例如 GLM_PEAK_MODEL=glm-5.2,glm-4.7),路由器在高峰会优先使用它,GLM 仍可正常使用。无论哪种情况,成本偏好都让 GLM 保持默认——即使高峰它也仍比主模型便宜。以下情况保留在主模型:敏感/机密代码、视觉输入、并行扇出、128K 上下文、对延迟敏感的循环,以及大量依赖的工具循环(路由器的硬性覆盖)。
证明真的用了 GLM:usage.jsonl 账本——每次 GLM 调用都会带模型 + input_tokens + output_tokens 追加到磁盘。Claude:~/.claude/glm-mcp/usage.jsonl;Copilot:~/.glm-mcp/glm-mcp/usage.jsonl。独立于 Z.ai 仪表盘。glm_status 打印累计账本总量(调用数、token、按模型计数)。每次 glm_agent 运行后打印 === GLM STATS === 块:模型、委托的 token、迭代次数、变更文件、相对 Opus 的预估成本。如果账本为空,说明 GLM 从未被调用——工作在主模型上运行。
监督与安全:glm_agent 上的 dry_run: true——GLM 提出完整 diff 且不写入任何内容,批准后再应用。每次真实 glm_agent 运行后打印 Git 检查点回滚行(当 workdir 是 git 仓库时),可用一条命令撤销。密钥隔离——GLM_API_KEY 只存在于被 git 忽略的 .env 中,从不写入 npm 包(scripts/publish-server.mjs 会扫描每个包中的 .env / usage.jsonl / node_modules,发现即明确报错)。数据驻留——GLM 流量发往位于中国的 Z.ai 服务器。请把机密和受监管代码留在主模型;路由器的 sensitive 标志会强制其留在主模型。
开发 / CI:CI(见 .github/workflows/ci.yml)运行:对服务器及每个安装器/hook/脚本做语法检查;无密钥的 stdio 冒烟测试(scripts/smoke-stdio.mjs),在磁盘上没有 key 的情况下断言四工具 MCP 握手;Docker 自省测试(把 initialize 管道进构建的镜像);以及 npm-pack 密钥扫描(scripts/publish-server.mjs)。欢迎 PR——见 CONTRIBUTING.md。
许可证:MIT © djerok · 官方仓库:https://github.com/djerok/glm-mcp