Skip to content

MCP 进阶主题

随着您对 Model Context Protocol (MCP) 越来越熟悉,您可能会遇到或希望探索它的一些更高级的概念和考量。本章将深入探讨这些主题,帮助您更深入地理解 MCP 的架构及其未来潜力。

MCP 本身是一个协议,它定义了消息的结构(基于 JSON-RPC)以及客户端和服务器的预期行为。然而,它是传输无关的,这意味着 MCP 消息可以通过各种底层通信机制进行交换。常见的传输方式包括:

  • WebSockets (WSS/WS): 实时、双向通信的流行选择,特别适用于 IDE 扩展或基于 Web 的客户端等交互式应用程序。WebSockets 保持持久连接,从而降低后续请求的延迟。
  • HTTP/S: 尽管 MCP 的有状态特性和双向能力与 WebSockets 完美契合,但也可以通过 HTTP/S 传输 MCP 消息。这可能涉及一系列请求或长轮询技术,但在高度交互的场景中效率较低。
  • IPC (Inter-Process Communication,进程间通信): 对于同一机器上的本地客户端-服务器交互(例如,桌面应用程序与本地 MCP 服务器通信),可以使用命名管道(named pipes)或 Unix 域套接字(Unix domain sockets)等 IPC 机制进行高效且安全的通信。
  • 自定义传输方式: 开发者可以根据需要,在其他传输层上实现 MCP,前提是客户端和服务器都支持它。

传输方式的选择取决于应用程序的具体要求,例如性能、安全性以及客户端和服务器运行的环境。SDKs 通常提供对常见传输方式的支持。

在某些 MCP 架构中,特别是在管理多个 MCP 服务器或上下文的主机应用程序内,‘MCP Roots’(MCP 根节点)的概念可能很重要。MCP 根节点可以被视为一个入口点或命名空间,有助于组织和发现可用的 MCP 服务器或资源集合。

例如,集成开发环境(IDE)可能会为不同的项目或不同类型的连接服务提供不同的 MCP 根节点。这允许客户端首先连接到一个根节点,然后导航或选择与其当前任务相关的特定 MCP 服务器实例。MCP 根节点的具体实现和用法可能因主机环境及其管理多个上下文源的特定需求而异。

本质上,MCP 根节点在单个服务器连接之上增加了一层间接性或组织性,这在拥有许多潜在上下文提供者的复杂环境中会很有用。

虽然 MCP 服务器暴露了原生的 Prompts(提示)和 Tools(工具),但使用 MCP 的一个强大之处在于能够在客户端或中间服务中构建更高级、可复用的 Prompts 和 Workflows(工作流)。这涉及协调对一个或多个 MCP 服务器的调用以完成复杂的任务。

构建可复用性的策略包括:

  • Prompt Templates(提示模板): 开发客户端模板,将从 MCP 资源中检索到的上下文动态地插入到精心制作的 LLM 提示中。
  • Chaining Calls(链式调用): 一个工作流可能涉及使用 mcp_getResource 获取数据,然后使用该数据填充 mcp_invokePrompt 调用,再使用 LLM 的响应来确定 mcp_invokeTool 调用的参数。
  • Abstracting Common Patterns(抽象通用模式): 识别常见的 MCP 交互序列,并将其封装到客户端应用程序中可复用的函数或模块中。
  • Workflow Engines(工作流引擎): 对于非常复杂的场景,考虑使用或开发简单的工作流引擎,该引擎可以定义和执行涉及 LLM 交互和 MCP 调用的系列步骤。

通过创建可复用的 Prompts 和 Workflows 库,开发者可以显著加速利用 MCP 的 LLM 驱动型应用程序的开发。

与任何不断演进的协议一样,MCP 也有一个定义其方法、消息格式和预期行为的规范。理解其版本控制对于客户端和服务器之间的兼容性至关重要。

  • Specification Document(规范文档): 官方 MCP 规范是协议工作方式的权威来源。它详细说明了 JSON-RPC 方法(例如 mcp_getResource、mcp_getCapabilities)、它们的参数以及预期的返回值,包括错误代码。
  • Versioning(版本控制): MCP 规范可能会有版本号(例如 v1.0、v1.1、v2.0)。版本之间的更改可能包括添加新功能、修改现有功能或弃用特性。客户端和服务器了解其支持的 MCP 版本至关重要。
  • Capability Negotiation(能力协商): mcp_getCapabilities 方法在此发挥作用,它允许客户端和服务器宣布它们支持的功能和版本,从而在存在不兼容性时促进优雅降级或错误报告。
  • Evolution(演进): 该协议有望根据社区反馈和 LLM 及 AI 开发领域的新兴需求而发展。关注官方公告和规范仓库是保持更新的关键。

开发者应致力于构建对次要版本更改具有鲁棒性,并明确指示其兼容协议版本的客户端和服务器。