1. 什么是MCP服务器 #
MCP 服务器 = 通过标准协议向 AI 应用提供能力的程序。
常见例子:文件系统服务器(读文档)、数据库服务器(查数据)、GitHub 服务器(管代码)、Slack 服务器(发消息)、日历服务器(看日程)。
2. 服务器能提供什么?—— 三个核心功能 #
服务器通过三类「能力」与 AI 协作:
| 功能 | 通俗理解 | 谁决定用 | 举例 |
|---|---|---|---|
| 工具 | AI 可以调用的「函数」 | 模型自动决定 | 搜航班、发消息、创建日历事件 |
| 资源 | AI 可以读取的「数据」 | 应用/用户选择 | 读文档、查日历、访问知识库 |
| 提示 | 可复用的「任务模板」 | 用户主动选择 | 规划假期、总结会议、起草邮件 |
记忆口诀:工具 = 做事情,资源 = 读数据,提示 = 套模板。
下面用一个「旅行规划」场景,贯穿三种能力。
3. 工具:让 AI 能「动手做事」 #
3.1 工具是什么? #
工具是 LLM 可以调用的函数,有明确的输入和输出。模型根据对话内容自动决定何时调用、传什么参数。
3.2 协议怎么用? #
| 方法 | 作用 |
|---|---|
tools/list |
列出服务器提供的所有工具 |
tools/call |
执行指定工具 |
3.3 工具定义长什么样? #
每个工具需要:name(名称)、description(描述)、inputSchema(输入参数格式)。例如:
{
"name": "searchFlights",
"description": "搜索可用航班",
"inputSchema": {
"type": "object",
"properties": {
"origin": { "type": "string", "description": "出发城市" },
"destination": { "type": "string", "description": "到达城市" },
"date": { "type": "string", "description": "出行日期" }
},
"required": ["origin", "destination", "date"]
}
}3.4 旅行场景中的工具示例 #
| 工具 | 作用 |
|---|---|
searchFlights() |
查航班 |
createCalendarEvent() |
在日历里创建行程 |
sendEmail() |
发邮件通知同事 |
3.5 用户如何参与? #
工具由模型自动调用,但应用可以通过以下方式保证用户知情、可控:
- 在界面中展示可用工具,让用户选择是否启用
- 关键操作前弹出确认框
- 为安全操作设置预批准规则
- 提供工具调用与结果的活动日志
4. 资源:让 AI 能「读数据」 #
4.1 资源是什么? #
资源是 AI 可以读取的数据源,只读、不修改。应用决定取哪些资源、怎么用(全量给模型、做检索、做嵌入等)。
4.2 两种资源类型 #
| 类型 | 说明 | 示例 |
|---|---|---|
| 直接资源 | 固定 URI,指向具体数据 | calendar://events/2024(2024 年日历) |
| 资源模板 | 带参数的动态 URI | weather://forecast/{city}/{date}(按城市和日期查天气) |
4.3 协议怎么用? #
| 方法 | 作用 |
|---|---|
resources/list |
列出直接资源 |
resources/templates/list |
列出资源模板 |
resources/read |
读取资源内容 |
resources/subscribe |
订阅资源变化 |
4.4 旅行场景中的资源示例 #
| 资源 | 作用 |
|---|---|
calendar://events/2024 |
查用户 2024 年空闲时间 |
file:///Documents/Travel/passport.pdf |
读护照等旅行文档 |
trips://history/barcelona-2023 |
参考过去的行程和偏好 |
4.5 参数补全 #
资源模板支持参数补全。例如输入 "Par" 可提示 "Paris" 或 "Park City",输入 "JFK" 可提示 "JFK - John F. Kennedy International",方便用户选对参数。
5. 提示:让 AI 按「模板」工作 #
5.1 提示是什么? #
提示是 可复用的任务模板,带结构化参数。用户主动选择某个提示,而不是由模型自动触发。
5.2 协议怎么用? #
| 方法 | 作用 |
|---|---|
prompts/list |
列出可用提示 |
prompts/get |
获取提示详情(含参数定义) |
5.3 提示定义示例 #
{
"name": "plan-vacation",
"title": "规划假期",
"description": "引导完成假期规划流程",
"arguments": [
{ "name": "destination", "type": "string", "required": true },
{ "name": "duration", "type": "number", "description": "天数" },
{ "name": "budget", "type": "number", "required": false },
{ "name": "interests", "type": "array", "items": { "type": "string" } }
]
}5.4 和随便聊天有什么区别? #
| 无结构输入 | 使用提示 |
|---|---|
| 用户自由打字,信息可能不完整 | 按模板填参数,信息更完整 |
| 每次说法可能不同 | 流程统一、可复用 |
| 模型要自己推断缺什么 | 参数定义清晰,便于验证 |
5.5 常见 UI 形式 #
- 斜杠命令:输入
/显示/plan-vacation等 - 命令面板:搜索并选择提示
- 快捷按钮:常用提示一键触发
- 上下文菜单:根据当前内容推荐相关提示
6 三者如何配合?—— 多服务器旅行规划 #
当多个 MCP 服务器一起工作时,能力会叠加。例如:
- 旅行服务器:航班、酒店、行程
- 天气服务器:气候、预报
- 日历/邮件服务器:日程、通知
6.1 完整流程示例 #
用户选择提示并填参数
例如选择「规划假期」,填:目的地 Barcelona、7 天、预算 $3000。用户选择要用的资源
例如:日历、旅行偏好、过去行程等。AI 读取资源、调用工具
- 先读资源:日历可用日期、偏好、历史行程
- 再调工具:
searchFlights()、checkWeather()、bookHotel()、createCalendarEvent()、sendEmail()等 - 关键操作前可请求用户确认
结果
在几分钟内完成研究、预订和通知,而不是几小时。
7 本章小结 #
| 能力 | 谁控制 | 核心作用 |
|---|---|---|
| 工具 | 模型 | 执行操作(搜、订、发等) |
| 资源 | 应用/用户 | 提供只读数据 |
| 提示 | 用户 | 提供结构化任务模板 |
记忆要点:工具做事、资源读数据、提示套模板;多服务器可组合使用,形成完整工作流。