Skip to main content
Glama

Englisch | 中文

PR-Agent MCP Server

Ein MCP (Model Context Protocol) Server, der pr-agent CLI-Befehle als MCP-Werkzeuge bereitstellt, mit optionaler Gitea-Webhook-Integration zur automatischen PR-Überprüfung. Unterstützt sowohl SSE- als auch StreamableHTTP-Transporte und kann lokal oder in Docker ausgeführt werden.

Funktionen

  • MCP-Werkzeuge: Stellt pr-agent-Befehle (review, describe, improve, ask, reflect, update_changelog, generate_labels) als MCP-Werkzeuge bereit.

  • Transporte: SSE (/sse) und StreamableHTTP (/mcp), auswählbar über --transport sse|streamable-http|both.

  • Gitea-Webhook: Automatisches Auslösen von Review-, Describe- und Improve-Aktionen, wenn ein neuer PR in Gitea geöffnet wird.

  • HMAC-Signaturprüfung: Optionale Webhook-Signaturvalidierung für Sicherheit.

  • Konfigurationsinjektion: Lädt automatisch Anmeldedaten aus ~/.secrets.toml und injiziert sie in die Umgebung des pr-agent-Subprozesses.

Related MCP server: gitea-mcp

Projektstruktur

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

Voraussetzungen

  • Docker mit Docker Compose (empfohlen) oder Python 3.11+ (verwendet tomllib)

  • Gitea-Instanz (für Webhook-Integration, optional)

  • ~/.secrets.toml mit Ihren Provider-Anmeldedaten (siehe unten)

Anmeldedaten konfigurieren

Erstellen Sie ~/.secrets.toml in Ihrem Benutzerverzeichnis mit Ihren Provider- und LLM-Anmeldedaten:

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

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

Die Umgebungsvariable SECRETS_TOML_PATH überschreibt den Standardpfad (~/.secrets.toml). Dies wird vom Docker-Image verwendet, um die gebundene Datei zu lokalisieren.


Docker-Bereitstellung (empfohlen)

1. Lokal bauen und starten

docker compose up -d --build

Dies wird:

  1. Das Image bauen (mehrstufig: installiert pr-agent- und mcp-Abhängigkeiten in eine venv, installiert git zur Laufzeit).

  2. Ihr Home-Verzeichnis schreibgeschützt in den Container unter /host-home einbinden, damit es ~/.secrets.toml lesen kann.

  3. Host-Port 9000 auf Container-Port 9000 mappen.

  4. Den Server mit sowohl SSE- als auch StreamableHTTP-Transporten starten.

Der Container bindet ${USERPROFILE} (das gesamte Home-Verzeichnis) anstelle der einzelnen .secrets.toml-Datei ein. Das Einbinden einer nicht vorhandenen Host-Datei führt dazu, dass Docker ein Verzeichnis erstellt, was einen IsADirectoryError verursacht – das Einbinden des übergeordneten Verzeichnisses vermeidet diese Falle.

2. Image in eine private Registry pushen

# 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. Auf einem anderen Rechner ausführen (z. B. einem Testserver)

Kopieren Sie docker-compose.yml auf den Zielrechner und ändern Sie build: . in image: 10.10.11.194:1000/pr-agent-mcp:latest, dann:

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

Oder direkt ohne Compose-Datei ausführen:

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

Container verwalten

# View logs
docker compose logs -f

# Stop & remove
docker compose down

# Restart
docker compose restart

Lokale Ausführung (ohne Docker)

1. Abhängigkeiten installieren

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

requirements.txt enthält nur mcp (das MCP-Framework). pr-agent ist KEINE Python-Abhängigkeit dieses Servers – es wird als Subprozess über den in server.py konfigurierten Pfad (oder die Umgebungsvariable PR_AGENT_EXE) aufgerufen. Stellen Sie sicher, dass pr-agent bereits auf dem Rechner installiert ist.

2. (Optional) Webhook-Geheimnis konfigurieren

Setzen Sie WEBHOOK_SECRET in server.py auf dasselbe Geheimnis, das in Ihren Gitea-Webhook-Einstellungen konfiguriert ist. Lassen Sie es leer, um die Signaturprüfung zu deaktivieren (nicht für die Produktion empfohlen).

3. Server starten

.\run.ps1

Oder direkt:

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

Endpunkte

Endpunkt

Methode

Beschreibung

/sse

GET

MCP-SSE-Verbindungsendpunkt für KI-Clients

/mcp

POST

MCP-StreamableHTTP-Endpunkt

/messages/

POST

MCP-Nachrichtentransport (SSE-Modus)

/webhook

POST

Gitea-Webhook-Empfänger für automatische PR-Überprüfung

MCP-Werkzeuge

Werkzeug

Beschreibung

review_pr

PR überprüfen: Zusammenfassung und spezifische Vorschläge

describe_pr

PR-Titel und -Beschreibung generieren oder aktualisieren

improve_code

Code-Verbesserungen als PR-Kommentare vorschlagen

ask_question

Eine Frage zum PR stellen

reflect

Dem PR-Autor Fragen zum PR stellen

update_changelog

Changelog basierend auf PR-Inhalten aktualisieren

generate_labels

Labels für den PR generieren

Gitea-Webhook-Einrichtung

  1. Gehen Sie in Ihrem Gitea-Repository zu Einstellungen → Webhooks → Webhook hinzufügen.

  2. Setzen Sie die Ziel-URL auf http://<your-server>:9000/webhook.

  3. Setzen Sie die HTTP-Methode auf POST und den Inhaltstyp auf application/json.

  4. Legen Sie optional ein Geheimnis fest (muss mit WEBHOOK_SECRET in server.py übereinstimmen).

  5. Wählen Sie das Ereignis Pull Request mit der Aktion Geöffnet.

Wenn ein PR geöffnet wird, führt der Server automatisch die Aktionen review, describe und improve aus und veröffentlicht die Ergebnisse als PR-Kommentare.

Testen

Verwenden Sie die beiliegende Datei test.http mit dem VS Code REST Client oder einem ähnlichen HTTP-Client, um den Webhook-Endpunkt manuell zu testen.

buggy_samples.py enthält absichtliche Fehler in mehreren Kategorien (Sicherheit, Logik, Nebenläufigkeit, Fehlerbehandlung) zum Testen der Code-Review-Erkennungsfähigkeiten von pr-agent.

Lizenz

Privat – nur für den internen Gebrauch.

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