Skip to main content
MCP server 是通过标准化协议接口向 AI 应用暴露特定能力的程序。 常见例子包括用于访问文档的文件系统服务器、用于查询数据的数据库服务器、用于代码管理的 GitHub 服务器、用于团队沟通的 Slack 服务器,以及用于日程安排的日历服务器。

核心服务器能力

服务器通过三个构建块提供功能: 下面使用一个假设场景说明这些能力各自的作用,以及它们如何协同工作。

Tools

Tools 让 AI 模型能够执行动作。每个 tool 都定义一个具体操作,并带有类型化输入和输出。模型会根据上下文请求执行 tool。

Tools 如何工作

Tools 是由 schema 定义、可供 LLM 调用的接口。MCP 使用 JSON Schema 进行校验。每个 tool 执行一个单一操作,并具有清晰定义的输入和输出。Tool 执行前可能需要用户同意,这有助于确保用户仍然控制模型采取的动作。 协议操作: 工具定义示例:

示例:旅行预订

Tools 让 AI 应用能够代表用户执行动作。在旅行规划场景中,AI 应用可能使用多个 tools 来帮助预订假期: 航班搜索
查询多家航空公司并返回结构化航班选项。 日历占用
在用户日历中标记旅行日期。 邮件通知
向同事发送自动外出通知。

用户交互模型

Tools 由模型控制,这意味着 AI 模型可以自动发现并调用它们。不过,MCP 通过多种机制强调人工监督。 出于信任和安全考虑,应用可以通过多种机制实现用户控制,例如:
  • 在 UI 中展示可用 tools,让用户定义某个 tool 是否应在特定交互中可用。
  • 针对单次 tool 执行显示审批对话框。
  • 针对某些安全操作设置预批准权限。
  • 活动日志展示所有 tool 执行及其结果。

Resources

Resources 为信息提供结构化访问,AI 应用可以检索这些信息并作为上下文提供给模型。

Resources 如何工作

