mcpField
R
ReviewGuard

ReviewGuard

ローカル
github.comバージョン管理411 週間前に更新

ReviewGuard について

ReviewGuardは、GitHub PRのAI支援レビュー向けMCPサーバーです。人間のレビュアーや自動レビューBotを対象に、書き込みトークンをサーバー側で保持し、起動時の設定で投稿などの操作を制限します。

主な機能

  1. 01PRの議論とレビュー情報の取得
  2. 02保留中の下書きコメントの作成・編集
  3. 03レビュー投稿はデフォルトで無効
  4. 04制限付きレビュー投稿の任意有効化
  5. 05操作対象を単一PRに限定

活用シーン

  1. 01人間が確認するインラインコメントの下書き
  2. 02限定操作でレビューを投稿するBotの運用
  3. 03自動レビュー対象を特定のPRに限定

MCP 対応

MCPツールとしてGitHub PRレビュー操作を公開します。GitHubトークンはサーバー側で保持され、使用可能な操作は起動時に決まります。レビュー投稿は明示的に有効化しない限り利用できません。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"com-eclipsesource-review-guard": {
"command": "npx",
"args": [
"-y",
"@eclipsesource/review-guard-mcp"
],
"env": {
"GITHUB_TOKEN": "<GITHUB_TOKEN>"
}
}
}
}
起動コマンドnpx -y @eclipsesource/review-guard-mcp
設定が必要な環境変数
GITHUB_TOKENシークレットGitHub token with pull request read and write access. Can be left unset if the GitHub CLI is authenticated, because the server then falls back to gh auth token.

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@eclipsesource/review-guard-mcp0.3.0

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

ReviewGuard MCP

CI npm License: MIT

AI エージェントが安全境界の内側で GitHub PR レビューを行えるようにする MCP サーバー(review-guard-mcp)です。サーバーは書き込み権限のある GitHub トークンを保持し、レビュー操作のみを公開するため、エージェントがトークンを目にすることはありません。それらの操作で許可される内容はサーバーの起動時に固定され、エージェントが変更することはできません。

理由

レビューコメントの作成には書き込み権限のある GitHub トークンが必要ですが、そのトークンをエージェントに直接渡すと、承認の送信、変更のリクエスト、他人のレビュースレッドのクローズ、無関係なリポジトリへのアクセスなど、誤操作やプロンプトインジェクションによるアクションのリスクがあります。このサーバーはその間に入り、トークンの権限を、選択したレビュー機能だけに絞ります。

モード

サーバーでは、2 つのモードを利用できます。

Pending モード(デフォルト)

エージェントは PR のディスカッションのコンテキストを読み取り、保留中(下書き)のレビューを作成します。人間が PR を開いて下書きコメントを確認し、自分でレビューを送信するまでは、エージェントが書き込んだ内容は誰にも表示されません。送信は構造上できないようになっています。submit ツールは登録されず、基盤となるクライアントもすべての送信アクションを拒否します。

エージェントが人間のレビュアーを支援する場合に使用します。たとえば、エージェントがインラインコメントの下書きを作成し、人間が正式なレビュアーであり続ける IDE 環境(Claude Code、Codex、Theia)などです。

Submit モード(オプトイン、--allow-submit)

--allow-submit を指定して起動すると、サーバーに submit ツールが追加登録され、エージェントがレビューを直接投稿できるようになります。セーフガードは引き続き有効です。

  • 許可するレビューアクションは、指定したセットに制限されます(たとえば、承認なしのコメントのみ)。
  • 送信されるすべてのレビューには、サーバーで固定設定された免責事項が先頭に付加されます。エージェントはこれを変更または削除できません。
  • オプションで --allow-resolve を指定すると、エージェントが自身のレビュースレッドを解決できるようになります(他人のスレッドは解決できません)。また、--repo/--pr を指定すると、サーバーの対象を単一のプルリクエストに固定できます。

無人の自律型レビューボットに使用します。たとえば、ボットアカウントへのレビュー依頼があるすべての PR を監視し、実際のレビュー(コメントのみ)を投稿する監視ツールなどです。

インストール

Node.js >= 22 が必要です。

グローバルにインストールします(review-guard-mcp を PATH から利用できるようになります)。

npm install -g @eclipsesource/review-guard-mcp

または、特定のバージョンを固定します。

npm install -g @eclipsesource/review-guard-mcp@<version>

