mcpField
C
Cheaplane

Cheaplane

本地服务
github.comAI 与智能体111 周前更新

关于 Cheaplane

Cheaplane 是一个 MCP 服务,为主 Agent 提供 delegate 工具,将可替代的日常任务交给经 LiteLLM 代理的低成本模型。它通过任务自动路由模型,并将委派调用与主线程订阅凭据隔离。

主要功能

  1. 01通过 delegate 委派任务
  2. 02按任务内容自动选择模型
  3. 03支持指定模型别名
  4. 04记录用量与节省估算
  5. 05提供逐轮提醒机制

适用场景

  1. 01生成样板代码或执行格式整理
  2. 02摘要长文档并提取信息
  3. 03翻译文本或撰写例行文案
  4. 04查看委派调用的用量记录

MCP 相关

该 MCP 服务向主 Agent 暴露 delegate 工具,连接本地 LiteLLM 代理提供的模型端点。委派进程与主线程订阅凭据相互隔离。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"millennialdreamer-cheaplane": {
"command": "uvx",
"args": [
"cheaplane"
],
"env": {
"DELEGATE_BASE_URL": "<DELEGATE_BASE_URL>",
"DELEGATE_API_KEY": "<DELEGATE_API_KEY>",
"DELEGATE_TIMEOUT": "<DELEGATE_TIMEOUT>",
"DELEGATE_MODEL_MAP": "<DELEGATE_MODEL_MAP>",
"DELEGATE_NO_LOG": "<DELEGATE_NO_LOG>"
}
}
}
}
启动命令uvx cheaplane
需要配置的环境变量
DELEGATE_BASE_URLOpenAI-compatible endpoint serving the cheap models — usually a local LiteLLM proxy.
DELEGATE_API_KEY密钥Key for that endpoint. A local proxy ignores it; set a real one for a hosted endpoint.
DELEGATE_TIMEOUTPer-call timeout in seconds. Raise it for long documents.
DELEGATE_MODEL_MAPJSON remapping the built-in aliases to your proxy's model names, e.g. {"deepseek": "deepseek-v4"}.
DELEGATE_NO_LOGSet to 1 to disable the local savings ledger (metadata only, never task content).

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypicheaplane0.2.1

工具

3

收录的工具列表 · 更新于 3 周前

参数类型必填说明
taskstring是
modelstring否
max_tokensinteger否

详细介绍

Cheaplane — 让高级模型留在主线程,把繁琐工作交给便宜模型,计费绝不会混在一起

Cheaplane 🛣️

让高级订阅留在主线程。把繁琐工作交给便宜模型——Cheaplane 还会帮你挑选合适的模型。别再把高级模型的令牌浪费在样板活上。

PyPI License Python MCP Deps PRs

Cheaplane 是一个精简的单文件 MCP 服务(约 250 行代码,仅依赖标准库和 mcp),为你的主 Agent(例如使用 Max 订阅的 Claude Code)提供一个额外工具:delegate。你的 Agent 继续负责思考(规划、架构设计、最终审查),并把可替代的繁琐工作——样板代码、格式整理、翻译、长文档摘要——交给本地 LiteLLM 代理背后的便宜模型(DeepSeek、Kimi、Qwen 等)。可以把它想成高级 Agent 的廉价实习生——它负责处理枯燥的部分,你则继续思考。

让它安全的关键:委派调用和你的订阅运行在物理隔离的进程中,绝不共享凭据。(为什么这很重要 ⬇️)

让它省心的关键:自动路由。 delegate(task) 会根据任务本身选择合适的便宜模型——代码 → DeepSeek,长文档 → Kimi,中文 → Qwen。(工作原理 ⬇️)

让它真正派上用场的关键:每轮都会触发提醒钩子,确保 Agent 不会忘记这个工具——大多数“委派”工具都会忽略这一点。此外,节省账本还会告诉你它帮你省下了多少配额。

看看实际效果——你的 Agent 把一项杂活交出去,自动路由会将其发送给便宜的代码模型:

