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
相比非结构化的自然语言输入,提示词系统支持:
- 选择“旅行计划”这个模板
- 结构化输入参数:武汉,3天,3000元,["历史文化", "风景名胜", "没事"]
- 基于模板的一致性工作流执行
用户交互模型
提示词由用户控制,需要显式调用。该协议让用户能够像使用自然语言一样设计应用接口。关键原则包括:
- 简单可用
- 清楚地描述每个提示词的作用
- 输入可验证的自然参数
- 提示词的底层模板透明展示
应用通常在各种UI界面公开提示词,例如:
- 斜杠命令(输入“/”以查看可用的提示符,如/plan-vacation)
- 用于可搜索的命令面板
- 用于常用提示词的专用UI按钮
- 用于建议相关提示词的上下文菜单
整合服务器
当多个服务器协同工作时,MCP的真正力量就会显现出来,通过统一的接口将它们的专业功能结合起来。
示例:多服务器旅行计划
设计一个个性化的AI旅行计划应用,采用三个MCP服务器:
- 旅行服务器 - 处理航班、酒店和行程
- 天气服务器 - 提供气候数据和预报
- 日历/电子邮件服务器 - 管理日程和通信
完整流程
- 用户使用带有参数的提示词:
{
"prompt": "plan-vacation",
"arguments": {
"destination": "Wuhan",
"departure_date": "2026-01-0101",
"return_date": "2026-01-03",
"budget": 3000,
"travelers": 2
}
}
JSON
- 用户选择所需资源:
- calendar://my-calendar/January-2026 (from Calendar Server)
- travel://preferences/europe (from Travel Server)
- travel://past-trips/Chengdu-2025 (from Travel Server)
- AI使用工具处理请求:
人工智能首先读取所有选定的资源以收集上下文 - 从日历中识别可用日期,从旅行偏好中学习首选航空公司和酒店类型,并从历史行程中发现喜欢的旅游景点。
使用上下文,AI然后调用一系列工具:
- searchFlights() - 查询北京到武汉的航班
- checkWeather() - 查询旅行期间的天气
然后,AI通过这些信息创建预订操作并执行以下步骤,在必要时请求用户批准:
- bookHotel() - 查找指定预算内的酒店
- createCalendarEvent() - 将行程添加到用户的日历中
- sendEmail() - 发送包含行程详情的确认邮件
结果: 通过多个MCP服务器,用户根据自己的日程安排研究并预订了武汉之旅。“旅行计划”提示词引导AI将不同服务器上的资源(日历可用性和历史行程)与工具(搜索航班、预订酒店、更新日历)相结合,收集上下文并执行预订操作。使用MCP可以在几分钟内完成一项可能需要几个小时的任务。
欢迎加入我的【ima知识库】 从零开始学MCP