nebula-mcp
# nebula-mcp
在 Codex 中连接悦数图数据库 5.3,执行 GQL,查看表格、交互图、PROFILE 和结果解释。MCP 安装在使用者电脑上,无需部署到数据库服务器。
## 安装
准备 Python 3.10+、Codex,以及可访问的悦数图数据库 5.3。安装需要访问 GitHub 和 Python 包源。
macOS / Linux:
```bash
curl -fL https://github.com/MuYiYong/nebula-mcp/releases/latest/download/install.py -o install.py
python3 install.py --mode mcp
```
Windows PowerShell:
```powershell
Invoke-WebRequest -Uri "https://github.com/MuYiYong/nebula-mcp/releases/latest/download/install.py" -OutFile install.py
py -3 install.py --mode mcp
```
安装器会校验并安装程序包,将 `nebula` 注册为独立 MCP 服务器。如果未找到 Codex CLI,按安装器输出的命令完成注册。下载或分享固定版本请使用 [GitHub Releases](https://github.com/MuYiYong/nebula-mcp/releases)。
## 配置连接
如果 Codex 中的 `nebula` 只出现在 **“来自插件”** 分组,且这一行没有齿轮按钮,就不能在该插件条目上编辑连接参数。请先按上面的安装命令运行 `python3 install.py --mode mcp`(Windows 为 `py -3 install.py --mode mcp`);已经安装过插件也可以运行。完成后重新打开 Codex 设置,在 **插件 → MCP → 服务器** 分组找到带齿轮的独立 `nebula`,点击齿轮,在环境变量中填写:
新建的独立条目会预置以下字段名;地址、用户名和密码留空,其他字段采用表中的默认值。已有条目升级时保留原配置,不会重置这些字段。
| 字段 | 内容 |
|---|---|
| `NEBULA_ADDRESSES` | 数据库地址 `HOST:PORT`;多个地址用逗号分隔 |
| `NEBULA_USERNAME` | 数据库用户名 |
| `NEBULA_PASSWORD` | 数据库密码 |
| `NEBULA_CONNECT_TIMEOUT_MS` | `30000` |
| `NEBULA_ALLOW_MUTATIONS` | `false`,默认只读 |
| `NEBULA_ENVIRONMENT` | 环境名称,例如 `dev_nebula`,用于结果标识 |
保存并重启该 MCP,然后在新对话中输入“测试 Nebula 连接”。如果仍只看到“来自插件”的条目,先重启 Codex,再确认安装命令没有报错;不要在无齿轮的插件条目上寻找环境变量编辑入口。插件条目可以继续保留,连接配置以“服务器”分组中的独立 `nebula` 为准。
连接信息保存在本机 Codex `config.toml` 中,包含明文密码;页面编辑密码时也可能可见,请勿分享该文件或把它加入版本库。若更希望在终端无回显输入密码,可使用[高级配置命令](https://github.com/MuYiYong/nebula-mcp/blob/main/docs/configuration.md#连接配置命令),但页面配置不需要运行该命令。
### 多套环境
每套环境添加一个独立的 STDIO MCP 服务器,名称由你定义,例如 `dev_nebula`、`prod_nebula`、`test_nebula`,不限制为两套。
根据当前公开的 Codex 插件接口,本项目不能在原生 MCP 设置页的 `nebula` 齿轮旁添加“复制集群”按钮。添加另一套环境时,请在同一设置页新建独立 MCP 服务器并按下面步骤配置。
1. 在 MCP 设置中添加自定义服务器,填写一个不重复的名称。
2. 复制已安装 `nebula` 的命令和参数,复用同一程序,无需重复安装。`launcher.py` 路径应作为一个完整参数,含空格时不要拆开。
3. 分别填写该环境的地址、用户名和密码;建议 `NEBULA_ENVIRONMENT` 与服务器名称一致。
4. 保存后按客户端提示重启对应服务器,测试连接。
切换时关闭当前条目、开启目标条目。若同时启用多套,请在查询请求中明确指定服务器名称。尚未配置的条目,以及不再使用的默认或插件条目,应保持关闭。
## 使用
直接输入 GQL:
> 使用 dev_nebula,执行 MATCH (n) RETURN n LIMIT 20
用自然语言提出查询:
> 使用 dev_nebula,先查看图和 Schema,再查找指定球员的队友关系。
未选图时,客户端会列出可用图并请你选择;选择后自动继续刚才的查询,不需要重复发送。后续查询沿用所选图。
自然语言、Cypher 或 nGQL 转换可配合客户端的 [gql-query-generator 技能](https://github.com/MuYiYong/nebula-gql-skills)。已有 GQL 可以直接执行,不需要额外安装该技能。
查询结果可显示表格、交互图、图表、PROFILE 和解释。点击点或边查看属性与主键;复制图标复制原始 GQL 并提示“已复制”。自动添加的 PROFILE 不出现在复制的语句中。客户端不支持 MCP Apps 时,仍可查看文本和表格结果。
默认只读。需要写入时,应使用具备相应权限的账号,将 `NEBULA_ALLOW_MUTATIONS` 设为 `true`,重启 MCP,并在每次写入时明确确认。请按业务需要限制数据库账号权限。
## 升级
重新执行上面的下载与安装命令即可。安装器会保留已管理服务器的连接配置;自定义条目共用同一启动程序,升级后重启相关 MCP。
## 卸载
如添加了多个自定义条目,先在 Codex 中删除共用此程序的条目,再卸载程序:
```bash
python3 install.py --uninstall
```
Windows 使用 `py -3 install.py --uninstall`。卸载会删除受管 MCP 程序;仅删除某个环境时,在 Codex 中删除对应条目即可,不必卸载程序。
## 常见问题
- **CONFIGURATION_REQUIRED**:程序已启动,但连接信息尚未填完整。检查地址、用户名和密码。
- **连接失败**:检查数据库服务、端口、网络和账号权限;保存配置后重启相应 MCP。
- **没有交互图**:语句需要返回点、边或路径;聚合值通常只显示表格或图表。客户端也需要支持 MCP Apps。
- **结果被截断**:仅展示了部分数据,解释和统计也仅针对返回部分;请收紧查询范围。
- **安装时提示同名冲突**:先检查已有条目的启动命令,避免覆盖其他程序的配置。
[高级安装与配置](https://github.com/MuYiYong/nebula-mcp/blob/main/docs/configuration.md) · [工具用途与兼容性](https://github.com/MuYiYong/nebula-mcp/blob/main/docs/tools.md)
TDQS
Scored across 12 tools
Tools mostly target distinct resources and actions: environment listing, connection setup/testing, graph listing/selection, schema retrieval, GQL validation, read execution, mutation execution, and rendering. However, nebula_render_graph is explicitly a legacy alias of nebula_render_result, and nebula_execute_query also renders results, creating mild ambiguity about when to use render_result separately. The descriptions mitigate but do not fully eliminate this overlap.
All 12 tools use consistent snake_case with a nebula_ prefix and a verb_noun pattern: list_environments, select_graph, execute_query, validate_gql, etc. There is no mixing of conventions or vague verb styles.
12 tools sit well within the 3-15 sweet spot for a graph database MCP. Each tool covers a distinct operational area (connection, environment, graph selection, schema, validation, execution, mutation, rendering) without excessive redundancy.
The surface covers connection and environment setup, graph listing and selection, schema retrieval, GQL validation, read query execution, mutation execution, and result rendering. Minor gaps exist for explicit graph creation/deletion or query cancellation, but the core query lifecycle is well covered and mutations may handle DDL.