MCP 定义了三种原语——三种 server 可以暴露给 AI 应用的能力类型。各有各的用途。
Tools:执行动作
Tools 是动作原语。Client 调用一个 tool,server 执行操作,结果返回。创建 GitHub issue、查询数据库、发 Slack 消息——这些都是 tool 操作。
Tools 的流向是从 client 到 server:AI 应用发起,server 执行。它们可能有副作用(在外部系统里创建、修改、删除东西)。
Resources:浏览数据
Resources 是数据原语。它让 AI 应用浏览外部系统里有什么,而不执行任何动作。列出未关闭的 issue、查看项目文件结构、浏览数据库 schema——这些都是 resource 操作。
Resources 的流向是从 server 到 client:server 暴露可用内容的目录,client 从中读取条目。和 tools 的关键区别:resources 是只读的。浏览 issue 列表不会创建、修改或删除任何东西。
Resources 减少了探索性的工具调用。模型不用盲目地用各种参数调 search_issues 来摸索有什么,它可以先浏览 resource 目录,看看有什么可用的,再发起有针对性的 tool 调用。
Prompts:模板文本
Prompts 是 server 可以提供的预定义 prompt 模板。它们不是可执行代码——是结构化文本,AI 应用可以拿来当交互的起点。可以理解成 server 建议的现成工作流或推荐做法。
这是最不直觉的一个原语。Prompts 本身不做任何事。它们提供的文本用来引导 AI 应用如何与 server 的 tools 和 resources 交互。
最重要的区分
Tools vs Resources 是你最常碰到的问题。划分线在于:它是否改变了外部系统中的东西?如果是,就是 tool。如果纯粹是读取/浏览,就是 resource。
一句话总结: Tools 执行动作(可能有副作用),Resources 浏览数据(只读目录),Prompts 提供模板——tool 和 resource 的区别在于行动 vs 观察。