gtr-mcp
An MCP server that wraps git-worktree-runner to enable AI agents to manage git worktrees safely.
README
gtr-mcp
An MCP (Model Context Protocol) server that wraps git-worktree-runner (gtr) so AI agents can manage git worktrees through a structured, safe tool interface.
Built as a contribution to issue #67.
Prerequisites
- Node.js 18+
git gtrinstalled and on PATH (see gtr install docs) — or setGTR_BIN- The repos you want to manage must have
gitinitialized
Install
Via npx (no install)
npx gtr-mcp --repo-path /path/to/your/repo
Global install
npm install -g gtr-mcp
gtr-mcp --repo-path /path/to/your/repo
From source
git clone https://github.com/coderabbitai/gtr-mcp
cd gtr-mcp
npm install
npm run build
node dist/index.js --repo-path /path/to/your/repo
MCP client configuration
Claude Desktop / Claude Code
Add to ~/.claude/claude_desktop_config.json or your project .mcp.json:
{
"mcpServers": {
"gtr": {
"command": "node",
"args": ["/path/to/gtr-mcp/dist/index.js"],
"env": {
"GTR_MCP_REPO_PATH": "/path/to/your/repo"
}
}
}
}
Cursor
{
"mcp": {
"servers": {
"gtr": {
"command": "npx",
"args": ["gtr-mcp"],
"env": {
"GTR_MCP_REPO_PATH": "/path/to/your/repo"
}
}
}
}
}
Configuration
| Env var | CLI arg | Description |
|---|---|---|
GTR_MCP_REPO_PATH |
--repo-path <path> |
Default repo path; callers can omit repo_path per call |
GTR_MCP_REPO_BASE |
--repo-base <path> |
If set, all repo_path values must be under this directory |
GTR_BIN |
--gtr-bin <path> |
Path to the gtr binary (default: git gtr via PATH) |
GTR_MCP_ENABLE_EXEC |
— | Set to "1" to expose the worktree_exec tool (off by default) |
Tools
| Tool | Safety | Required params | Description |
|---|---|---|---|
worktree_list |
SAFE | repo_path |
List all worktrees with path, branch, status |
worktree_status |
SAFE | repo_path, branch |
Git status for a worktree (staged/unstaged/untracked, ahead/behind) |
worktree_path |
SAFE | repo_path, branch |
Resolve a branch/identifier to its absolute filesystem path |
worktree_create |
MODIFY | repo_path, branch |
Create a new worktree (and branch if needed) |
worktree_copy |
MODIFY | repo_path, from |
Copy files (by glob pattern) from one worktree into others; use dry_run: true to preview |
worktree_rename |
MODIFY | repo_path, old_branch, new_branch |
Rename a worktree and its branch atomically |
worktree_remove |
DESTRUCTIVE | repo_path, branch, confirm: true |
Remove a worktree from disk and git registry |
worktree_clean |
MODIFY/DESTRUCTIVE | repo_path |
Prune stale entries; confirm: true required with merged/closed |
worktree_exec |
MODIFY | repo_path, branch, command |
Run a command inside a worktree (opt-in only) |
Safety model
- SAFE — read-only. Can run freely.
- MODIFY — creates or rearranges state. Reversible with normal git operations.
- DESTRUCTIVE — removes state from disk and/or git registry. Requires
confirm: trueexplicitly.
Confirm gate
worktree_remove always requires confirm: true. worktree_clean with merged: true or
closed: true (without dry_run: true) also requires confirm: true. This is Zod-schema
enforced — the gate cannot be bypassed by an agent that infers the wrong intent.
worktree_copy does not require a confirm gate: it is file-copy only (wraps gtr copy, which
uses cp internally). It overwrites matching files in the target but cannot delete your
pre-existing files — gtr's only directory-prune paths act on freshly-copied trees under the
repo's own trusted .gtrconfig, never on existing target files. Use dry_run: true to preview
before committing a real copy.
Security notes
No shell execution
All subprocess calls use execFile with argument arrays — never shell: true, never
string interpolation into a shell command. User-controlled values (branch names, paths)
are passed as argv elements, not shell tokens.
Trust boundary
gtr's .gtrconfig postCreate hooks only execute if a human previously ran
git gtr trust in the repository. An agent cannot enable trust — the server exposes
no trust tool. If worktree_create returns hooks_ran: false, a remediation message
is included telling the human what to run.
Path restriction
Set GTR_MCP_REPO_BASE to prevent an agent from operating on arbitrary paths:
GTR_MCP_REPO_BASE=/Users/me/Developer gtr-mcp
Any repo_path outside the base is rejected before the gtr subprocess is invoked.
Porcelain output (Gate-0 finding)
gtr list --porcelain outputs tab-separated path\tbranch\tstatus with raw unescaped
values — list.sh calls _tsv_unescape_field when reading stored records and then
prints raw via printf. No un-escape pass is needed on our side. A branch or path
containing a literal tab character would corrupt the TSV output — this is a known gtr
limitation, not a bug in this server.
The exec tool opt-in
worktree_exec is disabled by default. Even when enabled, prefer your shell tool:
cd "$(git gtr go branch-name)" && your-command
worktree_exec adds an indirection layer with no safety benefit over your native shell.
Set GTR_MCP_ENABLE_EXEC=1 only if your client cannot run shell commands directly.
Prompts
The server exposes a gtr-workflow prompt with a markdown guide covering:
- When to use worktrees
- The standard create → work → status → remove loop
- Safety contract and trust model
- Path resolution behaviour
Fetch it via prompts/get with name: "gtr-workflow".
Troubleshooting
gtr not found
gtr-mcp startup failed: gtr not found (tried "git gtr")
Install gtr: https://github.com/coderabbitai/git-worktree-runner#installation
Or point at the binary directly:
GTR_BIN=/path/to/gtr gtr-mcp
Hooks skipped
If worktree_create returns "hooks_ran": false, the repository is not trusted. Have a
human run git gtr trust in the repo root.
worktree_clean --merged fails (gh/glab not found)
The merged and closed flags require the GitHub CLI (gh) or GitLab CLI (glab) to be
installed and authenticated. Install them and run gh auth login first.
Startup validation — not a git repo
Each tool call validates repo_path via git rev-parse --git-dir before invoking gtr.
If you see Not a git repository, ensure the path points to a repo root (contains .git).
Development
npm install
npm run build # tsc compile
npm test # vitest (parser + schema + integration if gtr available)
npm run lint # tsc --noEmit type check
npm run check # FF-1: grep for shell execution patterns
Roadmap
- PR2: gtr
--jsonmode would remove regex parsing fragility forworktree_createoutput (tracking worktree_path and hook state). - Go binary distribution: a single static binary via
go-mcpserverfor simpler install.
File structure
src/
index.ts MCP server entry point, transport, dispatcher, prompts
gtr.ts gtr subprocess wrapper, parsers, validators
ff-check.ts FF-1 fitness function (CI helper)
tools/
worktree.ts Tool definitions, schemas, handlers, dispatch table
__tests__/
parsers.test.ts Parser unit tests (parsePorcelainList, parseGitStatus)
schemas.test.ts Schema validation tests (confirm gate, coercion)
integration.test.ts Live gtr integration tests (skipped if gtr not on PATH)
.github/
workflows/
ci.yml CI: build + FF-1 + FF-3 + test + lint
AGENTS.md AI agent usage guide
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
Neon Database
MCP server for interacting with Neon Management API and databases
E2B
Using MCP to run code via e2b.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.