私は個人開発者として、複数の OSS プロジェクトを GitHub で公開しています。先月、あるリポジトリで深夜 2 時にマージした Pull Request が、翌朝のコードレビューで「SQL インジェクションの脆弱性がある」と指摘され、緊急ロールバックを行う事態が発生しました。手動レビューには限界がある――そう痛感したのをきっかけに、Claude Code と MCP(Model Context Protocol)ツールチェーンを組み合わせた自動コードレビュー Agent を構築しました。本記事では、その設計と実装、そして 4 週間の実運用で得られた知見を共有します。

なぜ Claude Code + MCP なのか

従来の CI 上の lint ツール(ESLint、ruff など)は構文や既知のパターンしか検出できず、ビジネスロジックの脆弱性や設計上の問題までは踏み込めません。Claude Code は LLM として意味理解が可能で、MCP サーバー経由で GitHub、ファイルシステム、テストランナーに接続できます。これにより「リポジトリ全体を把握した文脈あるレビュー」が実現します。

そして重要なのが API コストです。本記事では HolySheep AI(今すぐ登録)の OpenAI 互換エンドポイントを経由します。HolySheep は公式 Anthropic API(Claude Sonnet 4.5 で入力 $3 / 出力 $15 per MTok)に比べ、¥1 = $1 のレート(公式の ¥7.3 = $1 と比較して 約 85% コスト削減)、WeChat Pay / Alipay 対応50ms 以下の低レイテンシを特長とし、登録時に無料クレジットが付与されます。Anthropic 公式 api.anthropic.com を直接叩く必要がないため、Anthropic アカウント不要で日本円建ての決済だけで運用できます。

アーキテクチャ概要

Step 1: HolySheep API キーの取得と Claude Code 設定

まず HolySheep AI に登録し、API キーを取得します。次に Claude Code の設定ファイルを編集し、Anthropic 公式の代わりに HolySheep のエンドポイントを向くようにします。

# ~/.claude/settings.json
{
  "env": {
    "ANTHROPIC_BASE_URL": "https://api.holysheep.ai/v1",
    "ANTHROPIC_AUTH_TOKEN": "YOUR_HOLYSHEEP_API_KEY",
    "ANTHROPIC_MODEL": "claude-sonnet-4-5"
  }
}

この設定だけで、Claude Code は内部的に HolySheep の OpenAI 互換エンドポイントを叩くようになります。API キーは YOUR_HOLYSHEEP_API_KEY のままコミットせず、GitHub Secrets に HOLYSHEEP_API_KEY として登録してください。

Step 2: MCP サーバーの実装

MCP サーバーは Python(公式 SDK)で実装します。GitHub の PR 差分を取得し、ファイル単位のレビューコメントを返すツールを 3 つ定義します。

# mcp_review_server.py
import os
import subprocess
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("code-review-agent")

@mcp.tool()
def fetch_pr_diff(repo: str, pr_number: int) -> str:
    """指定 PR の unified diff を取得する"""
    token = os.environ["GITHUB_TOKEN"]
    cmd = [
        "gh", "pr", "diff", str(pr_number),
        "--repo", repo,
        "--", "--unified=3"
    ]
    env = os.environ.copy()
    env["GH_TOKEN"] = token
    result = subprocess.run(cmd, capture_output=True, text=True, env=env)
    return result.stdout

@mcp.tool()
def run_static_analysis(file_path: str) -> str:
    """Python ファイルに対して ruff + bandit を実行"""
    out_ruff = subprocess.run(
        ["ruff", "check", file_path], capture_output=True, text=True
    )
    out_bandit = subprocess.run(
        ["bandit", "-q", file_path], capture_output=True, text=True
    )
    return f"=== ruff ===\n{out_ruff.stdout}\n=== bandit ===\n{out_bandit.stdout}"

@mcp.tool()
def post_review_comment(repo: str, pr_number: int, body: str) -> str:
    """PR にレビューコメントを投稿"""
    token = os.environ["GITHUB_TOKEN"]
    cmd = [
        "gh", "pr", "review", str(pr_number),
        "--repo", repo, "--comment", "--body", body
    ]
    env = os.environ.copy()
    env["GH_TOKEN"] = token
    result = subprocess.run(cmd, capture_output=True, text=True, env=env)
    return f"posted: {result.returncode == 0}"

if __name__ == "__main__":
    mcp.run(transport="stdio")

このサーバーを mcp_review_server.py として保存し、Claude Code の MCP 設定に登録します。

# ~/.claude/mcp_servers.json
{
  "mcpServers": {
    "review-agent": {
      "command": "python3",
      "args": ["/home/runner/work/repo/repo/mcp_review_server.py"],
      "env": {
        "GITHUB_TOKEN": "${GITHUB_TOKEN}"
      }
    }
  }
}

Step 3: GitHub Actions ワークフロー

PR がオープンされたタイミングで Agent を起動し、レビュー結果をコメントとして投稿します。

# .github/workflows/ai-review.yml
name: AI Code Review
on:
  pull_request:
    types: [opened, synchronize]

jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: "3.11"
      - run: pip install mcp ruff bandit gh-cli
      - name: Run Claude Code Review
        env:
          ANTHROPIC_BASE_URL: https://api.holysheep.ai/v1
          ANTHROPIC_AUTH_TOKEN: ${{ secrets.HOLYSHEEP_API_KEY }}
          ANTHROPIC_MODEL: claude-sonnet-4-5
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          claude -p "PR #${{ github.event.pull_request.number }} を review-agent MCP サーバーを使ってレビューしてください。fetch_pr_diff で差分を取得し、run_static_analysis で静的解析を実行し、重大度を High/Medium/Low で分類して post_review_comment で日本語のレビューコメントを投稿してください。"

実運用での性能とコスト

実際に 4 週間運用した結果が以下のとおりです(東京リージョンから計測)。