# MongoDB MCP

使用官方 `mongodb-mcp-server` 生成 MongoDB MCP 条目，**默认只读**（`--readOnly`）。执行本文件全部步骤后再回到 [SKILL.md](SKILL.md) 做合并写入。

**门禁：** 仅当用户在当次对话中**明确确认**要生成 MongoDB MCP 时才执行本分册；未确认禁止写入（见 [SKILL.md](SKILL.md)「MCP 生成范围」）。

查找顺序与 [database.md](database.md) 一致：本地代码/配置 → Nacos。域名与密码可按下表覆盖/补全；**用户名与库名以 Nacos/代码为准**（下表仅为示例账号）。

## 0. 是否引入 MongoDB（未引入则跳过）

满足任一即视为引入，否则**跳过本分册**：

- `pom.xml` / `build.gradle*` 含 `mongodb` / `spring-boot-starter-data-mongodb` 等
- 配置出现 `spring.data.mongodb.*` / `spring.mongodb.*` / `mongo.uri` 等
- 代码使用 `MongoTemplate` / `MongoClient` / `ReactiveMongoTemplate` 等

未引入时在摘要中说明「未使用 MongoDB，已跳过」。

## 1. 定位配置（顺序必遵）

### 1.1 本地 / 代码

查找：

- `bootstrap.yml` / `application*.yml` / `*.properties`
- 配置类、静态常量中的 uri / host / port / username / password / database

常见 key：

| 目标字段 | 常见 key |
|----------|----------|
| uri | `spring.data.mongodb.uri` / `spring.mongodb.uri` |
| host | `spring.data.mongodb.host` / `spring.data.mongodb.hosts` |
| port | `spring.data.mongodb.port` |
| username | `spring.data.mongodb.username` |
| password | `spring.data.mongodb.password` |
| database | `spring.data.mongodb.database` |

### 1.2 Nacos（本地未凑齐时）

```
GET http://www.{env}.yljr.com/nacos/v1/cs/configs?show=all&dataId={dataId}&group={group}&tenant={env}&namespaceId={env}
```

关注 data-id / content 含 `mongo` 的配置；从 content 解析上述字段。用户名、库名优先用 Nacos；密码/域名 IP 按下表补全或覆盖。

## 2. 环境与域名映射（必遵）

### 2.1 公共相关 — `public-mongodb01.yljr.native`

| 环境 | 代理 IP | 端口 | 密码（同环境统一） | 示例用户/库 |
|------|---------|------|-------------------|-------------|
| test1 ~ test5 | `10.111.20.161` | `27017` / `27018` / `27019` | `test123456` | `center_message_push_test{N}` |
| uat | `10.111.20.171` | 同上 | `uat123456` | `center_message_push_uat` |
| yc | `172.16.46.198` | `27017` | `yc123456` | `center_message_push_yc` |

### 2.2 融资二期相关 — `public-mongodb02.yljr.native`

| 环境 | 代理 IP | 端口 | 密码 | 示例用户/库 |
|------|---------|------|------|-------------|
| test1 ~ test5 | `10.111.20.162` | `27017` / `27018` / `27019` | `test123456` | `zqyl_crcl_finance_test{N}` |
| uat | `10.111.20.172` | 同上 | `uat123456` | `zqyl_crcl_finance_uat` |
| yc | `172.16.46.199` | `27017` / `27019` | `yc123456` | `zqyl_crcl_finance_yc` |

### 2.3 云智相关

| 环境 | 用户 | 密码 | 地址 | 库名 |
|------|------|------|------|------|
| uat | `aiops_uat` | `uat123456` | `10.111.20.171:27017` | `aiops_endpoint_pi_uat` |
| yc | `aiops_yc` | `yc20221202` | `172.16.44.94:27017`、`172.16.44.95:27017` | `aiops_endpoint_pi_yc` |

**域名 → IP：** 配置里出现 `public-mongodb01.yljr.native` / `public-mongodb02.yljr.native` 时，按上表当前环境换成对应 IP。其它 host 以 Nacos/代码为准。

**密码：** 能按域名簇 + 环境命中上表则用表中密码（可覆盖 Nacos 旧值）；未命中则用 Nacos/代码中的 password。

## 3. 拼接连接串

优先使用完整 uri（替换域名后写入）。

若只有离散字段，允许拼接：

```
mongodb://{username}:{password}@{host}:{port}/{database}
```

多端口（`27017/27018/27019`）时：

1. Nacos uri 已含多 host/replicaSet → 保留结构，仅替换域名为 IP、校正密码
2. 否则用种子列表：`host:27017,host:27018,host:27019`（yc 公共簇可仅 `27017`；融资 yc 用 `27017,host:27019`）
3. 若 Nacos 带 `replicaSet=` 参数，拼接时一并保留；没有则先用单主端口 `27017`，并在摘要提示可能需补 replicaSet

云智 yc 双机：

```
mongodb://aiops_yc:yc20221202@172.16.44.94:27017,172.16.44.95:27017/aiops_endpoint_pi_yc
```

最终写入环境变量：`MDB_MCP_CONNECTION_STRING`。

**去重：** 多个服务解析出相同连接串（规范化后）只写一条 MCP。

## 4. 生成条目

连接串注意（连不上时优先排查）：

1. 测试环境账号一般在 **`admin`** 库认证：URI 须带 `authSource=admin`（缺省会认证失败）
2. MCP 客户端优先 **单节点 + `directConnection=true`**（如 `:27017`），避免多端口副本集发现失败；Nacos 有明确 `replicaSet=` 时再写多种子
3. Windows 上 Cursor 对 `npx` 启动 MCP 不稳定；全局安装后优先用 **`node` + 本地入口**，与 ssh-logs 一致：

```json
"mongodb": {
  "command": "node",
  "args": [
    "D:\\soft\\npm-global\\node_modules\\mongodb-mcp-server\\dist\\esm\\index.js",
    "--readOnly"
  ],
  "env": {
    "MDB_MCP_CONNECTION_STRING": "mongodb://center_message_push_test1:test123456@10.111.20.161:27017/center_message_push_test1?authSource=admin&directConnection=true"
  }
}
```

`node_modules` 路径以本机 `npm root -g` 为准。若尚未全局安装，依赖检查步骤会安装 `mongodb-mcp-server`。

多实例：`mongodb`、`mongodb-2` 或 `mongodb-{db}`。禁止去掉 `--readOnly`，除非用户当次明确要求可写。

密码可写入 mcp.json，勿在聊天中主动复述完整密码。

## 5. 失败处理（本分册）

| 情况 | 处理 |
|------|------|
| 未引入 MongoDB | 跳过 |
| 引入了但凑不齐 host/uri 与 database（或 username） | 列出已查文件/dataId，不写 Mongo MCP；其它 MCP 照常 |
| 仅缺 password 且未命中密码表 | 提示用户补充，不写或按空密码尝试并说明风险 |
