如何从Low-Level到FastMCP搭建,实现MCP实战的演进?
摘要:🚀 核心挑战:如何为复杂数据分析任务构建可扩展的代码沙箱工具?本文将以E2B沙箱为例,通过对比Low-Level与FastMCP两种MCP-Server实现方案,深入剖析:
- ResourceTo
🚀 核心挑战:如何为复杂数据分析任务构建可扩展的代码沙箱工具?本文将以E2B沙箱为例,通过对比Low-Level与FastMCP两种MCP-Server实现方案,深入剖析:
Resource/Tool/Prompt的高阶应用场景
数据分析coding任务的难点和解决方案
FastMCP在原有mcp-server的基础上做了哪些开发简化
Cluade的经典Demo多是用low level构建,而在最新版本中推出了高级FastMCP,但是工程上的简化,意味着很多功能被隐藏,所以更适合从low level一步步走过来对MCP设计每一步都很清晰得高级使用用户,而非新手小白。
这里我选了基于E2B的coding沙箱来搭建MCP server,刚好为下一章我们手搓数据分析智能体做个铺垫,完整代码详见: DAAgent
Coding MCP
🔥 真实场景的复杂性:生产级数据分析智能体中的Coding工具远非Python REPL可胜任,核心痛点在于三类数据流的信息传递:
数据流类型
挑战场景
本方案解决思路
code2code
多段代码块变量传递
持久化存储(CSV/JSON)
code2llm
执行上下文(stdout/error)
结构化日志捕获
code2human
结果可视化
Jupyter Notebook组装
那基于以上3点考量,我们要设计的coding MCP server就需要具备以下功能
sandbox initialize & stop:沙箱创建和销毁
upload file:数据分析场景往往依赖前置输出的csv数据文件
execude code:最后才是coding工具默认拥有的代码执行工具
🔍 和其他的一些sandbox mcp相比在工具设计上有几点不同
常见功能
本方案实现方式
选择依据
库安装❌
利用kernle内核内嵌!pip
Coding一致性更好,很多library是在code运行过程中发现的,而非在coding之前制定
文件下载❌
捕捉所有多模态的执行结果直接返回
对输出文件的目录管理会更加灵活
单步代码执行❌
显式create/destroy沙箱支持多步coding
复杂任务通过多步coding传递中间变量和持久化文件,同时避免多次pip的时间浪费
Low-Level Server
下面我们先用Low-level Server框架来设计Coding MCP。按前面的设计,我们分别需要initialize sandbox,stop sandbox,upload file,execute code这四个工具。
除了执行代码之外的前三个工具,它们都可以使用文本输出格式,他们传递给模型的信息相对简单就是是否成功创建、销毁沙箱、以及是否成功上传文件,以及对应的沙箱ID标识和文件上传目录。所以这三个工具我选择了文本格式的输出。代码执行工具这里,我选择了结构化输出,这样可以更有效的拆分代码执行后的各种不同日志类型,方面后面的coding步骤定位修复问题。
需要注意的是,构建MCP 工具时不仅要全面完整输出成功日志,对于报错也要有详细的日志输出,必要时需要返回traceback,否则模型无法获取完整上下文很难修正工具调用方式。
