协议与标准

能力发现(Capability Discovery)

能力发现是客户端了解某个服务端实际提供哪些工具、资源等能力的过程,而不是靠事先假设或写死的配置。

客户端服务端「你能做什么?」→ 能力列表
客户端先询问服务端支持哪些能力,再决定要用其中的什么。

如果客户端一上来就假定它连接的每个服务端都支持同一套固定功能,那一旦碰上实现方式不一样的服务端就会出问题,或者错过某个能力更丰富的服务端实际提供的东西。能力发现要解决的正是这个问题:真正开始干活之前,客户端主动问,服务端如实答。

在 MCP 这类协议里,这一步就发生在连接刚建立之后:客户端和服务端协商各自支持什么,服务端把自己有哪些可用的工具、资源、提示词返回给客户端。之后客户端呈现给模型的能力,只会是服务端确认真实拥有的那些。

这个模式并不是 MCP 独有的——只要客户端需要适应一组可变的服务端能力,而不是假定它是固定不变的,都会用到类似的机制,包括同一个协议下不同服务端实际暴露的工具集合可能差异很大的情况。

怎么运作

连接建立后,客户端会发一个请求,问服务端支持什么。服务端返回一份结构化描述——以 MCP 服务端为例,通常包括它的工具列表(附带各自的清单)、能提供的资源、以及提示词模板,这些都是在连接建立时现场发现的,而不是提前假定好的。客户端把这份信息存下来,据此决定要把哪些能力呈现给模型作为可选项;如果之后重新连接,或者服务端的能力发生了变化,这个发现步骤也可以重新做一遍,让客户端保持同步。

常见误解

常被以为: 客户端总是提前就知道服务端能做什么。
实际上: 在围绕能力发现设计的协议里,客户端是在连接时主动去查询服务端的,而不是假定一套固定、预先已知的能力集合。
常被以为: 能力发现只是用来找工具的。
实际上: 以 MCP 为例,同一个发现步骤同时会返回资源和提示词模板,并不只是工具。

常见问题

MCP 里的能力发现是什么?
是客户端连上服务端之后紧接着的一步,服务端会如实汇报自己实际提供哪些工具、资源和提示词,客户端不用提前假设或写死这些信息。
能力发现为什么重要?
因为不同服务端能提供的工具或资源差异可能很大——没有这一步,客户端要么会漏掉某个服务端实际提供的能力,要么会错误地以为对方有它其实没有的能力。
每次连接都要做一次能力发现吗?
通常是的——这一步发生在连接时,确保客户端始终掌握这个服务端当前真实支持什么。

最近核实: 2026-08-28

相关术语