核心服务器功能
服务器通过三个构建模块提供功能:特性 | 解释 | 示例 | 控制者 |
---|---|---|---|
工具 | 您的LLM可以主动调用的函数,并根据用户请求决定何时使用它们。工具可以写入数据库、调用外部API、修改文件或触发其他逻辑。 | 搜索航班 发送消息 创建日历事件 | 模型 |
资源 | 被动数据源,提供对上下文信息的只读访问,例如文件内容、数据库模式或API文档。 | 检索文档 访问知识库 读取日历 | 应用程序 |
提示模板 | 预构建的指令模板,指导模型使用特定工具和资源。 | 规划假期 总结我的会议 起草一封邮件 | 用户 |
工具
工具使AI模型能够执行操作。每个工具通过类型化的输入和输出定义特定操作。模型根据上下文请求工具执行。工具的工作原理
工具是LLM可以调用的模式定义的接口。MCP使用JSON Schema进行验证。每个工具执行一个具有明确定义的输入和输出的单一操作。在执行前工具可能需要用户同意,这有助于确保用户对模型执行的操作保持控制。 协议操作:方法 | 目的 | 返回 |
---|---|---|
tools/list | 发现可用工具 | 包含模式(schemas)的工具定义数组 |
tools/call | 执行特定工具 | 工具执行结果 |
示例:旅行预订
工具使AI应用程序能够代表用户执行操作。在旅行规划场景中,AI应用程序可能会使用多个工具来帮助预订度假行程: 航班查询用户交互模型
工具由模型控制,意味着AI模型能自动发现并调用它们。但MCP通过若干机制强调人工监督。 出于信任和安全考虑,应用程序可以通过多种机制实现用户控制,例如:- 在用户界面中显示可用的工具,使用户能够定义是否应该在特定交互中提供某个工具
- 单个工具执行时的审批对话框
- 预批准特定安全操作的权限设置
- 显示所有工具执行及其结果的活动日志
资源
资源提供了对信息的结构化访问方式,AI应用程序能够检索这些信息并将其作为上下文提供给模型。资源工作原理
资源 从文件、API、数据库或任何其他AI需要理解上下文的来源暴露数据。应用程序可以直接访问这些信息,并决定如何使用 - 无论是选择相关部分、通过嵌入进行搜索,还是全部传递给模型。 每个资源都有唯一的URI(例如file:///path/to/document.md
),并声明其MIME类型以便进行适当的内容处理。它们声明MIME类型以便进行适当的内容处理,并支持两种发现模式:
- 直接资源 - 指向特定数据的固定URI。例如:
calendar://events/2024
- 返回2024年的日历可用性 - 资源模板 - 带有参数以实现灵活查询的动态URI。示例:
travel://activities/{city}/{category}
- 按城市和类别返回活动travel://activities/barcelona/museums
- 返回巴塞罗那的所有博物馆
方法 | 目的 | 返回值 |
---|---|---|
resources/list | 列出可用的直接资源 | 资源描述符数组 |
resources/templates/list | 发现资源模板 | 资源模板定义的数组 |
resources/read | 获取资源内容 | 包含元数据的资源数据 |
resources/subscribe | 监测资源变化 | 订阅确认 |
示例:获取旅行规划上下文
继续旅行规划的例子,资源为人工智能应用提供了访问相关信息的途径:- 日历数据 (
calendar://events/2024
) - 检查用户可用性 - 旅行证件 (
file:///Documents/Travel/passport.pdf
) - 访问重要文件 - 过往行程 (
trips://history/barcelona-2023
) - 参考过去的出行记录与偏好
origin
机场并开始输入"Bar"作为destination
机场时,系统可以建议"巴塞罗那(BCN)"或"巴巴多斯(BGI)"。
参数补全
动态资源支持参数补全。例如:- 输入 "Par" 作为
weather://forecast/{city}
的输入可能会建议 "巴黎" 或 "帕克城" - 输入"JFK"用于
flights://search/{airport}
可能会建议"JFK - 约翰·肯尼迪国际机场"
用户交互模型
资源是应用驱动的,使其在如何检索、处理和呈现可用上下文方面具有灵活性。常见的交互模式包括:- 以树形或列表视图浏览熟悉的类似文件夹结构的资源
- 搜索和筛选界面以查找特定资源
- 基于启发式或人工智能选择的自动上下文包含或智能建议
- 用于包含单个或多个资源的手动或批量选择接口
提示词
提示词提供可复用的模板。它们让MCP服务器作者可以为特定领域提供参数化提示,或展示如何最佳使用MCP服务器。提示如何工作
提示词是结构化模板,用于定义预期输入和交互模式。它们由用户控制,需要显式调用而非自动触发。提示词可具备上下文感知能力,参考可用资源和工具来创建完整的工作流。与资源类似,提示词支持参数补全功能,帮助用户发现有效参数值。 协议操作:方法 | 用途 | 返回值 |
---|---|---|
prompts/list | 发现可用的提示 | 提示描述符数组 |
提示/获取 | 检索提示详情 | 包含参数的完整提示定义 |
示例:简化的工作流程
提示为常见任务提供结构化模板。在旅行规划场景中: “规划一次度假”提示:- 选择"规划旅行"模板
- 结构化输入: 巴塞罗那, 7天, 3000美元, ["海滩", "建筑", "食物"]
- 基于模板的一致性工作流程执行
用户交互模式
用户控制提示(Prompts),需要显式调用。该协议赋予实现者设计应用程序中感觉自然界面的自由。关键原则包括:- 轻松发现可用的提示
- 清晰描述每个提示词的作用 -
- 带有验证的自然参数输入
- 提示底层模板的透明展示
- 斜杠命令(输入“/”查看可用提示,例如 /plan-vacation)
- 可搜索访问的命令面板
- 常用提示词的专用UI按钮
- 提供相关提示的情境菜单
将服务器汇聚一堂
MCP的真正威力显现于多个服务器协同工作时,它们通过统一界面整合各自的专门能力。示例:多服务器旅行规划
考虑一个个性化的AI旅行规划应用,包含三个连接服务器:- 出行服务器 - 处理航班、酒店和行程信息
- 气象服务器 - 提供气候数据和预报
- 日历/邮件服务器 - 管理日程和通信
完整流程
-
用户通过参数调用提示:
-
用户选择要包含的资源:
calendar://my-calendar/June-2024
(源自日历服务器)travel://preferences/europe
(来自旅行服务器)travel://past-trips/Spain-2023
(来自旅行服务器)
-
AI 使用工具处理请求:
AI首先读取所有选定的资源以收集上下文,包括从日历中识别可用日期、从旅行偏好中学习偏好的航空公司和酒店类型,以及从过去的行程中发现之前喜欢的的地点。
基于此上下文,人工智能随后执行一系列工具:
searchFlights()
- 查询航空公司从纽约到巴塞罗那的航班checkWeather()
- 获取旅行日期的天气预报
bookHotel()
- 查找指定预算范围内的酒店createCalendarEvent()
- 将行程添加到用户的日历中sendEmail()
- 发送包含出行详情的确认邮件