我用 TRAE 做了一个不一样的 MySQL MCP

欢迎来到我的博客,代码的世界里,每一行都是一个故事

🎏:你只管努力,剩下的交给时间

🏠 :小破站

我用 TRAE 做了一个不一样的 MySQL MCP

摘要

项目背景: 无论你是学生做数据分析作业、老板想看业务报表、产品经理需要查询用户数据,还是程序员调试代码,都免不了要查数据库。传统方式是打开 Navicat 之类的数据库工具,写 SQL 查询,然后导出数据。这个过程不仅麻烦,对不懂 SQL 的人来说更是门槛很高。

解决方案: 利用 TRAE AI 助手开发了一个 MySQL MCP 工具,让你可以用人话直接查数据库。比如说"帮我看看最近一周的订单",AI 就能自动生成 SQL、执行查询、格式化结果,甚至直接导出 Excel 表格。

核心成果:

  • 2小时完成开发:从零到可用,包括编码、调试、测试全流程
  • 🗣️ 自然语言查询:"查询我有多少个表" → 自动执行并返回结果
  • 📊 一键导出 Excel:"把最近10条账单导出" → 生成格式完整的表格文件
  • 🔒 绝对安全:只读模式,禁止任何删除、修改操作,再也不怕误删数据库
  • 👥 零门槛使用:不需要懂 SQL、不需要学数据库工具,会说话就能用

适用人群: 学生、数据分析师、产品经理、运营人员、老板、程序员------任何需要查看数据库数据的人


为什么要做这个工具?

痛点场景

想象几个常见的场景:

场景1:学生做数据分析作业

老师布置了一个作业,要分析学校图书馆的借阅数据。数据在 MySQL 数据库里,但你不太会写 SQL,每次都要找学长帮忙查数据,很麻烦。

场景2:老板要看业务数据

周一早会前,老板想看看上周的销售数据。运营同学要先找技术,技术写 SQL 查出来,导成 Excel 发给老板。一个简单的需求要折腾好几个人。

场景3:产品经理调研数据

产品经理想看看某个功能的使用情况,需要查用户表。但不懂 SQL,只能找开发帮忙。开发手头有活,要等半天才能帮忙查,效率很低。

场景4:程序员调试代码

程序员在写代码时,需要频繁查看数据库确认数据。但每次都要切换到数据库工具,打断了编程思路,很烦人。

这些痛点的核心问题是:查数据库这件事,对大部分人来说门槛太高了。

我们的解决方案

有了这个 MySQL MCP 工具,一切变得简单:

学生:

"帮我查一下2024年借阅次数最多的10本书"

AI 自动生成 SQL、执行查询、返回结果,还能导出成 Excel 交作业

老板:

"给我看看上周的销售数据,按销售额排序"

几秒钟就能拿到 Excel 报表,不用麻烦任何人

产品经理:

"统计一下最近一个月注册的用户数量"

立即得到答案,不需要懂 SQL,不需要等开发

程序员:

"查一下 user_id=12345 的订单记录"

在对话框里直接就能看到结果,不用切换工具

关键是:所有人都用自然语言,不需要学 SQL,不需要懂数据库,就像和同事聊天一样简单。

最神奇的是:这个工具是用 TRAE AI 助手开发的,只花了2个小时。

从提需求到写代码,从调试到测试,TRAE 承担了绝大部分工作,我主要负责把控方向和做决策。这也证明了 AI 辅助开发的强大能力------不仅开发者能用 AI 提高效率,普通人也能通过 AI 开发的工具降低技术门槛。

接下来,我会详细记录整个开发过程,包括遇到的问题、解决方案、以及我对 AI 辅助开发的思考。无论你是想学习如何用 TRAE 开发工具,还是想了解 MCP 协议,或者只是好奇 AI 能做到什么程度,相信这篇文章都能给你一些启发。

环境准备

开始动手之前,先把环境准备好是很重要的。这里我详细列一下我使用的环境配置,包括具体的版本号。如果你想跟着这篇文章实践的话,建议环境尽量保持一致,避免遇到一些奇怪的兼容性问题。

必需的运行环境

Node.js: v18.17.0