delegate("convert to a TypeScript interface: {id, name, email, isAdmin, roles[]}")
interface User {
  id: number;
  name: string;
  email: string;
  isAdmin: boolean;
  roles: string[];
}

↑ 真实调用的输出——不是模拟结果,也没有手动选择模型。这次调用的令牌成本比高级模型低约 90 倍,而且你的订阅配额分毫未动。

问题所在

高级模型在处理难题时物有所值——但每个令牌都会计入你的套餐,你却把配额消耗在重复琐事上:重新整理 JSON、翻译 UI 字符串、总结你只会读一次的文档。常见的“直接用便宜模型”方案会迫使你做出糟糕的选择:

  • 把整个 Agent 降级 → 真正重要的工作会失去主线程的高质量表现。
  • 所有请求都通过 API 密钥路由 → 你无法继续使用已经付费的订阅。

Cheaplane 保留了最佳组合:高级模型在主线程负责判断 + 便宜模型处理重复琐事 + 计费在物理上绝不混用。

Cheaplane 的优势

2026 年流行的做法是把整个 Agent 都换成便宜的模型(类似 DeepClaude)。这样确实能大幅降低成本,但会降低你实际用于思考的对话质量,还会导致你的其他 MCP 工具无法使用,而且如果你订阅的是 Pro/Max,这种做法根本不适用。Cheaplane 则选择了相反的做法:

把整个 Agent 换成便宜的模型(类似 DeepClaude)所有请求都通过一个 API 密钥Cheaplane
主对话⬇️ 降级⬇️ 不再享有订阅✅ 保持高端模型
你的其他 MCP 工具❌ 无法使用✅✅(它本身就是 MCP 服务)
适用于 Pro/Max 订阅❌ 仅限 API 密钥❌ 取代订阅✅ 专为此设计
自动为你选择便宜的模型❌ 所有任务都用同一个模型❌✅ auto 路由
显示节省的费用❌❌✅ savings 账本
计费合并为一笔按 Token 计费🔒 订阅与低价调用彼此隔离

以上对比依据截至 2026 年年中公开报告中后端替换方案(类似 DeepClaude)的表现;具体情况因工具而异,也可能发生变化。

“便宜”究竟有多便宜?

繁重的基础工作其实很简单——为此支付高端费率纯属浪费。每百万 Token 的费用(截至 2026 年年中的公开标价):

模型输入输出最适合
Claude Opus(API,仅供参考)$5.00$25.00你会保留给高难度任务的判断工作
DeepSeek V4 Flash$0.14$0.28代码 / 格式整理
Kimi K2$0.60–0.95$2.50–4.00长文档(超大上下文)
Qwen$0.05–0.40$0.20–1.20中文文案

在 Opus 上,一个输出 Token **约需 $25,而在 DeepSeek 上约需 $0.28——对于不需要高智能的工作,前者贵了约 90 倍。**你使用的是订阅,因此不会直接支付这 $25——主对话消耗的是配额,而不是美元。重点就在这里:每一项委派出去的日常任务,都会为你留出本可用于高难度问题的高端配额。(在 DeepSeek Flash 上总结一份 40 页的文档,费用约为 $0.005——甚至不会影响你的配额。)

价格为截至 2026 年年中的公开标价,具体费用因套餐档位和缓存情况而异,请查看各服务提供商的信息。稳定不变的是数量级上的差距,而不是精确的节省金额。

计费隔离(核心所在)

大多数“省钱”技巧都会把账单混在一起。Cheaplane 则让它们从根本上彼此隔离:

flowchart LR
    A["Main agent<br/>premium subscription"] -->|"delegate(task)"| B["Cheaplane MCP<br/>own process, own key"]
    B -->|HTTP| C["LiteLLM proxy<br/>localhost:4000"]
    C --> D["DeepSeek / Kimi / Qwen<br/>cheap, pay-per-use"]

