写点什么

一次集成,减少 80% 适配工作!从 0 到 1 开发一款 MCP Server 难不难?

  • 2025-06-19
    北京
  • 本文字数:3864 字

    阅读完需:约 13 分钟

大小:140.21K时长:00:47
一次集成,减少80%适配工作!从0到1开发一款MCP Server难不难?

硅谷的咖啡厅里,永远流传着这样的传说:一个天才开发者,一台电脑,一段颠覆行业的代码。但当 31 岁的 Maor Shlomo 在特拉维夫的公寓里敲下 Base44 的第一行代码时,他没想到这个故事会以 8000 万美元的现金收购落幕——没有风投加持,没有百人团队,只有 8 名员工和 180 天的闪电战。


AI 正在快速发展,大语言模型处于这一变革的前沿。随着这些模型在理解和生成类人文本方面日益精进,将其与外部系统集成的需求也显著增长。这种集成有望开启一个全新的应用时代,使之能够利用真实世界的数据和工具来增强功能,并提供更符合语境的响应。

 

然而,将大语言模型连接到外部资源的传统方法通常需要针对每个数据源进行复杂且定制化的实现,从而导致架构碎片化且难以扩展。

 

Anthropic 的模型上下文协议 (MCP) 应运而生,成为应对这些挑战的关键解决方案。

 

过去,如果我们想让 AI 处理数据,通常只有两种选择:要么依赖预训练好的静态知识库,要么手动上传数据。这种方式不仅效率低下,还存在明显的局限性——即便是最强大的 AI 模型,也无法实时访问新数据。每次遇到新信息,都需要重新训练或上传,使得 AI 的扩展性和灵活性大打折扣。

 

而 MCP 的出现,彻底改变了这一局面。它像一位“数据桥梁工程师”,成功打破了 AI 对静态知识库的依赖,赋予模型动态交互的能力。有了 MCP,AI 可以通过 MCP 像人类一样自由调用搜索引擎、访问本地文件、对接 API 服务,甚至直接操作第三方工具库。这种能力让 AI 不再是一座“数据孤岛”,而是成为了一个可以实时连接万物的智能中枢。

 

更关键的是,MCP 是一套开放协议。只要开发者遵循这一标准,AI 就能无缝接入本地数据、互联网资源、开发工具乃至整个生态社区。试想一下,当 AI 可以随时调用你电脑里的文档、实时检索最新网络信息、联动专业软件完成任务时,其协作效率和工作潜力将呈指数级提升。这不仅是技术的进步,更是迈向“万物智能互联”的关键一步——而 MCP,正是这一切的基石。

 

既然 MCP 在大模型应用开发中如此重要,要从 0 到 1 开发出一款 MCP Server 到底难不难?

 

从搭建基础框架到最终上线,MCP Server 的开发流程究竟如何?哪些关键环节决定着开发周期与质量?开发过程中,最难攻克的难题是什么?行业内又有哪些实战经验可供借鉴?本次我们邀请到了集简云 CTO 杜江与我们共同深入探讨上述问题,他将为我们揭开 MCP Server 开发的神秘面纱,剖析技术要点,分享实践经验,为 MCP Server 的开发与优化提供思路与方向。

如何从 0 到 1 开发 MCP Server?

 

InfoQ:我了解到咱们最近发布了一款 MCP Server,您能从实践层面分享下,要从 0 开始开发一款 MCP Server,流程是怎样的,通常耗时多久能完成?

 

杜江:首先是进行环境准备和技术选型,目前官方提供的有 TypeScript、Python、Java、Kotlin、C#的 SDK 可供选择,当然也可以使用像 FastMCP 这样的脚手架。FastMCP 是一款开源的、专为 Python 开发者打造的 MCP 神器。

 

前期语言和工具选好后,然后是进行核心功能的开发。MCP Server 的主要能力包括资源管理、工具集成、提示词模板,这时候就看这个要开发的 Server 是使用的哪部分能力, 根据要实现的功能使用 SDK 进行相关逻辑的开发。

 

逻辑实现完了,就可以选择使用哪种传输方式来实现,可以选择本地通信(Stdio)或者远程通信(SEE),传输方式实现完了就可以进行调测了。调测可以选择 MCP Inspector 或者客户端(Claude Desktop、VS Code 等)。测试没问题后接下来就可以部署上线了,大概是这样一个流程。

 

整个流程耗时情况取决于核心功能的复杂程度和开发人员的经验,新手如果是实现一两个简单的 tool 进行本地调试,1~3 天应该能完成,如果是集成外部 API、资源管理、SSE 部署这样的,那就差不多需要 3~7 天能完成,如果要实现更复杂的功能耗时就会更长一点。

 

InfoQ:那在您提到的这些环节中,最难的一环是什么?行业目前有哪些行之有效的解决方案?能否结合我们的实践举一些具体的例子?

 