我选择 Node.js 主要是因为它的生态完善,特别是 MCP SDK 对 Node.js 的支持非常好。理论上 v18 以上的版本都可以,但我测试用的是 v18.17.0 这个 LTS 版本,比较稳定。如果你用的是 v16 或者更老的版本,可能会遇到一些 ES Module 相关的问题。

检查你的 Node.js 版本:

bash 复制代码
node -v  # 应该输出 v18.x.x 或更高

MySQL: v8.0.33

数据库方面,我用的是 MySQL 8.0.33。理论上 MySQL 5.7 及以上版本都能用,但 8.0 的性能更好,而且有一些新特性比较方便。如果你用的是 MariaDB,应该也能兼容,不过我没测试过。

测试环境我是用 Docker 跑的 MySQL,这样比较干净,不会影响本地的其他项目:

bash 复制代码
docker run -d \
  --name mysql-test \
  -e MYSQL_ROOT_PASSWORD=your_password \
  -p 3306:3306 \
  mysql:8.0.33

TypeScript: v5.0+

TypeScript 是必须的,因为类型检查能帮我们避免很多低级错误。特别是在处理数据库连接、SQL 查询这些地方,有类型提示会安心很多。我用的是 v5.2.2,如果你是全局安装的旧版本,建议更新一下。

开发工具

TRAE

这是这次开发的核心工具。TRAE 是一个 AI 编程助手,我主要用它的 Builder 模式来生成代码。相比其他 AI 助手,TRAE 的优势是:

  1. 理解能力强,不需要反复解释需求
  2. 生成的代码质量高,符合最佳实践
  3. 支持 MCP 协议,可以直接调用我们开发的工具

WPS Office / Microsoft Excel

用来查看导出的 Excel 文件。两个都可以,我个人用的是 WPS,因为它免费而且功能够用。如果你用的是 Mac,Numbers 也可以打开,但某些样式可能会有点差异。

环境准备就是这些,接下来进入正题。

开发过程

第一步:明确需求,AI 开始规划

开发的第一步,也是最重要的一步,就是把需求说清楚。我打开 TRAE,切换到 Builder 模式,然后直接跟它说:

"我想实现一个 mysql-mcp,看清楚啊,想实现的是一个 mcp。主要是可以实现 mysql 的连接、mysql 的基本查询,为了安全考虑,一定要禁止出现删除表、删库等一系列高风险的操作。请帮我实现一下,谢谢"

TRAE 收到需求后,先回复了一句"明白了,您想要实现一个 MySQL MCP (MySQL Control Panel) 工具。我会帮您实现一个安全的 MySQL 管理工具,包含连接管理和安全的查询功能。",然后直接开始规划任务。

不过这里有个小插曲,从截图中可以看到,TRAE 最开始准备用 Go 语言来实现。它的任务列表里预计用时5步办,每步大概几分钟,看起来挺有条理的。但是,Go 语言虽然性能好,但对我来说并不是最佳选择。

第二步:技术选型的调整与决策

看到 TRAE 准备用 Go 实现,我想了想,虽然 Go 性能确实不错,但这个项目用 Node.js 可能更合适。主要考虑以下几点:

  1. MCP SDK 的成熟度:官方的 MCP SDK 对 Node.js 支持最完善,文档和示例都比较多
  2. 生态系统:Node.js 的数据库库、Excel 处理库都很成熟,而且我之前用过,知道哪些坑
  3. 开发效率:TypeScript 的类型系统足够用,而且开发效率比 Go 高
  4. 部署简单:Node.js 项目部署很方便,不需要编译,复制文件就能跑

于是我点了下界面上的"使用node实现"按钮,告诉 TRAE 改用 Node.js。

TRAE 很快就理解了我的意图,回复说:"好的,我来帮您使用 Node.js 重新实现这个 MySQL MCP。我们将使用 TypeScript 来实现,这样可以获得更好的类型安全性。"

然后它重新规划了任务列表,变成了5个步骤:

  1. 创建 Node.js 项目结构和依赖配置
  2. 实现 MySQL 连接池管理器
  3. 实现 SQL 语句安全检查器
  4. 实现查询接口
  5. 添加使用示例

