MCP

MCP

MCP 是什么

MCP 全称是 Model Context Protocol(模型上下文协议) 是 AI 应用与工具提供方约定的通讯协议。

MCP 解决什么问题

解决重复对接第三方工具的问题。 举个例子:

A 公司为了让他们的 Agent 支持查询天气、路线,接入了百度地图 API。B 公司为了支持查询天气、路线也同样接入了百度地图API。那么当有 1万家公司需要接入地图API,就需要重复开发 1万次。

现在百度提供一个标准接口,跟所有公司说,我们搞了一个通用的交互协议,并提供了这个协议所有语言的实现,你们只需要引入对应的协议包,再连接上百度的 MCP 地址,就能让 Agent 拥有百度所有的开放能力。 这就是 MCP 要解决的问题。

引入 MCP 会带来的副作用

有舍有得,MCP 带来方便的同时,也带来了另一个问题:token 消耗剧增,一个 MCP Server 支持的 tool 越多,token 消耗越多。

为什么会出现这个问题呢?

因为 MCP 的工作模式是:全量加载,每次发送

为了让 AI 知道能用哪些工具,MCP 客户端会在每轮对话开始时,把所有连接的 MCP 服务器上所有工具的完整定义(名称、描述、复杂的 JSON Schema 参数)都塞进上下文里,即使你只是简单的说一句 "你好"。

这就是早期 MCP 的问题。但现在的 Agent 一般都会有智能过滤,懒加载,并不会将所有工具定义都加载到上下文中。

  • 智能过滤: 先根据用户意图筛选出最相关的几个工具
  • 懒加载: 让 AI 通过一个 "通用工具" 动态发现和调用所需工具

有了 Skill 还需要 MCP 吗

Skill 和 MCP 用于解决不同的问题。

如果是在本地环境,Skill 可以直接平替 MCP。但是如果非本地环境,例如云端 Agent 无法执行 Skill,只能用 MCP。

也可以这么了解,Skill 是 C/S 架构, MCP 是 B/S 架构,当提供的能力发生变更时, Skill 需要更新,MCP 不需要更新。

了解 MCP 协议

  1. 初始化握手:协商双方都有的能力
  2. 能力发现:Client 调用 tools/list 自动拉取完整工具 Schema
  3. 交互阶段:用户发起请求 -> Client 将所有完整的 Schema 变成 Tools(Function Calling) 发给大模型 -> 大模型返回 Client 调用哪个 Tools -> Client 发送 tools/call RPC -> MCP Server 执行 -> 执行结果返回给 MCP Client -> 大模型整合数据输出回答

MCP 传输机制

stdio

为了 Agent(MCP Client) 与 本地的外部工具(MCP Server)交互,父进程(MCP Client)会创建子进程(MCP Server),并通过管道(pipeline)将父子进程的输入输出绑在一起。

例如父进程的 stdin 通过管道连接子进程的 stdout。

SSE

MCP 中,客户端使用独立的 HTTP POST 接口向服务端发起请求,服务端使用 SSE 推数据给客户端。

SSE 是什么

Server-Send-Event,服务器推送事件 SSE 是 W3C 标准,GET 单向长连接流水规范,HTML5 原生能力。

解决什么问题

服务端无法单向推送消息给客户端

为什么有 WebSocket 还需要有 SSE

核心矛盾点:WebSocket 已经脱离 HTTP 生态,无法复用 HTTP 生态;需要协议升级,很多老旧网络设备不兼容 WebSocket;WebSocket 本身协议也比较重。

而 SSE 被设计出来的目标为:提供一套基于原生 HTTP 协议,无需协议升级的标准化单向推送方案。

SSE 有什么弊端

需要声明,SSE 是特别被设计为单向传输的,所以这并不是它的弊端。

SSE 的弊端在于:

  1. 需要会话粘性(负载均衡必须路由到同一台服务实例);一旦 SSE 长连接断掉,下行通知全部丢失;
  2. SSE 是基于 GET 的长连接, 无法携带 body,无法上传文件

Streamable HTTP

Streamable HTTP 是什么

基于 HTTP Chunked 流式双向传输范式,是 Anthropic 专为 MCP 设计的底层传输层

为什么被设计出来,要解决什么问题

初代 MCP 是 SSE 双端点架构,要解决 SSE 双端点架构问题,以及 SSE 本身的问题。

这里解释一下什么是双端点架构

  1. GET /sse 建立长连接,Server -> Client
  2. POST /message , Client -> Sever。每次 Client 要发送消息都要单独使用 POST

上面的架构就带来 1 个问题,认证、超时、重连要做 2 套。

Streamable HTTP 特点

  1. 单端点通信
  2. 不需要会话粘性
  3. 双向流,一个 POST 请求完成收发
  4. 标准 HTTP 协议,兼容性好
  5. 浏览器、后端通用。原生浏览器 Fetch API 支持请求体流式
相关推荐
掘金者阿豪7 分钟前
数据集成产品接上以后,报表为什么还是对不上?聊聊金仓 KFS 的落地细节
后端
tonydf11 分钟前
人机协同定位一个越用越慢的疑难杂症
后端·ai编程
门思科技44 分钟前
ThinkLink 触发模型与告警规则实战:数据一小时才来一次,告警怎么做到不迟到、不刷屏、找对人
前端·后端
站大爷IP1 小时前
Python的编码解码把我坑惨了,原来encode和decode的区别这么大
后端
明月_清风1 小时前
拆解 DeepSeek 最新开源推理框架 DeepInfer:万亿级大模型的高效落地实战
人工智能·后端·deepseek
Thneonl1 小时前
选举之后,数据去哪了:MongoDB rollback 目录里的失踪写入
后端·架构
Thneonl1 小时前
一个 user_id 打爆 Prometheus
后端·架构
弦儿1 小时前
从零认识 SpringBoot Web 后端:HTTP 协议 + 三层架构 + IOC/DI 知识点全梳理(附全套代码)
后端
海豚调度2 小时前
Apache DolphinScheduler 2026 年 9 月社区贡献总结报告
后端