核心原语
MCP 的三种能力原语:Tools(动作)、Resources(数据)、Prompts(模板)。面试主线:各是什么、怎么用、模型怎么感知。
三原语
| 原语 | 类比 | 作用 | 模型控制权 |
|---|---|---|---|
| Tools | 函数 | 执行操作(有副作用) | 模型主动调用 |
| Resources | 文件 | 提供数据(只读) | 应用控制,模型读取 |
| Prompts | 模板 | 复用提示词/工作流 | 用户/应用选择 |
Tools: 查询订单、发送邮件、执行 SQL ← 模型决定调用
Resources: 数据库 schema、文档、配置 ← 上下文的一部分
Prompts: "代码审查"、"周报生成" 模板 ← 一键复用Tools(工具)
- 最核心的原语:模型通过工具与外部世界交互
- 定义:名称 + 描述 + 参数 JSON Schema(和 Function Calling 的 schema 一致)
- 调用流:模型请求 → 客户端转发服务器 → 服务器执行 → 结果回填(见架构篇)
- 注意:工具执行由客户端/服务器完成,模型只生成调用请求(见 LangChain 工具篇)
Resources(资源)
- 只读数据源:文件、数据库查询结果、API 数据
- 暴露方式:URI 标识(
file:///docs/readme.md、db://orders/schema) - 内容类型:文本或二进制(图片)
- 用途:把数据作为上下文喂给模型,或供工具使用
- 资源模板:参数化资源(
db://orders/{id})
Prompts(提示模板)
- 可复用的提示词 + 参数,服务器定义,客户端渲染
- 用途:标准化工作流(“审查这段代码”、“生成测试用例”)
- 好处:提示工程沉淀成服务器能力,跨应用复用
模型如何感知
- 工具和提示需要显式暴露(工具列表通过协议协商,见架构篇)
- 资源可以作为上下文自动附加(客户端决定),也可以由模型请求
- 工程要点:工具描述质量决定调用准确率(与 LangChain 工具篇一致),MCP 服务器同样要写好描述
面试追问
- 三原语是什么? Tools 执行操作、Resources 提供数据、Prompts 复用模板
- Tools 和 Resources 的区别? 工具会改变状态(写操作),资源是只读数据。一个动作一个数据
- 模型怎么调用工具? 模型只生成调用请求(工具名+参数),客户端转发执行。执行权不在模型
- Prompts 原语的价值? 提示工程沉淀复用,跨应用一致
- 工具定义包含什么? 名称 + 描述 + 参数 JSON Schema。描述质量决定调用准确率