MCP 深度教程:从底层原理到动手实践
MCP(Model Context Protocol,模型上下文协议)是一个让大模型通过标准化方式调用外部工具的统一协议,本节教程从核心概念、数据流转过程到动手配置,完整讲解了如何在 Claude Desktop 中使用 MCP 服务器并理解其底层原理。
核心要点
为什么需要 MCP
- 大模型本身只会问答,不会使用外部工具,知识截止日期之前的训练数据无法覆盖实时信息
- 大模型无法自行联网查询天气、操作 Unity、获取实时路况或抓取网页内容
- MCP 的出现让大模型拥有了使用各种外部工具的能力,这是当前 AI 领域的核心热点话题
MCP 基本信息
- 全称:Model Context Protocol(模型上下文协议)
- 发布方:Anthropic 公司
- 发布时间:2024 年 11 月 25 日
- 名称中"上下文"的含义比较晦涩,本教程建议暂时不纠结名字,先理解它能做什么
核心概念定义
| 概念 | 英文原名 | 本质 | 说明 |
|---|---|---|---|
| MCP 主机 | MCP Host | 支持 MCP 协议的软件 | 如 Claude Desktop、Cursor、Claude Code、Cherry Studio 等 |
| MCP 服务器 | MCP Server | 一个符合 MCP 规范的普通程序 | 名称有误导性,并非传统网络意义上的远程服务器 |
| 工具 | Tool | 编程语言中的一个函数 | 接收输入参数,经过处理后返回输出结果 |
MCP Run
MCP Server 与手机应用的类比
MCP Server 和手机应用在本质上并无区别——两者都是内置了功能模块的程序,用于解决特定问题。以 iPhone 时钟应用为例:
- 世界时钟:查看各国时间
- 闹钟:设定提醒
- 钟表:查看当前时间
- 计时器:倒计时
每个功能就是一个 Tool。MCP Server 内置的 Tool 同样服务于特定场景,例如处理天气的 MCP Server 可能包含:
get_forecast:传入经纬度,返回未来几天的天气get_alerts:传入地区,返回未来几天的气象预警
Tool 的本质是函数——一个执行特定任务的机器或工具箱:放入材料(输入)、按预定规则处理、给出成品(输出)。
MCP 支持的环境
- 常见的 MCP Host 包括:Claude Desktop、Cursor、Claude Code、Cherry Studio
- 大部分 MCP Server 通过 Node.js 或 Python 在本地启动
- MCP Server 可能联网,也可能纯本地使用,是否联网不影响其"MCP Server"的称谓
实操环境配置
安装 Claude 客户端
Claude 是 VS Code 的一个插件,安装步骤:
- 到 VS Code 官方网站安装 VS Code
- 打开 VS Code,搜索"Claude"插件
- 点击安装,安装完成后侧边栏会出现 Claude 图标
- 点击图标进入 Claude 使用界面
配置模型
- Claude 支持不同的 API 接入方和模型
- 对 MCP 支持最好的模型:Claude 3.7(价格较贵)
- 性价比之选:DeepSeek V3 0324(效果不错,价格低得多)
- DeepSeek 官方网站提供 API,需要注册、登录、充值获取
OpenRouter 获取 API Key 的方法
OpenRouter 的优势:提供非常多的模型可供选用,几乎覆盖市面上所有主流模型,有些还可免费使用。
获取 Key 步骤:
- 打开 OpenRouter 页面,点击右上角"Sign In"登录
- 鼠标移到右上角,点击 "Keys"
- 点击 "Create Key"
- 输入两个信息:
- API Key 名称(可随意,例如 "default")
- 金额上限(单位:美元,可填可不填,建议填一个数字如 5)
- 点击 Create 创建
⚠️ 重要提醒:Key 创建后一定要找地方记下来,因为之后无法在 OpenRouter 页面中找回。
如果只使用免费模型,到这一步就完成了。使用付费模型需点击 "Credits" 进行充值。
Claude 中配置连接
- 点击配置图标
- API Provider 选择 OpenRouter
- Key 填写刚才记录的 API Key
- Model 选择 DeepSeek V3 0324
注意:
- 有两种 DeepSeek V3 0324 可选,以
free结尾代表免费模型 - 免费模型多多少少有些问题,不太稳定,有能力建议选择收费版本(DeepSeek 很便宜)
- 配置中有 Play Mode 和 Agent Mode,两个模式都要配置同样的信息
- 配置完成后点击连接,测试模型能否正常回复
完整数据流转过程(核心机制)
配置加载阶段(MCP Server 注册)
用户保存 JSON 配置
↓
Claude 使用配置中的 command 执行程序(MCP Server)
↓
MCP Server 启动后等待指令
↓
Claude 连接:"你好,我是 Claude"
↓
MCP Server 应答:"你好,我是 Weather"
↓
Claude 询问:"你有什么工具可供使用?"
↓
MCP Server 回答:"我有两个工具:get_forecast(传经纬度返回天气)、get_alerts(传州名返回预警)"
↓
Claude 记录工具列表(注册完成)此阶段发生在开启 MCP Server 的一瞬间,所有信息都会被 Claude 记住以备后续使用。
用户提问阶段(工具调用)
用户提问:"纽约明天的天气怎么样?"
↓
Claude 将用户问题 + 已注册的 MCP Server 列表 + 每个 Server 的 Tools 列表 传给模型
↓
模型判断:用户问题我回答不了(知识截止),但 weather server 中的 get_forecast 工具可以解决
↓
模型告诉 Claude:"调用 get_forecast,参数:北纬 40 度,西经 74 度"
↓
Claude 与 MCP Server 沟通:"调用 get_forecast,参数为北纬 40 度,西经 74 度"
↓
MCP Server 用指定参数调用 get_forecast 函数,拿到天气结果并传回给 Claude
↓
Claude 将结果回传给模型
↓
模型根据结果回答用户问题,答案返回给 Claude
↓
Claude 将最终答案返回给用户关键要点:模型不会直接调用工具,而是通过 Claude Host 作为中间人进行调用。Claude 从模型收到"需要调用哪个工具及参数"的指令,再与 MCP Server 沟通执行。
MCP Server 的配置方式
自动安装 vs 手动配置
自动安装(两种途径本质相同):
- 在聊天界面让模型直接创建并安装 MCP Server
- 在 MCP Server 市场中点击 Install
这两种方式的原理:每个 MCP Server 都有对应的 GitHub 仓库,仓库中有说明文档,模型通过阅读说明文档来运行程序、新增文件,从而完成安装。
手动配置(推荐) :
- 具有确定性,清楚每个环节在做什么
- 对安装程序、路径、版本有控制权
- 避免模型在电脑中"胡搞乱搞"或安装失败
- 兼容性更好(一些 MCP Host 不支持自动安装)
JSON 配置文件详解
{
"mcpServers": {
"weather": {
"disabled": false,
"timeout": 60,
"command": "uv",
"args": ["..."],
"transportType": "stdio"
}
}
}配置字段说明:
| 字段 | 含义 | 备注 |
|---|---|---|
weather | MCP Server 的名字 | 可自定义 |
disabled | 是否禁用该 MCP Server | 去掉该字段则默认为启用 |
timeout | 连接超时时间(秒) | 超过设定时间未连接成功则放弃 |
command | 运行 MCP Server 的程序 | 如 uv、npx 等 |
args | 对应参数 | 传递给运行程序的参数 |
transportType | 沟通方式 | stdio 或 SSE |
两种传输类型(Transport Type)
- stdio:MCP Server 使用标准输入和标准输出与 Host 沟通
- 目前大部分 MCP Server 使用这种模式
- SSE(Server-Sent Events):使用较少,教程中暂时忽略
MCP Server 查找与安装实操
MCP Server 市场
- MCP.so
- MCP Market.com
- 其他类似平台
大部分 MCP Server 使用 Python 或 Node.js 编写,对应的启动程序一般是 uvx(Python)或 npx(Node)。
使用 uvx 启动 Python 编写的 MCP Server
uv 简介:Python 界的包管理软件,uvx 是 uv tool run 的缩写,代表使用 uv 来运行一个工具(此处的"工具"是 uv 领域的工具,与 MCP 中的 Tool 不是同一概念)。
安装 uv:前往 uv 的 GitHub 仓库找到对应安装命令(macOS 用户使用 macOS 对应的命令)。
验证安装:执行 uvx pywhat hello world(让 pywhat 程序做一个牛叫的图片并显示 hello world),如果图片正常显示则安装成功。
fet`ch MCP Server 安装示例:
- 打开 MCP.so 搜索 "fetch"
- 进入后点击 Content
- 选择 uvx 配置命令,复制内容
- 回到 Claude,在 JSON 配置中添加逗号并粘贴
- 格式化配置
- 等待加载完成
npx 启动 Node.js 编写的 MCP Server
npx 简介:与 uvx 类似,可以自动下载并安装程序。区别在于 uvx 安装 Python 程序,npx 安装 Node.js 程序。npx 是 Node.js 的一部分,直接安装 Node.js LTS 版本即可。
hot news MCP Server 安装示例:
- 打开 MCP Market 网站
- 搜索 "hot news"(用于拉取新闻)
- 选择 MCP Server 配置部分的对应内容复制
- 回到 Claude 点击 MCP Server 粘贴
- 等待加载完成
其他启动方式:还有 npx(部分场景)、node 直接启动等方式,具体查看对应 MCP Server 的安装文档即可。
加载超时问题及解决方法
问题原因:uvx 或 npx 首次执行某程序时,需要先下载依赖,默认超时时间仅为 1 分钟,下载慢时容易超时。
报错信息:request timed out
解决步骤:
- 复制配置中的完整命令(如
uvx+ 对应参数) - 在终端中手动执行
- 等待程序下载完毕(显示"34 个依赖全部安装完成"即成功)
- 正常情况下程序启动后不会有输出提示(因为 MCP Server 通过输入输出沟通),这是正常现象
- 按
Ctrl + C退出(若无效,可按Ctrl + \退出,会有系统提醒,关闭即可) - 回到 Claude,点击 Retry Connection,此时加载速度会明显变快
案例分析
案例一:使用 fetch 抓取网页并保存为 Markdown
用户需求:抓取指定网页内容,转换为 Markdown 后写入项目目录中的 .md 文件。
执行过程:
- Claude 发现 fetch MCP Server 并确定可用工具
- 同时调用内部工具
write_to_file准备写入文件 - 拼接工具调用参数,征求用户同意
- 使用 fetch MCP Server 获取网页内容
- 将网页内容转换为 Markdown
- 写入用户指定的
.md文件
结果:任务完成,过程"非常丝滑,没有出现一点问题"。
案例二:查询纽约天气
用户需求:纽约明天(4 月 14 日)天气如何?
执行过程:
- Claude 发现 weather MCP Server
- 确定 get_forecast 工具可解决问题
- 自动填入纽约经纬度(北纬 40 度,西经 74 度)
- 征求用户同意后执行
- 获取到未来几天天气信息
- 模型总结并给出包含白天、夜间及相关建议的回答
结果:效果不错,准确回答了纽约 4 月 14 日(教程录制日期为 4 月 13 日)的天气。
限制与待确认问题
- 教程演示的 open weather map MCP Server 调用的是美国气象局 API,目前只有美国数据,对其他地区用处有限
- 免费模型(如 DeepSeek V3 0324-free)多多少少有些问题,不太稳定
- 模型知识截止日期限制了其直接回答能力(示例中模型知识截止到去年 12 月)
- 自动安装方式存在不确定性:用户无法得知模型在电脑中做了什么,且可能安装失败
- 教程仅演示了 stdio 和部分启动方式,SSE 等传输类型未深入讲解
总结
MCP 作为 Anthropic 在 2024 年 11 月发布的协议,核心价值在于让大模型能够标准化地使用外部工具。其体系由三个层次构成:Host(支持 MCP 的软件)、Server(符合 MCP 规范的程序)和 Tool(具体功能函数)。
在实际使用中,MCP Server 本质上就是一个普通程序,通过 JSON 配置启动命令和参数即可接入 Host。从数据流转看,整个流程是:用户提问 → Host 将问题与工具列表交给模型 → 模型选择合适工具 → Host 调用 MCP Server 执行 → 结果回传模型 → 模型生成最终回答。理解这个机制后,无论是配置还是后续开发 MCP Server 都能做到心中有数。
教程作者计划在后续推出进阶内容,演示如何从零编写 MCP Server,并通过截获 MCP Server 输入输出的方式深入剖析协议细节,但这取决于本期视频的效果和关注度。