All notable changes to @rethunk/mcp-multi-root-git are documented here. Format loosely follows Keep a Changelog; the project uses Semantic Versioning.
2.4.0 — 2026-05-07
New git MCP tools, better batch_commit ergonomics, published schema coverage for the full tool surface, and a broad docs/test refresh since v2.3.4.
- New tools:
git_fetch,git_diff,git_show,git_tag,git_stash_list, andgit_stash_apply. batch_commitenhancements:dryRun: truepreview mode plus hunk-level staging via{ path, lines: { from, to } }.- Published per-tool schema artifacts:
schemas/index.jsonplus one JSON Schema file per tool alongsidetool-parameters.schema.json.
GIT_SUBPROCESS_PARALLELISMis now configurable via environment and clamps to a safe2×CPUmaximum.git_show,git_fetch, andgit_tagnow use the standard single-repo workspace pick (workspaceRoot/rootIndex) and omit multi-root-only parameters.- Build / release tooling now aligns on Bun
1.3.13, updated dev dependencies, and the current prerelease tarball flow.
- MCP roots — workspace root collection now scans active MCP sessions and dedupes
file://roots instead of relying on a fixed servercwd. git_pushandbatch_commitnow surface raw git stdout/stderr on failure for easier recovery.- Published schema snapshots are now complete and in sync with the registered tool surface, including
schema:tools:check. publish:preflightnow writes temporary coverage output under the platform temp directory instead of a hard-coded/tmppath.
- README / HUMANS / AGENTS / CONTRIBUTING / install docs refreshed for the current tool surface, shipped schema artifacts, and contributor workflow.
SECURITY.mdadded with repository access, git-operation risk, and disclosure guidance.docs/mcp-tools.mdnow documents the full tool surface,batch_commitatomic staging semantics, and the shipped schema artifacts.TODO.mdbacklog entries now reflect genuine remaining gaps instead of listing already-implemented tools as missing.specs/scaffold added with standardactive,done, andparkedlayout for repo planning.- CHANGELOG references for
v2.3.2–v2.3.4were restored.
- Coverage expanded across
list_presets,git_parity,git_cherry_pick,git_merge,git_show, schema generation, and roots handling. - The shared git test harness now reuses repo-init / commit helpers and speeds up fixture setup.
2.3.4 — 2026-04-26
Publication-prep patch for the absoluteGitRoots line.
tool-parameters.schema.json— generated JSON Schema snapshot for every registered tool parameter surface, plusbun run schema:tools/bun run schema:tools:check.git_parityabsolute-root regression coverage — sibling clone batches are now covered directly.
- CI coverage gate now checks
% Linesfrom Bun's coverage table instead of accidentally reading% Funcs.
HUMANS.md— added sibling-cloneabsoluteGitRootsexamples forgit_statusandgit_parity.docs/mcp-tools.md— clarified directgit_pushuse for already-committed work andgit_paritysibling-clone batches.
2.3.3 — 2026-04-21
absoluteGitRootson the workspace pick schema: pass absolute paths to many independent git clones in one MCP call forgit_status,git_inventory,git_log,git_parity,git_diff_summary(single distinct toplevel only), andlist_presets. Mutating tools omit this parameter from their Zod surface. Seedocs/mcp-tools.md(Workspace root resolution).
requireGitAndRoots/requireSingleRepo: new preluderesolveAbsoluteGitRootsListwith dedupe, fail-fast on invalid paths, and mutual exclusion withworkspaceRoot/rootIndex/allWorkspaceRoots/preset(andnestedRoots+presetguarded ingit_inventory).
2.3.2 — 2026-04-21
- Coverage gate added:
bun run test:coverageenforces an 80% line-coverage minimum in CI (checkjob).
CONTRIBUTING.md— new file; consolidates dev setup, hook table, commit conventions, CI description, PR checklist, path-confinement guidance, and how-to-add-a-tool guidance for mutating tools.HUMANS.md— Development section replaced with a pointer toCONTRIBUTING.md; preset file,git_not_found, install reference, and publishing steps remain.AGENTS.md— corrected pre-push hook description (missingteststep) and updated canonical-docs link for dev/CI content..cursor/rules/rethunk-git-mcp.mdc— removed stale "shell is fine forgit diff/git cherry-pick" examples; both now have MCP tool equivalents (git_diff_summary,git_cherry_pick).
2.3.1 — 2026-04-21
Documentation-only patch following the 2.3.0 release.
README.md— one-liner description updated to includegit_log,git_push,git_worktree_*, andgit_reset_soft.HUMANS.md— opening line corrected from "Read-only MCP git tools" to "MCP git tools" (mutating operations have been present since v2.2.0).docs/mcp-tools.md— overview table expanded from 9 to 14 rows, adding all tools introduced in v2.3.0; Read-only / Mutating annotations added to every row consistently.
2.3.0 — 2026-04-21
Five new tools, a token-efficiency sweep, a targeted breaking change to the git_log JSON contract, and test coverage raised from 70% to 89%.
git_push— push the current branch to its configured upstream. Accepts explicitremote/branchoverrides and asetUpstream: trueflag for first-push (git push -u). Refuses on detached HEAD; does not force-push.git_worktree_list— list all git worktrees (git worktree list --porcelain); annotatedreadOnlyHint: true.git_worktree_add— create a new linked worktree, creating the branch frombaseRefif it does not yet exist. Refuses on protected branch names (main,master,dev,release*,hotfix*, …).git_worktree_remove— remove a registered worktree; refuses to remove the main worktree. Optionalforce: truefor dirty trees.git_reset_soft— soft-reset the current branch to a ref (HEAD~1,HEAD~N, SHA, branch name). Preserves rewound changes in the staging index — the canonical way to re-split an already-committed chunk. Requires a clean working tree.
Consumers using format: "json" with git_log must update field names. All other tools are unaffected.
sha7removed — was always derivable assha.slice(0, 7).ageRelativeremoved — was human-readable noise in machine output.workspace_rootrenamed toworkspaceRoot— consistent camelCase with all other fields.emailis now omitted when empty rather than always present.- Error code
not_a_git_repocorrected tonot_a_git_repository— consistent with all other tools.
- Token efficiency:
readOnlyHint: trueadded togit_status,git_inventory,git_parity, andlist_presets. "See docs/mcp-tools.md" suffix dropped from all 9 tool descriptions; descriptions are now self-contained. WorkspacePickSchema—rootIndexandallWorkspaceRootsparameters carry inline descriptions so LLMs can pick them without consulting external docs.git_merge— protected-branch list in the description collapsed to a single canonical reference (was duplicated inline).
requireSingleRepohelper extracted toroots.ts; replaces copy-paste preludes acrossbatch_commit,git_diff_summary,git_merge,git_cherry_pick,git_push,git_reset_soft, and allgit_worktree_*.conflictPathsextracted fromgit-merge-tool.tstogit-refs.ts; shared bygit_mergeandgit_cherry_pick.inferRemoteFromUpstreamextracted togit-refs.ts; shared byrunPushAfter(batch_commit) andgit_push.isWorkingTreeCleanused consistently everywhere (was inlined ingit_reset_soft).
- Coverage: 88.6% lines / 92.8% functions (up from 69.9% / 71.4%).
- 262 tests across 15 files (up from 134 across 7 files).
- New test files:
presets.test.ts,inventory.test.ts,git-utils.test.ts,json.test.ts,git-reset-soft-tool.test.ts,git-push-tool.test.ts,git-worktree-tool.test.ts,roots.test.ts.git-refs.test.tsextended withisSafeGitAncestorRefcases.
docs/mcp-tools.md— all new tools documented with parameter tables, JSON shapes, and error-code tables.AGENTS.md— implementation map updated with all new and refactored modules.
2.2.0 — 2026-04-17
Mutating git operations: merge, cherry-pick, and optional push-after for batch_commit.
git_mergetool — merge one or more source branches into a destination. Default strategyautocascades fast-forward → rebase → merge-commit per source, preferring linear history. Refuses on dirty tree; stops on first conflict with structured path report. OptionaldeleteMergedBranches/deleteMergedWorktreescascade cleanup, always skipping protected names (main,master,dev,develop,stable,trunk,prod,production,release*,hotfix*).git_cherry_picktool — play commits from one or more sources onto a destination. Sources may be SHAs,A..Branges, or branch names (expanded toonto..<branch>, oldest-first). Uses--empty=dropso patch-equivalent re-applies add nothing. Refuses on dirty tree; stops on first conflict, aborting cleanly. Same protected-name cleanup flags asgit_merge.batch_commitpush: "after"— push the current branch to its upstream once every commit in the batch lands. Omitted by default; no behavior change for existing callers.
- Internal — shared ref/branch helpers extracted to a common module; merge/cherry-pick/batch-commit implementations now reuse the same dirty-tree guards, protected-name checks, and upstream detection.
- Tooling — Biome upgraded to 2.4.11; dev dependency refresh.
docs/mcp-tools.md—git_mergeandgit_cherry_picksections with parameters, JSON shape, and error codes;batch_commitpush: "after"option documented.
2.1.0 — prior
- Added
git_log— path-filtered, time-windowed log across workspace roots. - Added
git_diff_summary— structured, token-efficient diff viewer with per-file truncation and default exclusions (lock files,dist, vendor). - Added
batch_commit— sequential multi-commit tool. Mutating, not idempotent. - Test harness: fake-server duck-type lets unit tests drive the full FastMCP execute path without a live transport.
2.0.1 — prior
- Bug fixes and internal cleanup; no public tool-surface change.
2.0.0 — prior
- Breaking: JSON response envelope removed.
MCP_JSON_FORMAT_VERSIONnow"2"; payloads are minified, and optional fields are omitted when empty /null/false(consumers test for presence, not equality tonull). - Initial preset file schema (
.rethunk/git-mcp-presets.json) with wrapped and legacy-map layouts.
1.0.0 — prior
- Initial release:
git_status,git_inventory,git_parity,list_presets.