MCP 是一个开放协议,它为应用程序向 LLM 提供上下文的方式进行了标准化。
你可以将 MCP 想象成 AI 应用程序的 USB-C 接口。就像 USB-C 为设备连接各种外设和配件提供了标准化的方式一样,MCP 为 AI 模型连接各种数据源和工具提供了标准化的接口。
用于工具和资源通过结构化输入/输出将代理连接到工具、API 和资源。
工具 VS 代理
- 工具是具有结构化输入和输出以及(通常)已知行为的基元。
- 代理是自治应用程序,可以通过使用工具、推理和用户交互来完成新任务。
代理应用程序必须同时使用工具和代理来实现其用户的目标。
Agent2Agent
from google,建议将 MCP 用于工具,将 A2A 用于代理。
A2A (Agent2Agent 协议) 用于代理 - 代理协作不同代理之间动态、多模式通信,无需共享内存、资源和工具。
模型上下文协议 (MCP) 是将 LLM 与数据、资源和工具连接起来的新兴标准。我们已经观察到 MCP 在不同模型和框架中标准化了“函数调用”。
这正在创建一个由工具服务提供商组成的生态系统,并大大降低了将代理与工具和数据连接起来的复杂性。我们预计,随着越来越多的框架、服务提供商和平台采用 MCP,这一趋势将继续下去。
A2A 专注于一个不同的问题。A2A 是一种应用程序级协议,使代理能够在其自然模式中进行协作。
它允许代理以代理(或用户)而不是工具的身份进行通信。我们希望 A2A 作为 MCP 的补充获得采用,从而支持代理生态系统,并将与社区公开合作以实现这一目标。
本地部署 MySQL MCP Server
先给本地 Cherry Studio 使用,后续Dify支持了之后,再折腾Dify版本的。
安装 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
配置 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": []
}
}
}
新建聊天助手
选择qwen2.5
模型,并在对话框中开启 MCP 选中 MySQL MCP Server
配置提示词
你是一个查询助手,可以通过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='中国行政地区表';
测试效果
可以直接提问了,例如:
东莞市下面只有镇没有区吗?
参考: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/
评论区