Cheaplane 进程**绝不会导入你的订阅服务提供商的 SDK、读取其身份验证信息或接触其 OAuth Token。**它只知道一件事:一个 HTTP 端点(你的代理)及其密钥。主对话计入你的订阅;委派调用则计入你的低价代理。两者绝不会相互串账——这不是靠策略,而是由架构保证。

快速开始

最快方式 — 使用 Claude Code,只需运行一个脚本:

git clone https://github.com/millennialdreamer/cheaplane && cd cheaplane
cp litellm.yaml.example litellm.yaml          # then: export DEEPSEEK_API_KEY=sk-...
litellm --config litellm.yaml &               # start the cheap-model proxy on :4000
bash setup.sh                                 # deps + register MCP + reminder hook + verify

setup.sh 具有幂等性(可安全重复运行):它会安装依赖项、在 Claude Code 中注册 delegate MCP 服务、安装每轮提醒钩子,并端到端验证整个调用链。然后启动一个新的 Claude Code 会话即可。

bash setup.sh — 安装依赖项,在 Claude Code 中注册 MCP 服务,安装提醒钩子,并端到端验证整个调用链

更喜欢安装包? Cheaplane 已发布到 PyPI — 无需克隆,也无需硬编码路径:

pip install cheaplane          # or: uvx cheaplane  /  pipx install cheaplane
claude mcp add delegate cheaplane

你仍需要下方第 1 步中的代理,而提醒钩子也很实用 — 这一部分需要项目仓库。

手动设置 / setup.sh 的实际操作

1. 获取一个兼容 OpenAI 的端点,用于调用低成本模型。 大多数人会在本地运行 LiteLLM,作为 DeepSeek / Kimi / Qwen 前面的代理。最精简的配置约 5 行:

# litellm.yaml — exposes DeepSeek under the model_name "deepseek"
model_list:
  - model_name: deepseek
    litellm_params:
      model: deepseek/deepseek-chat        # swap for any provider/model LiteLLM supports
      api_key: os.environ/DEEPSEEK_API_KEY
pip install 'litellm[proxy]'
litellm --config litellm.yaml        # serves http://localhost:4000

这里的 model_name: deepseek 与 Cheaplane 的默认别名一致,因此开箱即用。(deepseek 是 LiteLLM 内置的提供方 — 无需设置 api_base;仅在使用自定义或自托管端点时才需要添加。)已经有兼容 OpenAI 的端点(LiteLLM、OpenRouter、Ollama、vLLM……)?跳过此步骤,直接将 DELEGATE_BASE_URL 指向该端点即可。

2. 安装 Cheaplane — 从 PyPI 安装,或者从克隆的项目仓库安装(如果你还需要提醒钩子和 probe.py):

pip install cheaplane        # installs a `cheaplane` command; that's the whole install
git clone https://github.com/millennialdreamer/cheaplane && cd cheaplane
uv sync     # or:  python -m venv .venv && .venv/bin/pip install mcp

3. 在 MCP 客户端中注册。 如果从 PyPI 安装,命令已位于你的 PATH 中:

{
  "mcpServers": {
    "delegate": { "command": "cheaplane" }
  }
}

如果从克隆的项目仓库安装,将 .mcp.json.example 复制为项目根目录中的 .mcp.json 并修正路径(或使用 claude mcp add):

{
  "mcpServers": {
    "delegate": {
      "command": "uv",
      "args": ["run", "--directory", "/ABSOLUTE/PATH/TO/cheaplane", "python", "server.py"]
    }
  }
}

4. 端到端验证 — 确保第 1 步中的代理正在运行(握手 → 列出工具 → 实际执行一次委派调用):

uv run python probe.py
# ✅ chain works (main → MCP → cheap model → back)

使用 delegate

你的 Agent 现在可以使用 delegate(task) — 路由会自动完成;仅在需要时手动指定:

