MCP server (bubo-mcp)
Bubo ships a Model Context Protocol server so chat clients (Codex, Claude
Desktop) can inspect review state and trigger reviews on demand. Run it with the
bubo-mcp console script (or bin/bubo mcp).
Enable & configure
The server supports two transports: stdio — the default, for local and
SSH-tunnelled setups — and HTTP with a bearer token, for org-wide access.
Select one with [mcp_server].transport in config/env.toml, then pick where
Codex and the reviewer run:
Codex and the reviewer on one machine — stdio, the default.
- Nothing to enable — stdio is the default transport.
- Point the client at
bin/bubo mcp.
[mcp_servers.bubo]
command = "/absolute/path/to/bubo/bin/bubo"
args = ["mcp"]
startup_timeout_sec = 20
tool_timeout_sec = 1800 # >= [review].timeout_seconds for review_changeTools
Review
| Tool | Args | Returns |
|---|---|---|
review_change | url=… or provider={gitlab,github,auto} + project=… + number=…; optional timeout_seconds. | {provider, project, number, exit_code, duration_seconds, findings, raw_output}. |
provider="auto" (default) detects the provider from the URL. The call runs
synchronously, so set the client’s tool_timeout_sec to cover a full review.
Findings come back inline but aren’t recorded, so MCP reviews don’t appear in the
metrics tools below — use the poller for tracked reviews.
Metrics
| Tool | Returns |
|---|---|
health | {status, last_status, last_updated_at, age_seconds} — same as bubo-poller --health. |
list_recent_reviews | Recent reviewed_mrs rows, newest-first; optional status / project / limit. |
get_review | One review by (project, iid[, sha]); resolves to the latest SHA when unspecified. |
get_findings | Per-finding rows (file, line, severity, category, confidence, posted body, discussion id). |
get_finding_outcomes | Resolution state from --sync-outcomes (resolved / disputed / merged_unresolved / …). |
get_metrics | Aggregated counts + token/cost for a since_hours window, optionally by project. |
Examples
After the server is connected, ask your chat client in plain language; it selects the matching MCP tool:
| Ask… | Calls |
|---|---|
Review https://gitlab.com/acme/app/-/merge_requests/142. | review_change |
| Is the reviewer healthy, and when did it last run? | health |
Show the last 10 reviews for acme/app. | list_recent_reviews |
Pull the review and findings for MR 142 in acme/app. | get_review, get_findings |
| Which of those findings were resolved vs disputed? | get_finding_outcomes |
Counts and token/cost for acme/app over the last 48 hours. | get_metrics |
review_change is the only tool that can start a review; the remaining tools are
read-only. Governance
reporting is exposed over MCP too — see get_governance_report /
get_dispute_classes on the Operate page.