MCP(Model Context Protocol,模型上下文协议)是 Anthropic 推出的一种开放协议,它让 AI 模型能够安全地连接和使用外部的工具、数据源和服务。
前置教程:
如想快速开始本教程,你可能需要先完成以下前置教程:
- 大语言模型LLM服务商Api服务调用教程,本节内容介绍了如何注册获取LLM服务商的Api服务,以及如何使用Cherry Studio使用GLM 的免费 Api服务。
- Python+FastAPI在Windows环境下创建一个基础后端服务教程,本节内容将通过Python+FastMCP实现一个基础的MCP服务器,你可能需要了解如何使用Python构建后端服务。
- Node.js和Npm安装与使用教程,本节内容将通过 Npm 安装 OpenWebSearch MCP 服务。
1. 什么是 MCP?
说起MCP,要先理解大语言模型(Large Language Model,LLM)的能力和限制,LLM 本身只能处理和生成文本,但不能直接与外部工具交互,相当于一个人只有五官而没有手脚,这极大地制约了其能力。为了解决这一问题,人们通过让 LLM 生成访问外部工具指令的方式,实现与外部工具的交互。但由于市面上的 LLM 、外部服务、指令格式、认证方式等均有不同程度的差异,于是 MCP 应运而生,它是统一的、标准的、符合人类和 AI 直觉的 LLM 调用外部服务和工具的规范协议,这让不同的外部服务、LLM模型和任务指令实现跨设备、跨区域甚至跨网络的任务交互。
2. MCP 的工作原理
2.1 核心概念
| 概念 | 说明 |
|---|---|
| MCP 客户端 | 各类Agent工具应用(如Claude Code)、VS Code、LLM服务提供平台(如Dify)等,负责发现和调用工具 |
| MCP 服务器 | 独立的进程或服务,暴露一组工具集合给客户端,如高德提供的地图服务、百度提供的翻译服务等 |
| 工具 (Tools) | 前文提到的具体集合,如 read_file(读取文件)、search_web(联网搜索) |
2.2 传输机制
- stdio:服务器作为子进程运行,通过标准输入/输出通信(适合本地工具)
- Streamable HTTP:服务器作为独立 HTTP 服务运行,利用 SSE 实现服务器主动推送(适合远程服务)
SSE(Server-Sent Events) 是一种基于 HTTP 的轻量级服务器推送技术,允许服务器通过持久连接向客户端单向实时推送数据,常用于通知、流式响应和进度更新等场景。
2.3 完整调用流程
- MCP客户端启动时,读取相应的的 MCP 服务器配置
- 每个MCP服务器启动后,通过
tools/list接口告知MCP客户端自己提供哪些工具 - 用户在对话中提出需求,MCP客户端 判断需要调用哪个工具
- 用户审批(除非该工具已设置为
autoApprove) - MCP服务器执行工具并返回结果
- MCP客户端将工具结果整合到对话中回复用户
3. 快速上手体验MCP服务:open-WebSearch (联网搜索MCP)
open-WebSearch 是一个开源的联网搜索MCP服务,支持多种搜索引擎,如Google、Bing、DuckDuckGo等,你可以访问Github仓库了解更多信息。
3.1 安装 open-WebSearch
在Git Bash中执行以下命令:
# npx 安装 open-WebSearch
$ npx open-WebSearch@latest

