关于 promptbudget-mcp
promptbudget-mcp 是用于按 LLM 令牌预算处理文本的 MCP 服务,提供计数、截断和分块功能,适合整理提示词、聊天记录及长文档。
主要功能
- 01估算令牌数与超出量
- 02使用四种策略截断文本
- 03将文本拆分为预算内的块
- 04为文本块添加重叠内容
适用场景
- 01检查文本是否符合提示词上限
- 02在有限预算内保留最新聊天记录
- 03分块处理长文档
MCP 相关
通过 stdio 向 MCP 客户端提供 count_tokens、truncate_to_token_budget 和 chunk_to_budget 工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
3收录的工具列表 · 更新于 3 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| text | string | 是 | |
| max_tokens | integer | 否 | 可选。如果提供,响应会包含 'fits' 和 'overflow_tokens'。 |
| chars_per_token | integer | 否 | 每个 token 的近似字符数。默认值为 4(OpenAI 经验法则)。 |
详细介绍
@mukundakatta/promptbudget-mcp
用于按令牌预算处理文本的 MCP 服务。包含三个工具:count、truncate、chunk。适用于 LLM 准备上下文、调整聊天历史,或通过提示词输入较长的源文档时。
工具
| 工具 | 功能 |
|---|---|
count_tokens(text, max_tokens?, chars_per_token?) | 预检。返回 tokens。指定 max_tokens 后,还会返回 fits 和 overflow_tokens。 |
truncate_to_token_budget(text, max_tokens, strategy?, ...) | 裁剪文本,使其符合预算。提供 4 种策略:head、tail、head_tail、smart_cut。 |
chunk_to_budget(text, max_tokens, overlap_tokens?, ...) | 将长文本拆分为多个符合预算的文本块,并可选择设置重叠内容。 |
裁剪策略
| 策略 | 丢弃内容 | 适用场景 |
|---|---|---|
head | 尾部 | 想从开头开始总结的长源文档 |
tail(默认) | 头部 | 最新内容最重要的聊天历史 |
head_tail | 中间 | 指令和最新一轮都很重要 |
smart_cut | 中间,并显示标记 | 与 head_tail 相同,但会让模型知道内容已被截断 |
实际工作流
###“这段内容能放进我的提示词吗?”
// Tool call from your agent
{
"name": "count_tokens",
"arguments": { "text": "<...long text...>", "max_tokens": 4096 }
}
// Returns:
{ "tokens": 5230, "max_tokens": 4096, "fits": false, "overflow_tokens": 1134, "chars_per_token": 4 }
如果 fits: true,则原样发送。如果 fits: false,则在 truncate_to_token_budget(丢失信息)和 chunk_to_budget(多次调用 LLM)之间做出选择。
###“让这段内容符合预算,并保留最新内容”
{
"name": "truncate_to_token_budget",
"arguments": { "text": "<chat history>", "max_tokens": 4096, "strategy": "tail" }
}
// Returns:
{ "truncated": "...", "original_tokens": 5230, "truncated_tokens": 4096, "strategy_used": "tail" }
###“将这份 50k-token 文档导入我的 RAG”
{
"name": "chunk_to_budget",
"arguments": { "text": "<long doc>", "max_tokens": 512, "overlap_tokens": 50 }
}
// Returns:
{
"chunks": ["...", "...", "..."],
"chunk_count": 110,
"total_tokens": 50000,
"chunk_max_tokens": 512,
"overlap_tokens": 50
}
overlap_tokens 值可让分块边界处的句子在下一个文本块中仍保留上下文,这对 RAG 检索质量很重要。
令牌计数准确性
默认值 chars_per_token = 4 是 OpenAI 的经验法则。对英文而言,准确度在约 10–15% 以内。要针对特定模型准确计数,可代入实际分词器的每令牌字符数比值:
| 分词器 | 每令牌字符数(英文) |
|---|---|
cl100k_base(GPT-4、GPT-3.5) | ~4 |
o200k_base(GPT-4o) | ~4.5 |
| Claude 分词器 | ~3.5 |
| Llama 3 | ~3.8 |
对于非英文文本,需要进一步调低比值(中文约为 1 个字符/令牌,代码约为 3 个字符/令牌)。
安装 — Claude Desktop
{
"mcpServers": {
"promptbudget": {
"command": "npx",
"args": ["-y", "@mukundakatta/promptbudget-mcp"]
}
}
}
Cursor / Cline / Windsurf / Zed 的配置格式相同。
直接运行(无需 MCP 客户端)
npx -y @mukundakatta/promptbudget-mcp
该服务通过 stdio 使用 MCP 通信。可搭配 mcptools 或你选择的客户端使用。如果终端没有任何输出,这是正常的:stdio 服务会静默等待 MCP 客户端连接。
同系列库
Rust crate promptbudget 使用纯 Rust 实现了相同逻辑,适合希望将算法链接到非 MCP 环境中的场景。
更新日志
- 0.2.0(2026-05-10)— 新增
count_tokens(预检)和chunk_to_budget(拆分并重叠)。README 新增工作流示例和分词器比值表。 - 0.1.1(2026-05-09)— 新增
mcpName字段,以兼容 MCP Registry。 - 0.1.0(2026-05-09)— 首次发布,包含
truncate_to_token_budget。
许可证
MIT OR Apache-2.0。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。