dsh-mcp-proxy
ben7am1n
Context-cheap lazy MCP access for DeepSeek Harness
PROJECT TOPICS
PROJECT README
通过读取软件/游戏企划书、半成品项目或资料,预估特定 LLM 模型的 token 消耗量,并按各家厂商官方定价实时预估计费。
支持 DeepSeek Harness 插件 + MCP 服务器 双形态 — Claude Desktop / Cursor / Trae / Cline / DSH 等 AI 工具都能用。
这个工具就是回答这些的。算法基于真实研究数据(SWE-bench / Aider / Lost in the Middle / COCOMO II / Kernighan's Law)。
词元预算/
├── packages/
│ ├── core/ 平台无关核心:模型表 / 定价表 / tokenizer / 文件计数 / 项目预算估算器
│ ├── dsh-plugin/ DeepSeek Harness 原生插件(注册为 Agent 工具)
│ └── mcp-server/ MCP 服务器(暴露给所有 MCP 客户端)
└── examples/
└── 示例-企划书.md 示例输入
| 工具 | 说明 |
|---|---|
estimate-tokens |
估算文本/路径的 token 数(单模型精确) |
estimate-cost |
多模型对比,按厂商官方定价计费,输出 Markdown/JSON 报告 |
list-models |
列出所有支持模型(可按厂商过滤) |
list-pricing |
列出定价表(可查分段定价) |
plan-project-budget |
核心:企划书 + 半成品 + 资料 → 完整 8 阶段预算清单(P10/P50/P90) |
refresh-pricing |
让 AI 自己用 WebFetch/WebSearch 去搜最新价(生成任务清单) |
apply-pricing-update |
接收 AI 搜回来的价格,校验+合并到定价表 |
estimate-github-project |
自动拉 GitHub 仓库(README + docs/ + 源码)→ 直接算预算 |
定价变化频繁。内置表每季度更新一次;如需最新价,调用
refresh-pricing让 AI 自己去搜。
不是"称文件大小",而是把开发拆成 8 个阶段 估算每阶段 token × 调用轮数:
| # | 阶段 | 基准输入 K | 基准输出 K | 默认调用轮数 |
|---|---|---|---|---|
| 1 | 需求分析与规格书 | 20 | 15 | 3 |
| 2 | 系统设计与架构 | 40 | 25 | 4 |
| 3 | 数据建模 | 30 | 20 | 3 |
| 4 | 核心代码生成 | 65 | 98 | 12 |
| 5 | UI 与前端实现 | 60 | 100 | 10 |
| 6 | 测试与 QA | 100 | 60 | 15 |
| 7 | 文档撰写与本地化 | 60 | 96 | 5 |
| 8 | 发布与运维配置 | 40 | 30 | 4 |
[R1] 参考资料(Lost in the Middle, arxiv 2307.03172):
[R2] 半成品代码(SWE-bench 实测 + COCOMO II):
(LOC/10K)^1.2 × 5%(SWE-bench 幂律)[R3] bug / 技术债(Kernighan's Law + DEVLoRe):
Cost_debug = 2.0 × Cost_write × (1+TD_ratio)TODO/FIXME/HACK/XXX 注释密度(每 100 LOC > 1 个开始惩罚,最多 +50%)| 场景 | 完成度 | bug 密度 | 测试覆盖 | 总 tokens | DeepSeek Flash |
|---|---|---|---|---|---|
| 无半成品(从零写) | 0% | — | — | 74M | ¥96 |
| 半成品(本仓库) | 93% | 0.15/100 | 9% | 16M | ¥20(省 79%) |
| 半成品 + bug 爆表 | 50% | 67/100 | 0% | 118M | ¥152(贵 59%) |
git clone <your-fork> 词元预算
cd 词元预算
npm install
# 估算文本
node packages/core/src/cli.js --text "你的企划书全文..." --models gpt-4o,deepseek-chat
# 扫描半成品项目目录
node packages/core/src/cli.js ./my-game-project --calls 100 --currency CNY
# 已知 token 数直接估
node packages/core/src/cli.js --input-tokens 120000 --output-tokens 8000 --calls 50
# 列出所有模型
node packages/core/src/cli.js --list-models
# 装到 web profile
dsh plugin --profile web add ./packages/dsh-plugin
# 重启 dsh web
dsh web
Agent 会自动获得 8 个工具。
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"token-budget": {
"command": "node",
"args": ["E:/词元预算/packages/mcp-server/src/index.js"]
}
}
}
Cursor / Trae / Cline / Continue / 任何支持 MCP 的客户端 配置同上,改 args 路径即可。
环境变量:
TB_DISPLAY_CURRENCY — 默认输出货币(USD 或 CNY)TB_FORCE_HEURISTIC — 1 强制启发式估算(不依赖 gpt-tokenizer)TB_FX_USD_TO_CNY — USD→CNY 汇率覆盖Agent: 我把企划书发给你了,半成品代码在 ./my-project,资料在 ./docs。
[调用 plan-project-budget(
docPath: "./企划书.md",
codePath: "./my-project",
materialPath: "./docs",
workflow: "aider_loop",
displayCurrency: "CNY"
)]
→ 返回 8 阶段分解 + 15 个模型对比 + 每阶段折扣来源 + U 形 / bug 惩罚明细
Agent: 帮我估一下把 vercel/next.js 重构的预算。
[调用 estimate-github-project(
repo: "vercel/next.js",
token: "ghp_xxx", # 可选,匿名也行(60 次/小时)
displayCurrency: "CNY",
debug: true # 可选,带详细调试日志
)]
→ 自动拉 README + docs/ + 源码 → 8 阶段预算
Agent: 内置价格可能过时,请刷新 openai 和 deepseek 的价格。
[调用 refresh-pricing(providers: ["openai","deepseek"])]
← 返回任务清单:每家厂商的官方定价页 URL + schema
[AI 自己用 WebFetch 抓 openai.com/api/pricing, api-docs.deepseek.com]
[调用 apply-pricing-update(prices: [{modelId:"gpt-4o", input:2.5, output:10, ...}])]
← 返回"成功合并 N 个模型"
[调用 estimate-cost(...)] → 用新价算
已知输入 50K tokens,对话 1000 轮,请对比成本。
[调用 estimate-cost(inputTokens=50000, calls=1000, models=["deepseek-v4-flash","gpt-5.4-nano"])]
任何 plan / estimate-github 调用加 debug: true,返回 debugLogs 数组:
| 模型族 | 方式 | 说明 |
|---|---|---|
| GPT-4o / 4.1 / 5 / o 系列 / Grok | 精确 (o200k_base via gpt-tokenizer) | 与 OpenAI API 完全一致 |
| GPT-4 / Llama 3 (近似) | 精确 (cl100k_base) | OpenAI 旧编码 |
| Claude 4.7+ (Opus/Sonnet 4.6/5 等) | 估算 (o200k × 1.3) | 新 tokenizer 未开源,按 Anthropic 公告 35% 放大 |
| Gemini | 启发式 | Google 未开源 |
| DeepSeek / Qwen / GLM / Kimi / 豆包等 | 启发式 | 中文 ~1.5 字符/token |
| 任意模型 | 启发式回退 | 当 gpt-tokenizer 未安装时自动启用 |
packages/dsh-plugin/cordis.patch.yml:
- insert:
- id: token-budget
name: ${DSH_PLUGIN_DIR}/src/index.js
config:
displayCurrency: USD # 默认输出货币
defaultCacheHitRatio: 0 # 默认缓存命中比例
defaultOutputRatio: 0.3 # 输出/输入比例
forceHeuristic: false # 强制启发式
# pricingOverrides: # 自定义定价覆盖
# gpt-4.1: { input: 2.00, output: 8.00, currency: USD }
packages/
├── core/
│ ├── src/
│ │ ├── models.js 模型元数据(厂商、tokenizer、上下文长度)
│ │ ├── pricing.js 定价表(含分段定价、缓存价)
│ │ ├── pricing-tasks.js AI 自主搜价任务生成器(refresh-pricing)
│ │ ├── tokenizer.js 精确 tokenizer + 启发式回退
│ │ ├── counter.js 文件/目录递归计数器 + 技术债扫描
│ │ ├── calculator.js 成本计算 + Markdown/JSON 报告
│ │ ├── project-estimator.js 8 阶段项目预算算法([R1][R2][R3] 论文依据)
│ │ ├── github-fetcher.js GitHub REST API 拉取器
│ │ ├── cli.js 独立 CLI 入口
│ │ └── index.js 统一入口
│ └── package.json
├── dsh-plugin/
│ ├── src/index.js DSH 插件入口(注册 8 个工具给 Agent)
│ ├── cordis.patch.yml 配置补丁
│ └── package.json
└── mcp-server/
├── src/index.js MCP 服务器(stdio 协议,8 个工具)
└── package.json
详见 PUBLISH.md。三种分发方式:
npm install 即可)# 给包起个统一名
cd packages/core && npm version 0.1.0 && npm publish --access public
cd packages/mcp-server && npm version 0.1.0 && npm publish --access public
cd packages/dsh-plugin && npm version 0.1.0 && npm publish --access public
别人就能直接:
{
"mcpServers": {
"token-budget": { "command": "npx", "args": ["-y", "@token-budget/mcp-server"] }
}
}
# 推到你的 GitHub 仓库
git remote add origin https://github.com/<your-username>/token-budget.git
git push -u origin main
# 打 Release
gh release create v0.1.0 --title "v0.1.0 首发版" --notes-file CHANGELOG.md
别人用:
dsh plugin --profile web add https://github.com/<your-username>/token-budget/archive/refs/tags/v0.1.0.tar.gz
发布到 npm 后,去 DeepSeek Harness 插件市场 提 PR 登记 package.json 即可。
MIT — 随便用、随便改、欢迎 PR。
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。