Gerrit Code Review について
Gerrit Code Reviewは、Gerrit 3.13以降のレビューを扱うstdio方式のMCPサーバーです。書き込み機能はオペレーターが明示的に有効化し、デフォルトでは読み取り専用かつ本人の変更に制限されます。任意でレビュー通知をセッションに送信できます。
主な機能
- 01変更の検索とレビュー詳細の確認
- 02ファイル、差分、コメントスレッドの読み取り
- 03有効化時のコメント投稿、投票、状態変更
- 04プロジェクトとツールによる操作制限
- 05任意のレビューアクティビティ通知の購読
活用シーン
- 01Gerritの変更をレビューしファイル差分を確認
- 02許可された変更へのコメントや投票
- 03セッションで購読中の変更の動きを追跡
MCP 対応
stdio経由で、機能ごとに権限を制御したGerritレビュー用MCPツールを公開します。レビュー通知を有効にすると、購読した変更の動きを対応セッションに送信できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm -e GERRIT_URL -e GERRIT_USERNAME -e GERRIT_TOKEN -e GERRIT_MCP_GROUPS -e GERRIT_MCP_PROJECTS -e GERRIT_MCP_OWN_CHANGES_ONLY -e GERRIT_MCP_REVIEW_NOTIFICATIONS -e GERRIT_MCP_REVIEW_NOTIFICATIONS_POLL_INTERVAL -e GERRIT_MCP_REVIEW_NOTIFICATIONS_INCLUDE_OWN -e GERRIT_MCP_REVIEW_NOTIFICATIONS_EXCLUDE_ACCOUNTS -e GERRIT_MCP_REVIEW_NOTIFICATIONS_EXCLUDE_PATTERNS ghcr.io/gaijinentertainment/go-gerrit-mcp:1.1.3GERRIT_URLBase URL of the Gerrit instanceGERRIT_USERNAMEAccount username for HTTP authenticationGERRIT_TOKENシークレットHTTP password or token of the accountGERRIT_MCP_GROUPSComma-separated capability groups to enable: read, comment, transitionGERRIT_MCP_PROJECTSComma-separated Gerrit project allowlist confining every operationGERRIT_MCP_OWN_CHANGES_ONLYRefuse trail-leaving operations on changes not owned by the authenticated accountGERRIT_MCP_REVIEW_NOTIFICATIONSEnable review notifications: poll Gerrit for activity on subscribed changes and push it into the agent's session (requires a client with channel support)GERRIT_MCP_REVIEW_NOTIFICATIONS_POLL_INTERVALPoll cadence for subscribed changes, as a Go durationGERRIT_MCP_REVIEW_NOTIFICATIONS_INCLUDE_OWNKeep the authenticated account's own activity in review notificationsGERRIT_MCP_REVIEW_NOTIFICATIONS_EXCLUDE_ACCOUNTSComma-separated usernames or numeric account IDs whose activity never becomes a review notificationGERRIT_MCP_REVIEW_NOTIFICATIONS_EXCLUDE_PATTERNSComma-separated regular expressions; matching message or comment text never becomes a review notificationローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/gaijinentertainment/go-gerrit-mcp:1.1.3stdioツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
go-gerrit-mcp
Gerrit のコードレビュー操作を、機能ごとに有効化できるツールとして提供する MCP(Model Context Protocol)サーバーです。AI エージェントは変更を検索・閲覧し、レビューコメントを投稿し、投票し、変更状態を遷移させることができます。書き込み機能を有効にするには、オペレーターによる明示的なオプトインが必要です。
- トランスポート:stdio
- 対象プラットフォーム:Gerrit 3.13 以降。HTTP 認証情報で認証します
- 出力:モデルによる読み取りを想定した、意味タグ付きテキストの llmxml(出力形式を参照)
安全性の方針
次の 2 つのデフォルト設定で、この方針を実現しています。
- 設定なしの場合は
readグループのみが公開されます。--groupsで有効にしない限り、書き込み機能は公開されません。 - 自分が所有する変更のみを対象とする制限は、デフォルトで有効です。書き込みグループを有効にしても、認証済みアカウントが所有していない変更に対する、痕跡が残る操作(コメント、投票、状態変更など、他の人にも見える操作)は、オペレーターが明示的に
--own-changes-only=falseを指定するまで拒否されます。
エージェントが同僚の変更に望ましくない痕跡を残すことは、外部から見える失敗です。一方、機能が利用できないことは、ローカルで把握できる不便です。デフォルト設定は、この違いを考慮して選ばれています。必要な場合は、意図的に範囲を広げてください。
# agent may comment and vote on anyone's changes, but only within two projects
go-gerrit-mcp --groups read,comment,transition --own-changes-only=false --projects core,infra
インストール
バイナリリリース:使用するプラットフォーム向けのバイナリを
GitHub Releasesからダウンロードし、実行可能にして、PATH に配置します。
# macOS on Apple silicon; substitute <os>_<arch> from: linux, darwin, windows x amd64, arm64
curl -Lo /usr/local/bin/go-gerrit-mcp \
https://github.com/GaijinEntertainment/go-gerrit-mcp/releases/latest/download/go-gerrit-mcp_darwin_arm64
chmod +x /usr/local/bin/go-gerrit-mcp
Docker:
docker pull ghcr.io/gaijinentertainment/go-gerrit-mcp:latest
go install:
go install dev.gaijin.team/go/go-gerrit-mcp/cmd/go-gerrit-mcp@latest
クイックスタート
サーバーは接続情報を環境変数からのみ読み取ります。認証情報がフラグを介して渡されることはありません。
| 変数 | 意味 |
|---|---|
GERRIT_URL | Gerrit インスタンスのベース URL |
GERRIT_USERNAME | HTTP Basic 認証に使用するアカウントのユーザー名 |
GERRIT_TOKEN | ユーザー名に対応する HTTP 認証情報 |
Gerrit の Settings → HTTP Credentials で認証情報を生成します(HTTP パスワード、または認証トークンを発行するインスタンスではそのトークン)。3 つの変数すべてが必須です。不足している変数がある場合、サーバーはその名前を示すエラーを出して終了します。
Claude Code
claude mcp add gerrit \
--env GERRIT_URL=https://gerrit.example.com \
--env GERRIT_USERNAME=your-username \
--env GERRIT_TOKEN=your-http-credential \
-- go-gerrit-mcp
任意の MCP クライアント(JSON 設定)
{
"mcpServers": {
"gerrit": {
"command": "go-gerrit-mcp",
"args": ["--groups", "read"],
"env": {
"GERRIT_URL": "https://gerrit.example.com",
"GERRIT_USERNAME": "your-username",
"GERRIT_TOKEN": "your-http-credential"
}
}
}
}
Docker
{
"mcpServers": {
"gerrit": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "GERRIT_URL", "-e", "GERRIT_USERNAME", "-e", "GERRIT_TOKEN",
"ghcr.io/gaijinentertainment/go-gerrit-mcp:latest",
"--groups", "read"
],
"env": {
"GERRIT_URL": "https://gerrit.example.com",
"GERRIT_USERNAME": "your-username",
"GERRIT_TOKEN": "your-http-credential"
}
}
}
}
Claude Code でのプロジェクトごとの設定
サーバーに必要な情報はすべて環境変数から読み取られます。前述の接続情報の変数に加えて、各フラグに対応する GERRIT_MCP_* 変数も必要です(設定リファレンスを参照)。MCP サーバーのプロセスはセッションの環境変数を引き継ぐため、Claude Code ではユーザーレベルで一度登録するだけで、リポジトリごとに異なる Gerrit インスタンスや認証情報を使う設定が可能です。
登録情報は ~/.claude.json に保存します。env ブロックは指定しません。
{
"mcpServers": {
"gerrit": {
"command": "go-gerrit-mcp"
}
}
}
<project>/.claude/settings.local.json にプロジェクトの環境変数を設定します。すべての env エントリがサーバープロセスに渡されます。
{
"env": {
"GERRIT_URL": "https://gerrit.example.com",
"GERRIT_USERNAME": "your-username",
"GERRIT_TOKEN": "your-http-credential",
"GERRIT_MCP_GROUPS": "read,comment",
"GERRIT_MCP_PROJECTS": "core,infra"
}
}
複数のプロジェクトで共通する値は、1 つ下の階層にある ~/.claude/settings.json に設定できます。設定ファイルはマージされ、優先順位は .claude/settings.local.json、.claude/settings.json、~/.claude/settings.json の順です。そのため、プロジェクトでは差分のみを指定できます。いずれの階層でも設定されていない値は、サーバー独自のデフォルト(読み取り専用、自分の変更のみ)に従います。
登録の env ブロックを空のままにするのには理由があります。ここで指定した変数は、すべての設定階層にある値より優先されます。また、参照を使っても回避できません。${VAR} は claude を起動したシェルの環境変数からのみ展開され、設定ファイルからは展開されません。解決されない値は、文字列のままサーバーに渡されます。
ほかの MCP クライアントも同様に起動時の環境変数を引き継ぐため、direnvなどのディレクトリ単位のツールを使えば、クライアント側の対応なしで同じ設定を実現できます。
機能グループ
機能は起動時に、カンマ区切りのリストである --groups によって選択します。各グループは独立しており、組み合わせて使用できます。
権限の階層はありません。書き込み可能な各グループには、そのグループ単独で動作するために必要な最小限の変更読み取り機能が含まれ、有効にしたグループの機能が統合されます。
| グループ | ツール |
|---|---|
read | search_changes, get_change, list_change_files, get_file_diff, get_change_comments |
comment | get_change, get_change_comments, post_comments |
transition | get_change, set_vote, transition_change |
ツール
search_changes:Gerrit の変更検索構文を使用して、ページネーション付きで変更を検索します。get_change:レビューに関する詳細情報を含む、1 件の変更を取得します。ステータス、オーナー、投票付きラベル、現在のリビジョン、メッセージが含まれます。list_change_files:リビジョンで変更されたファイルを、ファイルごとの変更統計とともに一覧表示します。get_file_diff:リビジョン内の 1 つのファイルの差分を取得します。get_change_comments:解決状態とコメント ID を含む、変更に関するコメントスレッドを取得します。デフォルトでは未解決のスレッドのみを返します。status=allは全履歴を、status=resolvedは解決済みのスレッドを取得します。post_comments:1 回の呼び出しでレビューを投稿します。トップレベルのメッセージに加えて、インライン、範囲指定、ファイルレベルのコメントや返信を任意で追加できます。返信はget_change_commentsで取得したコメント ID に紐づけます。resolvedはスレッドの状態を切り替えます。set_vote:任意のメッセージを添えてラベルへの投票(例:Code-Review)を設定します。値0を指定すると、自分の投票を取り消します。transition_change:変更の状態をsubmit、abandon、restore、wip、readyに変更します。任意でメッセージを指定できます(submit では指定できません)。Gerrit による拒否(ブロックされた submit、マージ済みの変更の restore など)は、原文のまま報告されます。
レビュー通知
レビューアクティビティを通知するオプトイン型プッシュチャネルです。エージェントは subscribe_change で変更に登録します。それ以降、新しい変更メッセージ、投票、インラインコメントスレッド、ステータス遷移が、review_activity ブロックとしてセッションに自動的に届きます。ペイロードには読み取りツールが出力するものと同じ llmxml の語彙が使われ、アクティビティ全体が含まれるため、後から取得する必要はありません。unsubscribe_change を使うと、登録を途中で終了できます。変更がマージまたは放棄されると、その変更の登録は終了し、その旨を伝える最終通知が届きます。また、変更が読み取れなくなった場合(削除された、またはアカウントから見えなくなった場合)も同様に終了し、理由が明記されます。
登録はセッションごとに行われ、メモリ内にのみ保持されます。Gerrit インスタンスに記録は残らず、セッションの終了とともに消えます。サーバーの再起動後は、エージェントが再登録します。この機能を無効にした場合(デフォルト)、サーバーは機能追加前とバイト単位で同一であり、ツールや機能は追加されず、バックグラウンドでのポーリングも行われません。
有効にするには、両側で設定が必要です。
- サーバー側:
--review-notifications=true(またはその環境変数)を指定します。サーバーは両方の登録ツールを登録し、--review-notifications-poll-interval(デフォルトは60s)の間隔で Gerrit をポーリングします。毎回のポーリングでは、登録中のすべての変更を対象に一括クエリを 1 回実行し、実際に更新された変更についてのみ詳細を取得します。 - クライアント側:通知の配信には Claude Code channels の契約を利用します(リサーチプレビュー版、Claude Code 2.1.80 以降)。
mcpServersの下に通常の方法で登録されたサーバーの場合、claude --dangerously-load-development-channels server:<name>を指定して起動します。ここで<name>は登録キーであり、挿入される<channel>ブロックのsource属性になります。許可リストに登録されたチャネルプラグインは、代わりにclaude --channelsで読み込みます。
リサーチプレビューに関する注意事項:組織のポリシーでチャネル全体を無効にできること、フラグの構文が Claude Code のリリース間で変更される可能性があること、チャネルをサポートしていないクライアントではイベントが通知なしに破棄され、その場合はどちら側にもエラーは発生せず、サーバーは機能を無効にした場合とまったく同じように動作することにご注意ください。
ノイズの制御は運用者が設定します。サーバー独自のヒューリスティックは適用せず、メッセージタグによるフィルタリングも行いません。ボットの判定が、エージェントの待ち望む結果そのものであることも多いためです。
- 認証済みアカウント自身のアクティビティはデフォルトで除外されます(
--review-notifications-include-ownを指定すると含められます)。 --review-notifications-exclude-accountsを指定すると、ユーザー名または数値 ID によってアカウントからの通知を抑制できます。--review-notifications-exclude-patternsを指定すると、メッセージまたはコメントのテキストが正規表現に一致するイベントを除外できます。無効なパターンが指定されると、そのパターン名を示すエラーが発生し、起動に失敗します。
すべてのフラグには GERRIT_MCP_* 形式の環境変数が用意されており、設定の他の項目と同じ階層化ルールに従います(Claude Code のプロジェクトごとの設定を参照)。そのため、プロジェクト独自の設定ファイルで通知を有効にし、除外項目を指定できます。
設定リファレンス
動作は CLI フラグで設定します。各フラグには環境変数が対応しているため、バイナリと Docker のどちらを実行する場合でも同じ設定方法を使用できます。優先順位は、フラグ、対応する環境変数、デフォルト値の順です。
| フラグ | 対応する環境変数 | デフォルト | 説明 |
|---|---|---|---|
--groups | GERRIT_MCP_GROUPS | read | 機能グループをカンマ区切りで指定します:read、comment、transition |
--projects | GERRIT_MCP_PROJECTS | (空) | すべての操作(読み取りを含む)を制限するプロジェクトの許可リスト |
--own-changes-only | GERRIT_MCP_OWN_CHANGES_ONLY | true | 認証済みアカウントが所有していない変更に対する、取り消し不能な操作を拒否します |
--include-tools | GERRIT_MCP_INCLUDE_TOOLS | (空) | グループに基づいて選択されたツールのうち、指定したものだけを残します |
--exclude-tools | GERRIT_MCP_EXCLUDE_TOOLS | (空) | グループに基づいて選択されたツールから、指定したものを除外します |
--review-notifications | GERRIT_MCP_REVIEW_NOTIFICATIONS | false | レビュー通知を有効にします |
--review-notifications-poll-interval | GERRIT_MCP_REVIEW_NOTIFICATIONS_POLL_INTERVAL | 60s | 購読中の変更をポーリングする間隔(Go の期間形式) |
--review-notifications-include-own | GERRIT_MCP_REVIEW_NOTIFICATIONS_INCLUDE_OWN | false | 認証済みアカウント自身のアクティビティを通知に含めます |
--review-notifications-exclude-accounts | GERRIT_MCP_REVIEW_NOTIFICATIONS_EXCLUDE_ACCOUNTS | (空) | アクティビティを通知にしないアカウント(ユーザー名または数値 ID) |
--review-notifications-exclude-patterns | GERRIT_MCP_REVIEW_NOTIFICATIONS_EXCLUDE_PATTERNS | (空) | カンマ区切りの正規表現です。一致するメッセージやコメントのテキストは通知になりません |
注意:
--own-changes-onlyには明示的なブール値が必要です:--own-changes-only=false。値を指定せずにフラグだけを記述すると、設定エラーになります。- プロジェクトの範囲指定(
--projects)はサーバー側で適用されます。エージェントが作成した内容にかかわらず、すべての変更クエリにプロジェクト条件が追加され、対象範囲外の変更に対する直接操作は拒否されます。 - ツールフィルターで対象を広げることはできません。
--exclude-toolsはグループで選択されたツールを除外し、--include-toolsはそのうち指定したサブセットだけを残します。有効なグループに含まれないツールをフィルターで有効にすることはできません。また、除外指定は包含指定より優先されます。既知のツール名が含まれていないフィルター項目があると、起動時に失敗するため、設定ミスがすぐに判明します。 - 設定エラーはまとめて報告されます。サーバーはすべての問題を一度に報告してから、ゼロ以外の終了コードで終了します。
出力形式
すべてのツールは、LLM が処理しやすい XML のサブセットである llmxml で応答します。これは、モデルが読み取ることを想定した、行単位で構造化され、意味タグが付けられたテキストです。属性にはメタデータが、要素の本体には内容が格納されます。
<changes query="status:open owner:self" start="0" count="1" more="false">
<change number="12345" project="core" branch="main" status="NEW" owner="Jane Doe (jdoe)" updated="2026-07-10T20:48:32Z">fix scanner initialization</change>
</changes>
XML 宣言も名前空間もスキーマもなく、この形式から何かを解析して戻すことはできません。機械可読な Gerrit データが必要な場合は、Gerrit の REST API を直接使用してください。この形式はモデルによる利用を目的としています。
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。