内容
# 服务目录
基于AI的平台,用于在多个GitHub仓库中进行批量代码更改。连接任何MCP客户端,用纯英文描述更改,服务目录查找合适的仓库,通过Claude或Devin生成差异,推送分支并开启拉取请求。
[](https://www.youtube.com/watch?v=UuIU4TJDc_A)
## 连接
### 主机服务
```bash
claude mcp add --transport http service-catalog-mcp https://mcp.infraas.ai
```
或手动添加到您的MCP客户端配置:
```json
{
"mcpServers": {
"service-catalog": {
"url": "https://mcp.infraas.ai"
}
}
}
```
### 自托管
```bash
claude mcp add --transport http service-catalog-mcp http://localhost:8200
```
参见下面的[自托管](#自托管)以在本地启动服务器。
## 自托管
### 前提条件
- Docker和Docker Compose
- GitHub[个人访问令牌](https://github.com/settings/tokens),具有`repo`范围
- Anthropic API密钥**或**Devin账户
### 1. 配置
```bash
cp .env.example .env
# 编辑.env — 至少设置GITHUB_TOKEN和ANTHROPIC_API_KEY
```
### 2. 设置CLI提供程序
服务目录通过在每个克隆仓库中运行CLI代理来生成代码更改。支持两种提供程序。
#### Claude(默认)
在`.env`中设置:
```
CLI_PROVIDER=claude
ANTHROPIC_API_KEY=sk-ant-...
```
就这样 — 不需要其他设置。
#### Devin
Devin通过主机上的凭证文件进行身份验证。设置一次凭证文件,然后将文件挂载到容器中,以便在重启后持续使用。
**步骤1** — 在主机上进行身份验证:
```bash
# 如果尚未安装,请安装Devin CLI
curl -fsSL https://cli.devin.ai/install.sh | bash
# 登录 — 这会将凭证保存到~/.local/share/devin/credentials.toml
devin auth login --force-manual-token-flow
```
**步骤2** — 挂载凭证文件。在`docker-compose.yml`中为`mcp-server`服务添加以下卷:
```yaml
volumes:
- ~/.local/share/devin/credentials.toml:/root/.local/share/devin/credentials.toml:ro
- batch-workspaces:/var/batch-workspaces
- repo-clones:/repos
```
**步骤3** — 在`.env`中设置:
```
CLI_PROVIDER=devin
```
### 3. 启动
```bash
docker compose up -d
```
MCP服务器可在`http://localhost:8200`访问。
### 4. 连接您的MCP客户端
```bash
claude mcp add --transport http service-catalog-mcp http://localhost:8200
```
## 工作原理
批量更改遵循四个步骤,每个步骤在移动到下一步之前都会确认:
1. **查找仓库** — `search_repos`按语言、框架、依赖项或纯英文查询查找仓库。
2. **计划** — `propose_plan`调用规划器LLM并提出每个仓库的任务;在使用`replan`或`set_repo_subtask`进行调整后批准。
3. **差异** — `start_diffs`在每个仓库中运行CLI代理;`wait_for_diffs`轮询进度;使用`chat_repo`查看差异。
4. **推送和PR** — `push_repos`推送分支;`get_workflow_runs`显示CI;`create_pr`开启拉取请求。
## 工具
### 发现
| 工具 | 描述 |
|------|-------------|
| `search_repos` | 按依赖项、语言、框架、平台、GitHub操作或自然语言查询搜索 |
| `get_codebase_glossary` | 项目特定术语和搜索提示 |
| `list_repository_groups` | 列出已保存的仓库组 |
| `get_repository_group` | 按名称获取已保存的组 |
| `list_user_repositories` | 所有链接的仓库及其索引状态 |
| `index_repository` | 手动触发特定仓库的索引 |
### 批量更改
| 工具 | 描述 |
|------|-------------|
| `propose_plan` | 启动批量更改 — 运行规划器并提出每个仓库的任务 |
| `replan` | 使用提示重新运行规划器 |
| `set_repo_subtask` | 编辑某个仓库的任务描述或基准分支 |
| `add_repos` | 在批量更改中添加仓库 |
| `remove_repos` | 从当前批量更改中删除仓库 |
| `start_diffs` | 为所有待处理仓库启动CLI代理 |
| `wait_for_diffs` | 轮询差异进度;流式传输更新,返回约25秒后 |
| `chat_repo` | 在某个仓库的差异中提问(`mode="qa"`)或请求编辑(`mode="edit"`) |
| `inspect_batch` | 查看会话状态、PR状态或特定文件的差异 |
| `push_repos` | 为已准备好的仓库推送分支 |
| `create_pr_prep` | 为每个仓库草拟PR标题和正文 |
| `set_pr_prep` | 编辑某个仓库的PR标题或正文 |
| `create_pr` | 开启拉取请求 |
| `update_pr` | 编辑开放的PR |
| `close_pr` | 关闭PR而不合并 |
| `cancel_batch` | 取消所有正在进行的任务并清除会话 |
### CI/CD
| 工具 | 描述 |
|------|-------------|
| `get_workflow_runs` | 跨仓库的GitHub操作状态 — 在`push_repos`后无需参数调用以检查所有推送的仓库 |
| `get_workflow_jobs` | 某个运行的每个作业/步骤的详细信息;使用`failed_only=True`进行故障排除 |
## 环境变量
| 变量 | 默认值 | 描述 |
|----------|---------|-------------|
| `LOCAL` | `true` | `true` = 单用户本地模式;`false` = 云模式(需要Auth0 + MongoDB) |
| `GITHUB_TOKEN` | — | 具有`repo`范围的个人访问令牌(本地模式) |
| `CLI_PROVIDER` | `claude` | 代码更改代理:`claude`或`devin` |
| `ANTHROPIC_API_KEY` | — | 当`CLI_PROVIDER=claude`时必填 |
| `CLAUDE_CLI_DEFAULT_MODEL` | — | 覆盖Claude CLI使用的模型 |
| `DEVIN_MODEL` | — | 覆盖Devin CLI使用的模型 |
| `MONGODB_URI` | — | MongoDB连接字符串(如果未设置,则回落到TinyDB) |
| `MONGODB_DATABASE` | `service-catalog` | MongoDB数据库名称 |
| `REDIS_URL` | — | Redis URL(如果未设置,则回落到内存缓存) |
| `MCP_PORT` | `8200` | MCP服务器监听的端口 |
| `LOG_LEVEL` | `INFO` | 日志详细程度 |
| `LANGSMITH_API_KEY` | — | 启用LangSmith跟踪(可选) |
| `CLONE_REPO_BASE_DIR` | `/repos` | 索引器克隆的基准目录 |
| `BATCH_CLONE_BASE_DIR` | `/var/batch-workspaces` | 批量更改工作空间的基准目录 |
云模式变量(`LOCAL=false`):`MCP_AUTH0_DOMAIN`、`MCP_AUTH0_CLIENT_ID`、`MCP_AUTH0_CLIENT_SECRET`、`MCP_AUTH0_AUDIENCE`、`MCP_BASE_URL`、`GITHUB_APP_ID`、`GITHUB_APP_NAME`、`GITHUB_PRIVATE_KEY_PATH`。
## 许可证
MIT — 参见[LICENSE](LICENSE)。