杜江:我觉得最难的一环在于 tool 开发里的定义工具,它的核心点在于让 LLM “理解” 工具的语义、参数逻辑和使用场景,而非单纯的代码实现。

 

MCP 只是解决了协议通信的问题,LLM 通过协议中工具的文档字符串和参数注解推断调用方式,如果描述的比较模糊(比如“查询天气” 未明确 “城市” 是必填字符串),可能会导致 LLM 生成无效参数(比如传入数字 ID)。而现在业内普遍的解决方案都是在工具描述或者参数描述中加上一些约束性的示例,比如刚才这个例子,就可以写城市名称必须为中文,同时也可以给一些示例,比如:“北京” 这样的情况。

 

总体来讲就是工具文档的重要性大于代码实现,在调测的时候有时候花在这上面的时间比在代码实现上的时间还会多一些。

 

MCP Server 接入老旧系统,如何解决延迟问题

 

InfoQ:MCP Server 在与不同类型的 AI 模型(如 GPT、Claude、StableDiffusion 等)集成时,有没有遇到过兼容性问题?是如何解决的?

 

杜江:经过一段时间的发展,我觉得现在兼容性问题比以前好多了,各大厂商都在积极的支持 MCP。但是也会遇到一些问题,比如在工具的参数处理上,参数要求是一个多层结构的字典类型,有的模型支持不了这么复杂的结构,或者最多也就支持一层或者两层,再多了就支持不了了,遇到这种问题就存在需要单独适配的情况。

 

InfoQ:那该如何进行单独适配?

 

杜江:可以通过参数扁平化处理、参数分层适配器、能力协商机制、Fallback 策略等方式单独适配。

 

参数扁平化处理,就是对于不支持多层嵌套的模型,将深层参数结构展开为带命名分隔符(如"layer1_layer2_key")的扁平化键值对,并在模型调用前后自动进行格式转换;参数分层适配器,为特定模型开发定制适配器,自动将原始参数拆分为多个单层调用(如将 4 层结构拆分为 4 次 API 调用),最后聚合处理结果。

 

能力协商机制,在模型注册阶段通过元数据声明其参数深度支持能力,MCP Server 根据声明自动选择兼容的参数传递模式。

 

Fallback 策略就是当遇到不支持的参数结构时,自动降级为最小可用参数集,并通过日志告警提示开发者需要手动优化参数结构。

 

InfoQ:聊完适配,还想了解下 MCP Server 对 AI 模型的反馈数据情况。MCP Server 对 AI 模型的返回来的数据如何进行收集和分析?

 

杜江:可以通过日志记录被调用时候的输入输出参数,通过这些参数帮助分析模型对于工具的描述、参数描述的准确性,帮助优化改善这些定义描述,也可以通过集成可观测性工具(如 Prometheus、Grafana 等)实时监控服务器负载、网络延迟、资源利用率等指标,定位性能瓶颈。

 

InfoQ:对于一些需要实时响应的应用场景(如金融交易风险预警、工业自动化控制),MCP Server 如何确保数据传输和处理的时效性?有没有采用缓存、异步处理等技术手段?具体是怎样实现的,能给我们举些具体的例子说明下吗?

 

杜江:MCP 在和 Client 通信的时候支持 SSE(Server-Sent Events) 或类似流式传输协议,允许数据在生成时逐步传输,消费端逐步处理。例如提到的金融交易风险预警场景中,MCP Server 可实时接收交易流数据,逐步分析并即时触发风险警报,在 MCP Server 实现具体业务逻辑的时候,也是可以采用缓存、异步处理等技术的。

 

我举个例子,比如智能客服系统的语音流处理案例中,MCP Server 通过异步处理分片上传和实时转录技术,同时接收用户语音流并返回文字响应,延迟可以控制在毫秒级。

 

InfoQ:MCP Server 是否支持对数据源进行动态发现和连接?当有新的数据源接入时,MCP Server 如何自动感知并进行配置?

 

杜江:MCP Client 连接到 MCP Server 时,会发送初始请求以获取服务器的能力信息,服务器会返回其可用的 tools、resources、prompts 以及相关参数的详细信息。当有新的数据源接入时,MCP Server 会在下次进行能力交换时动态更新其能力描述, 通过客户端调用如接口 tools/list,将新数据源的相关信息包含在其中。由于 MCP Client 无需硬编码或预定义参数,只需查询 Server 的最新能力就可以完成自动适配。

 

InfoQ:还是接上一个问题聊数据相关的问题。当 MCP Server 首次连接企业内部的 SAP HANA(内存数据平台)等老旧系统时,初始查询延迟可能高达 5 秒以上,你们是如何解决这一问题的,会通过预加载或缓存预热缓解吗,具体是怎么做的?

 

