让 AI 直接操作数据库:电科金仓 KES MCP Server 实践

原文《让AI直接操作数据库,电科金仓KES的MCP实践来了》(金仓数据库,2026-07-13)改写版。保留全部技术事实,去掉宣传腔,按工程师阅读习惯重排。

背景:为什么需要它

过去排查一条慢 SQL,标准动作是:在开发工具里写问题 → 切到数据库客户端查表结构 / 索引 → 复制执行计划 → 回到对话窗口贴给大模型分析。工具之间来回倒腾,上下文还要手动搬运。

电科金仓(Kingbase)近日在 Gitee 开源了 KES MCP Server ,把上述分散操作直接接入 TRAE、Cursor 等支持 MCP 的开发工具。它封装了 9 个标准工具,覆盖结构探索、SQL 查询、执行计划分析、健康检查、慢查询定位与索引优化等常见场景。

text 复制代码
"帮我看看 orders 表有哪些字段和索引。"
"分析一下这条 SQL 为什么慢。"
"如果增加联合索引,执行计划会不会改变?"

现在这些话可以直接在开发工具里说,由 KES 真正去执行。


KES MCP Server 是什么

它位于 开发工具KES 数据库 之间,是模型访问数据库的必经关卡。

交互流程:

  1. 用户提问,开发工具判断该调用哪个工具;
  2. KES MCP Server 接收请求,做参数检查与访问控制;
  3. 连接 KES 执行操作,取回结果;
  4. 开发工具继续整理、分析。

关键点:模型不能绕过 Server 直连数据库。能调哪些工具、执行哪些 SQL、看哪些对象,同时受 Server 访问模式与数据库账号权限约束。

分层架构(5 层)

从上到下:

职责
AI 客户端层 TRAE / Cursor 等 MCP 宿主
传输层 Stdio / SSE / Streamable HTTP
核心服务与安全层 参数校验、访问控制、模式管理
分析能力层 执行计划、慢查询、假设索引等分析
KES 数据库层 实际的数据存储与计算

三种传输方式

方式 适用场景
Stdio 本地开发,不开端口,客户端自动拉起
SSE 远程访问
Streamable HTTP 配合 HTTPS / 反向代理 / 网络隔离做集中部署

本地开发用 Stdio;团队共享或跨环境用 Streamable HTTP。


安全模型:两种访问模式

数据库是核心基础设施,AI 操作必须可控。KES MCP Server 提供两种模式,可自由切换:

  • Restricted(受限,推荐生产/演示)
    • 内置 SQL 类型白名单 + 严格访问控制策略;
    • 从源头拦截高风险写入与修改操作;
    • 建议配置 AI 专用最小权限账户,进一步降低误操作面。
  • Unrestricted(开放)
    • 放开完整数据库操作权限,支持复杂管理与开发指令;
    • 适合需要灵活性的测试环境。

实践建议:默认跑 Restricted,给 AI 一个只读/最小权限的库账号。


能力清单:四类标准工具

1. 查看数据库结构

查看 Schema、表、视图、序列,以及字段、约束、索引等对象详情。信息直接来自当前 KES 实例,无需手动粘贴建表语句。

text 复制代码
"列出全部或指定 Schema 下的表、视图、序列或扩展。"
"查看 orders 表的字段、约束、索引等对象详情。"

2. 执行查询与分析 SQL

按业务需求生成并执行查询,同时可查看 SQL 在 KES 中的真实执行计划。

text 复制代码
"查询本月销售额排名前 5 的商品。"
"分析这条 SQL 的执行计划。"

模型基于返回的扫描方式、过滤条件、索引使用情况,定位性能问题。

3. 检查数据库运行状态

一句指令发起健康检查,覆盖索引、连接、Vacuum、序列、复制、缓存、约束等维度;也能拉取高耗时查询。

text 复制代码
"检查一下数据库健康状况。"
"找出最近总耗时最高的 5 条 SQL。"

4. 分析索引方案

针对指定 SQL 或历史负载分析索引。配合 sys_hypo 扩展,可在不创建真实索引的情况下模拟新增索引后的执行计划,先评估有效性再决定是否落地。

text 复制代码
"如果在 user_id 和 status 字段上增加联合索引,执行计划会有什么变化?"

安装与配置

前置要求

  • KES V8R6 及以上
  • Python 3.12 ~ 3.13
  • TRAE / Cursor 等支持 MCP 的开发工具

步骤

bash 复制代码
# 1. 获取代码
git clone https://gitee.com/king-db/kingbase-mcp

# 2. 安装依赖
uv pip install .

随后在 MCP 客户端中配置:数据库连接、启动命令、访问模式。生产/演示环境建议启用 Restricted:

bash 复制代码
uv run kingbase-mcp --access-mode restricted

本地 Stdio 方式下,通常由客户端自动启动服务,无需提前单独运行。

扩展依赖

  • 索引假设分析 → 需 sys_hypo 扩展
  • 慢查询与负载分析 → 需 sys_stat_statements 扩展

完整配置参数见项目 README。


实战:在开发工具里完成一次 SQL 优化

目标 SQL:

sql 复制代码
SELECT * FROM orders WHERE user_id = 123 AND status = 'pending';

① 看结构

"查看 orders 表的结构,包括字段、约束和索引。"

Server 返回当前表结构与索引,判断是否已有可用索引。

② 分析执行计划

"分析这条 SQL 的执行计划。"

若结果显示全表扫描、现有索引未生效,则进入下一步验证。

③ 验证新索引方案

"模拟增加 user_id 和 status 联合索引后的执行计划。"

Server 通过假设索引重新生成执行计划,并对比前后变化。全程不创建物理索引,无额外存储与维护成本。 返回结果会展示扫描方式与执行代价。

④ 决策 若模拟结果明显改善,再由开发/DBA 结合查询频率、写入压力、存储成本决定是否真正建索引。

整个流程------看表结构 → 分析执行计划 → 验证索引效果------在同一个开发环境内闭环,不再跨工具搬运上下文。


获取与参与

  • 立即体验:项目地址见文末「阅读原文」→ gitee.com/king-db/kin...
  • 主题征文:可将使用体验整理成文投稿,详见 KES MCP Server 主题征文活动。

供稿:数据库产品研发中心|编辑:格格|审核:日尧|部分图片由 AI 辅助生成

相关推荐
用户47949283569152 小时前
专升本前端毕业 1 年,从初创到大厂,我的开源项目上了 github trending,顺便聊聊做开源的收获
前端·后端·github
小小放舟、2 小时前
PaiCLI-Demo:从零实现 ReAct Agent + Tool Call
java·后端·intellij-idea·springboot·agent·react·tool call
用户6757049885022 小时前
别再乱用了!var arr []int 和 arr := []int{} 给整懵了?不就声明个空数组,项目居然崩了?
后端·go
马达拉3 小时前
为什么Bun查询数据库接口响应比Rust还快
后端
geovindu3 小时前
go: Enumeration Algorithm
开发语言·后端·算法·golang·枚举算法
雪隐3 小时前
个人电脑玩AI-10让5060 Ti给你打工——ComfyUI,我差点被它劝退三次
人工智能·后端
工具派4 小时前
写代码时,我把这个本地 AI Commit Message 生成器接进了工作流
前端·后端
犀利豆4 小时前
AI 时代使用 Obsidian 作为 IDE
人工智能·后端
用户7917286761974 小时前
在 opencode 中使用 opencode-plugin-loop 插件完全指南
后端