An MCP server that helps your AI coding agent manage PR review comments from any AI reviewer that uses GitHub's PR review infrastructure.
- Triage review comments —
triage_review_commentsfilters to only actionable inline threads and includes direct GitHub URLs for each comment - Get thread details —
get_threadfetches full conversation history for any thread by node ID - Reply to anything — inline review threads (
PRRT_), PR-level reviews (PRR_), and bot issue comments (IC_) all routed to the correct GitHub API
- Diagnose CI failures —
diagnose_cicollapses 3-5 sequentialghcommands into one call: finds the failed run, identifies failed jobs/steps, and extracts actionable error lines - Stack activity feed —
stack_activityshows a chronological timeline of pushes, reviews, labels, merges across all PRs in a stack with asettledflag for deciding when to proceed - Scan merged PRs —
list_recent_unresolvedcatches late review comments on already-merged PRs
- Recovery-guided errors — every tool handler classifies errors (auth, rate limit, not found, workspace, GraphQL, config) and returns actionable recovery hints so agents self-correct instead of retrying blindly
- Next-action hints — tool responses include
next_stepssuggestions guiding agents to the right follow-up tool call - Empty result messages — when results are empty, responses explain why and suggest what to try next
- GUI URLs — triage items include
comment_urlso agents can link users directly to the comment on GitHub - Tool classification tags — tools are tagged
query,command, ordiscoveryfor MCP clients that support filtering
- Typed output schemas — all tools return Pydantic models with JSON Schema, giving MCP clients structured data instead of raw strings
- Progress reporting — long-running operations report progress via FastMCP context (visible in MCP clients that support it)
- Production middleware — ErrorHandling (transforms exceptions to clean MCP errors with tracebacks), Timing (logs execution duration for every tool call), and Logging (request/response payloads for debugging)
- Zero config auth — uses
ghCLI, no PAT tokens or.envfiles
FastMCP v3 gives you terminal testing of the server with no extra code:
# List all tools with their signatures
fastmcp list codereviewbuddy.server:mcp
# Call a tool directly from the terminal
fastmcp call codereviewbuddy.server:mcp triage_review_comments pr_numbers='[42]'
# Inspect server metadata
fastmcp inspect codereviewbuddy.server:mcp
# Run with MCP Inspector for interactive debugging
fastmcp dev codereviewbuddy.server:mcp- GitHub CLI (
gh) installed and authenticated (gh auth login) - Python 3.14+
This project uses uv. No install needed — run directly:
uvx codereviewbuddyOr install permanently:
uv tool install codereviewbuddyOne command configures your MCP client — no manual JSON editing:
uvx codereviewbuddy install claude-desktop
uvx codereviewbuddy install claude-code
uvx codereviewbuddy install cursor
uvx codereviewbuddy install windsurf
uvx codereviewbuddy install windsurf-nextWith optional environment variables:
uvx codereviewbuddy install windsurf \
--env CRB_SELF_IMPROVEMENT__ENABLED=trueFor any other client, generate the JSON config:
uvx codereviewbuddy install mcp-json # print to stdout
uvx codereviewbuddy install mcp-json --copy # copy to clipboardRestart your MCP client after installing. See uvx codereviewbuddy install --help for all options.
If you prefer manual setup, add the following to your MCP client's config JSON:
All options enabled:
{
"mcpServers": {
"codereviewbuddy": {
"command": "uvx",
"args": ["codereviewbuddy@latest"],
"env": {
// GitHub logins considered "ours" for triage filtering (comma-separated)
"CRB_OWNER_LOGINS": "alice,bob",
// Enable PR description quality checks
"CRB_PR_DESCRIPTIONS__ENABLED": "true",
// Agents suggest Linear issues when they hit server gaps
"CRB_SELF_IMPROVEMENT__ENABLED": "true"
}
}
}
}The server auto-detects your project from MCP roots (sent per-window by your client). This works correctly with multiple windows open on different projects — no env vars needed.
Why
@latest? Without it,uvxcaches the first resolved version and never upgrades automatically.
For local development, use uv run --directory to run the server from your checkout instead of the PyPI-published version. Changes to the source take effect immediately — just restart the MCP server in your client.
{
"mcpServers": {
"codereviewbuddy": {
"command": "uv",
"args": ["run", "--directory", "/path/to/codereviewbuddy", "codereviewbuddy"],
"env": {
// Same CRB_* env vars as above, plus dev-specific settings:
"CRB_SELF_IMPROVEMENT__ENABLED": "true"
}
}
}
}If your MCP client reports No module named 'fastmcp.server.tasks.routing', the runtime has an incompatible FastMCP. Fixes:
- Prefer
uvx codereviewbuddy@latestin MCP client config. - For local source checkouts, launch with
uv run --directory /path/to/codereviewbuddy codereviewbuddy. - Reinstall to refresh cached deps:
uv tool install --reinstall codereviewbuddy.
| Tool | Tags | Description |
|---|---|---|
summarize_review_status |
query, discovery | Lightweight stack-wide overview — start here |
triage_review_comments |
query | Only actionable inline threads needing attention |
get_thread |
query | Full thread details by node ID — use after triage for conversation history |
reply_to_comment |
command | Reply to inline threads (PRRT_), PR-level reviews (PRR_), or bot comments (IC_) |
diagnose_ci |
query | Diagnose CI failures — finds the failed run, jobs, steps, and error lines in one call |
check_ci_status |
query | Lightweight CI pass/fail/pending check for a PR — use before merging |
stack_activity |
query | Chronological activity feed across a PR stack with a settled flag |
list_recent_unresolved |
query | Scan recently merged PRs for unresolved review threads |
review_pr_descriptions |
query | Analyze PR descriptions for quality issues (empty body, boilerplate, missing linked issues) |
show_config |
discovery | Show active configuration with human-readable explanation |
| Resource | Description |
|---|---|
pr://{owner}/{repo}/{pr_number}/reviews |
Read-only review summary for a single PR |
| Prompt | Description |
|---|---|
review_stack |
Full review pass workflow — summarize, triage, fix, reply, verify |
pr_review_checklist |
Pre-merge quality checklist (review threads, PR hygiene, CI, tests) |
ship_stack |
Pre-merge sanity check workflow before merging a PR stack |
codereviewbuddy works zero-config with sensible defaults. All configuration is via CRB_* environment variables in the "env" block of your MCP client config — no config files needed. Nested settings use __ (double underscore) as a delimiter. See the dev setup above for a fully-commented example.
| Env var | Type | Default | Description |
|---|---|---|---|
CRB_PR_DESCRIPTIONS__ENABLED |
bool | true |
Whether review_pr_descriptions tool is available |
CRB_SELF_IMPROVEMENT__ENABLED |
bool | false |
Agents suggest Linear issues when they encounter server gaps |
CRB_OWNER_LOGINS |
comma-separated | [] |
GitHub usernames considered "ours" for triage filtering (e.g. alice,bob) |
1. summarize_review_status() # Stack-wide overview — start here
2. triage_review_comments(pr_numbers=[42, 43]) # Only actionable threads needing attention
3. # Fix bugs flagged by triage, then:
4. reply_to_comment(42, thread_id, "Fixed in ...") # Reply explaining the fix
5. diagnose_ci(pr_number=42) # If CI fails, diagnose in one call
Each tool response includes next_steps hints guiding the agent to the right follow-up call. For stacked PRs, all query tools auto-discover the stack when pr_numbers is omitted.
git clone https://github.com/detailobsessed/codereviewbuddy.git
cd codereviewbuddy
uv syncpoe test # Run tests (excludes slow)
poe test-cov # Run with coverage report
poe test-all # Run all tests including slowpoe lint # ruff check
poe typecheck # ty check
poe check # lint + typecheck
poe prek # run all pre-commit hooksThe server is built on FastMCP v3 with a clean separation:
server.py— FastMCP server with tool registration, middleware, instructions, and recovery-guided error handlingconfig.py— Configuration (CRB_*env vars via pydantic-settings)tools/— Tool implementations (comments.py,stack.py,ci.py,descriptions.py)gh.py— Thin wrapper around theghCLI for GraphQL and REST callsmodels.py— Pydantic models for typed tool outputs withnext_stepsandmessagefields for agent guidance
All blocking gh CLI calls are wrapped with call_sync_fn_in_threadpool to avoid blocking the async event loop.
This project was generated with copier-uv-bleeding. To pull the latest template changes:
copier update --trust .
{ "mcpServers": { "codereviewbuddy": { "command": "uvx", "args": ["codereviewbuddy@latest"], "env": { // All CRB_* env vars are optional — zero-config works out of the box. // See Configuration section below for the full list. } } } }