Skip to main content
Glama
subhamyadav580

PR Reviewer MCP Server

README.md
# PR Reviewer MCP Server

An [MCP (Model Context Protocol)](https://modelcontextprotocol.io) server that connects Claude to GitHub, allowing it to list repositories, browse open pull requests, and inspect PR diffs — all from within Claude Code.

## Prerequisites

- Python 3.11+
- [uv](https://docs.astral.sh/uv/getting-started/installation/) — fast Python package manager
- [Claude Code CLI](https://docs.anthropic.com/en/docs/claude-code) installed (`npm i -g @anthropic-ai/claude-code`)
- A GitHub Personal Access Token with `repo` scope

## Setup

### 1. Clone the repository

```bash
git clone https://github.com/subhamyadav580/pr-reviewer.git
cd pr-reviewer
```

### 2. Install dependencies

```bash
uv sync
```

This creates a `.venv` and installs all pinned dependencies from `uv.lock`.

### 3. Get a GitHub Personal Access Token

Go to **GitHub → Settings → Developer settings → Personal access tokens** and create a token with at minimum the `repo` scope (add `read:org` if your org repos are private).

### 4. Register the MCP server with Claude Code

Run this once — it registers the server at user scope so it's available in every project:

```bash
claude mcp add pr-reviewer -s user \
  -e GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx \
  -e GITHUB_ORG=your-github-org-name \
  -- /absolute/path/to/pr-reviewer/.venv/bin/python \
     /absolute/path/to/pr-reviewer/main.py
```

Replace:
- `ghp_xxxxxxxxxxxxxxxxxxxx` — your GitHub PAT
- `your-github-org-name` — the GitHub org you want to query (e.g. `my-company`)
- `/absolute/path/to/pr-reviewer` — the full path where you cloned this repo

Verify it was registered:

```bash
claude mcp list
```

You should see `pr-reviewer` in the output.

### 5. (Optional) Install the `/review-pr` slash command

The repo ships with a `review-pr.md` slash command that gives Claude a structured, step-by-step review workflow. Copy it into your global Claude commands folder:

```bash
mkdir -p ~/.claude/commands
cp /absolute/path/to/pr-reviewer/review-pr.md ~/.claude/commands/review-pr.md
```

Now in any Claude Code session type `/review-pr` and Claude will:
1. List all org repositories for you to pick from
2. Show open PRs in the selected repo
3. Fetch the PR details and diff
4. Post a structured review with Blockers / Suggestions / Positives and a merge recommendation

## Available MCP Tools

| Tool | Description |
|------|-------------|
| `list_org_repositories` | Lists all repositories in the configured GitHub org |
| `list_open_pull_requests(repo_full_name)` | Lists open PRs for a repo (e.g. `"my-org/my-repo"`) |
| `get_pull_request_details(repo_full_name, pr_number)` | Returns PR metadata: title, body, author, file count, additions/deletions |
| `get_pull_request_diff(repo_full_name, pr_number)` | Returns per-file diffs with the raw unified diff patch |

## Usage

Once registered you can talk to Claude naturally:

> "List all open PRs in my org"
> "Show me the diff for PR #42 in my-org/backend"
> "Review PR #15 in my-org/frontend — flag bugs and style issues"

Or use the `/review-pr` slash command for a guided, structured review flow.

## Project Structure

```
pr-reviewer/
├── main.py          # MCP server — all tool definitions
├── review-pr.md     # Slash command for Claude Code (/review-pr)
├── pyproject.toml   # Project metadata and dependencies
├── uv.lock          # Pinned dependency versions
├── .python-version  # Python version pin (3.11)
└── .env.example     # Template — copy to .env for local use
```

## Claude Desktop

If you prefer Claude Desktop instead of the CLI, add this to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS):

```json
{
  "mcpServers": {
    "pr-reviewer": {
      "command": "/absolute/path/to/pr-reviewer/.venv/bin/python",
      "args": ["/absolute/path/to/pr-reviewer/main.py"],
      "env": {
        "GITHUB_TOKEN": "ghp_xxxxxxxxxxxxxxxxxxxx",
        "GITHUB_ORG": "your-github-org-name"
      }
    }
  }
}
```

Restart Claude Desktop after saving.

## Development

Run the server manually to test it:

```bash
uv run python main.py
```

To add a new tool, define a function decorated with `@mcp.tool()` in `main.py`. FastMCP exposes it to Claude automatically.

TDQS

A4.2/5.0

Scored across 4 tools

Disambiguation5/5

Each tool serves a clear, non-overlapping purpose: listing repos, listing PRs, fetching PR metadata, and fetching PR diffs. No ambiguity in intent.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with snake_case (e.g., get_pull_request_details, list_open_pull_requests), making them predictable.

Tool Count5/5

4 tools is well-scoped for a PR review server, covering the essential read operations without bloat or insufficiency.

Completeness5/5

The tool set covers the full read-only PR review workflow: discover repositories, list PRs, and examine details and diffs. No obvious gaps for its intended purpose.

Maintenance

ActivityInactive
ResponsivenessNo issues