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

核心服务器功能

服务器通过三个构建模块提供功能: 我们将使用一个假设场景来演示这些功能各自的作用,并展示它们如何协同工作。

工具

工具使 AI 模型能够执行操作。每个工具都定义了一个具有类型输入和输出的特定操作。模型会根据上下文请求执行工具。

工具如何工作

工具是由 schema 定义的接口,LLM 可以调用它们。MCP 使用 JSON Schema 进行验证。每个工具执行单一操作,并具有明确定义的输入和输出。工具在执行前可能需要用户同意,从而帮助确保用户对模型执行的操作保持控制权。 协议操作: 工具定义示例:

示例:旅行预订

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

用户交互模型

工具由模型控制,这意味着 AI 模型可以自动发现并调用它们。然而,MCP 通过多种机制强调人工监督。 为了信任与安全,应用可以通过多种机制实现用户控制,例如:
  • 在 UI 中显示可用工具,使用户能够定义某个工具是否应在特定交互中可用
  • 针对单个工具执行的批准对话框
  • 用于预先批准某些安全操作的权限设置
  • 显示所有工具执行及其结果的活动日志

资源

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

资源如何工作

资源可以从文件、API、数据库或任何其他 AI 需要理解上下文的来源中公开数据。应用程序可以直接访问这些信息,并决定如何使用它——无论是选择相关部分、使用嵌入进行搜索,还是将全部内容传递给模型。 每个资源都有一个唯一的 URI(例如 file:///path/to/document.md),并声明其 MIME 类型,以便进行适当的内容处理。 资源支持两种发现模式:
  • 直接资源 - 指向特定数据的固定 URI。示例:calendar://events/2024 - 返回 2024 年的日历可用性
  • 资源模板 - 带参数的动态 URI,便于灵活查询。示例:
    • travel://activities/{city}/{category} - 按城市和类别返回活动
    • travel://activities/barcelona/museums - 返回巴塞罗那的所有博物馆
资源模板包含诸如标题、描述和预期 MIME 类型等元数据,使其可被发现且自说明。 协议操作:

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

继续旅行规划示例,资源为 AI 应用提供对相关信息的访问:
  • 日历数据calendar://events/2024)- 检查用户可用时间
  • 旅行文档file:///Documents/Travel/passport.pdf)- 访问重要文档
  • 过往行程trips://history/barcelona-2023)- 参考以往旅行和偏好
AI 应用检索这些资源,并决定如何处理它们,无论是使用嵌入或关键词搜索选择数据子集,还是直接将原始数据传递给模型。 在这种情况下,它向模型提供日历数据、天气信息和旅行偏好,使其能够检查可用性、查询天气模式,并参考过往旅行偏好。 资源模板示例:
这些模板支持灵活查询。对于天气数据,用户可以访问任意城市/日期组合的预报。对于航班,他们可以搜索任意两个机场之间的航线。当用户将 origin 机场输入为 “NYC”,并开始输入 destination 机场的 “Bar” 时,系统可以建议 “Barcelona (BCN)” 或 “Barbados (BGI)“。

参数补全

动态资源支持参数补全。例如:
  • 将 “Par” 作为 weather://forecast/{city} 的输入时,可能会建议 “Paris” 或 “Park City”
  • 将 “JFK” 作为 flights://search/{airport} 的输入时,可能会建议 “JFK - John F. Kennedy International”
系统帮助发现有效值,而无需精确了解格式。

用户交互模型

资源由应用驱动,这使其在如何检索、处理和呈现可用上下文方面具有灵活性。常见交互模式包括:
  • 用于以熟悉的类似文件夹结构浏览资源的树状视图或列表视图
  • 用于查找特定资源的搜索和筛选界面
  • 基于启发式或 AI 选择自动包含上下文或智能建议
  • 用于包含单个或多个资源的手动或批量选择界面
应用程序可以自由通过任何适合其需求的界面模式实现资源发现。该协议不强制特定的 UI 模式,因此可以使用带预览功能的资源选择器、基于当前对话上下文的智能建议、用于包含多个资源的批量选择,或与现有文件浏览器和数据探索器集成。

提示词

提示词提供可复用的模板。它们允许 MCP 服务器作者为某个领域提供参数化提示词,或者展示如何最佳地使用 MCP 服务器。

提示词的工作方式

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

示例:简化的工作流

提示词为常见任务提供结构化模板。在旅行规划场景中: “规划一次度假”提示词:
与非结构化的自然语言输入不同,提示词系统支持:
  1. 选择“规划一次度假”模板
  2. 结构化输入:巴塞罗那,7 天,3000 美元,[“海滩”, “建筑”, “美食”]
  3. 基于模板执行一致的工作流

用户交互模型

提示词由用户控制,需要显式调用。该协议赋予实现者自由来设计在其应用程序内显得自然的界面。关键原则包括:
  • 轻松发现可用的提示词
  • 清晰描述每个提示词的作用
  • 带验证的自然参数输入
  • 透明展示提示词底层模板
应用程序通常通过各种 UI 模式暴露提示词,例如:
  • 斜杠命令(输入“/”查看可用提示词,如 /plan-vacation)
  • 命令面板,支持搜索访问
  • 用于常用提示词的专用 UI 按钮
  • 建议相关提示词的上下文菜单

将服务器连接在一起

当多个服务器协同工作,并通过统一接口结合各自的专长时,MCP 的真正威力就会显现出来。

示例:多服务器旅行规划

设想一个个性化的 AI 旅行规划应用,它连接了三个服务器:
  • 旅行服务器 - 处理航班、酒店和行程安排
  • 天气服务器 - 提供气候数据和天气预报
  • 日历/邮件服务器 - 管理日程和通信

完整流程

  1. 用户调用带参数的提示词:
  2. 用户选择要包含的资源:
    • calendar://my-calendar/June-2024(来自日历服务器)
    • travel://preferences/europe(来自旅行服务器)
    • travel://past-trips/Spain-2023(来自旅行服务器)
  3. AI 使用工具处理请求: AI 首先读取所有选定的资源以收集上下文——从日历中识别可用日期,从旅行偏好中了解偏爱的航空公司和酒店类型,并从过往行程中发现之前喜欢的地点。 利用这些上下文,AI 随后执行 AI 应用提供的提示词。在我们的示例中,AI 应用向模型暴露了来自已连接 MCP 天气服务器的天气工具。由于天气会影响旅行计划,AI 在解释提示词时选择调用 checkWeather() 因此,AI 执行了一系列工具调用:
    • searchFlights() - 查询 NYC 到 Barcelona 的航班
    • checkWeather() - 获取旅行日期的气候预报
    然后,AI 使用这些信息创建预订及后续步骤,并在必要时请求用户批准:
    • bookHotel() - 在指定预算内查找酒店
    • createCalendarEvent() - 将行程添加到用户日历
    • sendEmail() - 发送包含行程详情的确认邮件
结果: 通过多个 MCP 服务器,用户研究并预订了一次符合其日程安排的巴塞罗那之旅。Plan a Vacation 提示词引导 AI 将资源(日历可用时间和旅行历史)与工具(搜索航班、预订酒店、更新日历)结合起来,并跨越不同服务器进行上下文收集和预订执行。原本可能需要数小时的任务,现在借助 MCP 在几分钟内就完成了。