杜江:当遇到老旧系统或者加载比较慢的系统的时候,可以提前实现一个持久化连接池,并维持连接活跃状态,当系统启动时的缓存预热,预先加载高频访问的核心数据(如用户权限、基础配置、常用业务数据等)到内存缓存中;或根据用户行为的预测性预加载,分析历史请求模式和用户上下文数据,通过预测热点数据并提前加载至多级缓存;或增量式缓存构建与自动刷新,对于动态变化的数据,可以采用增量缓存机制,仅预加载静态或低频变更的基础数据,并结合自动刷新功能确保缓存一致性。当后端数据更新时,系统会触发异步更新缓存,总的来说方法有很多,可以针对具体问题具体分析解决。

 

InfoQ:业内很多时候都会将 MCP 与 OpenAI 函数调用相比较,那相比 OpenAI 函数调用需要手动编写 API 描述,MCP 的自动服务发现(Service Discovery)能减少多少集成工作量,是否有个百分比?

 

杜江:OpenAI 函数调用要求开发者为每个工具手动编写完整的 JSON Schema 描述(包括函数名、参数定义等),并在代码中硬编码工具调用逻辑,MCP 通过协议标准化和自动发现机制,可大幅减少此类重复工作。

 

OpenAI 函数调用的方式在模型厂商之间实现的接口还不完全一样,那么开发者切换模型时需重写适配代码,而 MCP 作为开放协议,理论上可通过一次集成适配多模型和多工具,也可减少此类重复工作。假如我要在 5 个模型之间切换,我得调整 5 次,如果使用 MCP,那就一次就好了, 在这个例子中,就减少了 80%的工作量。

 

2025-06-19 18:021
用户头像
李冬梅 加V:busulishang4668

发布了 1098 篇内容, 共 711.1 次阅读, 收获喜欢 1246 次。

关注

评论

发布
暂无评论

你公司里有不能碰的红线吗?

石云升

法律 职场经验 6月日更

同样是初级测试,凭什么他比我薪资高5000块?

程序员阿沐

软件测试 自动化测试

跳槽要不要找猎头

SwiftDD

面试

电池战争:“新石油”与中欧分野

脑极体

服务频繁出现100毫秒的延迟,原因是什么?

BUG侦探

运维 开发

常用 Git 命令总结

编程三昧

git 大前端 工具

字节跳动8年老Android面试官经验谈,看完跪了

欢喜学安卓

android 程序员 面试 移动开发

浪潮云荣获“2021中国智能运维领导厂商”奖项

Linux之more命令

入门小站

Linux

Spring Cloud Alibaba 优势在哪?未来会如何演进?

Java架构师迁哥

在线正则表达式测试,正则替换工具

入门小站

工具

纯CSS实现随机翻牌效果之steps 妙用

devpoint

CSS css3 6月日更

Rust从0到1-函数式编程-闭包

rust 函数式编程 闭包 functional closures

2021年最危险的七大攻击技术,我不信你不知道

网络安全学海

程序员 网络安全 信息安全 漏洞扫描 攻击技术

阿里巴巴6月新作:“Java辟邪剑谱”,看完必让你直呼好家伙!

Java架构师迁哥

区块链服务网络全球首发 将极大降低政务、金融、能源等领域区块链应用成本

CECBC

从设计模式看如何提升程序员的工程素养

学无止境的阿奔

Linux 后端 设计模式 C/C++ 服务器

攻击方式学习之- 拒绝服务(DOS/DDOS/DRDOS)

网络安全学海

网络安全 信息安全 渗透测试

数字化的三大本质

CECBC

AQS知多少

卢卡多多

AQS 6月日更 锁分析

字节跳动移动架构师学习笔记,一文说清!

欢喜学安卓

android 程序员 面试 移动开发

云算力矿机挖矿系统搭建,Bzz节点挖矿APP源码

5分钟速读之Rust权威指南(三十一)线程通信

wzx

rust

架构实战营 - 模块 7- 作业

请弄脏我的身体

架构实战营

带老弟做个实时排行榜

程序员鱼皮

Java c++ 大前端 后端 项目实战

Redis - Cluster - 分布式存储

旺仔大菜包

redis

vivo商城促销系统架构设计与实践-概览篇

vivo互联网技术

架构 服务器 商城项目

极狐GitLab14.0正式面世!

极狐GitLab

深度学习在推荐系统中的应用(二十一)

Databri_AI

深度学习 算法 推荐系统

数据治理

奔向架构师

大数据 数据架构 数据治理

JavaScript 学习(十二)--- String对象中的模式匹配方法

空城机

JavaScript 大前端 6月日更

一次集成,减少80%适配工作!从0到1开发一款MCP Server难不难?_生成式 AI_李冬梅_InfoQ精选文章