MCP server that exposes tower's worktree state and management as a Model Context Protocol server. Chat-side agents (Claude Code, Cursor, claude.ai) talk to this surface to list / add / remove worktrees and trigger syncs through the same workflow that the CLI and TUI use.
Tower has 10 well-named tools with clear verb-noun patterns (list_*, get_*, add_*, remove_*, sync, reconcile, register_*, unregister_*, prune_*). All tools have descriptions (avg ~100 chars, within baseline 34-392). Input schemas are present and typed for all tools. However, descriptions are terse and lack WHEN/WHY guidance; parameter descriptions are minimal (e.g., 'repo name' without format hints); output schemas are not documented; error handling lacks recovery guidance. No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels. Composition is sound, each tool has one responsibility, and naming disambiguates similar operations (list_repos vs list_worktrees). Naming follows verb_noun convention well. Parameter naming is consistent (repo, name, branch, force). Missing: output schema documentation, richer parameter descriptions with constraints, error recovery hints, and tool annotations.
Create a new tower-style worktree in the named repo. The branch becomes tower/<name> and the path becomes <repo>/.worktrees/<name>.
Get one worktree (with PR / reviews / CI). Provide either {repo, branch} for an exact lookup or {name} (with optional repo) to resolve by short name.
List every registered repo (name + filesystem path).
List tracked worktrees across registered repos, each with its PR / reviews / CI state. Optionally filter to one repo.
Unregister repos whose path no longer exists on disk. Pass dry_run to report without removing.
Reconcile worktrees from local git only — no GitHub network calls. Cheaper than sync; use when you only care about which worktrees exist and their dirty / ahead-behind state.
Output schemas not documented. LLMs cannot infer what fields list_worktrees, get_worktree, sync, and reconcile return, forcing them to guess downstream field names and risk broken tool chains.
Tool annotations missing. Tools marked DESTRUCTIVE (remove_worktree, unregister_repo, prune_repos) and WRITE (add_worktree, register_repo) lack readOnlyHint/destructiveHint/idempotentHint annotations. LLMs cannot distinguish safe from risky operations without explicit hints.
Parameter descriptions lack format/constraint hints. 'repo name' does not explain if it accepts short names or full paths; 'worktree short name' does not clarify naming rules or length limits. Descriptions should state format, range, and allowed values explicitly.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
Register a repo so tower starts tracking its worktrees. Path is required; the MCP server has no cwd context. Name defaults to the directory basename.
Remove a tracked worktree (git worktree remove + drop from tower's store). Refuses to remove the main worktree of a repo.
Reconcile worktrees from git, then refresh PR / reviews / CI from GitHub for every tracked branch. Returns counts and any per-branch errors.
Unregister a repo. Cascades to its tracked worktrees, PRs, reviews, and CI checks in tower's store. Does not touch the worktrees on disk.
Error handling lacks recovery guidance. Tools like sync and reconcile return 'counts and per-branch errors' but do not document error format, retryability, or what the LLM should do on failure. No actionable error messages.
Descriptions lack WHEN/WHY context. 'Reconcile worktrees from local git only' does not explain when to call reconcile vs sync, or what 'cheaper' means in token/latency terms. LLMs need explicit guidance on tool selection.