███╗ ███╗ ██████╗██████╗ ██████╗ ████████╗██╗ ██╗
████╗ ████║██╔════╝██╔══██╗ ██╔══██╗╚══██╔══╝██║ ██╔╝
██╔████╔██║██║ ██████╔╝█████╗██████╔╝ ██║ █████╔╝
██║╚██╔╝██║██║ ██╔═══╝ ╚════╝██╔══██╗ ██║ ██╔═██╗
██║ ╚═╝ ██║╚██████╗██║ ██║ ██║ ██║ ██║ ██╗
╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝mcp-rtk
  
MCP代理从工具响应中减少60-90%的令牌
*将其放在任何MCP服务器前。同样的工具,更少的代币。*
______________________________________________________________________
问题
MCP服务器返回原始API响应。一个 list_issues GitLab的调用可以将180K多个JSON令牌转储到您的上下文中:带有头像URL的完整用户对象,到处都是空字段,没有人要求的嵌套元数据。你为这一切付出代价。
mcp-rtk做什么
它作为透明代理位于Claude和MCP服务器之间。工具调用不会发生变化,但响应在进入上下文窗口之前会通过8级过滤器管道进行压缩。
Claude ←(stdio)→ mcp-rtk ←(stdio)→ upstream MCP serverLLM在一小部分令牌中获得相同的信息。
安装
cargo install mcp-rtk快速启动
用以下命令包装现有的MCP服务器命令 mcp-rtk --克劳德代码配置中的一行更改。
之前 (~/.claude.json):
{
"mcpServers": {
"gitlab": {
"command": "npx",
"args": ["-y", "@nicepkg/gitlab-mcp"],
"env": { "GITLAB_PERSONAL_ACCESS_TOKEN": "glpat-..." }
}
}
}之后:
{
"mcpServers": {
"gitlab": {
"command": "mcp-rtk",
"args": ["--", "npx", "-y", "@nicepkg/gitlab-mcp"],
"env": { "GITLAB_PERSONAL_ACCESS_TOKEN": "glpat-..." }
}
}
}mcp-rtk从命令中检测上游服务器,并自动加载匹配的预设。
过滤器管路
每个响应都要经过8个阶段,顺序如下:
| 阶段 | 效果 |
|---|---|
keep_fields | 白名单:仅保留指定字段 |
strip_fields | 黑名单:递归删除以下字段 avatar_url, _links |
condense_users | {id, name, username, avatar_url, ...} 成为 "username" |
strip_nulls | 放下一切 null 以及空字符串值 |
flatten | {"data": [...]} 成为 [...] |
truncate_strings | N个字符的大写长字符串(描述、差异) |
collapse_arrays | 保留前N项,追加 "... and X more" |
custom_transforms | 基于正则表达式的字符串替换 |
即使没有预设,也会应用通用默认值:空剥离、用户压缩、展平和字段删除。仅此一项通常就能节省30-40%。
预设
预设是具有特定工具过滤规则的TOML文件。mcp-rtk附带了社区维护的预设,并根据上游命令自动检测使用哪个预设。
| 预设 | 检测自 | 涵盖的工具 |
|---|---|---|
gitlab | gitlab-mcp, gitlab | 跨MR、问题、管道、提交、项目、标签、发布的45多种工具 |
grafana | mcp-grafana, grafana | 15+仪表板、数据源、普罗米修斯、洛基工具 |
您可以强制执行特定的预设:
mcp-rtk --preset gitlab -- node my-custom-gitlab-server.js预设是什么样子的
每个预设都定义了在通用默认值之上合并的每个工具的规则。以下是GitLab预设的摘录:
[tools.list_merge_requests]
keep_fields = ["iid", "title", "state", "author", "source_branch", "target_branch", "web_url"]
max_array_items = 20
condense_users = true
[tools.get_merge_request_diffs]
keep_fields = ["old_path", "new_path", "diff", "new_file", "deleted_file"]
truncate_strings_at = 2000
max_array_items = 50
[tools.list_issues]
keep_fields = ["iid", "title", "state", "author", "labels", "assignees", "web_url"]
max_array_items = 20
condense_users = true完整的GitLab预设涵盖了合并请求、管道、作业、问题、提交、文件、项目、成员、标签、发布和事件。
外部预设(自动发现)
放下任何 .toml 将文件预设为 ~/.local/share/mcp-rtk/presets/ 启动时会自动发现。无需重新编译,也不需要更改配置。
~/.local/share/mcp-rtk/presets/
github.toml
slack.toml
my-internal-api.toml外部预设使用相同的 [tools.*] 格式为内置预设。添加可选 [meta] 带有检测关键字的部分,以启用来自上游命令的自动检测:
# ~/.local/share/mcp-rtk/presets/github.toml
[meta]
keywords = ["github-mcp", "github"]
[tools.list_repos]
keep_fields = ["id", "name", "full_name", "description", "html_url", "language"]
max_array_items = 20
[tools.get_issue]
keep_fields = ["number", "title", "state", "body", "user", "labels", "assignees"]
truncate_strings_at = 1500
condense_users = true没有 [meta],该预设仍可用于 --preset (其中name=不带文件名的文件名 .toml).
外部预设由获取 mcp-rtk presets pull 并由脚手架支撑 mcp-rtk presets init,因此生态系统无需等待内置版本即可增长。
热重载
外部预设为 热重新加载 当代理正在运行时。当您添加、编辑或删除 .toml 归档 ~/.local/share/mcp-rtk/presets/,mcp-rtk检测到变化,并在500毫秒内自动重建过滤引擎。飞行中的请求使用之前的规则完成,而新的请求使用更新的规则。无需重新启动。
这使得迭代过滤规则变得容易:编辑预设、保存,下一次工具调用将使用新的配置。
创建自己的预设
如果您使用的MCP服务器没有内置预设,您可以将自己的设置为TOML配置:
# ~/.config/mcp-rtk/my-server.toml
[filters.default]
strip_nulls = true
condense_users = true
truncate_strings_at = 800
max_array_items = 25
strip_fields = ["avatar_url", "_links", "metadata"]
flatten = true
[filters.tools.list_items]
keep_fields = ["id", "name", "status", "created_at"]
max_array_items = 15
[filters.tools."get_*"] # glob pattern — matches all get_ tools
truncate_strings_at = 1500
strip_fields = ["internal_id", "legacy_data"]然后通过 --config:
mcp-rtk --config ~/.config/mcp-rtk/my-server.toml -- your-mcp-server或者将其作为预设放入 ~/.local/share/mcp-rtk/presets/ 用于自动发现(使用 [tools.*] 带可选项的格式 [meta] 部分而不是 [filters.*]).
贡献预设
为您使用的MCP服务器找到了好的过滤规则?提交预设,以便其他人也能从中受益。
- 在中创建TOML文件
config/presets/以服务器命名(例如。,github.toml) - 添加特定于工具的筛选规则(查看
gitlab.toml或grafana.toml供参考) - 在中注册
src/config.rs在PRESETS带有检测关键字的数组 - 打开合并请求
MCP服务器获得的预设越多,每个人保存的令牌就越多。
配置
对于希望调整过滤器行为超出预设范围的高级用户。
mcp-rtk --config ~/.config/mcp-rtk/custom.toml -- npx @nicepkg/gitlab-mcp[filters.default]
strip_nulls = true
condense_users = true
truncate_strings_at = 500
max_array_items = 20
strip_fields = ["avatar_url", "_links", "time_stats"]
flatten = true
custom_transforms = [
{ pattern = "https://gitlab\\.com/[^ ]+", replacement = "[link]" }
]
[filters.tools.get_merge_request_diffs]
truncate_strings_at = 2000
[filters.tools.list_merge_requests]
keep_fields = ["iid", "title", "state", "author", "source_branch", "target_branch"]
max_array_items = 15
[tracking]
enabled = true
db_path = "~/.local/share/mcp-rtk/metrics.db"用户配置会覆盖预设规则。特定工具 strip_fields 和 custom_transforms 与默认值连接,其他所有内容都会替换它们。
工具名称支持glob模式: * 匹配任何序列, ? 匹配单个字符。精确匹配总是优先于模式。
命令
mcp-rtk gain
查看您已保存的令牌数量。
mcp-rtk gain # summary with per-tool breakdown
mcp-rtk gain --history # last 50 calls with individual details
mcp-rtk gain --export json # machine-readable JSON output for scriptingmcp-rtk discover
扫描您的Claude Code会话日志,找到尚未代理的MCP服务器,并估计您可以节省多少令牌。
mcp-rtk discover # last 30 days
mcp-rtk discover --days 7 # last weekmcp-rtk install
使用MCP-rtk自动将MCP服务器包装在配置文件中。扫描stdio服务器并重写其命令/args。
mcp-rtk install .mcp.json # wrap all stdio servers
mcp-rtk install .mcp.json --server gitlab # wrap only the "gitlab" servermcp-rtk uninstall
在配置文件中从mcp服务器中删除mcp-rtk包装。
mcp-rtk uninstall .mcp.json # unwrap all servers
mcp-rtk uninstall .mcp.json --server gitlab # unwrap only "gitlab"mcp-rtk presets
浏览、创建和获取预设。
mcp-rtk presets list # show all available presets
mcp-rtk presets show gitlab # print the full TOML for a preset
mcp-rtk presets init # interactive preset scaffolding
mcp-rtk presets init -o my.toml
mcp-rtk presets pull https://example.com/preset.toml # fetch a community preset
mcp-rtk presets pull https://example.com/preset.toml -o custom.tomlmcp-rtk validate-preset
在使用预设或配置文件之前,请检查其语法错误和潜在问题。
mcp-rtk validate-preset my-preset.tomlmcp-rtk dry-run
在不运行代理的情况下从stdin测试JSON过滤器。统计数据转到stderr,过滤JSON到stdout。
echo '{"id":1,"title":"test","avatar_url":"...","_links":{}}' | mcp-rtk dry-run --preset gitlab --tool list_issues
cat response.json | mcp-rtk dry-run --config custom.toml --tool get_merge_requestmcp-rtk diff
显示原始JSON和过滤JSON之间的彩色并排差异。从stdin读取。
cat response.json | mcp-rtk diff --preset gitlab --tool list_merge_requests
cat response.json | mcp-rtk diff --config custom.toml --tool get_merge_request安全
响应被过滤,从不被阻止。一些护栏可以让事情变得可预测:
- 10 MB响应上限:过大的响应在解析前会被截断
- 128级递归限制,与serde_json的默认值匹配
- 字符串截断遵循UTF-8字符边界
- 非JSON响应仅应用字符串截断即可通过
- 图像和资源将原封不动地转发
