此仓库演示了传统工具调用与使用模型上下文协议(MCP)执行代码之间的关键差异。它展示了如何通过分离上下文与执行环境来使AI代理在处理数据密集型任务时更加高效和经济。
该演示基于Anthropic和Cloudflare关于使用MCP执行代码的博客文章。
这里的示例使用本地MCP服务器来展示完整的MCP+代码执行堆栈。MCP服务器模拟延迟并提供合成数据。运行下面的演示或阅读详细说明以了解更多信息。
此演示展示了传统工具调用的一个示例以及使用MCP执行代码的更新示例。
本地MCP服务器(mcp_servers/data_mcp_server.py)获取有关合成用户活动的分页数据,并引入人工延迟(100-200毫秒)以模拟真实API中的延迟。
以下命令执行以下操作:
.env.example复制到.env
.env文件中# 克隆此仓库
git clone https://github.com/sarahcstringer/mcp-code-demo
cd mcp-code-demo
# 创建虚拟环境
python -m venv venv
source venv/bin/activate # 在Windows上:venv\Scripts\activate
# 安装依赖项
pip install -r requirements.txt
# 设置您的API密钥
cp .env.example .env
# 编辑.env并添加您的ANTHROPIC_API_KEY
# 生成MCP工具包装器(用于示例2)
python generate_wrappers.py
MCP工具包装器用于代码执行MCP示例。
python examples/traditional_tool_calling.py
此示例演示了传统的MCP工具调用,其中所有工具结果都通过上下文窗口传递。代理通过从MCP服务器获取用户活动数据来分析分页API日志。
MCP服务器暴露:
get_total_pages() - 返回总页数(30)get_data_chunk(page) - 返回包含10个用户活动记录的字典每个记录包含:
{
"id": 1,
"user_id": "user_3",
"activity": "login",
"timestamp": "2024-01-01T00:00:00Z",
"metadata": {
"duration_seconds": 45,
"success": true
}
}
任务: 计算总失败活动次数,识别最活跃用户,并计算平均持续时间。
发生了什么:
get_total_pages() → 获取30。get_data_chunk(1)、get_data_chunk(2)等,对所有30页进行调用,每次向上下文中添加10条记录。python examples/code_execution.py
注意:您必须先通过运行
python generate_wrappers.py生成mcp_tools/目录
此示例执行与前一个示例相同的任务,但使用代码执行而不是传统的工具调用。它遵循Anthropic的模式使用MCP执行代码。
发生了什么:
mcp_tools/目录并读取其Python包装器)来发现它们。传统的工具调用将所有MCP工具描述、参数模式、返回类型和使用说明提前加载到上下文窗口中。然后,随着代理依次协调工具调用,所有中间结果通过LLM的上下文窗口发送。
代码执行允许动态发现——代理通过探索文件系统来查找可用工具并读取它们的实现。它在单独的执行环境中运行处理过程,并仅将最终结果发送回上下文。
这可以显著减少数据密集型任务的令牌使用量,同时启用新的功能,如轮询、等待和有状态处理。

实现说明:现代代理框架如Claude Code和Cloudflare Agents内置了代码执行环境。然而,您可以通过给LLM一个执行命令的bash工具来实现相同模式——这是这些示例中采用的方法。
安全考虑:当赋予LLM执行代码的能力时,应实施适当的护栏措施,例如沙箱化、敏感操作的人工审核、执行前的代码审查以及限制文件系统/网络访问。只在您可以验证和信任正在执行的内容的环境中运行代码。
即使在同一任务和模型下,令牌使用也会有所不同。在此演示测试中,我看到了以下结果:
mcp-code/
├── examples/ # 可运行示例
│ ├── traditional_tool_calling.py # 示例1:传统的MCP工具调用
│ └── code_execution.py # 示例2:代码执行+MCP(文件系统包装器)
├── mcp_servers/ # 演示用的MCP服务器
│ └── data_mcp_server.py # MCP服务器:分页数据获取工具
├── mcp_tools/ # 自动生成的Python包装器(运行generate_wrappers.py)
│ ├── __init__.py # 包导出
│ ├── mcp_client.py # 处理实际的MCP通信
│ └── data_tools.py # 数据工具MCP服务器的包装器
├── generate_wrappers.py # 从MCP服务器生成mcp_tools/的脚本
├── WRITEUP.md # 演示的详细说明及我对概念的看法
├── README.md # 此文件
└── requirements.txt # Python依赖项