可以看出,任务的核心内容没变,只是实现方式从 Go 换成了 Node.js。而且 TRAE 主动提到了要用 TypeScript,这点我很满意,说明它理解了类型安全的重要性。

接下来就进入实际的开发环节了。TRAE 先说要删除之前 Go 语言实现的文件,准备清理工作区。然后准备初始化一个新的 Node.js 项目。

第三步:搭建项目架构与依赖安装

确定了技术栈之后,TRAE 就开始真正的开发工作了。它的执行过程非常有条理,我看着它一步步操作,感觉就像在看一个经验丰富的工程师在工作。

从截图可以看到,整个搭建过程分为以下几个步骤:

1. 初始化 Node.js 项目

首先是创建项目目录并初始化:

bash 复制代码
npm init -y

这个命令会生成一个基础的 package.json 文件。TRAE 用的是 -y 参数,表示使用默认配置,不需要一个个回答问题。这种细节处理得很好,说明它理解实际开发中的效率优先原则。

2. 安装必需的依赖

然后是安装依赖,TRAE 先执行的命令是:

bash 复制代码
npm install typescript @types/node mysql2 @types/mysql2 --save-dev && npm install mysql2

这里有个小细节,它把 TypeScript 和类型定义安装到 devDependencies,把 mysql2 同时安装到 dependencies。虽然 mysql2 被安装了两次(因为后面又单独装了一次),但这不是错误,npm 会自动处理。

不过后来我发现 @types/mysql2 这个包不存在,因为 mysql2 本身就包含了 TypeScript 类型定义。TRAE 后来也发现了这个问题,调整了安装命令:

bash 复制代码
npm install typescript @types/node mysql2 --save-dev && npm install mysql2

3. 初始化 TypeScript 配置

接下来是初始化 TypeScript:

bash 复制代码
npx tsc --init

这会生成一个 tsconfig.json 文件,包含了 TypeScript 的编译配置。TRAE 后续还会修改这个文件,调整模块系统和输出目录等配置。

4. 创建核心文件

然后 TRAE 开始创建项目的核心文件:

  • src/mcp.ts (+118行):这是 MCP Server 的核心实现,包含了数据库连接、SQL 安全检查、查询执行等所有核心逻辑。118行代码,功能完整,结构清晰。

  • src/example.ts (+59行):这是一个示例文件,展示如何使用这个 MCP。包含了连接数据库、执行查询、错误处理等典型场景。

  • package.json (+16行 -6行):TRAE 在原有基础上添加了启动脚本,比如 buildstartdev 等,方便开发和运行。

  • README.md (+118行):一个详细的说明文档,包含了功能介绍、安装步骤、使用示例、配置说明等。文档写得很全面,连我都觉得可以直接用了。

整个文件创建过程中,TRAE 还会显示每个文件的行数变化,比如 +118-0 表示新增了118行。这个反馈很直观,让我知道它确实在干活,而不是糊弄我。

看着 TRAE 一步步搭建项目,我感觉自己真的就像是在和一个靠谱的同事协作。它不仅能写代码,还能考虑到很多细节问题,这种体验确实很神奇。

第四步:调试修复与代码优化

代码写完之后,并不是就万事大吉了。实际上,开发过程中总会遇到各种各样的问题,特别是涉及类型系统、模块导入这些细节的时候。TRAE 在这个阶段展现出了很强的问题诊断和修复能力。

从截图可以看到,TRAE 在执行了一系列修复操作后,最终显示"任务完成"

在底部,可以看到一个绿色的"任务完成"提示框,说明所有的编译错误都已经解决了。TRAE 还主动提醒:"请检查一下编辑器的 Problems 面板,看看是否还有其他需要解决的问题。如果还有其他问题,我很乐意继续帮您解决。"

个人体会:

这个调试修复的过程让我印象特别深刻。很多 AI 助手在代码生成方面做得不错,但遇到编译错误或者运行时错误,它们往往就卡壳了。但 TRAE 不一样,它能够:

  1. 主动发现问题:不需要我把错误信息复制给它,它自己就能发现编译错误
  2. 准确定位原因:能够快速判断是类型问题、模块导入问题还是配置问题
  3. 系统性修复:不是头痛医头脚痛医脚,而是从根本上解决问题
  4. 考虑最佳实践:修复的时候不是简单地让代码能跑就行,而是按照最佳实践来调整

