从零开始学MCP(三)- 认识MCP servers

63 阅读9分钟

MCP服务器是通过标准化协议接口向AI应用公开特定功能的程序。

参考示例:

  •  Everything  - Reference / test server with prompts, resources, and tools.
  •  Fetch  - Web content fetching and conversion for efficient LLM usage.
  •  Filesystem  - Secure file operations with configurable access controls.

核心功能

MCP服务器通过以下三个模块提供功能:

功能解释示例控制者
Tools(工具)LLM可以主动调用,并根据用户请求决定何时使用的函数。可以写入数据库、调用外部API、修改文件或触发其他逻辑的工具。查询天气搜索航班创建备忘录大模型
Resources(资源)提供用于上下文信息的read-only权限的数据资源,例如文件内容、数据库架构或API文档。检索文档访问知识库读取日历应用
Prompts(提示词)预设的指令模板,指导模型使用特定工具和资源。指定一个旅游计划总结会议记录编写一份Email用户

Tools(工具)

工具使AI大模型能够执行操作。每个工具都定义了一中带有输入和输出的特定操作。大模型基于上下文的决定使用哪种工具。

工具如何工作

工具是LLM可以调用的模式定义接口。MCP使用JSON模式进行验证。每个工具都执行一个操作,具有明确定义的输入和输出。工具在执行前可能需要用户同意,这有助于确保用户对模型所采取的操作保持控制。

协议操作:

方法目的返回结果
 tools/list 发现可用工具带有模式的工具定义数组
 tools/call 执行一个特定的工具个带有模式的工具定义数组

工具定义示例:

{

  name: "searchFlights",

  description: "Search for available flights",

  inputSchema: {

    type: "object",

    properties: {

      origin: { type: "string", description: "Departure city" },

      destination: { type: "string", description: "Arrival city" },

      date: { type: "string", format: "date", description: "Travel date" }

    },

    required: ["origin", "destination", "date"]

  }

}

JSON

示例:旅行计划

在旅行场景中,AI应用可以使用几个工具来帮助制定一个旅行计划。

航班查询

searchFlights(origin: "Beijing", destination: "Wuhan", date: "2026-01-01")

Python

用户交互模型

工具是由大模型控制的,这意味着AI大模型可以自动发现和调用它们。然而,MCP强调通过多种机制进行人为监督。

为了安全,应用可以通过各种机制实现人为控制,例如:

  • 在UI界面中显示可用工具,使用户能够决定工具是否应在特定场景中可用
  • 给工具的执行提供一个审批对话框
  • 为预审批操作设置权限
  • 显示所有工具执行结果的活动日志

Resources(资源)

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

资源如何工作

资源公开来自文件、API、数据库或AI理解上下文所需的任何其他来源的数据。应用可以直接访问这些信息并决定如何使用它 - 无论是选择相关部分、使用嵌入进行搜索,还是将其全部传递给模型。

