h3yun-sql-troubleshooter
by chuck9090
README.md
# h3yun-sql-troubleshooter
一个给 AI 使用的氚云 SQL 查询 MCP 工具。AI 可以调用 `query_sql`,把只读 SQL 发送到氚云平台接口执行,并拿到真实数据结果;辅助排查氚云业务问题是它的典型使用场景之一。
## MCP 配置
已发布到 npm 时,推荐这样配置:
```json
{
"mcpServers": {
"h3yun-sql-troubleshooter": {
"command": "npx",
"args": ["h3yun-sql-troubleshooter"]
}
}
}
```
如果使用本机开发目录,可以直接指向入口文件:
```json
{
"mcpServers": {
"h3yun-sql-troubleshooter": {
"command": "node",
"args": ["D:/ai/mcps/h3yun-sql-troubleshooter/src/index.js"]
}
}
}
```
## 凭据准备
工具需要两个氚云参数:
- `.h3token`:保存从浏览器 Cookie 中取得的 `h3_token` 值。
- `cmax.json`:位于“氚云代码”目录根部,使用 `version: 2` 和 `apps` 结构;根对象记录所有应用共用的 `engineCode`、`h3yunApiVersion` 和 `systemUserId`,`apps` 记录各应用信息。
新版 `h3yun-cmax` 将 `.h3token` 和 `cmax.json` 统一保存到“氚云代码”目录;应用目录下不再保存 `cmax.json`。AI 调用 `query_sql` 时必须通过 `projectDir` 传入当前 Agent 所在工作区目录或“氚云代码”目录的绝对路径。
如果 `projectDir` 本身就是“氚云代码”目录,MCP 只检查当前目录;否则只检查 `projectDir` 的直接子目录中是否有“氚云代码”目录。找到后必须同时存在 `.h3token` 和根 `cmax.json`,否则立即停止查询。MCP 不会搜索更上级、更下级或其他名称目录,也不会使用当前进程目录或环境变量中的项目路径、token、engineCode。根配置包含多个应用时,应确保传入的当前目录能够唯一确定目标应用。
如果没有找到“氚云代码”目录或凭据文件,错误信息会显示已检查的 `projectDir` 和当前 MCP 执行目录。当前 MCP 执行目录仅用于帮助用户判断目录是否传错,不会被用于搜索。AI 应让用户提供工作区目录或“氚云代码”目录,并将该目录作为新的 `projectDir` 重新调用。
示例目录:
```text
C:\workspace\h3yun-projects
└── 氚云代码
├── .h3token
├── cmax.json
└── 示例应用(a1a2b3c)
```
如果当前氚云代码目录下有多个应用,执行 SQL 时可直接将 `projectDir` 设为“氚云代码”目录,因为认证参数统一读取根 `cmax.json`。如果需要根据应用配置定位具体表单或字段,再将 `projectDir` 设为目标应用目录。
## 工具
### query_sql
执行氚云只读 SQL 查询。
入参示例:
```json
{
"sql": "select ObjectId, Name from h_user limit 5",
"projectDir": "D:/workspace/h3yun-app",
"reason": "查询用户基础信息"
}
```
行为规则:
- `projectDir` 必填,值为当前工作区目录或“氚云代码”目录的绝对路径。
- 如果 `projectDir` 是“氚云代码”目录,只检查当前目录;否则只检查直接下一层的“氚云代码”目录。该目录必须同时存在根 `cmax.json` 和 `.h3token`。
- 只允许以 `select` 或 `with` 开头的查询。实测 `show`、`describe`、`desc`、`explain` 会因氚云接口在 SQL 外层包装查询而执行失败。
- SQL 末尾的分号会自动移除。
- 用户未指定查询条数时,`select`/`with` 查询会默认追加 `LIMIT 20`。
- 氚云业务表通常是 `i_表单编码`,系统表通常以 `h_` 开头。
### get_h3yun_sql_troubleshooting_guide
返回给 AI 使用的氚云 SQL 查询指南,说明如何根据 `cmax.json`、`fields.md`、业务表和系统表规则定位表单、字段和数据库表名。
## 实现约定
工具默认调用氚云平台内置接口:
- SQL 预览接口:`/rx-report/integrate/data-source/v1/customsql/previewSql`
正式执行用户 SQL 前,工具优先读取根 `cmax.json` 中共享的 `systemUserId`;如果缺少该字段,会先通过报表接口查询 `System` 用户的 `ObjectId`,再用该用户上下文调用 SQL 预览接口。
请求头使用:
- `Authorization: Bearer <h3_token>`
- `EngineCode: <engineCode>`
- `Origin: https://www.h3yun.com`
## AI 使用建议
AI 在查询前应优先读取项目中的:
- `cmax.json`:确认表单名称和表单编码,并读取根级共享的 `engineCode`、`systemUserId`。
- `fields.md`:确认字段名称和控件编码。
涉及系统表时,应参考氚云系统表说明文档:
https://h3yunpro.github.io/docs/database/
## 许可证
本项目采用 [GNU General Public License v3.0](LICENSE)(仅限第 3 版)许可。
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues