什么是 MCP#
MCP 是一个开放协议,标准化了应用程序向 LLMs 提供上下文的方式。可以把 MCP 想象成人工智能应用程序的 USB-C 端口。就像 USB-C 为设备和外设提供了标准化的连接方式,MCP 为人工智能模型与不同数据源和工具提供了标准化的连接方式。
在其核心,MCP 遵循客户端-服务器架构,宿主应用程序可以连接到多个服务器:
和 function call 有什么区别#
以接入联网搜索为例,过往实现需要手写 funtion 定义,以及触发 tool_call 之后的事件处理。 每一个服务都需要自己实现一遍。
但 MCP 协议统一了数据格式标准,规定了应用向LLM传输数据的方式。任何模型只要兼容MCP协议,就能与所有支持MCP的应用交互。
其本质上还是 function call,只不过把 function call 的定义和调用方式标准化了, 并且把 tool_call 的触发从业务中抽离出来了。
也就是说,只要写好一个联网搜索 MCP,其他服务之要接入该 MCP 即可实现该联网功能,而不需要自己再实现一遍。
实现协议#
目前主流的协议为: stdio、sse。
stream http 是 2025-03-26 引入的新提案,目前支持的服务和客户端都比较少,但确实是未来的大趋势。
stdio#
standard input & output,主要用于本地进程通信。
优点:
- 可访问本机文件
- 本地运行,安全性高
缺点:
- 第一次安装较为麻烦,需要安装环境运行依赖
- 单进程通信,无法并行处理多个客户端请求
- 进程通信的资源开销大,很难在本地运行非常多的服务
stdio 也可以部署在云端,但因为单进程,无法处理多客户端,一般都是本地使用
sse#
Server-Sent Events,主要用在远程服务上,基于 HTTP 通信,通过 API 的方式,让 MCP 客户端访问远程资源。
优点:
- 用户配置简单,无需像 stdio 安装复杂环境,填写远程服务 URL 即可
- 通常部署于云端,通过远程服务访问,克服了 stdio 传输仅限于本地资源的限制,同时降低了本地设备的负担。
- 基于标准 HTTP 协议开发,兼容性强,易于与现有的 Web 基础设施进行整合。
缺点:
- 连接不稳定,SSE 需要持久连接,一旦断开,影响用户消息的接受
- 多会话管理较为复杂,必须为每个 SSE 连接分配唯一的标识以避免数据混淆,这提升了实现的难度
stream http#
Rfc: https://github.com/modelcontextprotocol/modelcontextprotocol/pull/206
Streamable HTTP 传输是 MCP 协议在 2025-03-26 版本中引入的新传输机制,用于替代之前的 SSE 传输。
在 Streamable HTTP 传输中,服务器作为一个独立进程运行,可以处理多个客户端连接。
目前官方 sdk 还未支持,可参考一些第三方框架来实现:
- Higress: https://github.com/alibaba/higress/issues/2001#issuecomment-2780385458
- mcp-framework: https://github.com/QuantGeekDev/mcp-framework
优点:
- 连接稳定,使用单通道模式,客户端向服务器发送消息后可直接获取服务器的响应内容
- 连接灵活,既支持简单的请求-响应模式,也支持流式传输
- 支持断开连接后的恢复以及消息的重传功能
缺点:
- 相比单纯的 stdio 传输,其实现复杂度更高
- 仍需处理网络连接中断及恢复的相关逻辑
接入流程#
社区#
目前已有一些平台提供 mcp 列表:
也有一些云厂商提供了远程服务和部署服务:
也有一些软件平台内置了很多 MCP 服务
例如:OpenCat 给付费用户提供了高德地图的MCP,应该是未来一个大趋势,软件自己实现 MCP 服务,部署在云端,提供选项给用户。
还有一些云厂商定义了自己的标准
- cloudflare:基于官方 sdk 进行拓展,完善 oauth 等场景,可与自己平台的服务 Workers、KV、R2、D1 交互。完成了生产环境使用的闭环
- vercel: 基于自己的 sdk 生态实现了 stdio 和 sse
CODE 实现#
stdio & Sse#
可参考官方教程进行实现,不做重复赘述https://modelcontextprotocol.io/quickstart/server
stream http#
mcp server#
- search-http
- image-gen
基于 mcp-framework 框架,参考 https://github.com/dvlin-dev/playground/tree/mcp/servers 对应目录代码即可
mcp server 接入#
具体参考 chatbot server 的实现 https://github.com/dvlin-dev/chatbot/blob/1065ec4e794e6af87921961b197204e2ac1347c8/server/src/modules/conversation/conversation.service.ts#L67C9-L67C26
参考资料#
- https://github.com/modelcontextprotocol/servers?tab=readme-ov-file#model-context-protocol-servers
- https://blog.cloudflare.com/remote-model-context-protocol-servers-mcp/
- https://github.com/QuantGeekDev/mcp-framework
- https://blog.logto.io/mcp-auth-spec-review-2025-03-26#summary
- Hackteam - Build Your First MCP Server with TypeScript
- GitHub - punkpeye/awesome-mcp-clients: A collection of MCP clients.