Swipr について
SwiPR はスワイプ式の GitHub プルリクエストレビュー画面と、エージェントに PR のコンテキストを提供する MCP サーバーを備えています。ヒューリスティックなリスクスコアに加え、要約、類似変更、貢献者の履歴、テスト検索を扱います。
主な機能
- 01スワイプ式 PR レビュー
- 02ヒューリスティックなリスクスコア
- 03AI 要約と PR コンテキスト
- 04類似変更の検索
- 05貢献者履歴とテスト検索
- 06レビュー判断の記録
活用シーン
- 01未処理の GitHub プルリクエストの選別
- 02マージ前のリスクと関連変更の確認
- 03変更ファイルを対象とするテストの検索
- 04Claude Desktop または Cursor から PR の情報を確認
MCP 対応
MCP サーバーは、PR データ、リスクスコア、関連変更、貢献者履歴、ファイル、テストを読み取る 12 個のツールを公開し、レビュー判断とセッション要約の記録にも対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
SwiPR
AI コンテキストを活用し、スワイプで GitHub PR をレビューできます。Claude MCP プラグインとして動作します。
ライブデモを試す → · Claude Desktop に追加 ↓ · smithery.ai に掲載
このプロジェクトの背景
Resend CEO の Zeno Rocha 氏が X で述べています。
「PR を作成するコストはゼロになりました。今では、限りある(そして非常に貴重な)リソースである注意を待つドラフト PR が山ほどあります。ボトルネックはもはや作成ではなく、レビューだということです。」 — 2026年2月
「以前、メインリポジトリで開いている PR は、どの日も平均して約20〜40件でした。今では、平均して約130〜200件が開いています。」 — 2026年5月
PR レビューの課題はコンテキストにあります。メンテナーが優先順位を判断する場合でも、AI エージェントがマージするかどうかを決める場合でも、問われることは同じです。これを安全にリリースできるか? 適切に答えるには、変更行を読むだけでなく、リスクレベル、コントリビューターの履歴、過去の類似変更、差分をカバーするテストを把握する必要があります。
SwiPR はこのコンテキストを、人間向けのスワイプ UI と、エージェント向けの MCP サーバーとして提供します。
仕組み
- 公開 GitHub リポジトリを貼り付けると、SwiPR がオープン PR を取得し、埋め込みベクトルとともに保存します
- 右にスワイプして承認、左にスワイプして変更をリクエスト、下にスワイプしてスキップします。または
J/F/Spaceを使います - 右側のパネルには、リスクスコア、AI による要約、過去の類似 PR、コントリビューターの履歴が表示されます
- 「Why is this risky?」、「Show me callers」、「What tests cover this?」 をクリックすると、必要に応じて詳しいコンテキストを確認できます
- チャットで何でも質問できます。AI は完全な差分とコードベースのコンテキストを利用できます
AI コンテキストは PR ごとにキャッシュされるため、カードを表示するたびに 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 を編集してください。
セルフホスト
3 つのサービスが必要です。いずれも無料プランがあります。
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 1 件あたり約 100 KB を使用します。アップグレードが必要になる前に、約 5,000 件の PR、または中規模リポジトリ 40~50 個を扱えます。取り込み対象は、リポジトリごとにオープン中の PR 100 件までです。
技術スタック
- 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 サーバー
コントリビューション
Issue と PR を歓迎します。
- 技術スタックは Next.js App Router + Drizzle + Neon + Vercel AI SDK です。それ以外の抽象化は使用しません。
- リスクスコアは
lib/scoring.tsで計算します。ヒューリスティックの改善を特に歓迎します。 - GitHub OAuth や PR の実際の投稿機能は追加しないでください。意図的に読み取り専用にしています。
- PR を作成する前に
pnpm buildを実行してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。