令牌保护程序MCP2Skill
使用CLI+Skill替换MCP,节省代码代理令牌消耗
______________________________________________________________________
即使每月订阅,代币也用完了?
在使用Cursor、Claude Code或Qwen Code等代码代理工具时,您是否经常发现令牌不足?
代币=货币每一次谈话都会烧钱,但很少有行动真正产生价值。
试试这个解决方案!它不仅节省了大量的令牌,而且使LLM能够更专注于解决您的问题,而不是被数十个工具的模式分心。
______________________________________________________________________
背景:MCP的令牌消费问题
在过去的一年里,MCP(模型上下文协议)工具生态系统变得非常流行,出现了大量工具。每个人的工具箱里都有几十个MCP工具。
核心问题:
- 巨大的代币消费 -每次对话都会向LLM发送所有MCP工具的完整模式
- 大多数场景实际上并没有使用它们 -MCP工具实际触发的次数非常低
- 但它们必须被发送 -我们无法预测LLM何时需要使用这些工具进行评估,因此每次都必须发送这些工具
这导致了大量的代币浪费。
典型MCP配置:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest"]
},
"sqlite": {
"command": "npx",
"args": ["-y", "@executeautomation/database-server", "/tmp/database.db"]
},
"redis": {
"command": "uvx",
"args": ["redis-mcp-server", "--url", "redis://localhost:6379/0"]
}
}
}______________________________________________________________________
解决方案:CLI+技能模式
这个项目是一个实验,也是一个推荐的模式: 使用本地CLI命令+技能取代传统的MCP工具模式.
核心思想:
- 使用本地CLI命令完成相同的功能
- 需要时,让法学硕士通过Skill给他们打电话
- 虽然一次技能调用会触发更多的LLM交互,但对于每天数百或数千次代码代理调用来说,这是非常划算的
项目测试方法:
此项目使用 Qwen代码 (https://github.com/QwenLM/qwen-code)作为测试平台,取代 剧作家MCP 随着 剧作家CLI技能 比较两种模式之间的令牌消耗。
相关项目:
- 剧作家MCP:https://github.com/microsoft/playwright-mcp
- 剧作家CLI:https://github.com/microsoft/playwright-cli
______________________________________________________________________
代币消费对比测试
测试工具
- 代码代理:Qwen代码
- 比较工具:剧作家MCP vs剧作家CLI技能
- 测试命令:
qwen --openai-logging -p "test echo, pls say hi"
测试数据
| 测试场景 | 提示令牌 | 完成令牌 | 总令牌 | 描述 |
|---|---|---|---|---|
| 基线 | 10492 | 25 | 10517 | 没有技能,没有MCP,只有基本提示和内置工具 |
| +剧作家MCP | 14990 | 23 | 15013 | 增加了22个剧作家MCP工具 |
| +剧作家CLI技能 | 10586 | 26 | 10612 | 移除MCP,切换到技能模式 |
| +3 MCP | 26092 | 26 | 26118 | 剧作家+SQLite+Redis |
数据分析
剧作家MCP与剧作家CLI技能比较:
| 度量 | MCP模式 | 技能模式 | 节省 |
|---|---|---|---|
| 提示令牌 | 14990 | 10586 | 4,404 (29%) |
| 代币总数 | 15013 | 10612 | 4,401 (29%) |
多MCP场景开销:
在添加了3个MCP(Playwright+SQLite+Redis)后,代币消费激增至 26,118,即 2.5倍 基线测试。
主要结论:
- 默认提示和基础工具已消耗约 10000个代币
- 每增加一个MCP都会显著增加消耗(剧作家MCP增加约4.5k)
- 使用10+MCP,消耗变得更加严重
- 添加技能只需要大约 100个代币
MCP工具示例
Playwright MCP包括22个工具,每个工具的模式在每次对话中都会发送:
playwright - Ready (22 tools)
Tools:
- mcp__playwright__browser_click
- mcp__playwright__browser_close
- mcp__playwright__browser_console_messages
- mcp__playwright__browser_drag
- mcp__playwright__browser_evaluate
- mcp__playwright__browser_file_upload
- mcp__playwright__browser_fill_form
- mcp__playwright__browser_handle_dialog
- mcp__playwright__browser_hover
- mcp__playwright__browser_install
- mcp__playwright__browser_navigate
- mcp__playwright__browser_navigate_back
- mcp__playwright__browser_network_requests
- mcp__playwright__browser_press_key
- mcp__playwright__browser_resize
- mcp__playwright__browser_run_code
- mcp__playwright__browser_select_option
- mcp__playwright__browser_snapshot
- mcp__playwright__browser_tabs
- mcp__playwright__browser_take_screenshot
- mcp__playwright__browser_type
- mcp__playwright__browser_wait_for单个工具模式示例(每次对话都发送):
{
"type": "function",
"function": {
"name": "mcp__playwright__browser_tabs",
"description": "List, create, close, or select a browser tab.",
"parameters": {
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": ["list", "new", "close", "select"],
"description": "Operation to perform"
},
"index": {
"description": "Tab index, used for close/select. If omitted for close, current tab is closed.",
"type": "number"
}
},
"required": ["action"],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}
}
}______________________________________________________________________
快速入门:从MCP到技能
1.删除MCP配置
// Delete or comment out
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest"]
}
}
}2.安装Playwright命令行界面
# Install Playwright CLI
npm install -g @playwright/cli3.安装技能
# Install playwright-cli skill
playwright-cli install --skills这会自动将技能文件安装到Qwen Code的技能目录中:
.qwen/
skills/
playwright-cli/
SKILL.md
references/
- request-mocking.md
- running-code.md
- session-management.md
...4.验证令牌节省
再次运行测试命令以比较令牌消耗:
qwen --openai-logging -p "test echo, pls say hi"检查输出中的令牌统计数据,确认从~15k减少到~10.6k。
______________________________________________________________________
实例:创建Web搜索技能
如果你有一个CLI,创建一个技能非常简单。
网络搜索是每个人都需要的一个非常常见的工具。参见 demo_SKILL_for_websearch.md,这是一种人工智能生成的网络搜索技能,可以使用Bing进行搜索并总结结果。
技能档案结构:
---
name: websearch
description: Performs web search using Bing search engine via playwright-cli...
---
# Web Search with Bing and playwright-cli
## Usage Pattern
playwright-cli open https://www.bing.com/
playwright-cli type "your search query"
playwright-cli press Enter
playwright-cli snapshot
...核心思想:
使用 playwright-cli 命令序列替换Playwright MCP的22个工具,并让LLM了解如何通过技能描述调用它们。
代币消费比较:
| 模式 | 代币消费 | 储蓄 |
|---|---|---|
| 剧作家MCP(22种工具) | ~4500 | - |
| 网络搜索技能 | ~100 | 98% |
______________________________________________________________________
问题与思考
问题1:为什么MCP仍然很受欢迎?
综上所述,CLI+Skill模式在节省代币方面具有明显优势。然而,实际上,MCP生态系统仍然非常受欢迎,许多开发人员和公司都在投资MCP工具开发。
这是为什么?
也许我们应该更加努力 本地CLI开发 而不是MCP。
CLI工具的优点:
- 独立于任何代理框架
- 可用于脚本、CI/CD和其他场景
- 更符合Unix哲学:小工具,组合使用
- 不受特定协议的约束,迁移成本低
建议: 如果你有一个好的工具想法,可以考虑先将其制作成CLI,然后考虑是否需要MCP封装。
问题2:技能浪费问题
虽然技能模式比MCP节省了更多的代币,但仍然存在浪费。
服用 开放规范 例如,它生成了几个技能。虽然这些技能只有几百或几千个代币,不占用太多资源,但在实际应用中,像 /opsx:propose 是 手动触发.
问题: 既然这些技能是手动触发的,为什么每次对话都要向LLM发送它们的描述?这些成百上千的代币基本上被浪费了。
进一步思考:
除了MCP/Skill,我们是否还缺少某种形式的 本地命令/工具?
- 仅在本地触发的表单
- 不需要发送给LLM
- 仅在用户明确调用时执行
此表单可能更接近传统的CLI命令,但需要更好地与Agent工具集成。
哦,对了,这正是斜线命令场景!大多数代码代理都支持它。
______________________________________________________________________
相关链接
- Qwen代码: https://github.com/QwenLM/qwen-code
- 剧作家MCP: https://github.com/microsoft/playwright-mcp
- 剧作家CLI: https://github.com/microsoft/playwright-cli
- 开放规范: https://openspec.dev/
- 网络搜索技能示例:
demo_SKILL_for_websearch.md
许可证
麻省理工学院