このサーバーは MCP Registry にも com.eclipsesource/review-guard として登録されています。そのため、レジストリを参照するクライアントは、そこから見つけて インストールできます。この登録情報はメタデータのみで、接続先となるホスト型インスタンスはありません。 上記の npm パッケージについて説明するものであり、クライアントがそのパッケージをインストールして、 デフォルトの pending モードでローカル実行します。

ソースから

npm >= 12 と、npm がサポートする Node バージョンが必要です(CONTRIBUTING.md を参照)。

git clone https://github.com/eclipsesource/review-guard.git
cd review-guard
npm ci
npm run build
npm link          # creates a global symlink to the binary

ツール

ツール利用可否説明
get_pr_review_context常に利用可能PR の作成者/メッセージ、送信済みレビューの概要、解決状態・リアクション・パーマリンクを含むインラインレビューのスレッド、および一般的な PR コメントを取得します
list_pending_review常に利用可能認証済みユーザーの保留中の下書きレビューを一覧表示します。現在保留中のレビューコメントとそれぞれのパーマリンクもすべて含まれます
add_review_comments常に利用可能認証済みユーザーの保留中のレビューにコメントを 1 件以上追加します。必要に応じて保留中のレビューを作成します
modify_review_comment常に利用可能認証済みユーザーの保留中のレビューからコメントを 1 件更新または削除します
delete_pending_review常に利用可能認証済みユーザーの保留中のレビューと、そのすべてのコメントを削除します
submit--allow-submit保留中のレビューを、実際に投稿されるレビューとして送信します。action は許可された値に限定され、レビュー概要は常にサーバーで設定された固定の免責事項から始まります
resolve_review_thread--allow-resolve認証済みユーザー自身のレビューのスレッド(例:最新のプッシュで修正された過去の指摘)を 1 件解決します。他のユーザーが開始したスレッドは拒否します

送信モードのフラグ

デフォルトでは、サーバーはレビューを送信できません。送信を許可するには、approve、comment、reject の 1 つ以上を指定して、--allow-submit を付けてサーバーを起動します。

review-guard-mcp --port 4000 \
  --allow-submit approve,comment \
  --submit-body "This is an autonomous, AI-based review and may contain mistakes."
  • --allow-submit <csv> は submit ツールを有効にし、action 列挙型を指定された値だけに制限します。approve は APPROVE、comment は COMMENT、reject は REQUEST_CHANGES に対応します。無効なアクションが指定されると、起動は中止されます。
  • --submit-body <text> は、すべての送信時に投稿される固定のレビュー概要の前置文を設定します。エージェントはこれを変更または削除できず、その下に独自の概要を追加することだけができます。--allow-submit が設定されているときに省略した場合は、組み込みのデフォルトの免責事項が使用されます。その文言は許可されたアクションに応じて調整されます(approve が許可されていない場合は、承認ではない旨を述べ、承認に関する但し書きは付けません)。--allow-submit が必要であり、空にすることはできません。
  • --allow-resolve は resolve_review_thread ツールを登録します。クライアントが解決できるのは、最初のコメントを認証済みユーザーが投稿したスレッドのみです。そのため、ボットは再レビュー時に自分自身の、現在は修正済みの指摘を整理できますが、他のレビュアーの会話を終了させることはできません。

--allow-submit を指定しない場合、submit ツールは登録されず、submitReview クライアントメソッドはいかなるアクションも拒否するため、構造上、送信は実行できません。

単一の PR にスコープを限定する(オプトイン)

--repo <owner/name> --pr <number> を指定してサーバーを起動すると、対象を 1 つのプルリクエストに限定できます。

review-guard-mcp --port 4000 --repo eclipsesource/some-repo --pr 123

スコープを限定すると、すべてのツールから owner/repo/pull_number 引数がなくなり、その PR だけを対象に動作します。resolve_review_thread はさらに、スレッドがその PR に属していることを確認します。クライアント(github.ts)はツールスキーマとは独立してこの制限を適用するため、呼び出し元がトークンで書き込み可能な別の PR やリポジトリにアクセスすることはできません。既知の PR に対する自動レビューをサーバーが支援する場合は、プロンプトインジェクションを受けたエージェントが無関係な PR に投稿したり、スレッドを解決したりできないよう、(通常は送信モードと組み合わせて)必ずこの設定を使用してください。両方のフラグを一緒に指定する必要があります。省略すると、サーバーのスコープは限定されず、呼び出しごとに呼び出し元が PR を指定します。

MCP クライアントの設定

Stdio モード(IDE に推奨)

サーバーは、IDE が管理する子プロセスとして実行されます。ポートの設定は不要です。

