MCP server

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.

  1. Nothing to enable — stdio is the default transport.
  2. Point the client at bin/bubo mcp.
Client — ~/.codex/config.toml
[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_change

Tools

Review

ToolArgsReturns
review_changeurl=… 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

ToolReturns
health{status, last_status, last_updated_at, age_seconds} — same as bubo-poller --health.
list_recent_reviewsRecent reviewed_mrs rows, newest-first; optional status / project / limit.
get_reviewOne review by (project, iid[, sha]); resolves to the latest SHA when unspecified.
get_findingsPer-finding rows (file, line, severity, category, confidence, posted body, discussion id).
get_finding_outcomesResolution state from --sync-outcomes (resolved / disputed / merged_unresolved / …).
get_metricsAggregated 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.

MountainOwlMountainOwl
Bubo · MIT licensed · © 2026