最近 MCP 的文章铺天盖地,言 MCP 则必称 AI 界的 USB-C
、Function Calling 的标准化
、工具调用协议
。
翻阅 MCP Spec,你会发现 MCP 不只是工具调用标准化。
先科普几个 MCP 协议中的概念:
协议中定义的各种能力、服务存在于 Client 与 Server 的交互中,具体包括:
robots.txt
的君子协定。目前市面上的绝大部分 MCP Server 只提供 Tools,部分会尝试性引入 Resources 和 Prompts。Host 或 AI 应用作为 Client 的支持情况更差,很多都不支持 Resources 和 Prompts。可能是大家还没想到好的支持方式或用户交互设计。至于 Roots、Sampling 则更是基本没有 Host 实现。
这里存在奇妙的死锁,由于 Server 本身并不提供这些特性,Host 也就没有动力实现支持。反过来又导致 Server 开发者也没有实现这些特性的动力。
目前实现上述能力最全面的 Server 是 everything server:
npx -y @modelcontextprotocol/server-everything
实现上述能力最全面的 Client 是 inspector:
npx -y @modelcontextprotocol/inspector
inspector 连接 server-everything 的效果图如下:
在 inspector 中可以通过点击测试 server-everything 上的各种 MCP Server 特性。
作为官方 Demo,这些示例的不足之处在于,虽然展示了各种能力的实现方式,但却没有很好地展示 Resources、Prompts、Sampling 这些能力到底应该在 AI 应用中如何提供给用户。能力有了,但还不知道该怎么用。
Prompt 在 MCP 协议 Spec 中的示例如下:
Prompt 模板
补全后的示例
从数据结构上可以看出,在 MCP 协议的设计上,补全后的 Prompt 应该直接以对话消息的形式注入到聊天历史中,开启下一轮对话,从而复用预先由开发者构造好的优质 Prompt。
Claude Desktop 作为 MCP 源头方开发的 AI App,实际上也没有充分应用 MCP 协议中的各项能力。目前也只实现了 Tools、Resources、Prompts 的基本使用。
且实现的还有点敷衍。比如 Resources、Prompts 的使用方法如下:
点击对话框上的 +
则可以选择 MCP Server 提供的 Resources 和 Prompts 模板。其中 Prompts 需要用户配合填入特定的参数。
完成后 Resources 和 Prompts 则会以上传文件的形式出现在对话内容中。
可以看出目前 Claude Desktop 并不区分 Resources 和 Prompts,也并未针对这两类特殊内容在对话中有针对性的处理,内容只是以简单的文本信息补入对话中。大模型实际并不能很好地针对性处理这些内容。
由于目前 Claude Desktop 的实现中 Prompt 与普通数据上传无异,会以 JSON 文本的形式插入到聊天内容中,对 AI 来说,会显得莫名其妙摸不着头脑。
只能僵硬地分析文件内容,无法真正当作 Prompt 来使用。
所以 MCP 协议中的 Resources、Prompt、Sampling 到底是干什么的?应该怎么用?
在目前 MCP Spec 中列出的数十个 Host/Client 实现中,VS Code GitHub Copilot 是唯一一个实现了全部特性的 AI 应用(不算某些 Agent 框架)。
虽然某些交互还比较深比较奇怪,但确实实现了大部分 MCP 协议中定义的能力。仍以 everything MCP Server 试用 Copilot。
引用 Resource
选择 Resource 后会展示在这里
提交对话内容后的效果
通过 /
可以展示出已经安装的 prompt 模板。(由于 VS Code 会自动加载 Cursor、Claude 等其他友商的 MCP Server 配置文件,所以工具列表显得有点杂且重复。)
点击后需要用户交互补全 Prompt 内容,补全后会直接展示在对话的编辑框中。
回车上屏后则执行 Prompt。
目前 Prompt 支持还不是很完整,比如一旦 Prompt 中同时包含 User + Assistant 的消息后,会变成这样。直接发给 AI 的话 AI 还是会迷茫。
Sampling 这个词比较抽象,本质就是让 Server 可以调用 Client 的大模型能力。
everything 中提供的 sampleLLM 工具可以调用这个功能。在 Copilot 中进行测试。
会弹出对话框要求用户确认,允许 Server 调用大模型。
确认后执行工具。
整体执行逻辑是:
通过 Sample 的能力,本身不带大模型的 Server,得以回答李白是谁
这个相当宽泛的问题。
前面说了很多,也测试了很多,但仍有很多 MCP 协议中的细节没有介绍完整。
但已经可以看到 MCP 的野心远非仅仅是替代 Function Calling。
Model Context Protocol (MCP) 正如其名,围绕着大模型,将人、工具、应用整体构建一个相对标准化的交互方式。从这个角度看,MCP Server 未来大概率不仅仅是工具的封装,而应该是完整的 AI Agent 的封装:
如果发展趋势持续下去,未来 MCP 协议本身很可能会扩展覆盖掉 A2A、AG-UI 等协议。
至于前面提到的死锁,GitHub Copilot 已经成为了打开局面的第一人。当真正有 Host 支持了这些能力,那么 Server 就有理由去利用这些能力发挥更强的作用。当 Server 实现了这些能力,各大主流 Host 必然也要补齐相应能力。
死亡螺旋与增长飞轮一体两面,结果会是如何?
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。