内容
# RepoPilot MCP
RepoPilot MCP 是一个 TypeScript monorepo,用于通过 Model Context Protocol (MCP) 工作流实验 GitHub 拉取请求分析。它结合了 Next.js 接口、Fastify API、BullMQ 工作线程、自定义只读 MCP 服务器和 Prisma 支持的跟踪存储,以便每个分析都可以被排队、执行、审查和审计。
当前工作流接受 GitHub 拉取请求 URL,创建分析会话,运行小型 MCP 工具链,存储结果,并在 Web 应用程序中显示推荐和底层工具调用跟踪。
## 亮点
- 使用共享 TypeScript 契约的拉取请求 URL 解析和验证。
- 用于创建分析、轮询会话状态和获取跟踪的 Fastify API 路由。
- 由 Redis 支持的 BullMQ 工作线程管道。
- 自定义 stdio MCP 服务器,带有只读工具:
- `get_pr_summary`
- `get_changed_files`
- `analyze_diff_risk`
- `suggest_tests`
- 用于用户、存储库、会话、PR 结果、GitHub 应用程序安装和工具调用的 Prisma/PostgreSQL 持久性。
- 用于本地演示的固定模式,以及用于实时存储库读取的 GitHub 应用程序凭证。
- 用于提交 PR 和审查分析输出的 Next.js UI。
## 架构
```text
apps/
web/ Next.js 应用路由器前端。
api/ 用于分析/会话/跟踪端点的 Fastify API。
worker/ 执行 PR 分析流程的 BullMQ 工作线程。
mcp-server/ 自定义 stdio MCP 服务器,暴露只读 PR 工具。
packages/
shared/ 契约、模式、环境解析、编辑、GitHub 帮助程序和服务器实用程序。
prisma/ 数据库模式、迁移和种子脚本。
tests/ API、队列、解析器、MCP、固定装置和 GitHub 应用程序覆盖。
```
在运行时,Web 应用程序调用 API,API 存储排队的会话并排队作业,工作线程调用 MCP 服务器工具,最终结果和工具跟踪被持久化以供 UI 使用。
## 要求
- Node.js 24 或更高版本
- npm 11 或更高版本
- Docker,用于本地 Postgres 和 Redis 服务
## 快速入门
安装依赖项并创建本地环境文件:
```sh
npm install
cp .env.example .env
```
启动 Postgres 和 Redis:
```sh
docker compose up -d
```
生成 Prisma 工件,运行迁移,播种本地数据,并构建 TypeScript 包:
```sh
npm run db:generate
npm run db:migrate
npm run db:seed
npm run build:ts
```
在三个终端中运行应用程序:
```sh
npm run dev:api
npm run dev:worker
npm run dev:web
```
打开 `http://localhost:3000/analyze/pr` 并提交固定 PR:
```text
https://github.com/repopilot-labs/demo-repo/pull/42
```
## 环境
已签入的 `.env.example` 包含本地开发所需的值:
```sh
NODE_ENV=development
DATABASE_URL=postgresql://repopilot:repopilot@localhost:5432/repopilot
REDIS_URL=redis://localhost:6379
API_HOST=0.0.0.0
PORT=4000
NEXT_PUBLIC_API_BASE_URL=http://localhost:4000
REPOPILOT_MCP_SERVER_COMMAND=node
REPOPILOT_MCP_SERVER_ARGS=["apps/mcp-server/dist/index.js"]
```
实际的 `.env` 文件被故意忽略。保留 GitHub 应用程序机密、私钥路径和本地凭证仅在其中。
## GitHub 应用程序模式
如果没有 GitHub 应用程序配置,MCP 服务器使用固定支持的 PR 数据,以便工作流可以离线运行。要读取实际的拉取请求元数据和更改的文件,请创建 GitHub 应用程序,在测试存储库中安装它,并在 `.env` 中设置这些值:
```sh
GITHUB_APP_ID=
GITHUB_APP_SLUG=
GITHUB_APP_CLIENT_ID=
GITHUB_APP_CLIENT_SECRET=
GITHUB_APP_PRIVATE_KEY_PATH=
GITHUB_TEST_OWNER=
GITHUB_TEST_REPO=
GITHUB_TEST_PR_NUMBER=
```
当存在此配置时,RepoPilot 使用短期安装令牌进行只读 PR 访问。
## 有用的脚本
```sh
npm run dev:web # Next.js 前端在端口 3000 上
npm run dev:api # Fastify API 在端口 4000 上
npm run dev:worker # 队列工作线程
npm run dev:mcp-server # 通过 stdio 的 MCP 服务器
npm run typecheck # TypeScript 检查
npm run lint # TypeScript lint 样式检查
npm test # Vitest 套件
npm run build # TypeScript 构建加上 Web 构建
```
## 验证
在发布更改之前运行主要检查:
```sh
npm run typecheck
npm run lint
npm test
npm run build
DATABASE_URL=postgresql://repopilot:repopilot@localhost:5432/repopilot npx prisma validate
```
Docker 是完整的数据库支持工作流所必需的。静态检查和许多路由/单元测试仍然可以在没有 Postgres 或 Redis 的情况下运行。
## 当前范围
RepoPilot 目前专注于拉取请求分析部分。完整的 GitHub OAuth 登录、托管部署、模型支持的推理、批准工作流、问题分类、CI 日志分析和评论发布故意不在当前实现范围内。