MCP官方文档在介绍完架构后,直接进入了各种定义的详细说明,这种方式对开发者并不友好。因此,在深入后续内容之前,我先简要梳理一下MCP协议在内容控制方面的核心思路:
协议主要将控制分为三个重点:application-controlled、user-controlled 和 model-controlled,分别对应 Resources、Prompts 和 Tools 三个基本核心元素(primitive)。此外,还定义了一个目前尚不支持的 Sampling 机制。
资源(Resources)
资源是模型上下文协议(MCP)中的核心组件,允许服务器向客户端暴露数据和内容,供大语言模型(LLM)交互时使用。资源设计为应用控制(application-controlled),即客户端应用决定何时以及如何使用这些资源。不同客户端对资源的使用方式可能不同,例如,Claude Desktop要求用户明确选择资源,而其他客户端可能基于启发式自动选择资源,甚至允许AI模型自行决定使用哪些资源。服务器开发者应准备好处理这些不同的交互模式。
提示模板(Prompts)
提示功能使服务器能够定义可重复使用的提示模板和流程,便于客户端向用户和LLM展示。提示设计为用户控制(user-controlled),即服务器将提示暴露给客户端,用户可以明确选择使用哪些提示,从而标准化和共享常见的LLM交互。
工具(Tools)
工具是MCP中的强大组件,允许服务器向客户端暴露可执行功能,使LLM能够与外部系统交互、执行计算或采取现实世界的行动。工具设计为模型控制(model-controlled),即服务器将工具暴露给客户端,AI模型可以自动调用这些工具。
采样(Sampling)
采样是MCP的一个功能,允许服务器通过客户端请求(这不就是倒反天罡么)LLM的完成结果,支持复杂的代理行为,同时保持安全性和隐私性。目前,即使是 Claude Desktop 客户端也尚不支持此功能。
评价
目前,MCP协议虽然定义得较为全面,但在实际应用中,tools的作用至关重要。用户可以通过编写高质量的prompt,灵活支持多个tools的混合调用,而不必完全依赖服务器提供的prompts。至于资源的定义,评判标准较为模糊。如果用户不希望LLM访问某些资源,直接不提供相关tool即可,无需等到LLM请求时再拒绝。唯一可能需要临时中止的场景是:当模型在调用过程中试图对资源进行错误操作。但这种做法会导致每次调用都需要用户手动确认,增加了不便。
综上所述,MCP的整体调用机制高度依赖于tools,其他定义更多是为了完善场景需求,而非针对Agent或function call的硬性要求。