三种原语:工具、资源与提示词

服务器对外暴露的能力被归纳为三种原语:工具(Tools)、资源(Resources)、提示词(Prompts)。它们回答同一个问题——"模型需要什么",但触发方式与控制权完全不同,本节先给总览,再各配最小 JSON 示例。

三原语总览

MCP 三原语

原语是什么谁触发控制权
Tools 工具可执行的动作(写文件、发请求)模型按用户意图自主调用需要用户授权语境
Resources 资源可读的数据/文档(文件、日志)客户端按需读取注入application-controlled,由应用决定
Prompts 提示词可复用模板/工作流入口用户主动选择用户启动,客户端组装

一句话记忆:工具让模型"做事",资源给模型"喂料",提示词替用户"起手"。

Tools:模型可执行的"手"

服务器用 tools/list 声明工具,模型端到端调用走 tools/call:

{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}
{"jsonrpc": "2.0", "id": 1, "result": {"tools": [
  {"name": "get_weather", "description": "查询城市天气",
   "inputSchema": {"type": "object", "properties": {"city": {"type": "string"}}}}]}}
{"jsonrpc": "2.0", "id": 2, "method": "tools/call",
 "params": {"name": "get_weather", "arguments": {"city": "上海"}}}

Resources:给模型"喂"的上下文

资源用 URI 寻址(如 file:///、log://),先列后读:

{"jsonrpc": "2.0", "id": 3, "method": "resources/list"}
{"jsonrpc": "2.0", "id": 4, "method": "resources/read",
 "params": {"uri": "file:///logs/app.log"}}
{"jsonrpc": "2.0", "id": 4, "result": {"contents": [
  {"uri": "file:///logs/app.log", "mimeType": "text/plain",
   "text": "2026-01-01 10:00 启动成功"}]}}

资源不会自动进上下文:由客户端判断"这次任务要不要读",读完把内容注入对话。

Prompts:给用户的工作流入口

提示词先列后取,客户端把取回的模板消息拼进对话:

{"jsonrpc": "2.0", "id": 5, "method": "prompts/get",
 "params": {"name": "code-review", "arguments": {"language": "python"}}}
{"jsonrpc": "2.0", "id": 5, "result": {"messages": [
  {"role": "user", "content": {"type": "text",
   "text": "请以资深工程师身份审查下面代码……"}}]}}

原语与宿主、模型的分工

  • 模型自己"看见"并主动使用的,主要是工具与已注入的资源文本;
  • 资源是否读取、何时读取由宿主/客户端控制,模型不能越权直接读;
  • 提示词由用户挑选触发,客户端负责把结果消息与真实任务上下文合并。 选型建议:会改变外部世界的用工具,静态信息用资源,重复操作沉淀成提示词。

小结

Tools 做事、Resources 喂料、Prompts 起手,三者合起来覆盖"模型需要什么"的全部入口。下一章讲一次连接从建立到关闭的生命周期与初始化握手。

笔记加载中…