Skip to content
Table of Contents

初识MCP

· 6 min

什么是 MCP#

MCP 是一个开放协议,标准化了应用程序向 LLMs 提供上下文的方式。可以把 MCP 想象成人工智能应用程序的 USB-C 端口。就像 USB-C 为设备和外设提供了标准化的连接方式,MCP 为人工智能模型与不同数据源和工具提供了标准化的连接方式。

在其核心,MCP 遵循客户端-服务器架构,宿主应用程序可以连接到多个服务器:

Pasted image 20250414022515

和 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,主要用于本地进程通信。

优点:

  1. 可访问本机文件
  2. 本地运行,安全性高

缺点:

  1. 第一次安装较为麻烦,需要安装环境运行依赖
  2. 单进程通信,无法并行处理多个客户端请求
  3. 进程通信的资源开销大,很难在本地运行非常多的服务

stdio 也可以部署在云端,但因为单进程,无法处理多客户端,一般都是本地使用

sse#

Server-Sent Events,主要用在远程服务上,基于 HTTP 通信,通过 API 的方式,让 MCP 客户端访问远程资源。

优点:

  1. 用户配置简单,无需像 stdio 安装复杂环境,填写远程服务 URL 即可
  2. 通常部署于云端,通过远程服务访问,克服了 stdio 传输仅限于本地资源的限制,同时降低了本地设备的负担。
  3. 基于标准 HTTP 协议开发,兼容性强,易于与现有的 Web 基础设施进行整合。

缺点:

  1. 连接不稳定,SSE 需要持久连接,一旦断开,影响用户消息的接受
  2. 多会话管理较为复杂,必须为每个 SSE 连接分配唯一的标识以避免数据混淆,这提升了实现的难度

stream http#

Rfc: https://github.com/modelcontextprotocol/modelcontextprotocol/pull/206

Streamable HTTP 传输是 MCP 协议在 2025-03-26 版本中引入的新传输机制,用于替代之前的 SSE 传输。

在 Streamable HTTP 传输中,服务器作为一个独立进程运行,可以处理多个客户端连接。

目前官方 sdk 还未支持,可参考一些第三方框架来实现:

优点:

  1. 连接稳定,使用单通道模式,客户端向服务器发送消息后可直接获取服务器的响应内容
  2. 连接灵活,既支持简单的请求-响应模式,也支持流式传输
  3. 支持断开连接后的恢复以及消息的重传功能

缺点:

  1. 相比单纯的 stdio 传输,其实现复杂度更高
  2. 仍需处理网络连接中断及恢复的相关逻辑

接入流程#

Pasted image 20250414110051

社区#

目前已有一些平台提供 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#

  1. search-http
  2. 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

参考资料#

  1. https://github.com/modelcontextprotocol/servers?tab=readme-ov-file#model-context-protocol-servers
  2. https://blog.cloudflare.com/remote-model-context-protocol-servers-mcp/
  3. https://github.com/QuantGeekDev/mcp-framework
  4. https://blog.logto.io/mcp-auth-spec-review-2025-03-26#summary
  5. Hackteam - Build Your First MCP Server with TypeScript
  6. GitHub - punkpeye/awesome-mcp-clients: A collection of MCP clients.
> share on twitter
> cd ..