1.MCP介绍
MCP 是一个开放协议(Anthropic 提出的新一代标准化协议),它为应用程序向 LLM 提供上下文的方式进行了标准化(被喻为:AI 世界的 “USB 协议”)。
你可以将 MCP 想象成 AI 应用程序的 USB-C 接口。就像 USB-C 为设备连接各种外设和配件提供了标准化的方式一样,MCP 为 AI 模型连接各种数据源和工具提供了标准化的接口。
用于工具和资源通过结构化输入/输出将代理连接到工具、API 和资源。
MCP 架构中的关键参与者包括:
- MCP 宿主 (Host):协调和管理一个或多个 MCP 客户端的 AI 应用
- MCP 客户端 (Client):维持与 MCP 服务端连接并获取上下文供 MCP 宿主使用的组件
- MCP 服务端 (Server):为 MCP 客户端提供上下文的程序
例如:Visual Studio Code 充当 MCP 宿主。
当 Visual Studio Code 建立与 MCP 服务端(如 Sentry MCP 服务端)的连接时,Visual Studio Code 运行时会实例化一个 MCP 客户端对象来维持该连接。当 Visual Studio Code 随后连接到另一个 MCP 服务端(如本地文件系统服务端)时,它会实例化另一个 MCP 客户端对象来维持此连接。请注意,MCP 服务端是指提供上下文数据的程序,无论其运行在何处。MCP 服务端可以在本地或远程执行。
数据层实现了一个基于 JSON-RPC 2.0 的交互协议,定义了消息结构和语义。
1.0 工作原理
当您提交查询时
- 1、客户端从服务器获取可用工具列表
- 2、您的查询连同工具描述一起发送给 LLM
- 3、LLM 决定使用哪些工具(如果有)
- 4、客户端通过服务器执行任何请求的工具调用
- 5、结果被发回给 LLM
- 6、LLM 提供自然语言响应
- 7、响应将显示给您
1.1 Agent 工具:
1.2 Agent之MCP接口
最常用的几个接口:
- 1.
initialize初始化- 2.
tools/list获取工具列表- 3.
tools/call调用具体工具- 4.
notifications/initialized初始化完成通知![]()
主要接口:
| 分类 | 方法名 | 方向 | 核心用途 |
|---|---|---|---|
| 基础 | initialize | C→S | 连接初始化、能力协商 |
initialized | S→C | 初始化完成通知 | |
ping | 双向 | 心跳 | |
shutdown | C→S | 关闭连接 | |
| 工具 | tools/list | C→S | 获取工具列表 |
tools/call | C→S | 执行工具 | |
| 资源 | resources/list | C→S | 获取资源列表 |
resources/read | C→S | 读取资源 | |
resources/subscribe | C→S | 订阅资源 | |
| 提示 | prompts/list | C→S | 获取提示列表 |
prompts/get | C→S | 获取提示模板 | |
| 通知 | tools/listChanged | S→C | 工具列表变更 |
resources/listChanged | S→C | 资源列表变更 | |
prompts/listChanged | S→C | 提示列表变更Model Context Protocol (MCP) |
- 命名规范:所有方法采用 namespace/action 格式(如 tools/call),避免冲突。
- 能力声明:服务端在 initialize 响应中声明支持哪些模块(tools/resources/prompts)。
- 扩展性:协议允许自定义扩展,但核心接口必须严格遵循以保证兼容性。
1.3 Agent调用MCP流程
2.MCP 与 Function Call
这两个都是AI 调用外部能力的技术,但设计目标、架构、调用责任、使用场景完全不同。
| 对比项 | Function Call(函数调用) | MCP(Model Control Protocol,模型控制协议) |
|---|---|---|
| 核心定位 | AI 调用单个本地 / 后端函数 / 工具的轻量方案 | AI 统一调用各类外部系统、工具、设备的标准化协议 |
| 架构形态 | 简单的「函数接口」 | 类似 LSP(语言服务协议)的通用通信标准 |
| 调用责任 | AI 决定调用 + 后端 / 客户端执行 | AI 下发指令 + MCP 客户端 / 服务端统一执行 |
| 复杂度 | 轻量、无标准、各家自己实现 | 标准化、可跨语言 / 跨进程 / 跨设备 |
| 适用场景 | 简单工具:查天气、查数据库、算数学 | 复杂生态:控制 IDE、浏览器、硬件、多工具串联 |
- Function Call 是轻量工具调用,AI 决策,开发者执行,适合简单功能
- MCP 是 AI 控制外部系统的通用标准协议,AI 发指令,MCP 服务端执行,适合复杂自动化
总之,无论MCP还是Function Call,大模型都无法直接调用。
2.1 Function Call(函数调用)
一句话:AI 只动嘴,你负责跑腿。
典型场景:查天气、查询订单、计算器等
大模型最基础的工具调用能力:
AI 判断 “我需要外部数据 / 能力” → 输出函数名 + 参数 → 外部程序执行 → 把结果返回给 AI。
它不是标准协议,只是 OpenAI 率先提出的一种AI 交互模式,各家大模型都模仿实现。
2.2 MCP(Model Control Protocol)
它解决 Function Call 的痛点:
- 无统一标准,每家模型工具调用格式不一样
- 跨设备、跨进程调用麻烦
- 安全、权限不可控
MCP 是三层架构,责任更清晰:
- 大模型(AI):只发控制指令(做什么)
- MCP 客户端:AI 侧的代理,解析指令
- MCP 服务端:运行在外部系统(IDE、浏览器、硬件),真正执行操作
最终执行方:MCP 服务端(标准化执行)。AI 不用关心底层怎么实现,只按 MCP 协议发指令即可。
典型场景
- AI 操控 IDE 写代码(Cursor、Windsurf 就是 MCP)
- AI 控制浏览器自动化
- AI 操作本地软件、硬件设备
- 多工具、多系统串联的复杂自动化
3.MCP 与 SKILL
4.工具 VS Agent
- 工具是具有结构化输入和输出以及(通常)已知行为的基元。
- 代理是自治应用程序,可以通过使用工具、推理和用户交互来完成新任务。
代理应用程序必须同时使用工具和代理来实现其用户的目标。
4.1 Agent2Agent
from google,建议将 MCP 用于工具,将 A2A 用于代理。
A2A (Agent2Agent 协议) 用于代理 - 代理协作不同代理之间动态、多模式通信,无需共享内存、资源和工具。
模型上下文协议 (MCP) 是将 LLM 与数据、资源和工具连接起来的新兴标准。我们已经观察到 MCP 在不同模型和框架中标准化了“函数调用”。
这正在创建一个由工具服务提供商组成的生态系统,并大大降低了将代理与工具和数据连接起来的复杂性。我们预计,随着越来越多的框架、服务提供商和平台采用 MCP,这一趋势将继续下去。
A2A 专注于一个不同的问题。A2A 是一种应用程序级协议,使代理能够在其自然模式中进行协作。
它允许代理以代理(或用户)而不是工具的身份进行通信。我们希望 A2A 作为 MCP 的补充获得采用,从而支持代理生态系统,并将与社区公开合作以实现这一目标。
5.本地部署 MySQL MCP Server
先给本地 Cherry Studio 使用,后续Dify支持了之后,再折腾Dify版本的。
5.1 安装 MCP 服务
# 创建 mcp server 目录
mkdir /Users/sherlock/dev/mcp_servers/
# 下载 MySQL MCP Server 代码
## 注意:Requires: Python >=3.11
git clone https://github.com/designcomputer/mysql_mcp_server.git
# 可能需要升级下 pip 版本
pip3 install --upgrade pip
# 本地mac的python版本太低了,先安装下python 3.11版本
brew update
brew install xz
brew install python@3.11
# 进入 MySQL MCP Server 目录,安装依赖
cd mysql_mcp_server
pip3.11 install -r requirements.txt
# 安装 uv
pip install uv
uv --version
where uv
# 安装qwen2.5模型,在CherryStudio中添加,并设置模型类型为 工具
ollama run qwen2.5
5.2 配置 Cherry Studio
配置的MCP Json如下
{
"mcpServers": {
"mysql_mcp": {
"name": "MySQL MCP 服务器",
"description": "",
"isActive": true,
"registryUrl": "https://pypi.tuna.tsinghua.edu.cn/simple",
"command": "/opt/homebrew/bin/uv",
"args": [
"--directory",
"/Users/sherlock/dev/mcp_servers/mysql_mcp_server",
"run",
"mysql_mcp_server"
],
"env": {
"MYSQL_HOST": "xxx",
"MYSQL_PORT": "3306",
"MYSQL_USER": "root",
"MYSQL_PASSWORD": "xxx",
"MYSQL_DATABASE": "cnarea"
},
"disabledTools": []
}
}
}
5.3 新建聊天助手
选择qwen2.5模型,并在对话框中开启 MCP 选中 MySQL MCP Server
5.4 配置提示词
你是一个查询助手,可以通过MCP Server连接mysql服务查询数据。
数据库中有一张中国行政区划表,表名为cnarea_2023,表为父子关系表,特点如下:
1、每个记录(行)可以有一个父记录。
2、根节点(没有父记录的记录)被称为顶级节点即省级区划节点。
3、多个记录可以共享同一个父记录。
字段说明:
1、行政地区名称字段是name
2、行政代码字段是code
3、父级行政代码字段是parent_code
创建表的语句如下:
CREATE TABLE `cnarea_2023` (
`id` mediumint unsigned NOT NULL AUTO_INCREMENT,
`level` tinyint unsigned NOT NULL COMMENT '层级',
`parent_code` bigint unsigned NOT NULL DEFAULT '0' COMMENT '父级行政代码',
`area_code` bigint unsigned NOT NULL DEFAULT '0' COMMENT '行政代码',
`zip_code` mediumint(6) unsigned zerofill NOT NULL DEFAULT '000000' COMMENT '邮政编码',
`city_code` char(6) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '区号',
`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '名称',
`short_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '简称',
`merger_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '组合名',
`pinyin` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '拼音',
`lng` decimal(10,6) NOT NULL DEFAULT '0.000000' COMMENT '经度',
`lat` decimal(10,6) NOT NULL DEFAULT '0.000000' COMMENT '纬度',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uk_code` (`area_code`) USING BTREE,
KEY `idx_parent_code` (`parent_code`) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=743299 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='中国行政地区表';
5.5 测试效果
可以直接提问了,例如:
东莞市下面只有镇没有区吗?
参考:https://www.panziye.com/ai/16004.html
https://docs.cherry-ai.com/advanced-basic/mcp/config
https://github.com/designcomputer/mysql_mcp_server
https://pypi.org/project/mysql-mcp-server/


评论区