delegate("convert this JSON to a TypeScript interface: …")      #  auto → deepseek (code)
delegate("summarize this 40-page contract: …")                  #  auto → kimi (very long input)
delegate("…Chinese text in the task auto-routes here…")        #  auto → qwen (Chinese copy)
delegate("translate these UI strings to Japanese", "flash")     #  explicit alias still wins
别名适用场景
auto默认 — 根据任务本身从下方选取一个
deepseek编码 / 均衡
mimo推理 / 多步骤
flash快速 / 格式化 / 翻译
kimi长文档(超大上下文)
qwen中文文案

别名会映射到你的 LiteLLM model_name。无需修改代码即可将它们指向你的代理 — 设置 DELEGATE_MODEL_MAP 环境变量(一个 JSON 对象),或者创建 ~/.claude/delegate-model-map.json(会热重载,无需重启);也可以编辑 server.py 中的 MODEL_ALIASES。

哪些任务适合委派,哪些应该自己处理(经验法则)

委派(交给低成本模型处理):

  • 根据明确的规范生成样板代码 / 脚手架
  • 机械式重构、格式化、修复 lint 问题
  • 翻译;总结长文档或从中提取事实
  • 常规文本:变更日志、文档字符串、提交信息

自己处理:

  • 规划、架构、技术权衡
  • 始终由你最终审核委派结果
  • 与用户交流;需要判断的情况
  • 任何细微错误代价高昂的任务

被委派的模型只能看到你的 task 字符串 — 无法访问你的对话。请让每项任务都包含完整信息:规范 + 实际输入 + 你要求的确切输出格式。

查看节省的费用

每次委派调用都会向 ~/.cheaplane/usage.jsonl 追加一行仅包含元数据 — 绝不包含任务内容。随时向你的 Agent 查询 savings(输出示例):

Cheaplane savings — all time
  delegated calls : 184
  tokens offloaded: ~412,300 in / ~365,800 out
  premium cost avoided (Opus list): ~$11.21
  actually spent (DeepSeek-class) : ~$0.16  (≈70× cheaper, in+out blended)
  last 7 days     : 31 calls, ~$2.04 avoided

这些数字是按公开标价估算的 — 真正节省的是从未消耗的高级额度。记录文件仅保存 token 数量和模型名称;你可以随时删除该文件,也可以设置 DELEGATE_NO_LOG=1 来完全关闭日志记录。

让你的 Agent 真正用起来

每个“委派给廉价模型”工具都有个鲜为人知的真相:**安装它并不难,难的是让你的 Agent 真正用起来。**把工具放进 Agent 后,处理真实任务几轮,它就会忘记工具的存在,转而用高级模型的 token 自己埋头处理那些苦差事。指令会逐渐沉到上下文深处,注意力也会转移。

Cheaplane 开箱即提供解决方案,你可以叠加使用以下三层:

  1. 技能(SKILL.md)——教 Agent 何时委派。适用于任何客户端;它是被动的,因此可作为基础。
  2. 在你的 CLAUDE.md / system prompt 中加入一行默认指令:*“动手处理本可委派的苦差事之前,先把它委派出去。”*效果更好,但静态指令在漫长对话中仍会逐渐淡出。
  3. 逐轮提醒钩子——可靠的方案(Claude Code)。它会在每个提示词中重新注入提醒,让这个习惯始终留在视野中。这正是让工具从已安装变为真正使用的关键。

对于其他 MCP 客户端(没有 UserPromptSubmit 钩子系统),请使用第 1–2 层——将这一行指令接入客户端支持的 system prompt。

安装钩子——安全且幂等(会备份你的设置,采用合并而非覆盖的方式,并在重复运行时去重):

bash install-hook.sh            # registers hooks/delegate-reminder.sh as a UserPromptSubmit hook
# verify it's wired up:
python3 -c "import json,os;s=json.load(open(os.path.expanduser('~/.claude/settings.json')));print([h['command'] for e in s.get('hooks',{}).get('UserPromptSubmit',[]) for h in e.get('hooks',[])])"

开启新会话后,你的 Agent 每轮都会自检:“这是本可委派的苦差事吗?→ 委派出去。”

每轮提醒约消耗 60 个 token,远低于一次被遗忘的委派所浪费的数百个高级模型 token。该钩子使用 Claude Code 的 UserPromptSubmit 机制。