一般的な JSON 設定形式を使用する MCP クライアント(Claude Code、VS Code、 Theia)の場合:

{
  "mcpServers": {
    "review-guard": {
      "command": "npx",
      "args": ["-y", "@eclipsesource/review-guard-mcp", "--stdio"]
    }
  }
}

Codex の場合は、~/.codex/config.toml または信頼できるプロジェクトローカルの .codex/config.toml にサーバーを追加します。

[mcp_servers.review-guard]
command = "npx"
args = ["-y", "@eclipsesource/review-guard-mcp", "--stdio"]

または、特定のバージョンを固定します。

{
  "mcpServers": {
    "review-guard": {
      "command": "npx",
      "args": ["-y", "@eclipsesource/review-guard-mcp@<version>", "--stdio"]
    }
  }
}
リモート HTTP モード

サーバーは単独で実行され、Streamable HTTP エンドポイントを公開します。

サーバーを起動します。

review-guard-mcp --port 4000                     # bind to 127.0.0.1 (localhost only)
review-guard-mcp --port 4000 --host 172.17.0.1   # bind to a specific address instead

次に、出力された URL(例:http://127.0.0.1:4000/mcp)を MCP クライアントに指定します。各 POST は独立したステートレスリクエストです。

Codex の HTTP 設定でも同じ TOML 形式を使用します。

[mcp_servers.review-guard]
url = "http://127.0.0.1:4000/mcp"
--host フラグ

デフォルトでは、HTTP サーバーは 127.0.0.1 にバインドされるため、コンテナやほかのマシンからはアクセスできません。特定のアドレスにバインドするには、--host <address> を指定します。エンドポイントには認証がないため、指定のないアドレス(0.0.0.0、::)は起動時に拒否されます。

主な用途は、コンテナ内(例:サンドボックス化されたエージェントランタイム)で動作するレビューエージェントが、ホスト上の MCP サーバーにアクセスする場合です。Linux では、コンテナネットワークのゲートウェイ IP にバインドします。たとえば Docker のデフォルトブリッジでは、通常 172.17.0.1 です。

review-guard-mcp --port 4000 \
  --host "$(docker network inspect bridge --format '{{(index .IPAM.Config 0).Gateway}}')"

ホストのファイアウォールでも、コンテナのサブネットから MCP ポートへの通信を許可する必要があります。たとえば ufw の場合:

sudo ufw allow from 172.17.0.0/16 to any port 4000 proto tcp

コンテナ内からは、ゲートウェイ IP 自体、host.docker.internal(Docker)、host.containers.internal(Podman)、またはランタイムがホストを指すようにマッピングする localhost/127.0.0.1 の別名など、ホストに到達できる任意のローカル名をクライアントに指定できます。ループバック以外のアドレスを --host に指定すると、サーバーはこれらのいずれの Host ヘッダーも受け入れつつ、不明なホストは引き続き拒否するため、DNS リバインディング対策は維持されます。

認証

GitHub CLI がインストールされ、認証済み(gh auth login)の場合、トークンの設定は不要です。サーバーは gh auth token でトークンを自動的に取得します。

gh が利用できない場合は、MCP の設定でトークンを明示的に指定します。

{
  "mcpServers": {
    "review-guard": {
      "command": "npx",
      "args": ["-y", "@eclipsesource/review-guard-mcp", "--stdio"],
      "env": { "GITHUB_TOKEN": "ghp_..." }
    }
  }
}

トークンの解決順序は次のとおりです。

  1. GITHUB_TOKEN 環境変数
  2. GH_TOKEN 環境変数
  3. gh auth token(GitHub CLI からトークンを読み取ります)

レビュー対象のリポジトリにスコープを限定した、きめ細かな個人アクセストークンを推奨します。

セキュリティに関する考慮事項

  • エージェントにトークンが渡ることはありません。 トークンはサーバーが保持し、起動時に設定されたツールセットのみを公開します。
  • HTTP モードはデフォルトで 127.0.0.1 にバインドされ、Host ヘッダーをバインド先アドレスと照合して検証するため(DNS リバインディング対策)、悪意のあるウェブサイトが被害者のブラウザー経由でサーバーにアクセスすることはできません。
  • /mcp エンドポイント自体には認証がありません。 ポートにアクセスできる人は誰でも、設定された機能を利用できます。ローカルホスト上で使用するか、ループバック以外の --host を指定する場合は、ファイアウォールでポートへのアクセスを意図したサブネットに制限してください。そうしないと、そのネットワーク上のすべてのマシンやコンテナーからアクセスできてしまいます。未指定のバインドアドレス(0.0.0.0、::)は起動時に拒否されます。
  • 自動化されたセットアップでは、レビュー対象のリポジトリのみにスコープを絞ったきめ細かいトークンを使用し、--repo/--pr によるスコープ制限も追加してください。

脆弱性は、SECURITY.md の説明に従って非公開で報告してください。

安全性の不変条件

src/github.ts モジュールだけが GitHub と通信します。デフォルトでは送信できません。保留中のレビューへの書き込みを超えるすべての機能は、構築時にゲートで制御されます。次の点を保証します。

  1. コメント/スレッドの変更に event フィールドを指定しません。 event を完全に省略するため、下書きコメントは常にレビューを PENDING のままにします。
  2. 送信はオプトインで、ゲートによって制御されます。 submitPullRequestReview ミューテーションが呼び出されるのは submitReview 内だけです。また、構築時に渡された allowSubmit セットに含まれていない操作は拒否されます。--allow-submit なしで構築されたクライアント(デフォルト)は、決して送信できません。DISMISS はサポートされません。
  3. 送信本文は固定です。 送信されるレビューは、常にサーバーで設定された --submit-body から始まります。呼び出し元ができるのは、その下に追記することだけで、置き換えたり削除したりすることはできません。
  4. スレッドの解決はオプトインで、自分のスレッドのみが対象です。 resolveReviewThread が実行されるのは --allow-resolve が設定されている場合だけで、認証済みユーザーが開始していないスレッドは拒否されます。
  5. REST の送信/却下エンドポイントは呼び出されません。
  6. 自分のレビューへの書き込み。 書き込みツールが変更できるのは、認証済みユーザー自身のレビューのみです。
  7. PR のスコープ制限。 --repo/--pr を指定して起動した場合、別の PR またはリポジトリを対象とする操作は、ツールスキーマとは独立してクライアント内で拒否されます。
  8. 監査可能。 src/github.ts で submitPullRequestReview、dismiss、APPROVE、REQUEST_CHANGES を検索してください。ミューテーションとイベントが現れるのは submitReview 内だけです。ゲートは test/github.test.ts の単体テストで検証されています。
  9. ミューテーション後のトリップワイヤー(多層防御)。 レビュー作成後、レスポンスの状態が PENDING であることを検証します。上記のゲートとは異なり、これは違反を防ぐのではなく検出します。違反があった場合、ツール呼び出しは MCP エラーで失敗し、エージェントに処理を停止して人間に警告するよう伝えます。多くの MCP クライアントでは、ツールエラーがユーザーに自動表示されないためです。

開発

開発には npm >= 12 と、それに対応する Node バージョンが必要です。詳しい手順は CONTRIBUTING.md を参照してください。

npm ci                           # install dependencies
npm run build                    # compile TypeScript to dist/
npm run dev                      # tsx watch mode
npm run typecheck                # type-check sources, tests, and configs
npm run lint                     # ESLint
npm run format:check             # Prettier
npm test                         # vitest suite
npm run test:integration         # manual suite against a real repo (see CONTRIBUTING.md)

アーキテクチャ

src/
├── index.ts     # Entry point: token resolution, mode dispatch (--stdio / HTTP)
├── args.ts      # CLI parsing: every flag in one place, unknown flags abort startup
├── server.ts    # MCP server factory with tool schemas (shared by both transports)
├── stdio.ts     # Stdio transport (for IDE-managed lifetime)
├── http.ts      # HTTP transport (node:http, Streamable HTTP)
└── github.ts    # Safety boundary: GraphQL mutations + REST reads
test/            # vitest suite: CLI parsing, safety gates, tool registration
  • GraphQL は、解決済みのレビュー スレッドのコンテキストとミューテーション(addPullRequestReview、addPullRequestReviewThread、updatePullRequestReviewComment、deletePullRequestReviewComment、deletePullRequestReview、およびオプトインのゲートで制御される submitPullRequestReview と resolveReviewThread)に使用します。
  • REST は、適切にページネーションされた PR レビューの概要と、一般的な PR 会話コメントに使用します。
  • HTTP モードは 127.0.0.1 のみ(または --host で指定された特定のアドレス)にバインドされます。

コントリビューション

コントリビューションを歓迎します。詳しくは CONTRIBUTING.md を参照してください。コントリビューターは CLA に署名する必要があり、プルリクエスト時に自動で確認されます。

ライセンス

MIT

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。