# repo-mcp-server 双实例部署指南

## 背景

问题：之之用冰朔的MCP令牌操作仓库，结果写到了冰朔的仓库。

根因：repo-mcp-server 只有一个实例，硬编码指向 `bingshuo/guanghulab`。

方案：部署两个MCP服务器实例，各自绑定不同仓库。

## 架构

```
WorkBuddy(冰朔) → https://guanghulab.com/mcp → nginx → 3903 repo-mcp-bs (bingshuo/guanghulab)
WorkBuddy(之之) → https://guanghulab.com/zz-mcp → nginx → 3904 repo-mcp-zz (bingshuo/zhizhi)
```

## 部署步骤

### 1. 先确认之之的仓库名

之之的仓库路径是什么？如果她有自己的Forgejo仓库，路径类似 `bingshuo/zhizhi`。
如果她的仓库嵌套在冰朔的仓库里（比如 `bingshuo/guanghulab/zhizhi/`），
那MCP服务器需要改为指向子目录——但Gitea API不支持子目录级别的仓库操作。

**需要的确认信息：**
- 之之的Gitea用户名和仓库名
- 之之的Gitea API Token（有写权限的）

### 2. 更新代码

```bash
cd /opt/guanghu/guanghulab
git pull origin main
```

`ecosystem.config.js` 已更新，包含两个MCP实例。

### 3. 设置环境变量

```bash
# 冰朔的 Gitea Token（当前已经在用的）
export GITEA_TOKEN_BS="当前GiteaToken"
export REPO_MCP_SECRET_BS="当前MCP密码"

# 之之的 Gitea Token（需要之之在Forgejo生成自己的Token）
export GITEA_TOKEN_ZZ="之之的Token"
export REPO_MCP_SECRET_ZZ="之之的MCP密码"
```

之之在Forgejo生成Token的路径：
`用户设置 → 应用 → 生成访问令牌`
权限选择：`读写仓库内容`

### 4. 重启PM2

```bash
pm2 start ecosystem.config.js
```

检查两个实例都在运行：
```bash
pm2 list
# 应该看到 repo-mcp-bs 和 repo-mcp-zz 都在线
```

### 5. 配置Nginx反向代理

在 nginx 配置中添加之之的MCP路由：

```nginx
# 冰朔的MCP（已有）
location /mcp {
    proxy_pass http://127.0.0.1:3903/mcp;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_buffering off;
    proxy_request_buffering off;
    proxy_http_version 1.1;
}

# 之之的MCP（新增）
location /zz-mcp {
    proxy_pass http://127.0.0.1:3904/mcp;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_buffering off;
    proxy_request_buffering off;
    proxy_http_version 1.1;
}
```

```bash
nginx -t && systemctl reload nginx
```

### 6. 之之配置WorkBuddy

之之的 WorkBuddy mcp.json 应该指向她的专属端点：

```json
{
  "mcpServers": {
    "guanghulab": {
      "url": "https://guanghulab.com/zz-mcp",
      "headers": {
        "Authorization": "Bearer 之之的MCP密码"
      },
      "disabled": false
    }
  }
}
```

## 注意

- 两个实例使用同一份代码（mcp-servers/repo-mcp-server/index.js），只是环境变量不同
- 一键升级：代码更新后 `pm2 restart all` 两个都重启
- 之之的MCP密码和Gitea Token由之之自己保管，冰朔不共享