Resources 暴露来自文件、API、数据库或任何其他来源的数据,供 AI 理解上下文。应用可以直接访问这些信息,并决定如何使用它们,例如选择相关片段、使用 embeddings 搜索,或将全部数据传给模型。 每个 resource 都有唯一 URI(例如 file:///path/to/document.md),并声明其 MIME type,以便进行适当的内容处理。 Resources 支持两种发现模式:
  • Direct Resources - 指向特定数据的固定 URI。示例:calendar://events/2024 - 返回 2024 年的日历可用性。
  • Resource Templates - 带参数的动态 URI,用于灵活查询。示例:
    • travel://activities/{city}/{category} - 按城市和类别返回活动。
    • travel://activities/barcelona/museums - 返回巴塞罗那的所有博物馆。
Resource Templates 包含 title、description 和预期 MIME type 等元数据,使其可发现且具备自描述性。 协议操作:

示例:获取旅行规划上下文

继续旅行规划示例,resources 为 AI 应用提供对相关信息的访问:
  • 日历数据calendar://events/2024)- 检查用户是否有空。
  • 旅行文档file:///Documents/Travel/passport.pdf)- 访问重要文档。
  • 历史行程trips://history/barcelona-2023)- 参考过去的旅行和偏好。
AI 应用会检索这些 resources,并决定如何处理它们:可以使用 embeddings 或关键词搜索选择部分数据,也可以将原始数据直接传给模型。 在这个例子中,应用会向模型提供日历数据、天气信息和旅行偏好,使其能够检查可用日期、查询天气模式,并参考过去的旅行偏好。 Resource Template 示例:
这些 templates 支持灵活查询。对于天气数据,用户可以访问任意城市/日期组合的预报。对于航班,用户可以搜索任意两个机场之间的路线。当用户把 origin 机场输入为 "NYC",并开始在 destination 机场输入 "Bar" 时,系统可以建议 "Barcelona (BCN)""Barbados (BGI)"

参数补全

动态 resources 支持参数补全。例如:
  • weather://forecast/{city} 输入 "Par" 时,可能建议 "Paris""Park City"
  • flights://search/{airport} 输入 "JFK" 时,可能建议 "JFK - John F. Kennedy International"
系统可以帮助发现有效值,而不要求用户知道精确格式。

用户交互模型

Resources 由应用驱动,因此应用在检索、处理和展示可用上下文时有很高灵活性。常见交互模式包括:
  • 使用树形或列表视图,以类似文件夹的结构浏览 resources。
  • 使用搜索和过滤界面查找特定 resources。
  • 基于启发式规则或 AI 选择自动包含上下文,或提供智能建议。
  • 使用手动或批量选择界面包含一个或多个 resources。
应用可以自由选择适合自身需求的界面模式来实现 resource 发现。协议不强制特定 UI 模式,因此可以实现带预览能力的 resource 选择器、基于当前对话上下文的智能建议、用于包含多个 resources 的批量选择,或与现有文件浏览器和数据浏览器集成。

Prompts

Prompts 提供可复用模板。它们允许 MCP server 作者为某个领域提供参数化 prompt,或展示如何最好地使用这个 MCP server。

Prompts 如何工作

Prompts 是结构化模板,用来定义预期输入和交互模式。它们由用户控制,需要显式调用,而不是自动触发。Prompts 可以感知上下文,引用可用 resources 和 tools 来创建完整工作流。与 resources 类似,prompts 支持参数补全,帮助用户发现有效参数值。 协议操作:

示例:简化工作流

Prompts 为常见任务提供结构化模板。在旅行规划上下文中: “Plan a vacation” prompt:
相比非结构化自然语言输入,prompt 系统支持:
  1. 选择 "Plan a vacation" 模板。
  2. 输入结构化参数:Barcelona、7 days、$3000、[“beaches”, “architecture”, “food”]。
  3. 基于模板一致地执行工作流。

用户交互模型

Prompts 由用户控制,需要显式调用。协议允许实现者自由设计适合自身应用的自然交互界面。关键原则包括:
  • 易于发现可用 prompts。
  • 清晰描述每个 prompt 做什么。
  • 自然地输入参数,并进行校验。
  • 透明展示 prompt 底层模板。
应用通常通过多种 UI 模式暴露 prompts,例如:
  • Slash commands(输入 "/" 查看 /plan-vacation 等可用 prompts)。
  • 命令面板,支持搜索访问。
  • 针对常用 prompts 的专用 UI 按钮。
  • 根据上下文建议相关 prompts 的菜单。

组合多个服务器

当多个服务器通过统一接口协同工作、组合各自的专门能力时,MCP 的真正价值会体现出来。

示例:多服务器旅行规划

设想一个个性化 AI 旅行规划应用,它连接了三个服务器:
  • Travel Server - 处理航班、酒店和行程。
  • Weather Server - 提供气候数据和天气预报。
  • Calendar/Email Server - 管理日程和沟通。

完整流程

  1. 用户使用参数调用 prompt:
  2. 用户选择要包含的 resources:
    • calendar://my-calendar/June-2024 (from Calendar Server)
    • travel://preferences/europe (from Travel Server)
    • travel://past-trips/Spain-2023 (from Travel Server)
  3. AI 使用 tools 处理请求: AI 首先读取所有已选择 resources 来收集上下文:从日历中识别可用日期,从旅行偏好中了解首选航空公司和酒店类型,并从历史旅行中发现用户过去喜欢的地点。 利用这些上下文,AI 随后执行一系列 tools:
    • searchFlights() - 查询从 NYC 到 Barcelona 的航班。
    • checkWeather() - 检索旅行日期的天气预报。
    然后 AI 使用这些信息创建预订并执行后续步骤,在必要时请求用户批准:
    • bookHotel() - 查找指定预算内的酒店。
    • createCalendarEvent() - 将行程添加到用户日历。
    • sendEmail() - 发送包含行程详情的确认邮件。
结果: 通过多个 MCP server,用户完成了针对自己日程定制的巴塞罗那旅行调研和预订。“Plan a Vacation” prompt 指导 AI 跨不同服务器组合 Resources(日历可用性和旅行历史)与 Tools(搜索航班、预订酒店、更新日历),从而收集上下文并执行预订。原本可能需要数小时的任务,通过 MCP 在几分钟内完成。