3.2 在 Cherry Studio 中配置使用
- 打开 Cherry Studio,点击左下角
设置按钮,进入 MCP 设置项,点击右上角+,选择从JSON导入:
-
将以下内容粘贴至对话框中:
配置说明:{ "mcpServers": { "web-search": { "name": "Web Search MCP", "type": "sse", "description": "Multi-engine web search with article fetching", "isActive": true, "baseUrl": "http://localhost:3000/mcp" } } }name:服务器名称type:传输模式(SSE)description:工具描述,用于LLM理解isActive:是否启用baseUrl:服务器地址
-
点击
确定保存配置,并在退出对话框后点击开启按钮,链接服务。
-
在聊天界面开启
MCP功能:
Cherry Studio 初始设置MCP功能后可能不能正确识别和调用,只需要关闭软件再次打开即可。
4. 自定义 MCP 服务器
我们在前面的章节中已经介绍了如何使用别人提供的MCP服务,实际上,你也可以编写自己的 MCP 服务器,以下是用 Python 实现的最小示例:
FastMCP 是构建在 MCP Python SDK 之上的开源项目,底层基于 FastAPI + Starlette,大幅简化了 MCP 服务器的开发。我们将借助于 FastMCP 实现一个简单的 MCP 服务器,支持 add 和 sub 两个工具。
4.1 创建环境并安装依赖
# conda 创建环境
conda create -n fastmcp python=3.10
# 激活环境
conda activate fastmcp
# 安装依赖
pip install fastmcp httpx
4.2 创建后端服务(使用 FastMCP + SSE 模式)
当需要远程访问 MCP 服务,或将 MCP 嵌入已有的 FastAPI Web 应用时,可以使用 SSE(Server-Sent Events)模式:
创建一个 server.py 文件,内容如下:
from fastmcp import FastMCP
# 创建 MCP 服务器
mcp = FastMCP("my-fastmcp-server")
@mcp.tool()
def add(a: int, b: int) -> int:
"""计算两个数的和"""
return a + b
@mcp.tool()
def sub(a: int, b: int) -> int:
"""计算两个数的差"""
return a - b
if __name__ == "__main__":
# 以 SSE 模式运行(HTTP 服务器,支持 MCP 协议的 SSE 传输)
# 可通过 MCP 客户端(如 Claude Desktop)通过 sse:// 地址连接
mcp.run(transport="sse", host="0.0.0.0", port=8001)
启动服务:
python server.py
终端中显示以下内容表示服务启动成功:

在Cherry Studio中配置使用(SSE 模式):
复制以下内容到Cherry Studio的MCP服务器配置中:
{
"mcpServers": {
"my-fastmcp-server": {
"type": "sse",
"url": "http://localhost:8001/sse"
}
}
}

5. 总结
5.1 核心内容回顾
经过本节内容的学习,你已经掌握了以下知识:
| 知识点 | 核心要点 | 掌握程度 |
|---|---|---|
| MCP 基本概念 | MCP 是 AI 模型与外部工具/数据源之间的开放协议,统一了工具调用的接口标准 | 理解 |
| MCP 工作原理 | 客户端-服务器架构,通过 stdio 或 SSE 两种传输方式进行通信 | 理解 |
| MCP 完整调用流程 | 客户端启动 - 工具发现(tools/list) - 用户意图匹配 - 用户审批 - 工具执行 - 结果整合 | 掌握 |
| 快速上手体验 | 通过 Cherry Studio + open-WebSearch 体验了真实的 MCP 服务调用 | 实践 |
| 自定义 MCP 服务器 | 使用 Python + FastMCP 编写了具有 add/sub 工具的 MCP 服务器 | 实践 |
5.2 常见问题与解答(FAQ)
问:MCP 和 OpenAI Function Calling 有什么区别?
MCP 是开放协议,不绑定任何特定模型或厂商;Function Calling 是 OpenAI 的私有 API 特性。MCP 允许你在不同客户端、不同模型之间复用同一套工具。如果用 Function Calling,工具定义和调用逻辑都紧密耦合在 OpenAI API 上,迁移成本高。
问:stdio 和 SSE 我应该选哪个?
| 场景 | 推荐模式 | 原因 |
|---|---|---|
| 本地开发、个人使用 | stdio | 零配置、启动快、安全性高 |
| 团队共享、远程调用 | SSE | 可通过网络访问,适合服务化部署 |
| 嵌入已有 Web 应用 | SSE | 可复用现有的域名、认证、网关 |
| Docker 容器部署 | SSE | 容器对外暴露 HTTP 端口更自然 |
问:MCP 服务器可以部署在公网吗?
可以,但必须做好安全防护:
- 建议部署在内网或 VPN 内,或通过反向代理(Nginx、Caddy)添加认证层
- 工具操作应遵循最小权限原则
- 对于敏感操作(文件读写、数据库修改),客户端侧应设置手动审批
问:一个 MCP 服务器可以注册多少个工具?
没有硬性限制。但建议一个服务器聚焦于同一领域的功能(如"文件操作工具集"、"代码分析工具集"),便于维护和复用。如果工具过多,应考虑拆分到多个 MCP 服务器中。
问:如何获取更多的 MCP 服务?
有很多 MCP 服务市场可供选择,比如:
这些服务市场提供了丰富的 MCP 服务,你可以根据需求选择合适的服务。
举手提问