MCP 和 LSP

MCP 与 LSP

MCP(Model Context Protocol)与 LSP(Language Server Protocol)解决的是不同领域的问题,但两者背后的设计思想高度一致:

通过引入稳定的协议层,将多对多集成中的 M×N 耦合,解耦为 M+N 的标准化连接。

一、作用

在没有统一协议时,不同消费者与不同提供者之间往往需要分别适配。

以 LSP 为例:

before-lsp1.png

每新增一种编辑器,都需要重新适配多种语言;每新增一种语言,也需要分别支持多个编辑器。

MCP 面临的是类似的问题:

before-lsp2.png

当双方数量持续增长时,真正昂贵的已经不是某一次集成本身,而是不断扩张的连接关系

LSP 和 MCP 的解决方式都是在两侧之间加入统一协议:

after-lsp.png

每个客户端只需要实现协议客户端,每个服务端只需要实现协议服务端

于是,集成复杂度从 M×N 降低到 M+N

二、引入原则

是否值得引入协议层,核心只看一个问题:

连接复杂度是否已经成为系统的主要成本。

通常可以从三个条件判断:

1. 存在明显的多对多集成关系

一侧有多个 consumer,另一侧有多个 provider,双方需要大量交叉适配。随着两侧数量增加,集成成本会从单点开发问题演变为 M×N 的连接复杂度。

这是引入统一协议最直接的信号。

2. 两侧需要独立演进

客户端和服务端由不同团队、组织甚至公司维护,发布周期彼此独立。

此时,稳定的协议可以作为双方共同依赖的契约,减少因为实现变化带来的协调成本。

3. 需要支持开放扩展

第三方只需要实现协议,而不必分别适配所有已有对端(客户/服务器)。

例如:

  • 新的 AI 应用如果支持 MCP,就可以接入已有的 MCP Server;新的 MCP Server 也可以被多个支持 MCP 的 AI 应用使用。
  • 新的编辑器实现 LSP 后,就能够接入已有的语言服务器;新的编程语言,只要提供 LSP,就可以被多个支持 LSP 的编辑器使用。

反过来,如果系统规模很小、连接关系固定,或者双方始终由同一团队同步演进,那么 Adapter、SDK 或内部 API 往往已经足够。协议本身也会带来规范设计、兼容性、版本管理和通信开销,不应为了“架构完整”而引入。

三、拓展

一旦从这个角度理解 MCP 和 LSP,会发现类似的设计广泛存在于软件与硬件系统中。

例如:

  • LLVM IR:连接多种编程语言前端与多种硬件后端;
  • ODBC / JDBC:连接不同应用与不同数据库;
  • USB:标准化主机与不同类型设备之间的通信;
  • LSP:连接不同编辑器与不同语言工具链;
  • MCP:连接不同 AI 应用与不同外部工具、数据源和上下文系统。

它们所在的领域不同,但解决的问题具有相同结构:

当系统两侧都存在大量可替换实现时,用一个稳定的中间契约隔离双方变化,避免每一方都直接理解另一侧的全部实现。

总结

LSP 将编辑器与语言工具链解耦,MCP 则试图将 AI 应用与外部工具、数据和上下文能力解耦。

从这个角度看,MCP、LSP、LLVM IR、ODBC/JDBC、USB 等并不是彼此孤立的设计。

它们都是同一种架构模式在不同领域中的具体实现:用稳定的中间层约束连接,让协议两侧能够独立演进。

评论