每个资源具有唯一的URI(例如: file:///path/to/document.md )并声明其MIME类型以进行适当的内容处理。

资源支持两种发现模式:

  • 直接资源 - 指向特定数据的固定URI。例如: calendar://events/2026  - 返回2026年的日历可用

  • 资源模板 - 具有灵活查询参数的动态URI。例如:

    •  travel://activities/{city}/{category}  - 按城市和类别返回活动

    •  travel://activities/Beijing/museums  - 归还巴塞罗那的所有博物馆

资源模板包括元数据,如标题、描述和预期的MIME类型,使其可被发现并自我记录。

协议操作:

方法目的返回结果
 resources/list 列出可用的资源资源描述的数组
 resources/templates/list 发现资源模板资源模板定义的数组
 resources/read 检索资源内容带元数据的资源数据
 resources/subscribe 监控资源变更订阅确认

示例:获取旅行计划的上下文

继续以旅行计划为例,资源为AI应用提供了访问相关信息的权限:

  • 日历数据( calendar://events/2026 )检查用户可用性
  • 旅行文档( file:// documents /Travel/passport.pdf )访问重要文档
  • 历史行程( trips://history/Beijing-2025 )参考过去的行程和偏好

AI应用检索这些资源并决定如何处理它们,是否选择使用嵌入或关键字搜索的数据子集,或将原始数据直接传递给模型。

在本例中,它向模型提供日历数据、天气信息和旅行偏好,使模型能够检查可用性、查找天气模式和参考过去的旅行偏好。

资源模型示例:

{

  "uriTemplate": "weather://forecast/{city}/{date}",

  "name": "weather-forecast",

  "title": "Weather Forecast",

  "description": "Get weather forecast for any city and date",

  "mimeType": "application/json"

}



{

  "uriTemplate": "travel://flights/{origin}/{destination}",

  "name": "flight-search",

  "title": "Flight Search",

  "description": "Search available flights between cities",

  "mimeType": "application/json"

}

JSON

参数补全

动态资源支持参数补全。例如:

  • 键入“上”作为输入 weather://forecast/{city} 可能会建议“上海”或“上饶”
  • 键入“天河” flights://search/{airport} 可能会建议“武汉天河国际机场”

系统能帮助发现有效值,而不需要精确的格式。

用户交互模型

资源是应用驱动的,使它们在检索、处理和呈现可用上下文方面具有灵活性。常见的交互模式包括:

  • 用于浏览有相似文件结构的资源的树状图或列表
  • 用于查找特定资源的搜索和筛选界面
  • 基于启发式或AI选择的自动上下文或智能建议
  • 用于单个或多个资源手动或批量选择的界面

应用可以通过任何适合其需求的接口模式自由实现资源发现。该协议不强制要求特定的UI模式,允许具有预览功能的资源选择器、基于当前对话上下文的智能建议、包含多个资源的批量选择或与现有文件浏览器和数据浏览器的集成。

Prompts(提示词)

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

Prompts(提示词)如何工作

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

协议操作:

方法目的返回结果
 prompts/list 发现可用的提示词提示词数组
 prompts/get 检索提示词细节带参数的完整提示词

示例:Streamlined Workflows

提示词为常见的任务提供结构化模板。

旅行计划提示词:

{

  "name": "plan-vacation",

  "title": "Plan a vacation",

  "description": "Guide through vacation planning process",

  "arguments": [

    { "name": "destination", "type": "string", "required": true },

    { "name": "duration", "type": "number", "description": "days" },

    { "name": "budget", "type": "number", "required": false },

    { "name": "interests", "type": "array", "items": { "type": "string" } }

  ]

}

JSON

相比非结构化的自然语言输入,提示词系统支持:

  1. 选择“旅行计划”这个模板
  1. 结构化输入参数:武汉,3天,3000元,["历史文化", "风景名胜", "没事"]
  1. 基于模板的一致性工作流执行

用户交互模型

提示词由用户控制,需要显式调用。该协议让用户能够像使用自然语言一样设计应用接口。关键原则包括:

  • 简单可用
  • 清楚地描述每个提示词的作用
  • 输入可验证的自然参数
  • 提示词的底层模板透明展示

应用通常在各种UI界面公开提示词,例如:

  • 斜杠命令(输入“/”以查看可用的提示符,如/plan-vacation)
  • 用于可搜索的命令面板
  • 用于常用提示词的专用UI按钮
  • 用于建议相关提示词的上下文菜单

整合服务器

当多个服务器协同工作时,MCP的真正力量就会显现出来,通过统一的接口将它们的专业功能结合起来。

示例:多服务器旅行计划

设计一个个性化的AI旅行计划应用,采用三个MCP服务器:

  • 旅行服务器 - 处理航班、酒店和行程
  • 天气服务器 - 提供气候数据和预报
  • 日历/电子邮件服务器 - 管理日程和通信

完整流程

  1. 用户使用带有参数的提示词:
{

  "prompt": "plan-vacation",

  "arguments": {

    "destination": "Wuhan",

    "departure_date": "2026-01-0101",

    "return_date": "2026-01-03",

    "budget": 3000,

    "travelers": 2

  }

}

JSON

  1. 用户选择所需资源:
  •  calendar://my-calendar/January-2026  (from Calendar Server)
  •  travel://preferences/europe  (from Travel Server)
  •  travel://past-trips/Chengdu-2025  (from Travel Server)
  1. AI使用工具处理请求:

人工智能首先读取所有选定的资源以收集上下文 - 从日历中识别可用日期,从旅行偏好中学习首选航空公司和酒店类型,并从历史行程中发现喜欢的旅游景点。

使用上下文,AI然后调用一系列工具:

  •  searchFlights()  - 查询北京到武汉的航班
  •  checkWeather()  - 查询旅行期间的天气

然后,AI通过这些信息创建预订操作并执行以下步骤,在必要时请求用户批准:

  •  bookHotel()  - 查找指定预算内的酒店
  •  createCalendarEvent()  - 将行程添加到用户的日历中
  •  sendEmail()  - 发送包含行程详情的确认邮件

结果: 通过多个MCP服务器,用户根据自己的日程安排研究并预订了武汉之旅。“旅行计划”提示词引导AI将不同服务器上的资源(日历可用性和历史行程)与工具(搜索航班、预订酒店、更新日历)相结合,收集上下文并执行预订操作。使用MCP可以在几分钟内完成一项可能需要几个小时的任务。


欢迎加入我的【ima知识库】  从零开始学MCP