举个例子,在处理模块导入的时候,TRAE 没有简单地把所有 import 改成 require,而是统一使用了 ES Module 标准。这说明它理解现代 JavaScript 的发展方向,知道 ES Module 是未来的趋势。

另外,TRAE 修改代码的时候,还会保持代码风格的一致性。比如缩进、换行、注释的格式等,都和原有代码保持一致。这种细节的关注,让整个项目看起来像是一个人写的,而不是拼凑起来的。

整个开发过程到这里,核心功能基本就完成了。接下来就是配置和测试环节,看看这个 MCP 工具在实际使用中表现如何。

配置和测试

代码开发完成并编译成功后,接下来就是最激动人心的环节了------把我们开发的 MCP 工具真正用起来。这个过程分为两个部分:先在 TRAE 中配置 MCP Server,然后进行实际的功能测试。

配置 MCP Server 的完整流程

要让 TRAE 能够使用我们开发的 MySQL MCP,需要进行一系列配置。整个配置过程其实不复杂,但有一些细节需要注意。

第一步:切换到 Builder with MCP 模式

打开 TRAE 之后,你会看到有几个内置智能体的选项:Chat、Builder、Builder with MCP。我们需要选择"Builder with MCP"这个模式。

为什么要选这个模式呢?因为:

  • Chat 模式:只是普通的对话,没有工具调用能力
  • Builder 模式:可以生成代码,但不能调用外部 MCP 工具
  • Builder with MCP 模式:既能生成代码,又能调用 MCP 工具,功能最全面

从截图可以看到,选择"Builder with MCP"后,界面上会有一个勾选标记,表示当前处于这个模式。同时,底部还有一个"创建智能体"的选项,不过我们这次不需要创建新的智能体,用默认的就行。

第二步:进入 MCP 配置页面

选择了"Builder with MCP"模式后,点击右上角的设置按钮(或者通过菜单),进入智能体配置页面。在这个页面中,有几个标签页:智能体、MCP、上下文、规则、模型。我们需要点击"MCP"这个标签。

进入 MCP 配置页面后,会看到一个"MCP Servers"的介绍面板,下面有两个按钮:

  • 手动添加:手动填写 MCP Server 的配置
  • 从市场添加:从官方市场选择已经发布的 MCP

因为我们的 MCP 是自己开发的,还没发布到市场,所以选择"手动添加"。这个界面设计得挺直观的,还有一些常见 MCP 的图标展示,比如 GitHub、GitLab、Google Maps、Figma 等,说明 MCP 生态已经有不少工具了。

第三步:配置 MCP Server 参数

点击"手动添加"后,会弹出一个配置表单。从截图可以看到,我们添加的 MCP 名称叫 acowbo-mysql,右侧有一个开关按钮,显示为绿色表示已启用。

完整的配置内容包含以下几个部分:

1. 基本信息配置

json 复制代码
{
  "mcpServers": {
    "acowbo-mysql": {
      "command": "acowbo-mcp-mysql",
      "env": {
        "MYSQL_HOST": "123.56.86.34",
        "MYSQL_PORT": "3351",
        "MYSQL_USER": "root",
        "MYSQL_PASSWORD": "tLo1d5mR5nDURjSs",
        "MYSQL_DATABASE": "tally_book"
      }
    }
  }
}
  • mcpServers:这是配置的根节点,下面可以配置多个 MCP Server
  • acowbo-mysql:这是我们给这个 MCP 起的名字,后续调用工具的时候会用到这个名字
  • command :启动命令,这里是 node,表示用 Node.js 来运行

环境变量用来传递数据库连接信息。

2. 测试配置是否生效

配置保存后,可以看到 MCP 列表中出现了 acowbo-mysql,右侧的开关是绿色的,表示已启用。这时候 TRAE 应该已经加载了这个 MCP,可以开始调用它提供的工具了。

