mcpField
S
Swipr

Swipr

本地服务
github.com/nochinxx版本控制117 周前更新

关于 Swipr

SwiPR 提供基于滑动操作的 GitHub 拉取请求审查界面,并通过 MCP 服务向 Agent 提供 PR 上下文。它结合启发式风险评分、摘要、相似变更、贡献者历史和测试查找。

主要功能

  1. 01滑动式 PR 审查
  2. 02启发式风险评分
  3. 03AI 摘要与 PR 上下文
  4. 04相似变更搜索
  5. 05贡献者历史与测试查找
  6. 06记录审查决定

适用场景

  1. 01筛选待处理的 GitHub 拉取请求
  2. 02合并前检查风险和相关变更
  3. 03查找覆盖变更文件的测试
  4. 04在 Claude Desktop 或 Cursor 中查看 PR 上下文

MCP 相关

MCP 服务提供 12 个工具,用于读取 PR 数据、风险评分、相关变更、贡献者历史、文件和测试,也可记录审查决定与会话摘要。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"SwiPR": {
"command": "npx",
"args": [
"-y",
"supergateway"
]
}
}
}
启动命令npx -y supergateway

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmsupergateway

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

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 服务。


工作原理

  1. 粘贴任意公开的 GitHub 仓库 — SwiPR 会获取未关闭的 PR,并将其连同嵌入向量一起存储
  2. 向右滑动表示批准,向左滑动表示请求修改,向下滑动表示跳过 — 或使用 J / F / Space
  3. 右侧面板会呈现:风险评分、AI 摘要、相似的历史 PR、贡献者历史
  4. 点击 “为什么有风险?”、“显示调用方” 或 “哪些测试覆盖了这些改动?”,按需获取更深入的上下文
  5. 在聊天中提出任何问题 — 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_score0–100 的启发式评分及原因
find_similar_changes同一仓库中语义相似的历史 PR
get_contributor_historyPR 数量、合并率、首次贡献日期
inspect_fileHEAD 上的原始文件内容
find_callers在补丁中搜索函数名的用法
find_related_tests可能覆盖已修改代码的测试文件
git_blame_summary某个文件路径的近期贡献者
compare_with任意 git ref 上的文件内容
record_decision记录批准 / 请求修改 / 跳过
summarize_session会话结束时的统计数据

使用自己的 AI 密钥

聊天功能支持以下任意免费层级服务提供商 — 点击页眉中的 ⌘ 按钮并粘贴密钥。密钥只会存储在浏览器的 localStorage 中,绝不会发送到服务端。

服务提供商密钥格式免费层级
Groqgsk_...是 — Llama 3.3 70B
Google GeminiAIza...是 — Gemini 2.0 Flash
Anthropicsk-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. 创建账号
服务用途免费套餐
NeonPostgres + pgvector512 MB
Vercel AI GatewayClaude + 嵌入$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。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。