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