如果配置有问题,开关可能会显示为灰色或者红色,这时候需要检查:

  1. 文件路径是否正确
  2. 命令是否能执行(比如 node 是否在 PATH 中)
  3. 环境变量是否配置正确
  4. 是否有错误日志可以查看

实际功能测试与效果验证

配置完成后,就进入了最激动人心的测试环节。之前都是在写代码、改配置,现在终于可以看看这个工具在实际使用中的表现了。

测试场景1:查询数据库表列表

我用很自然的语言问 TRAE:"查询我有多少个表"

这个问题看起来很简单,但其实背后涉及几个步骤:

  1. TRAE 理解我的意图,知道我想查看数据库中的表列表
  2. 调用 acowbo-mysql/test_connection 工具测试数据库连接
  3. 连接正常后,调用 acowbo-mysql/list_tables 工具列出所有表

从截图可以看到,TRAE 的回应非常专业:"我将帮您查看数据库中的表信息。首先让我们测试数据库连接是否正常。"然后它就自动调用了相应的 MCP 工具。

返回的结果也很详细,它告诉我:"很好,数据库连接正常。现在让我们查看当前数据库中的所有表。"接着列出了完整的表信息。

最后,TRAE 还很贴心地问我:"您想了解这些表中的具体结构吗?我可以帮您查看任何一个表的详细信息。"这种主动询问下一步操作的方式,让整个对话体验非常流畅。

这个测试验证了几个关键点:

  1. MCP 工具调用成功:TRAE 能够正确识别并调用我们开发的 MCP 工具
  2. 数据库连接正常:test_connection 工具工作正常,能够验证数据库连接
  3. 数据解析正确:list_tables 工具返回的数据结构正确,包含了表名、行数、大小等信息
  4. 用户体验良好:TRAE 用自然语言描述结果,不是直接扔一堆 JSON 数据

测试场景2:导出数据到 Excel 文件

看到查询表列表成功后,我决定测试一个更复杂的功能------数据导出。这个功能涉及到 SQL 查询、数据关联、Excel 生成等多个环节,是对整个系统能力的综合考验。

我继续用自然语言下达指令:"请帮我把最近10条账单作为Excel输出"

这句话包含了几个关键信息:

  • 数据来源:"账单" → 对应 tb_bill 表
  • 数量限制:"最近10条" → 需要排序并限制数量
  • 输出格式:"Excel" → 调用 export_to_excel 工具

有意思的是,TRAE 没有立即开始导出,而是先做了一些准备工作。从界面上可以看到,它先后调用了:

  1. acowbo-mysql/list_tables - 确认有哪些表
  2. acowbo-mysql/describe_table (多次) - 查看表结构

这个行为让我很惊喜,因为这说明 TRAE 是真正理解了任务,而不是机械执行命令。它知道要导出账单数据,首先需要了解数据结构,这样才能写出正确的 SQL 语句。

然后调用 acowbo-mysql/export_to_excel 工具执行导出。

导出的 Excel 文件内容分析

打开导出的 Excel 文件后,我发现数据非常完整和规范:

看导出的数据,质量非常高:

  • 日期格式正确,按时间倒序排列(最新的在最上面)
  • 金额数据精确,没有丢失精度
  • 中文显示正常,没有乱码
  • 关联查询正确,分类信息都对应上了

一句话就搞定了,这才是 AI + MCP 的真正威力。

关于 TRAE 的使用体验与 AI 协作心得

这次开发过程中,TRAE 的表现确实超出了我的预期。不过更重要的是,通过这次实践,我对 AI 辅助编程有了更深的理解。

TRAE 做得好的地方:

  1. 需求理解能力强

我只是用很口语化的方式说明需求,TRAE 就能准确理解我想要什么。比如我说"禁止删除表、删库等高风险操作",它就知道要实现 SQL 安全检查。这种理解能力,比我之前用过的其他 AI 工具都要强。

  1. 主动规划和任务拆解

TRAE 不是接到需求就开始写代码,而是先规划任务,拆分成多个步骤。这种工作方式其实很接近真实的软件开发流程。有了任务列表,整个开发过程就很清晰,不会遗漏重要环节。

  1. 代码质量和最佳实践

