Skip to content
repo-release-tools
GitHub

MCP Server

The [mcp] extra ships a FastMCP 3.x server named repo-release-tools that exposes version management, changelog, health / drift / tree / artifact lock inspection, branch and commit validation, config introspection, and interactive dashboards as MCP tools, resources, and Prefab UI apps.

Terminal window
# Add the [mcp] extra to your project
uv add "repo-release-tools[mcp]"
# Verify the entry point works
uv run rrt-mcp --help

Create or update .mcp.json at the repository root:

{
"mcpServers": {
"rrt": {
"type": "stdio",
"command": "uv",
"args": ["run", "rrt-mcp"]
}
}
}

Claude Code picks this up automatically on next start.

Terminal window
claude mcp add rrt -- uv run --with "repo-release-tools[mcp]" rrt-mcp

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
"mcpServers": {
"rrt": {
"type": "stdio",
"command": "uvx",
"args": ["--from", "repo-release-tools[mcp]", "rrt-mcp"]
}
}
}

--transport http binds a real network listener — unlike stdio, anyone who can reach --host:--port could invoke every rrt_* tool, including destructive ones like rrt_bump and rrt_publish_snapshot. To prevent that, HTTP transport requires a bearer token: pass --auth-token or set RRT_MCP_AUTH_TOKEN. If neither is set, the server refuses to start rather than opening an unauthenticated port. --host still defaults to 127.0.0.1 (loopback-only) unless overridden.

Terminal window
# Token via flag
uv run rrt-mcp --transport http --port 8000 --auth-token "$(openssl rand -hex 32)"
# Token via env var
export RRT_MCP_AUTH_TOKEN="$(openssl rand -hex 32)"
uv run rrt-mcp --transport http --port 8000

Clients connect with the same token as a bearer credential, e.g. an Authorization: Bearer <token> header or FastMCP’s Client(url, auth=token).

stdio transport (the default) is process-local and piped over stdin/stdout — no token is required or checked.


Tool Tags Description
rrt_config config, inspection Resolved rrt config as JSON
rrt_doctor config, inspection Pre-commit / lefthook / husky / workflow checks
rrt_health locks, inspection .rrt/health.lock.toml contents
rrt_drift locks, inspection .rrt/drift.lock.toml contents
rrt_tree locks, inspection .rrt/tree.lock.toml contents
rrt_artifacts locks, inspection .rrt/artifacts.lock.toml contents
rrt_version versioning Current version per configured group
rrt_validate_branch validation Conventional branch naming check
rrt_validate_commit validation Conventional commit subject check
rrt_changelog changelog Unreleased entries or full content
rrt_eol eol, inspection Host/project EOL status per language against policy
rrt_release_check release, inspection Version/pin/changelog target validation per group
rrt_sync_check sync, inspection Newer upstream package versions (not idempotent — network)
rrt_folder_check folders, inspection Folder structure policy violations
rrt_docs_check docs, inspection .rrt/docs.lock.toml drift status
Tool Tags Description
rrt_bump versioning Semver bump — preview or apply
rrt_branch_new git Create conventionally-named branch
rrt_init_run init, config Run rrt init with selected target
rrt_publish_snapshot git, publishing Force-push a single-commit snapshot of tracked content to a secondary remote; exclude drops specific glob patterns from the snapshot

Interactive Prefab UI apps rendered in MCP-capable clients (Claude Code, Claude Desktop). All are read-only.

App tool Description
rrt_health_dashboard Health overview: Metric summary row, health Ring, per-lock status BarChart, check status Cards, full detail DataTable
rrt_version_overview Version target map: all configured files, kinds, and current version values
rrt_doctor_dashboard Doctor checks: pass-rate Ring, per-check Metric cards, status Cards, detail DataTable
rrt_tree_dashboard File tree: Metric summary (total files, directories, snapshot), per-directory BarChart, clean DataTable
rrt_init Init form: pick target format (rrt-toml / pyproject / cargo / node / go), dry_run, force — submits to rrt_init_run
rrt_locks_overview All-locks overview: status donut PieChart, Carousel of per-lock summary cards, full detail DataTable

The server registers FastMCP’s GenerativeUI provider, which adds generate_prefab_ui and search_prefab_components tools. This lets the LLM write custom Prefab Python code executed in a Pyodide sandbox — the LLM can build any visualization it chooses from data exposed by rrt://locks/{name} or other resources.


URI MIME Description
rrt://version text/plain Installed package version string
rrt://config application/json Fully resolved rrt config
rrt://schema/config application/json JSON Schema for [tool.rrt]
rrt://changelog text/plain Full CHANGELOG.md content
rrt://locks/{name} application/json Lock file by name: drift / health / tree / artifacts

Seven reusable prompts guide AI-assisted workflows:

Prompt Parameters Description
release_workflow version_level, repo_name Step-by-step release guide
version_strategy change_summary Semver bump recommendation
branch_strategy task_description, context_hint Conventional branch selector
commit_message_guide staged_summary, branch_name Conventional Commits format
changelog_entry commit_summary, section_hint Keep-a-Changelog bullet
config_setup project_type Starter config per language
release_readiness version, target_env Pre-release checklist

# From inside Claude Code with rrt MCP connected:
"Show me the health dashboard"
→ calls rrt_health_dashboard — renders Metric cards, Ring, BarChart
"What version is the project at?"
→ calls rrt_version or rrt_version_overview
"Bump the patch version (dry run)"
→ calls rrt_bump with dry_run=True, shows preview
"Open the init form"
→ calls rrt_init — renders target/dry_run/force form
"Give me a custom chart of the lock file data"
→ LLM uses generate_prefab_ui + rrt://locks/{name} resources

Badge families are intentionally complete for the current icon registry across platform, registry, and language labels; see src/repo_release_tools/tools/platform.py if you think one is missing.

Chat is powered by Context7, a third-party service with its own terms and privacy policy.