Skip to main content
Glama

English | 中文

PR-Agent MCP サーバー

pr-agent CLI コマンドを MCP ツールとして公開する MCP (Model Context Protocol) サーバーです。オプションで Gitea の Webhook 統合による自動 PR レビューもサポートします。SSE と StreamableHTTP の両方のトランスポートに対応し、ローカルまたは Docker で実行できます。

機能

  • MCP ツール: pr-agent のコマンド (review、describe、improve、ask、reflect、update_changelog、generate_labels) を MCP ツールとして公開します。

  • トランスポート: SSE (/sse) と StreamableHTTP (/mcp) に対応し、--transport sse|streamable-http|both で選択できます。

  • Gitea Webhook: Gitea で新しい PR が開かれたときに、review、describe、improve アクションを自動的にトリガーします。

  • HMAC 署名検証: セキュリティのためのオプションの Webhook 署名検証。

  • 設定の注入: ~/.secrets.toml から認証情報を自動的に読み込み、pr-agent サブプロセス環境に注入します。

Related MCP server: gitea-mcp

プロジェクト構造

pr-agent-mcp/
├── server.py            # Main MCP server and webhook handler
├── run.ps1              # PowerShell startup script (local run)
├── requirements.txt     # Python dependencies
├── Dockerfile           # Multi-stage Docker image definition
├── docker-compose.yml   # Docker Compose service definition
├── push.ps1             # Build & push image to registry
├── .dockerignore        # Exclude files from Docker build context
├── buggy_samples.py     # Intentional bug samples for pr-agent testing
├── test.http            # HTTP test requests (VS Code REST Client / similar)
├── README.md
├── README.zh-CN.md
└── .gitignore

前提条件

  • Docker と Docker Compose (推奨) または Python 3.11+ (tomllib を使用)

  • Gitea インスタンス (Webhook 統合用、オプション)

  • プロバイダーの認証情報を含む ~/.secrets.toml (下記参照)

認証情報の設定

ユーザーのホームディレクトリに ~/.secrets.toml を作成し、プロバイダーと LLM の認証情報を記述します:

[gitea]
url = "http://your-gitea-instance:3000"
token = "your-gitea-personal-access-token"

[openai]
key = "sk-your-openai-api-key"

SECRETS_TOML_PATH 環境変数でデフォルトの場所 (~/.secrets.toml) を上書きできます。これは Docker イメージがバインドマウントされたファイルを特定するために使用されます。


Docker デプロイ (推奨)

1. ビルドしてローカルで起動

docker compose up -d --build

これにより:

  1. イメージがビルドされます (マルチステージ: pr-agent と mcp の依存関係を venv にインストールし、ランタイムに git をインストール)。

  2. ホームディレクトリが読み取り専用でコンテナ内の /host-home にマウントされ、~/.secrets.toml を読み取れるようにします。

  3. ホストのポート 9000 をコンテナのポート 9000 にマッピングします。

  4. SSE と StreamableHTTP の両方のトランスポートでサーバーを起動します。

コンテナは単一の .secrets.toml ファイルではなく、${USERPROFILE} (ホームディレクトリ全体) をマウントします。存在しないホストファイルをマウントすると、Docker が代わりにディレクトリを作成し、IsADirectoryError が発生するため、親ディレクトリをマウントすることでこの問題を回避します。

2. プライベートレジストリにイメージをプッシュ

# Build + tag + push to the default registry (10.10.11.194:1000/pr-agent-mcp:latest)
.\push.ps1

# Push to another registry / with a version tag / skip rebuild
.\push.ps1 -Registry "192.168.1.100:5000" -Tag "v1.0.0" -NoBuild

3. 別のマシン (例: テストサーバー) で実行

docker-compose.yml をターゲットマシンにコピーし、build: . を image: 10.10.11.194:1000/pr-agent-mcp:latest に変更してから:

docker pull 10.10.11.194:1000/pr-agent-mcp:latest
docker compose up -d

または、compose ファイルなしで直接実行:

docker run -d \
  --name pr-agent-mcp \
  -p 9000:9000 \
  -v $env:USERPROFILE:/host-home:ro \
  -e SECRETS_TOML_PATH=/host-home/.secrets.toml \
  --restart unless-stopped \
  10.10.11.194:1000/pr-agent-mcp:latest

コンテナの管理

# View logs
docker compose logs -f

# Stop & remove
docker compose down

# Restart
docker compose restart

ローカル実行 (Docker なし)

1. 依存関係のインストール

python -m venv mcp_env
mcp_env\Scripts\activate
pip install -r requirements.txt

requirements.txt には mcp (MCP フレームワーク) のみが含まれています。pr-agent はこのサーバーの Python 依存関係ではありません — server.py (または PR_AGENT_EXE 環境変数) で設定されたパスを介してサブプロセスとして呼び出されます。pr-agent がマシンに既にインストールされていることを確認してください。

2. (オプション) Webhook シークレットの設定

server.py の WEBHOOK_SECRET を、Gitea Webhook 設定で構成したものと同じシークレットに設定します。空のままにすると署名検証が無効になります (本番環境では推奨しません)。

3. サーバーの起動

.\run.ps1

または直接:

python server.py
python server.py --transport sse        # SSE only
python server.py --transport streamable-http  # StreamableHTTP only

エンドポイント

エンドポイント

メソッド

説明

/sse

GET

AI クライアント用 MCP SSE 接続エンドポイント

/mcp

POST

MCP StreamableHTTP エンドポイント

/messages/

POST

MCP メッセージトランスポート (SSE モード)

/webhook

POST

自動 PR レビュー用 Gitea Webhook レシーバー

MCP ツール

ツール

説明

review_pr

PR をレビュー: 概要と具体的な提案

describe_pr

PR のタイトルと説明を生成または更新

improve_code

PR コメントとしてコード改善を提案

ask_question

PR について質問する

reflect

PR 作成者に PR に関する質問をする

update_changelog

PR の内容に基づいて変更履歴を更新

generate_labels

PR のラベルを生成する

Gitea Webhook のセットアップ

  1. Gitea リポジトリで、設定 → Webhook → Webhook を追加 に移動します。

  2. ターゲット URL を http://<your-server>:9000/webhook に設定します。

  3. HTTP メソッドを POST、コンテンツタイプを application/json に設定します。

  4. 必要に応じてシークレットを設定します (server.py の WEBHOOK_SECRET と一致させる必要があります)。

  5. プルリクエスト イベントで、アクション Opened を選択します。

PR が開かれると、サーバーは自動的に review、describe、improve アクションを実行し、結果を PR コメントとして投稿します。

テスト

同梱の test.http ファイルを VS Code REST Client または同様の HTTP クライアントで使用して、Webhook エンドポイントを手動でテストできます。

buggy_samples.py には、pr-agent のコードレビュー検出機能をテストするための、複数のカテゴリ (セキュリティ、ロジック、並行性、エラーハンドリング) にわたる意図的なバグが含まれています。

ライセンス

プライベート — 内部使用のみ。

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    A GitHub integration tool that enables MCP clients to manage pull requests through tools for creating, updating, and listing PRs with automated descriptions. It also includes a webhook server for real-time PR updates and a customizable CLI with distinct personality modes.
    -
  • A
    license
    A
    quality
    A
    maintenance
    An MCP server providing comprehensive Gitea API coverage with 186 tools for managing repositories, issues, pull requests, and CI/CD workflows. It enables autonomous AI agents to perform complex development and administrative tasks directly through a Gitea instance.
    7
    MIT