生成的代码不仅能跑,而且质量很高:

  • 类型定义完整
  • 错误处理规范
  • 代码结构清晰
  • 注释详细恰当
  • 符合 TypeScript 最佳实践

这说明 TRAE 不只是简单地拼接代码,而是真正理解了编程的规范和原则。

  1. 问题诊断和修复能力

遇到编译错误或者配置问题,TRAE 能够:

  • 快速定位问题原因
  • 提供系统性的解决方案
  • 考虑修改的副作用
  • 保持代码风格一致

这种能力在 AI 助手中比较少见,很多工具遇到错误就卡壳了。

总结与展望

回顾整个项目,从一个想法到一个可用的工具,前后花了大概2个小时。这在以前是不可想象的。如果用传统方式开发,光是搭建项目结构、配置环境就要花不少时间,更别说写代码、调试、测试了。

这个项目的价值:

  1. 实用价值:真正解决了实际问题,提升了工作效率
  2. 学习价值:深入理解了 MCP 协议和 AI 协作开发
  3. 探索价值:验证了 AI + MCP 这种新模式的可行性

关于 AI 辅助开发的思考:

AI 辅助开发不是要取代程序员,而是让程序员从重复性的工作中解放出来,专注于更有创造性的工作。就像这次开发:

  • AI 负责写基础代码、处理细节
  • 我负责把控方向、做关键决策
  • 共同完成了一个高质量的项目

这种协作模式,才是未来的方向。

给想尝试的朋友几点建议:

  1. 从小项目开始:不要一上来就做大而全的系统,从解决一个具体问题开始
  2. 明确需求:把需求想清楚,用简单明了的语言表达给 AI
  3. 保持审慎:AI 生成的代码要自己审查,特别是涉及安全的部分
  4. 迭代优化:先实现核心功能,然后逐步完善
  5. 记录过程:把开发过程记录下来,积累经验

最后想说的:

技术在快速发展,AI 工具也在不断进化。但不管工具多么先进,核心还是要看你想用它来做什么,怎么用好它。工具只是工具,真正重要的是你的思考和创造。

AI 可以帮你写代码,但它写不出你的想法。保持好奇心,保持学习,保持创造,这才是作为开发者最重要的品质。

如果这篇文章对你有帮助,不妨动手试试,开发一个属于你自己的 MCP 工具。相信我,这个过程会很有趣,也会很有收获。

感谢

感谢你读到这里,说明你已经成功地忍受了我的文字考验!🎉

希望这篇文章没有让你想砸电脑,也没有让你打瞌睡。

如果有一点点收获,那我就心满意足了。

未来的路还长,愿你
遇见难题不慌张,遇见bug不抓狂,遇见好内容常回访。

记得给自己多一点耐心,多一点幽默感,毕竟生活已经够严肃了。

如果你有想法、吐槽或者想一起讨论的,欢迎留言,咱们一起玩转技术,笑对人生!😄

祝你代码无bug,生活多彩,心情常青!🚀

相关推荐
CodeJourney.5 小时前
Python开发可视化音乐播放器教程(附代码)
数据库·人工智能·python
呆呆小金人6 小时前
SQL入门:正则表达式-高效文本匹配全攻略
大数据·数据库·数据仓库·sql·数据库开发·etl·etl工程师
白鲸开源7 小时前
(二)从分层架构到数据湖仓架构:数据仓库分层下的技术架构与举例
大数据·数据库·数据分析
阿维的博客日记7 小时前
从夯到拉的Redis和MySQL双写一致性解决方案排名
redis·分布式·mysql
好玩的Matlab(NCEPU)7 小时前
Redis vs RabbitMQ 对比总结
数据库·redis·rabbitmq
21号 17 小时前
16.MySQL 服务器配置与管理
服务器·数据库·mysql
我的offer在哪里7 小时前
MongoDB
数据库·mongodb
大模型真好玩7 小时前
低代码Agent开发框架使用指南(五)—Coze消息卡片详解
人工智能·coze·mcp
SamDeepThinking7 小时前
为超过10亿条记录的订单表新增字段
mysql