本文最后更新于26 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
一、文章核心目标
解决 “大模型无法访问本地 / 隐私数据库” 的痛点,通过 MCP(Model Context Protocol,模型上下文协议) 打通 CodeBuddy(AI 编辑器)与本地 / 远程数据库的连接,让用户无需编写 SQL 代码,仅用自然语言就能完成数据库的查询、新增、修改等操作(如 “查张三的课程总数”“给学生表加一条记录”),同时附带高德地图 MCP 服务配置示例,展示 MCP 连接外部工具的通用性。
二、完整操作步骤(分 2 大场景:高德地图 MCP 配置、MySQL 数据库 MCP 配置)
前置准备(通用)
- 工具安装
- 安装 CodeBuddy(支持 MCP 协议,官网下载:Tencent Cloud Code Assistant CodeBuddy – AI Code Editor 国际版:https://www.codebuddy.ai/genie/login)。
- 确保本地安装
npx
(Node.js 自带,若未安装需先装 Node.js,推荐 16.x+,执行node -v
验证)。 - 若操作数据库:提前启动 MySQL 服务(本地 / 远程均可),准备数据库地址、端口、用户名、密码、目标库名。
- 密钥 / 信息获取
- 高德地图场景:从 高德开放平台 申请 AMAP_MAPS_API_KEY(注册→创建应用→添加 Key,服务平台选 “Web 服务”)。
- 数据库场景:确认 MySQL 权限(如 root 账号能读写目标数据库)。
场景 1:CodeBuddy 配置高德地图 MCP Server(验证 MCP 基础功能)
步骤 1:进入 CodeBuddy 的 MCP 配置界面
步骤 2:配置高德地图 MCP 服务
- 模式,粘贴以下配置(替换
AMAP_MAPS_API_KEY
为你的真实密钥): {
"mcpServers": {
"amap-maps": {
"command": "npx",
"args": ["-y", "@amap/amap-maps-mcp-server"],
"env": {
"AMAP_MAPS_API_KEY": "你的高德地图API密钥" // 替换为申请到的Key
}
}
}
}- 点击 “保存”,返回 MCP 服务器列表,确认 “amap-maps” 状态为 “Enabled”(绿色,若为红色点击 “刷新” 重试,通常是密钥错误或网络问题)。
步骤 3:测试高德地图 MCP 功能(自然语言调用)
- 在聊天框中输入自然语言需求,CodeBuddy 会自动调用高德地图 MCP 工具:
- 示例 1:“帮我查武汉未来 3 天的天气”→ 自动触发
maps_weather
工具,返回温度、风力等结果。 - 示例 2:“找杭州西湖 1 公里内的五星级酒店”→ 自动调用
maps_geo
(解析西湖坐标)→maps_around_search
(周边搜索)→maps_search_detail
(获取酒店详情),最终返回酒店列表(地址、评分、营业时间)。
- 示例 1:“帮我查武汉未来 3 天的天气”→ 自动触发
场景 2:CodeBuddy 配置 MySQL MCP Serverm (windows操作系统)(核心:自然语言操纵数据库)
步骤 1:进入 CodeBuddy 的 MCP 配置界面
同场景 1 – 步骤 1:打开 CodeBuddy → 进入 “MCP” 页面 。
步骤 2:配置 MySQL MCP 服务
- 粘贴以下配置(根据你的 MySQL 信息修改参数):
{
"mcpServers": {
"mysql": {
"command": "npx",
"args": ["-y", "@f4ww4z/mcp-mysql-server"],
"env": {
"MYSQL_HOST": "your_host", //数据库地址
"MYSQL_USER": "your_user", //数据库用户名(如root)
"MYSQL_PASSWORD": "your_password", //数据库密码(替换为你的真实密码)
"MYSQL_DATABASE": "your_database" //目标数据库名(替换为你要操作的库)
}
}
}
}
- 点击 “保存”,确认 “MySQL” 服务状态启动。若失败:
- 服务启动命令: Windows 中检查 / 启动 MySQL 服务的命令与 Linux 不同:
- 查看状态:
sc query mysql
(若服务名不是mysql
,需替换为实际名称,如mysql80
) - 启动服务:
net start mysql
(需以管理员身份运行命令提示符,否则可能权限不足)
- 查看状态:
- 确认配置中的 IP、端口、密码是否正确(远程数据库需开放 3306 端口,如阿里云安全组配置)。
- 服务启动命令: Windows 中检查 / 启动 MySQL 服务的命令与 Linux 不同:
步骤 3:自然语言操纵数据库(核心功能测试)
- 输入自然语言需求,无需手动写 SQL,CodeBuddy 会自动调用
mysql_query
工具执行操作:
① 查询表数据量
- 输入需求:
“帮我查 aidemo 数据库中 prodects 表有多少条数据”
- 执行逻辑:Cursor 自动生成
SELECT COUNT(*) AS total_count FROM prodects ;
,调用 MCP 执行后返回结果(如 “共 6 条数据”)。
② 查询数据库所有表及功能
- 输入需求:
“帮我查 aidemo 数据库有多少张表,用表格列出表名和作用”
- 执行逻辑:自动查询数据库元数据,分析表结构,生成表格(如
pmhub_project
是项目主表,pmhub_project_task
是任务表)。
③ 新增数据(以学生表为例)
- 前提:先通过 Navicat/MySQL 命令行创建学生表(当前 MCP 不支持 DDL 建表,需手动创建,SQL 如下):
- CREATE TABLE student (
id VARCHAR(64) NOT NULL COMMENT ‘学生ID’,
name VARCHAR(50) NOT NULL COMMENT ‘姓名’,
age INT NOT NULL COMMENT ‘年龄’,
gender VARCHAR(10) NOT NULL COMMENT ‘性别’,
created_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT ‘创建时间’,
updated_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT ‘更新时间’,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=’学生表’;
- CREATE TABLE student (
- 输入需求:
“帮我在 student 表中添加一条记录:张三,16岁,男”
- 执行逻辑:自动生成
INSERT INTO student (id, name, age, gender) VALUES (UUID(), '张三', 16, '男');
,执行后返回 “插入成功”,并可验证数据是否存在。
④ 修改数据
- 输入需求:
“把 student 表中张三的年龄改成18岁”
- 执行逻辑:自动生成
UPDATE student SET age = 18 WHERE name = '张三';
,返回 “影响 1 行数据”,并查询修改后结果。
⑤ 多表联查(学生表 + 课程表)
- 前提:创建课程表并插入数据(SQL 如下):
- CREATE TABLE course (
id VARCHAR(64) NOT NULL COMMENT ‘课程ID’,
course_name VARCHAR(100) NOT NULL COMMENT ‘课程名称’,
duration INT NOT NULL COMMENT ‘时长(分钟)’,
student_id VARCHAR(64) NOT NULL COMMENT ‘关联学生ID’,
created_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT ‘创建时间’,
updated_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT ‘更新时间’,
PRIMARY KEY (id),
FOREIGN KEY (student_id) REFERENCES student(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=’课程表’;
- CREATE TABLE course (
- 先插入一条测试数据:
帮我往课程表里面插入一条数据,是张三选的化学课程,课程时长120分钟
同样的方法插入 3 条数据,现在只需要用自然语言来进行多表联查。
- 输入需求:
“帮我查张三一共修了多少门课,总时长是多少,列出每门课的明细”
- 执行逻辑:自动生成多表联查 SQL(
SELECT s.name AS student_name, COUNT(c.id) AS course_count, SUM(c.duration) AS total_duration FROM student s JOIN course c ON s.id = c.student_id WHERE s.name = '张三';
),返回结果(如 “4 门课,总时长 360 分钟”,并列出化学、物理等课程明细)。
(因编码排版问题,语法可能存在中英文混乱,需稍作修改)
好玩好玩~ 爸爸妈妈再也不用担心我不会写代码了~❤️