Skip to main content
Glama
AmaimaKhalidSethi

Multi-Server FastMCP PR Reviewer

マルチサーバー FastMCP PR レビュアー

ゼロコスト、マルチサーバーの Model Context Protocol (MCP) スイートで、統合 ゲートウェイと LangGraph による自動 PR レビューエージェントを備えています。 使用するすべてのツール/API は無料枠で利用可能です(GitHub PAT、Groq LLM)。

アーキテクチャ

Claude Desktop / Agent
        |
        v
  FastMCP Gateway  (namespaces: code., gh., doc. — dot-separated per MCP tool-naming spec)
   /      |       \
  v       v        v
Code    GitHub   Documentation
Intel   Server   Server (Groq)
(AST+Radon)(PyGithub)
   \       |       /
    Shared Security & Audit Layer
    (API key auth, SQLite WAL, rate limiting)

Related MCP server: orchestrator-mcp

プロジェクト構成

mcp-pr-reviewer/
├── core/
│   └── security.py        # auth + rate limit + SQLite audit decorator
├── servers/
│   ├── code_server.py      # AST/radon static analysis (no external API)
│   ├── github_server.py    # PyGithub-backed PR/issue/commit tools
│   └── doc_server.py       # Groq-backed docstring/README/API doc generation
├── gateway/
│   └── gateway.py          # unifies all three servers under code:/gh:/doc: namespaces
├── agent/
│   └── workflow.py         # LangGraph PR-review pipeline (fetch → analyze → doc → publish)
├── data/                    # SQLite audit_log.db lives here (gitignored)
├── docker-compose.yml
├── Dockerfile
├── requirements.txt
├── .env.example
└── claude_desktop_config.example.json

セットアップ

python -m venv .venv
source .venv/bin/activate        # Windows: .venv\Scripts\activate
pip install -r requirements.txt

cp .env.example .env
# edit .env with your real MCP_API_KEY, GITHUB_TOKEN, GROQ_API_KEY

ローカルで何かを実行する前に環境変数を読み込んでください。例:

export $(grep -v '^#' .env | xargs)   # macOS/Linux

実行方法

個別サーバー(stdio、ローカルテスト用)

python servers/code_server.py
python servers/github_server.py
python servers/doc_server.py

ゲートウェイ

fastmcp run gateway/gateway.py:gateway

Docker

docker compose up --build

Claude Desktop との統合

claude_desktop_config.example.json を Claude Desktop の設定ファイル (claude_desktop_config.json)にコピーし、gateway/gateway.py への絶対パスを修正し、 実際の認証情報を入力してください。Claude Desktop を再起動すると反映されます。

テストチェックリスト

1. スキーマ検証

fastmcp inspect servers/code_server.py
fastmcp inspect servers/github_server.py
fastmcp inspect servers/doc_server.py

2. セキュリティ / 監査検証

# Should raise 401 Unauthorized
CLIENT_API_KEY=wrong_key python -c "from servers.code_server import analyse_code; analyse_code('x = 1')"

# Inspect the WAL SQLite audit log
sqlite3 data/audit_log.db "SELECT * FROM access_log ORDER BY id DESC LIMIT 5;"

3. エンドツーエンドの PR レビュー

python -c "
import asyncio
from agent.workflow import app

async def run():
    result = await app.ainvoke({
        'repo': 'your-username/your-repo',
        'pr_number': 1
    })
    print('Review published:', result['issue_url'])

asyncio.run(run())
"

本番環境で使用する前に確認すべき注意事項

  • core/security.py の bucket は単一プロセス全体の TokenBucket です — サーバー内のすべてのツールが同じ 60/分のバジェットを共有します。より細かい制限が必要な場合は、 ツールごとまたはクライアントごとのバケットに分割してください。

  • secure_tool は FastAPI の HTTPException を発生させますが、これは 実行している FastMCP トランスポートが実際に FastAPI/ASGI の背後にある場合にのみ、 HTTP ステータスコードに適切にマッピングされます。プレーンな stdio でサーバーを実行する場合は、 MCP レイヤーでこれをキャッチするか、トランスポートに適した例外に置き換えてください。

  • MCP_API_KEY、GITHUB_TOKEN、GROQ_API_KEY は .env から削除し、 ローカル以外のデプロイでは実際のシークレットマネージャーに移行してください — .env は開発環境のみで問題ありません。

  • GitHub のコード検索 API はコア API よりもはるかに低いレート制限があります(30 req/min 対 5,000 req/hr)— search_repo_code は負荷がかかると最初にこの制限に達します。

Related MCP Connectors

Related MCP Servers