MCP、Code 或 Commands?AI 工具集成的决策框架
Source: Dev.to
决策框架
快速决策指南
| 情景 | 推荐方法 |
|---|---|
| 重复任务(>20 次执行),大数据集,需要可预测的成本 | MCP Optimized |
| 一次性探索,需求不断演进,原型开发 | Code‑Driven (Skills) |
| 用户必须控制何时运行,需要确定性行为 | Slash Commands |
| 具备安全要求的生产系统 | MCP Optimized(绝不使用 Skills) |
决策流程图
Q1: 一次性任务 ( 100 行 AND 需要 20 AND 需求稳定?
YES → MCP Optimized
NO → Code‑Driven (原型,然后迁移)
NEVER:
- MCP Vanilla 用于生产(始终次优)
- Skills 用于多用户或敏感系统
三种方法详解
MCP(模型上下文协议)
一种用于 AI 工具通信的结构化协议。模型使用 JSON 参数调用工具,服务器执行并返回结构化结果。
// MCP 工具调用 – 结构化、类型化、已验证
await call_tool('analyze_csv_file', {
file_path: '/data/employees.csv',
analysis_type: 'salary_by_department'
});
特性: 结构化 I/O、访问受控、由模型决定调用、可跨应用复用。
关键区别: vanilla MCP(直接传递数据)与 optimized MCP(传递文件引用)之间存在 5 倍的 token 差异。协议相同,经济性却大相径庭。
Code‑Driven(Skills 与代码生成)
模型编写并执行代码来完成任务。Claude Code 的 “skills” 功能让模型基于语义匹配调用能力。
# Claude 编写此代码,执行并迭代
import pandas as pd
df = pd.read_csv('/data/employees.csv')
result = df.groupby('department')['salary'].mean()
print(result)
特性: 最大灵活性、非结构化 I/O、运行间差异大、需要沙箱环境。
Slash Commands
纯字符串替换。你输入 /review @file.js,命令模板展开,结果注入到你的消息中。
Review the following file for security vulnerabilities,
performance issues, and code quality:
{file_content}
Focus on: authentication, input validation, error handling.
特性: 用户显式、确定性、单回合、零工具调用开销。
实测数据:数字说明
方法论
- 工作负载: 加载 500 行 CSV,进行分组、汇总统计,并生成两张图表。
- 模型: Claude Sonnet,默认设置。
- 运行次数: 每种方法 3–4 次,记录请求/响应负载。
- 成本计算: 基于当前 Claude Sonnet 定价。
Token 消耗

| 方法 | 平均 tokens/次 | 相对基准 | 原因 |
|---|---|---|---|
| MCP Optimized | 60,420 | -55% | 文件路径参数;零数据重复 |
| MCP Proxy(热缓存) | 81,415 | -39% | 共享上下文 + 热缓存 |
| Code‑Skill(基准) | 133,006 | — | 模型生成的 Python;无缓存 |
| UTCP Code‑Mode | 204,011 | +53% | 额外的提示框架 |
| MCP Vanilla | 309,053 | +133% | 每次调用中 JSON 序列化数据 |
大规模成本
| 方法 | 单次执行 | 月成本 | 年成本 |
|---|---|---|---|
| MCP Optimized | $0.21 | $210 | $2,520 |
| Code‑Skill | $0.44 | $440 | $5,280 |
| MCP Vanilla | $0.99 | $990 | $11,880 |
结果: 对单一工作流而言,优化版与 vanilla MCP 每年相差 $9,360。
可扩展性

| 方法 | 缩放系数 | 10K 行预测 |
|---|---|---|
| MCP Optimized | 1.5× | ~65K tokens |
| Code‑Skill | 1.1–1.6× | ~150–220K tokens |
| MCP Vanilla | 2.0–2.9× | ~500–800K tokens |
MCP Optimized 展现 亚线性扩展,因为文件路径的 token 消耗与文件大小无关;而 MCP Vanilla 因 JSON 序列化大数据集而出现 超线性扩展。
方差
| 方法 | 变异系数 | 一致性 |
|---|---|---|
| MCP Optimized | 0.6% | 优秀 |
| MCP Proxy(热缓存) | 0.5% | 优秀 |
| Code‑Skill | 18.7% | 较差 |
| MCP Vanilla | 21.2% | 较差 |
MCP Optimized 的运行结果紧密聚集(60,307 – 60,808 tokens)。Code‑Skill 在 108K 到 158K tokens 之间波动,导致容量规划困难。
延迟
Skills 和子代理使用工具调用,会增加一次额外的 LLM 调用:
用户消息 → 模型决定 → 工具调用 → 工具结果 → 最终响应
Slash commands 省去这一步;它们是简单的提示注入,直接得到响应。
关键经验
1. 架构胜于协议
同一协议下,MCP Optimized 与 MCP Vanilla 之间的 5 倍 token 差异完全来源于 架构:文件路径 vs. 数据数组。应优先考虑数据流设计,而非仅争论协议本身。
2. 文件路径模式
通过引用而非原始数据消除数据重复。
// 反模式:仅数据就要 10,000 tokens
await call_tool('analyze_data', {
data: [/* 500 行序列化 */]
});
// 正确模式:同样操作约 50 tokens
await call_tool('analyze_csv_file', {
file_path: '/data/employees.csv'
});
MCP 服务器在内部处理文件 I/O,数据永不进入模型的上下文窗口。
3. 用 Skills 原型,用 MCP 上线
Skills(代码生成)非常适合快速原型和发现所需工具。但它们执行任意代码,不适合对安全性和可预测性有要求的生产系统。
4. Slash Commands 被低估了
当需要确定性、用户可控的工作流时,Slash Commands 取胜。它们没有工具调用开销,不会出现模型意外,且无延迟惩罚。适用于用户明确触发的简单、可重复操作。