MCP协议:AI界的USB-C统一接口,从知识点到实践,从使用别人的MCP到自己编写部署MCP,cherry-studio使用链接MCP
MCP(模型上下文协议)是Anthropic推出的开放标准协议,旨在统一LLM与外部工具的交互框架。其核心设计包括解决数据孤岛问题、支持动态双向交互,采用客户端-服务器架构,包含主机、客户端和服务器三层角色。工作流程支持上下文保持和多步骤任务。开发者可通过SDK快速构建MCP服务,支持标准化流程和SSE协议,并能将本地服务发布到公网。该协议为AI工具集成提供了类似USB-C的通用接口方案。
·
1. 定义
🔌 MCP(模型上下文协议)深度解析
MCP(Model Context Protocol)是由 Anthropic 于 2024 年 11 月推出的开放标准协议,旨在为大型语言模型(LLM)与外部工具/数据源提供统一的交互框架,被类比为“AI 领域的 USB-C 接口”。
🔧 一、核心设计目标
-
解决数据孤岛与协议碎片化
- 传统痛点:LLM 需为每个数据源(数据库、API、文件系统)单独开发适配层,导致集成成本高、维护复杂。
- MCP 方案:通过标准化协议统一交互接口,实现“即插即用”的资源调用,减少重复开发。
-
支持动态双向交互
- 区别于传统 API 的单次请求响应,MCP 支持持久化双向通信(类似 WebSockets),允许 AI 主动触发工具调用并实时获取数据流。
⚙️ 二、技术架构与核心组件
MCP 采用客户端-服务器架构,包含三层角色:
-
MCP 主机(Host)
- 运行 AI 应用的执行环境(如 Claude Desktop、VS Code),负责收集用户上下文(如代码结构、光标位置)并管理交互状态。
-
MCP 客户端(Client)
- 作为 Host 与 Server 的“翻译官”,将自然语言指令转化为标准化请求,并处理能力交换(Capability Exchange)。
-
MCP 服务器(Server)
- 轻量级程序,通过三类接口暴露功能:
- 工具(Tools):封装可执行函数(如发送邮件、执行 SQL 查询)。
- 资源(Resources):提供结构化数据访问(如数据库记录、本地文件)。
- 提示模板(Prompts):预定义工作流模板(如代码生成模板),确保输出一致性。
- 轻量级程序,通过三类接口暴露功能:
✅ 动态能力交换机制:客户端启动时自动获取服务器能力描述,新增功能无需修改客户端代码(如天气服务新增温度单位参数)。
🔄 三、工作流程(以查询数据库为例)
- 发现与握手:主机启动时连接 MCP 服务器,验证身份并交换能力列表。
- 任务解析:用户输入“查询上周销售数据”,LLM 判断需调用数据库工具。
- 执行与返回:
- 客户端将指令转为 SQL 请求 → 服务器执行查询 → 返回格式化结果 → LLM 生成图表并邮件发送。
- 上下文保持:支持跨步骤任务(如“先查数据再生成报告”),避免传统 RAG 的单次检索局限。
2. 上手
2.1 使用别人的 MCP 工具
- 创建百度地图 mcp 调用应用
- 接入客户端,这里选择 cherry-studio
3. 开始使用,需要注意的是,cherry-studio 强制需要具备 fuction-call 的 model 才能调用 mcp 功能
2.2 如何开发自己的 MCP server
2.2.1 使用 sdk 开发
首先要下载 sdk
2.2.2 编写案例 [https://github.com/modelcontextprotocol/python-sdk](https://github.com/modelcontextprotocol/python-sdk)
2.2.2.1 标准化流程 6️⃣
1. 创建 uv 项目,建议通过 uv 来做# 创建项目
uv init xxx
- 修改.toml 源
# 换源
[tool.uv]
index-url = "https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple"
- Then add MCP to your project dependencies:
uv add "mcp[cli]"
- 编写主代码逻辑-- demo
"""
FastMCP quickstart example.
cd to the `examples/snippets/clients` directory and run:
uv run server fastmcp_quickstart stdio
"""
from mcp.server.fastmcp import FastMCP
# Create an MCP server
mcp = FastMCP("Demo")
# Add an addition tool
@mcp.tool()
def add(a: int, b: int) -> int:
"""Add two numbers"""
return a + b
# Add a dynamic greeting resource
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
"""Get a personalized greeting"""
return f"Hello, {name}!"
# Add a prompt
@mcp.prompt()
def greet_user(name: str, style: str = "friendly") -> str:
"""Generate a greeting prompt"""
styles = {
"friendly": "Please write a warm, friendly greeting",
"formal": "Please write a formal, professional greeting",
"casual": "Please write a casual, relaxed greeting",
}
return f"{styles.get(style, styles['friendly'])} for someone named {name}."
if __name__ == "__main__":
mcp.run(transport='stdio')
2.2.3 运行测试 [studio 协议 ]
2.2.3.1 使用代码运行:
```python uv run xxx.py ```2.2.3.2 链接到 cherry-studio 客户端
--directory
/Volumes/momo/Code/MCP-learning # 路径文件夹
run # 执行command
main.py # 执行逻辑主文件
2.2.3.3 移动到 vscode 等
通过 cherry-studio 来导出本地 mcp 服务的 json 文件2.2.4 SSE 协议
开发端口远程调用,if __name__ == "__main__":
# mcp.run(transport='stdio')
# 切换为sse模式
mcp.run(transport='sse')
复制监听地址传入到 cherry-studio 中
2.2.5 发布本地服务到公网
2.2.5.1 方法一:上传 python 代码,打包后传到 pypi 上
- 创建文件包环境
- 添加 mcp 依赖
- 替换逻辑到 init.py
协议选择 stdio
- 打包
uv build
- 注册 pypi 获取 apitonken
- 推送
uv publish --token xxxxxxxxxxxxxxxxxx
- 使用客户端链接 pypi 上的 mcp 服务包(uvx)
记得是 uvx
就可以使用发布到 pypi 上的托管 mcp 了,同时还可以按照之前的操作导出来 json 文件,给你的朋友们使用。
2.2.5.2 方法二:将服务部署到远程服务器开启公网访问服务
找到一台 linux 服务器,安装 uv 环境,使用 FTP 移动代码包到远程 linux 上,将主代码逻辑协议 stdio 改为 sse# 配置虚拟环境
uv venv
# 安装依赖
uv pip install .
# 启动主逻辑文件
uv run main.py
一旦启动成功,就可以使用客户端来链接,配置如下
2.2.6 注意点
在编写mcp代码主要逻辑时 类型修饰符一定要写 函数注释一定要写更多推荐
所有评论(0)