如何从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,否则模型无法获取完整上下文很难修正工具调用方式。
阅读全文