配置

环境变量默认值含义
DELEGATE_BASE_URLhttp://localhost:4000OpenAI 兼容端点(你的代理)
DELEGATE_API_KEYsk-litellm该端点的密钥
DELEGATE_TIMEOUT120单次调用超时(秒)
DELEGATE_MODEL_MAP(无)JSON 别名映射,例如 {"deepseek":"deepseek-v4-flash"}——覆盖默认值,无需修改代码
DELEGATE_LOG~/.cheaplane/usage.jsonl用量节省记录的存放位置
DELEGATE_NO_LOG(未设置)设为 1 可完全禁用用量记录

常见问题

这会泄露我的订阅凭据吗?
不会。delegate 工具在独立进程中运行,只会向你配置的端点发出普通 HTTP 请求。它不会导入你的订阅 SDK,也不会接触其身份验证信息——请参阅账单隔离:这才是关键。

用量节省记录具体记录什么?
每次调用记录一行 JSON:时间戳、别名、模型名称,以及 token/字符数量。**绝不记录任务文本,也绝不记录模型的输出。**你可以随时删除 ~/.cheaplane/usage.jsonl,或设置 DELEGATE_NO_LOG=1。

auto 如何决定使用哪个模型?
server.py 中有一个小型确定性启发式规则(_pick_model,约 20 行,可自行查看和调整):代码信号 → deepseek,超长输入 → kimi,中文内容较多 → qwen,多步骤语言任务 → mimo,简短机械性杂务 → flash。显式指定别名时始终优先使用该别名。

这和所有事情都使用同一个 API 密钥有什么区别?
使用单个 API 密钥,就意味着你不再使用订阅,并且所有工作都要按 token 付费——包括难度较高的任务。Cheaplane 会保留你的订阅作为高级主线程,只把廉价且可替换的繁琐任务交给其他模型。

除了 Claude Code 之外也能用吗?
可以——任何兼容 MCP 的客户端都可以(Cursor、Cline、Windsurf 等)。主 Agent 只需支持 MCP 工具;通用 JSON 配置请参阅手动设置。

必须使用 DeepSeek / Kimi / Qwen 吗?
不必。任何可通过 OpenAI 兼容端点访问的模型都能使用;这些别名只是方便使用的标签,你可以通过 DELEGATE_MODEL_MAP 重新映射。

为什么使用代理,而不是直接调用服务提供商?
只需一个端点和一个密钥,还能记录用量并轻松切换模型;同时可避免 MCP 服务接触服务提供商的密钥。

路线图与创意(欢迎参与)

Cheaplane 的核心刻意保持精简,但它开辟的空间很大。目前已交付:✅ 自动路由(v0.2),✅ 节省费用记录(v0.2)。仍有不少值得开发的功能——欢迎提交提案和 PR,其中大多数都很适合作为入门任务:

  • 更智能的路由 — 当前路由器采用易读的启发式规则;更好的信号(或经过训练的路由器)还有很大的探索空间。
  • 更丰富的节省费用仪表板 — 记录采用纯 JSONL 格式;如果能提供 cheaplane stats HTML 视图就很棒。
  • 结果缓存 — 跳过重复任务的再次委派。
  • 自动审查 — 对返回的代码运行 lint 和测试,通过后再决定是否信任。
  • 批量/并行委派 — 一次调用即可交办多项任务。
  • 更多客户端接入方案 — 提醒钩子面向 Claude Code 的 UserPromptSubmit;Cursor、Cline 等工具也需要各自的提醒方式。

设计原则:保持核心为单文件且依赖轻量——这正是整个项目的意义所在。 扩展功能应以可选方式构建,让 5 分钟的阅读体验依然只需 5 分钟。

贡献

欢迎提交 Issue 和 PR——项目只有约 250 行单文件 Python 代码,没有沉重的依赖,很容易上手修改。添加实用的模型别名、路由信号或客户端接入方案,然后提交即可。

许可证

MIT — 参见 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。