Gerrit Review MCP Server について
Gerrit Review MCP Server は、Gerrit コードレビューシステムに接続する MCP サーバーで、AI アシスタントがコード変更とその詳細を確認できるようにします。Gerrit の変更レビューに AI を活用したいチーム向けです。
主な機能
- 01変更の詳細、ファイル一覧、diff の取得
- 022 つの patchset 間の差分比較
- 03ファイル単位の patchset 差分表示
- 04レビューメッセージ、投票ラベル、インラインコメントの投稿
- 05Gerrit の通知範囲の制御
- 06正規表現によるファイル除外
活用シーン
- 01AI アシスタントによる特定の Gerrit 変更のレビュー
- 02同一変更の patchset 間の修正内容の比較
- 03AI が生成したレビュー結果の Gerrit への投稿
MCP 対応
本プロジェクトは MCP サーバーとして動作し、変更の取得、patchset の比較、レビューの投稿を行うツールを MCP クライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Gerrit Review MCP Server
この MCP サーバーは Gerrit コードレビューシステムと連携し、シンプルなインターフェースを通じて、AI アシスタントがコード変更とその詳細をレビューできるようにします。
機能
コードレビュー向けに、効率化されたツールセットを提供します。
変更の詳細を取得
fetch_gerrit_change(change_id: str, patchset_number: Optional[str] = None)
- ファイルやパッチセットを含む、変更に関するすべての情報を取得します
- 変更された各ファイルの詳細な差分情報を表示します
- ファイルの変更、追加行、削除行を表示します
- 特定のパッチセットのレビューに対応します
- 以下を含む、変更に関する包括的な詳細を返します。
- プロジェクトとブランチの情報
- 作成者とレビュアーの詳細
- コメントとレビュー履歴
- 差分内容を含むファイルの変更
- 現在のパッチセットの情報
パッチセット間の差分を比較
fetch_patchset_diff(change_id: str, base_patchset: str, target_patchset: str, file_path: Optional[str] = None)
- 変更に含まれる2つのパッチセット間の差分を比較します
- 特定のファイル、または変更されたすべてのファイルの差分を表示します
- パッチセットの各バージョン間のコード変更を分析します
- レビューの反復を通じて変更の変遷を追跡します
レビューのフィードバックを送信
submit_gerrit_review(
change_id: str,
message: Optional[str] = None,
patchset_number: Optional[str] = None,
labels: Optional[Dict[str, int]] = None,
comments: Optional[List[Dict[str, Any]]] = None,
notify: str = "OWNER",
)
- 要約フィードバック、投票ラベル(例:
{"Code-Review": 1})、インラインコメントやファイル単位のコメントを投稿します - 特定のパッチセットを指定するか、最新のリビジョンをデフォルトとして使用します
- Gerrit の通知動作(
notify:NONE、OWNER、OWNER_REVIEWERS、ALL)を制御します - コメントのペイロードには、
path、message、および省略可能な Gerrit コメントフィールド(line、side、range、…)を含む辞書を指定できます
使用例
変更全体をレビューします。
# Fetch latest patchset of change 23824
change = fetch_gerrit_change("23824")
投票とインラインコメントを含むレビューのフィードバックを送信します。
submit_gerrit_review(
change_id="23824",
message="Looks good overall",
labels={"Code-Review": 1},
comments=[{"path": "src/app.py", "line": 42, "message": "Nice refactor."}],
patchset_number="2", # optional: target a specific patchset
notify="OWNER_REVIEWERS", # optional: adjust notification scope
)
特定のパッチセットを比較します。
# Compare differences between patchsets 1 and 2 for change 23824
diff = fetch_patchset_diff("23824", "1", "2")
特定のファイルの変更を表示します。
# Get diff for a specific file between patchsets
file_diff = fetch_patchset_diff("23824", "1", "2", "path/to/file.swift")
前提条件
- Python 3.10 以降(Python 3.11 を推奨)
- Gerrit への HTTP アクセス認証情報
- Gerrit の設定から生成した HTTP パスワード
mcp[cli]パッケージリポジトリへのアクセス(プライベートパッケージ)
インストール
Smithery 経由でのインストール
Smithery 経由で gerrit-code-review-mcp を Claude Desktop に自動的にインストールするには:
npx -y @smithery/cli install @cayirtepeomer/gerrit-code-review-mcp --client claude
手動インストール
- このリポジトリをクローンします。
git clone <repository-url>
cd gerrit-review-mcp
- 仮想環境を作成して有効化します。
# For macOS/Linux:
python -m venv .venv
source .venv/bin/activate
# For Windows:
python -m venv .venv
.venv\Scripts\activate
- 依存関係とともに、このパッケージを編集可能モードでインストールします。
pip install -e .
設定
- 環境変数を設定します。
export GERRIT_HOST="gerrit.example.com" # Your Gerrit server hostname (without https://)
export GERRIT_USER="your-username" # Your Gerrit account username
export GERRIT_HTTP_PASSWORD="your-http-password" # Generated HTTP password from Gerrit Settings > HTTP Credentials
export GERRIT_EXCLUDED_PATTERNS="\.pbxproj$,\.xcworkspace$,node_modules/" # Optional: regex patterns for files to exclude from reviews
# Optional TLS configuration for custom or self-signed certificates
export GERRIT_SSL_VERIFY="true" # Set to 'false' to skip TLS verification in constrained environments
export GERRIT_CA_BUNDLE="/path/to/ca.pem" # Optional custom CA bundle path used when verification stays enabled
# Note: If both are set, GERRIT_CA_BUNDLE takes precedence and verification stays enabled using that bundle.
または、.env ファイルを作成します。
GERRIT_HOST=gerrit.example.com
GERRIT_USER=your-username
GERRIT_HTTP_PASSWORD=your-http-password
GERRIT_EXCLUDED_PATTERNS=\.pbxproj$,\.xcworkspace$,node_modules/
GERRIT_SSL_VERIFY=true
GERRIT_CA_BUNDLE=/path/to/ca.pem
# If both are set, the CA bundle wins.
- HTTP パスワードを生成します。
- Gerrit のウェブインターフェースにログインします
- Settings > HTTP Credentials に移動します
- 新しいパスワードを生成します
- パスワードを環境変数または .env ファイルにコピーします
- ファイルの除外を設定します(省略可能)。
GERRIT_EXCLUDED_PATTERNSを設定して、変更レビューから特定のファイル形式を除外します- カンマ区切りの正規表現パターンを使用します(例:
\.pbxproj$,\.xcworkspace$,node_modules/) - デフォルトの除外設定を使用するには、空のままにするか、設定を解除します
- これにより、大きなファイルによる無限ループを防止できます
MCP の設定
この MCP サーバーを Cursor または RooCode で使用するには、設定を ~/.cursor/mcp.json または .roo/mcp.json ファイルに追加する必要があります。必要な設定は次のとおりです。
{
"mcpServers": {
"gerrit-review-mcp": {
"command": "/path/to/your/workspace/gerrit-code-review-mcp/.venv/bin/python",
"args": [
"/path/to/your/workspace/gerrit-code-review-mcp/server.py",
"--transport",
"stdio"
],
"cwd": "/path/to/your/workspace/gerrit-code-review-mcp",
"env": {
"PYTHONPATH": "/path/to/your/workspace/gerrit-code-review-mcp",
"VIRTUAL_ENV": "/path/to/your/workspace/gerrit-code-review-mcp/.venv",
"PATH": "/path/to/your/workspace/gerrit-code-review-mcp/.venv/bin:/usr/local/bin:/usr/bin:/bin"
},
"stdio": true
}
}
}
/path/to/your/workspace を実際のワークスペースのパスに置き換えてください。たとえば、プロジェクトが /Users/username/projects/gerrit-code-review-mcp にある場合は、そのパスを使用します。
設定内のすべてのパスが次を指していることを確認してください。
- 仮想環境の Python インタープリター
- プロジェクトの
server.pyファイル - 正しい作業ディレクトリ
- PATH 内の仮想環境の bin ディレクトリ
実装の詳細
このサーバーは Gerrit REST API を使用して Gerrit とやり取りし、次の機能を提供します。
- 高速で信頼性の高い変更情報の取得
- HTTP ダイジェスト認証による安全な認証
- さまざまな Gerrit REST エンドポイントへの対応
- 整理され、保守しやすいコードベース
- セキュアな通信のための HTTPS 暗号化
トラブルシューティング
接続に問題が発生した場合は、次の項目を確認してください。
- HTTP パスワードが
GERRIT_HTTP_PASSWORDに正しく設定されていることを確認します GERRIT_HOSTの設定を確認します(https://を付けず、ホスト名のみを指定します)- Gerrit サーバーで HTTPS アクセスが有効になっていることを確認します
- 認証済みの API 呼び出しには
/a/プレフィックスを付けて、curl で接続をテストします。curl -u "your-username:your-http-password" https://your-gerrit-server.com/a/changes/?q=status:open - アカウントに Gerrit へのアクセス権限があることを確認します
HTTP 認証情報の認証に関する問題
認証で問題が発生した場合は、Gerrit の設定で gitBasicAuthPolicy = HTTP(または HTTP_LDAP)が指定されていることを確認してください。
自己署名証明書の使用
- Gerrit が、必要な Subject Alternative Name(SAN)エントリを含まない内部発行の証明書を使用している場合、
GERRIT_SSL_VERIFY=falseを設定すると TLS 検証が無効になります。 - プライベート CA を信頼しながら検証を有効にするには、
GERRIT_CA_BUNDLE=/path/to/ca.pemでカスタム証明書バンドルを指定します。 - 検証を無効にする設定は、アクセスする Gerrit のホスト名と一致する SAN を含む証明書が発行されるまでの一時的な回避策として扱ってください。
ライセンス
このプロジェクトは MIT ライセンスの下でライセンスされています。
テスト
このプロジェクトには、クロスプラットフォームで信頼性の高いテストを実施するため、testcontainers-python を使用した包括的な Docker 統合テストが含まれています。
テストの実行
テストスイート全体を実行するには、次のコマンドを実行します。
# Install development dependencies
pip install -e ".[dev]"
# Run all tests
pytest
# Run only integration tests
pytest -m integration
# Run with verbose output
pytest -v
# Run with coverage
pytest --cov=. --cov-report=html
テスト環境変数
次の環境変数を使用して、テストの動作を設定できます。
TEST_STARTUP_TIMEOUT:コンテナーの起動タイムアウト(秒、デフォルト:30)TEST_LOGS_SETTLE_DELAY:ログを確認するまでの待機時間(秒、デフォルト:0)DOCKER_HOST:リモート Docker の Docker デーモンホスト(任意)
例:
# Run tests with custom timeouts
TEST_STARTUP_TIMEOUT=60 TEST_LOGS_SETTLE_DELAY=1 pytest tests/test_docker_integration.py -v
Docker の要件
Docker 統合テストには、次の要件があります。
- Docker デーモンが稼働しており、アクセスできること
- Docker ソケットが
/var/run/docker.sock(Linux/macOS)で利用可能であるか、DOCKER_HOSTが設定されていること - コンテナーのビルドと実行に十分な権限があること
Docker が利用できない場合、テストは自動的にスキップされます。
CI/CD との統合
CI/CD 環境では、次の点を確認してください。
- Docker-in-Docker(DinD)サービスが利用できること
- Docker ソケットがマウントされているか、
DOCKER_HOSTが設定されていること - 時間のかかる環境に対応した十分なタイムアウト値が設定されていること
コントリビューション
コントリビューションを歓迎します。次の手順に従ってください。
- リポジトリをフォークします
- 機能ブランチを作成します
- 変更を加えます
- すべてが正常に動作することを確認するため、テストスイートを実行します
- プルリクエストを送信します
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。