关于 Swipr
SwiPR 提供基于滑动操作的 GitHub 拉取请求审查界面,并通过 MCP 服务向 Agent 提供 PR 上下文。它结合启发式风险评分、摘要、相似变更、贡献者历史和测试查找。
主要功能
- 01滑动式 PR 审查
- 02启发式风险评分
- 03AI 摘要与 PR 上下文
- 04相似变更搜索
- 05贡献者历史与测试查找
- 06记录审查决定
适用场景
- 01筛选待处理的 GitHub 拉取请求
- 02合并前检查风险和相关变更
- 03查找覆盖变更文件的测试
- 04在 Claude Desktop 或 Cursor 中查看 PR 上下文
MCP 相关
MCP 服务提供 12 个工具,用于读取 PR 数据、风险评分、相关变更、贡献者历史、文件和测试,也可记录审查决定与会话摘要。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
SwiPR
借助 AI 上下文,通过滑动审核 GitHub PR。可作为 Claude MCP 插件使用。
试用在线演示 → · 添加到 Claude Desktop ↓ · 已在 smithery.ai 上架
为什么要做这个
Resend 首席执行官 Zeno Rocha 在 X 上表示:
"创建 PR 的成本已经降为零。现在有大量草稿 PR 等待着一种有限(且极其宝贵)的资源:注意力。事实证明,瓶颈已不再是创建,而是审核。" — 2026 年 2 月
"以前,我们的主仓库每天平均有约 20–40 个未关闭的 PR。现在,平均每天有约 130–200 个未关闭的 PR。" — 2026 年 5 月
PR 审核是一个上下文问题。无论是维护者在分拣 PR,还是 AI Agent 在判断是否合并,问题都一样:这样发布安全吗? 要妥善回答,就需要了解风险等级、贡献者历史、相似的历史改动,以及哪些测试覆盖了差异,而不只是阅读修改的代码行。
SwiPR 将这些上下文呈现为供人使用的滑动界面,以及供 Agent 使用的 MCP 服务。
工作原理
- 粘贴任意公开的 GitHub 仓库 — SwiPR 会获取未关闭的 PR,并将其连同嵌入向量一起存储
- 向右滑动表示批准,向左滑动表示请求修改,向下滑动表示跳过 — 或使用
J/F/Space - 右侧面板会呈现:风险评分、AI 摘要、相似的历史 PR、贡献者历史
- 点击 “为什么有风险?”、“显示调用方” 或 “哪些测试覆盖了这些改动?”,按需获取更深入的上下文
- 在聊天中提出任何问题 — AI 可以访问完整的差异和代码库上下文
每个 PR 的 AI 上下文都会缓存 — 查看卡片时不会重复调用 API。
MCP 服务
SwiPR 将相同的 PR 上下文作为 MCP 服务提供。将其添加到 Claude Desktop 或 Cursor,即可直接在聊天中审核 PR — 无需浏览器。
添加到 ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"swipr": {
"command": "npx",
"args": ["-y", "supergateway", "--streamableHttp", "https://v0-swipr-build.vercel.app/api/mcp"]
}
}
}
然后向 Claude 提问:
- “查找 resend/resend-node PR #1247 — 风险是什么?有没有类似的历史改动?”
- “vercel/next.js 中哪些未关闭的 PR 涉及路由器?”
- “查找覆盖 PR #892 中已修改文件的测试。”
全部 12 个 MCP 工具都只读取数据库 — 使用托管服务时不会消耗任何 AI 额度。
SwiPR 已在 smithery.ai 和 mcp.so 上架。
可用工具
| 工具 | 返回内容 |
|---|---|
lookup_pr | 将 owner/repo#number 解析为内部 ID |
analyze_pr | 完整 PR 数据:文件、补丁、风险评分、贡献者统计、缓存的 AI 摘要 |
risk_score | 0–100 的启发式评分及原因 |
find_similar_changes | 同一仓库中语义相似的历史 PR |
get_contributor_history | PR 数量、合并率、首次贡献日期 |
inspect_file | HEAD 上的原始文件内容 |
find_callers | 在补丁中搜索函数名的用法 |
find_related_tests | 可能覆盖已修改代码的测试文件 |
git_blame_summary | 某个文件路径的近期贡献者 |
compare_with | 任意 git ref 上的文件内容 |
record_decision | 记录批准 / 请求修改 / 跳过 |
summarize_session | 会话结束时的统计数据 |
使用自己的 AI 密钥
聊天功能支持以下任意免费层级服务提供商 — 点击页眉中的 ⌘ 按钮并粘贴密钥。密钥只会存储在浏览器的 localStorage 中,绝不会发送到服务端。
| 服务提供商 | 密钥格式 | 免费层级 |
|---|---|---|
| Groq | gsk_... | 是 — Llama 3.3 70B |
| Google Gemini | AIza... | 是 — Gemini 2.0 Flash |
| Anthropic | sk-ant-... | 付费 — Claude Sonnet 4.6 |
自定义风险评分
风险评估规则完全位于 lib/scoring.ts 中——使用纯 TypeScript,不涉及机器学习,也不会调用外部服务。请根据团队标准进行修改。
默认规则:
| 信号 | 分数 |
|---|---|
| 大型差异(>500 行) | +20 |
| 中型差异(200–500 行) | +10 |
| 修改文件较多(>20 个) | +15 |
| 涉及配置、锁定或 CI 文件 | +20 |
| 未修改测试文件 | +10 |
| PR 描述为空 | +10 |
| 首次贡献者 | +15 |
| 新贡献者(此前提交的 PR 少于 3 个) | +8 |
| 历史合并率较低(<40%) | +10 |
要添加规则,请在 computeRiskScore 中添加一个 if 块:
const touchesAuth = files.some((f) => f.filename.includes("lib/auth"));
if (touchesAuth) {
score += 25;
reasons.push("Touches auth module — requires security review");
}
分数上限为 100。颜色阈值(绿色/黄色/红色)分别为 40 和 70——请在 app/swipe/_components/view-helpers.ts 中调整。
自托管
需要三个服务——它们都提供免费套餐。
1. 克隆并安装
git clone https://github.com/nochinxx/SwiPR.git
cd SwiPR
pnpm install
2. 创建账号
| 服务 | 用途 | 免费套餐 |
|---|---|---|
| Neon | Postgres + pgvector | 512 MB |
| Vercel AI Gateway | Claude + 嵌入 | $5 额度 |
| GitHub PAT(可选) | 提高 API 速率限制 | 免费 |
3. 配置环境
cp .env.example .env.local
DATABASE_URL=postgresql://... # Neon pooled connection string
AI_GATEWAY_API_KEY=... # Vercel AI Gateway key
GITHUB_TOKEN=... # Optional — raises GitHub rate limit to 5000/hr
4. 初始化数据库
-- Run in Neon SQL editor
CREATE EXTENSION IF NOT EXISTS vector;
pnpm db:push
-- Add HNSW indexes for fast similarity search
CREATE INDEX IF NOT EXISTS prs_embedding_idx ON prs USING hnsw (embedding vector_cosine_ops);
CREATE INDEX IF NOT EXISTS pr_files_embedding_idx ON pr_files USING hnsw (embedding vector_cosine_ops);
5. 运行并部署
pnpm dev # local dev
pnpm build # verify before deploying
pnpm precache # pre-load repos for a demo
推送到 GitHub,连接到 Vercel 项目,并在 Vercel 设置中设置相同的环境变量。将 Claude Desktop 配置指向你自己的部署 URL。
存储限制
Neon 免费套餐可提供约 512 MB 空间。每个导入的 PR 约占 100 KB。升级前大约可存储 5,000 个 PR,或 40–50 个中型仓库。每个仓库最多可导入 100 个未关闭的 PR。
技术栈
- Next.js 16 — App Router、React 19
- Tailwind v4 + shadcn/ui — 样式
- Framer Motion — 卡片动画
- Neon Postgres + pgvector — PR 存储和相似性搜索
- Drizzle ORM — 模式和查询
- Vercel AI Gateway — Claude Sonnet 4.6(分析)、text-embedding-3-small(向量)
- @ai-sdk/anthropic · @ai-sdk/google · @ai-sdk/groq — BYOK 聊天支持
- mcp-handler — 位于
/api/mcp的 MCP 服务
贡献
欢迎提交问题和 PR。
- 技术栈为 Next.js App Router + Drizzle + Neon + Vercel AI SDK——不使用其他抽象层。
- 风险评分位于
lib/scoring.ts中——特别欢迎改进启发式规则。 - 请勿添加 GitHub OAuth 或实际发布 PR 的功能。只读访问是有意设计的。
- 提交 PR 前请运行
pnpm build。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。