# 日志 MCP

生成 ssh-logs 日志服务器 MCP 条目。执行本文件全部步骤后再回到 [SKILL.md](SKILL.md) 做合并写入。

## 1. 日志盘

| 环境 | LOG_SSH_HOST | 用户/密码 |
|------|--------------|-----------|
| test1 | 10.111.30.110 | admin / Passw0rd@123! |
| test2 | 10.111.30.120 | 同上 |
| test3 | 10.111.30.130 | 同上 |
| test4 | 10.111.30.140 | 同上 |
| test5 | 10.111.30.150 | 同上 |
| uat | 172.16.30.244 | 同上 |

端口默认 `22`。

## 2. 查服务实例 IP

以 `test1` 为例；其它环境将 URL/参数中的 `test1` 换成对应环境。

```
GET http://www.{env}.yljr.com/nacos/v1/ns/catalog/instances?serviceName={serviceName}&clusterName=DEFAULT&groupName=DEFAULT_GROUP&pageSize=10&pageNo=1&namespaceId={env}
```

**建议用 `curl.exe` 请求**（PowerShell 里 `curl` 常是 `Invoke-WebRequest` 别名，可能报错；不建议 WebFetch——会把 http 升级为 https 导致拿不到数据；均不可行时自行选择合适方式）：

```bash
curl.exe -s "http://www.test1.yljr.com/nacos/v1/ns/catalog/instances?serviceName={serviceName}&clusterName=DEFAULT&groupName=DEFAULT_GROUP&pageSize=10&pageNo=1&namespaceId=test1"
```

响应取 `list[].ip`、`list[].healthy`。示例：

```json
{
  "list": [
    {
      "instanceId": "10.111.110.45#8341#DEFAULT#DEFAULT_GROUP@@zqyl-bank-response",
      "ip": "10.111.110.45",
      "port": 8341,
      "healthy": true
    }
  ],
  "count": 1
}
```

- 无 `list` / 无 ip → **停止并提示用户先启动服务**（不写日志 MCP；数据库 MCP 仍可写）
- **多个 ip（必遵）**：必须**逐个**检查日志路径是否存在
  - 路径**不存在** → 丢弃该 ip（实例可能已下线但仍被 Nacos 返回）
  - 路径**存在** → 全部保留；有几个有效路径就写几条 MCP，**禁止只留一个**

## 3. 校验并确定 remote-dir

对 Nacos 返回的**每一个**实例 ip，在日志盘上按序检查（只读）：

```text
1. /home/logs/{ip}/{serviceName}        （精确匹配优先）
2. /home/logs/{ip}/ 下名称相似的目录      （包含服务名关键字、去掉前缀后缀等）
3. /home/logs/{ip}                      （仅此时其下有可用服务子目录才可用）
```

`--remote-dir` 可填上述任一存在的路径（与现有示例一致）。

路径检查可用已有 `ssh-logs` MCP，或只读 SSH（勿打印密码到用户可见输出）。

`LOG_DEFAULT_SUBDIR`：对照服务名与该目录下实际日志文件/子目录名自动匹配（如 `logs`、服务同名目录）；若 MCP 参数不支持该字段，则把最贴合的路径写进 `--remote-dir`。

检查结束后汇总：有效路径列表 = 所有路径存在的 ip（0 个或多个）。

### 路径规则摘要

```text
候选：/home/logs/{instanceIp}/{serviceName}，或相似目录名
--remote-dir 也可为：/home/logs/{instanceIp}（服务目录在其下）
```
- **多 IP（必遵）**：逐个检查；不存在则丢弃；**所有存在的路径都要各写一条 MCP**，禁止只保留一个
- 无任何 IP / 全部路径不存在：不写日志 MCP，并提示用户

## 4. 生成条目（有效路径全部写入）

对每个有效路径各写一条 MCP，全部合并进 `mcpServers`：

| 场景 | key 命名 |
|------|---------|
| 单服务、1 个有效路径 | `ssh-logs`（或 `ssh-logs-{service}`） |
| 单服务、≥2 个有效路径 | `ssh-logs`、`ssh-logs-2`…（或带 `{service}` 后缀） |
| 多服务 | 必须带服务名：`ssh-logs-{service}`、`ssh-logs-{service}-2`… |

`--name` 建议区分：`log-server`、`log-server-2`，或多服务时 `log-{service}`。

单条模板：

```json
"ssh-logs": {
  "command": "npx",
  "args": [
    "-y",
    "@thesashadev/ssh-mcp-server",
    "--host", "<LOG_SSH_HOST>",
    "--port", "22",
    "--username", "admin",
    "--password", "Passw0rd@123!",
    "--remote-dir", "/home/logs/<instance-ip>",
    "--name", "log-server"
  ]
}
```

多有效路径示例（两个都要写进 mcp.json）：

```json
"ssh-logs": {
  "command": "npx",
  "args": ["-y", "@thesashadev/ssh-mcp-server", "--host", "10.111.30.110", "--port", "22", "--username", "admin", "--password", "Passw0rd@123!", "--remote-dir", "/home/logs/10.111.110.45", "--name", "log-server"]
},
"ssh-logs-2": {
  "command": "npx",
  "args": ["-y", "@thesashadev/ssh-mcp-server", "--host", "10.111.30.110", "--port", "22", "--username", "admin", "--password", "Passw0rd@123!", "--remote-dir", "/home/logs/10.111.110.46", "--name", "log-server-2"]
}
```

写完后向用户摘要：检查了哪些 ip、丢弃了哪些（路径不存在）、最终写入了哪些 key。
