MCP核心组件Resources、Prompts、Tools、Sampling、Roots、Transports介绍

 

MCP协议核心组件详解及交互关系


1. 核心组件定义与功能

1.1 Resources(资源)

  • 定义:服务器提供的静态数据访问接口,支持类文件系统操作,通过URI标识资源路径(如file:///doc.txthttps://api.example.com/data
  • 功能
    • 支持只读操作(读取文件内容/查询数据库/获取API响应)
    • 提供结构化元数据(MIME类型/描述)
    • 示例:IDE通过MCP读取本地代码文件作为LLM调试上下文
  • 控制权:用户完全控制资源的可见性与访问权限

1.2 Prompts(提示)

  • 定义:预定义的指令模板,用于优化LLM的输入上下文结构和输出格式
  • 功能
    • 提供任务导向的引导(如”按JSON格式生成报告”)
    • 支持动态参数注入(如{user_name}占位符)
    • 示例:客户支持场景强制LLM引用CRM用户历史记录
  • 控制权:用户定义模板,LLM根据模板生成内容

1.3 Tools(工具)

  • 定义:模型可调用的动态操作接口,需用户授权执行
  • 功能
    • 执行外部操作(发送邮件/调用API/提交代码)
    • 支持JSON Schema定义输入参数
    • 示例:天气查询工具获取实时数据生成自然语言回答
  • 控制权:用户定义工具,LLM自主决定是否调用

1.4 Sampling(采样)

  • 定义:服务器反向调用LLM生成内容的逆向交互机制
  • 功能
    • 允许服务器向LLM提交查询请求(生成代码片段)
    • 支持多轮对话上下文传递实现”AI协作”
  • 兼容性:仅部分客户端(如Claude Desktop)支持

1.5 Roots(根资源)

  • 定义:客户端声明的资源访问范围标识符
  • 功能
    • 防止资源越界访问(限制文件系统到/projects目录)
    • 支持多工作区管理(区分开发/生产环境资源)
  • 实现:客户端连接时声明Roots,服务器优先在此范围内操作

1.6 Transports(传输)

  • 定义:组件间通信的协议实现层
  • 功能
    • 支持两种标准传输方式:
      • Stdio:本地进程间通信(低延迟)
      • SSE:流式更新(实时日志推送)
    • 允许自定义协议(WebSocket/gRPC)

2. 组件联系与协作

2.1 功能互补性

组件 数据流向 典型协作场景
Resources → Tools 静态→动态 工具调用前读取配置文件作为参数
Prompts → Sampling 模板→生成 使用提示模板约束Sampling的输出格式
Roots → Transports 范围→通信 传输层根据Roots过滤非法资源请求

2.2 工作流示例:智能代码助手

  1. 资源加载:IDE客户端通过Roots限定访问/src目录代码文件
  2. 提示注入:使用”代码审查”提示模板要求LLM按Checklist格式输出
  3. 工具调用:LLM调用git commit工具提交代码修改(需用户授权)
  4. 传输保障:Stdio返回代码分析结果,SSE推送编译错误日志

3. 核心区别与设计哲学

3.1 控制权与交互模式

组件 控制方 交互方向 数据特性
Resources 用户 单向(读) 静态/结构化
Tools 用户+模型 双向(调用) 动态/操作化
Prompts 用户 单向(输入) 模板化/引导性
Sampling 服务器 逆向(请求) 生成式/上下文敏感

3.2 设计原则对比

  • Resources vs Tools Resources 强调数据安全性(只读),Tools 强调操作可控性(需授权)
  • Prompts vs Sampling Prompts前馈控制(预设模板),Sampling反馈控制(动态生成)
  • Roots vs Transports Roots 定义逻辑边界Transports 定义物理通道,共同保障系统安全性

4. 技术实现细节

4.1 协议消息结构(JSON-RPC 2.0)


// 工具调用示例
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "get_weather",
"arguments": {"latitude": 45.5155, "longitude": -122.6789}
}
}

// 资源读取示例
{
"method": "resources/read",
"params": {"uri": "file:///project/docs/api.md"}
}

4.2 开发实践

@server.list_tools()
async def handle_list_tools() -> list[types.Tool]:
return [types.Tool(name="debug", input_schema=DEBUG_SCHEMA)]

@server.read_resource()
async def read_resource(uri: AnyUrl) -> str:
return open(uri.path).read()

5. 应用价值与局限

5.1 核心价值

  • 通过模块化设计实现AI能力扩展
    • 开发效率提升(减少70%集成代码量)
    • 支持混合部署(本地+云端资源)
    • 跨平台互操作(如Cursor IDE与GitHub服务器)

5.2 当前局限

  • 动态工具发现可能增加延迟(需多轮协商)
  • Roots路径解析存在跨平台兼容性问题(Windows/macOS路径差异)
  • 实时通信带来的性能开销(高并发场景需优化)

6. 总结

MCP通过七大组件的协同设计构建层次化AI交互协议:

  • 基础层(Transports/Roots):保障通信安全与边界控制
  • 能力层(Resources/Tools):提供静态数据与动态操作
  • 引导层(Prompts/Sampling):优化模型行为与输出质量

该架构推动LLM从文本生成器进化为智能体操作系统,标志着AI集成从”硬编码”向”协议驱动”的范式转变,为构建开放AI生态系统奠定技术基础。

本文遵守 Attribution-NonCommercial 4.0 International 许可协议。 Attribution-NonCommercial 4.0 International