@rethunk/mcp-multi-root-git 2.3.3 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/AGENTS.md +30 -3
  2. package/CHANGELOG.md +61 -0
  3. package/HUMANS.md +106 -2
  4. package/README.md +15 -1
  5. package/dist/server/batch-commit-tool.js +244 -19
  6. package/dist/server/coverage.js +22 -0
  7. package/dist/server/git-diff-tool.js +132 -0
  8. package/dist/server/git-fetch-tool.js +131 -0
  9. package/dist/server/git-push-tool.js +8 -1
  10. package/dist/server/git-show-tool.js +148 -0
  11. package/dist/server/git-stash-tool.js +131 -0
  12. package/dist/server/git-tag-tool.js +162 -0
  13. package/dist/server/git.js +18 -2
  14. package/dist/server/roots.js +8 -4
  15. package/dist/server/test-harness.js +77 -6
  16. package/dist/server/tool-parameter-schemas.js +94 -0
  17. package/dist/server/tools.js +11 -0
  18. package/docs/install.md +19 -2
  19. package/docs/mcp-tools.md +235 -5
  20. package/package.json +15 -8
  21. package/schemas/batch_commit.json +125 -0
  22. package/schemas/git_cherry_pick.json +63 -0
  23. package/schemas/git_diff.json +62 -0
  24. package/schemas/git_diff_summary.json +75 -0
  25. package/schemas/git_fetch.json +52 -0
  26. package/schemas/git_inventory.json +74 -0
  27. package/schemas/git_log.json +75 -0
  28. package/schemas/git_merge.json +79 -0
  29. package/schemas/git_parity.json +74 -0
  30. package/schemas/git_push.json +50 -0
  31. package/schemas/git_reset_soft.json +42 -0
  32. package/schemas/git_show.json +39 -0
  33. package/schemas/git_stash_apply.json +44 -0
  34. package/schemas/git_stash_list.json +30 -0
  35. package/schemas/git_status.json +49 -0
  36. package/schemas/git_tag.json +50 -0
  37. package/schemas/git_worktree_add.json +52 -0
  38. package/schemas/git_worktree_list.json +30 -0
  39. package/schemas/git_worktree_remove.json +48 -0
  40. package/schemas/index.json +108 -0
  41. package/schemas/list_presets.json +44 -0
  42. package/tool-parameters.schema.json +1125 -0
package/AGENTS.md CHANGED
@@ -9,6 +9,7 @@ IDEs injecting this as context: do not re-link from rules.
9
9
  - Tools, JSON shape, resources, root resolution → [docs/mcp-tools.md](docs/mcp-tools.md)
10
10
  - Dev setup, CI, commit conventions → [CONTRIBUTING.md](CONTRIBUTING.md)
11
11
  - Presets, auth, publish → [HUMANS.md](HUMANS.md)
12
+ - Spec layout for repo planning → [specs/README.md](specs/README.md)
12
13
 
13
14
  ## Implementation map
14
15
 
@@ -29,6 +30,11 @@ IDEs injecting this as context: do not re-link from rules.
29
30
  | [`src/server/list-presets-tool.ts`](src/server/list-presets-tool.ts) | `list_presets` |
30
31
  | [`src/server/git-log-tool.ts`](src/server/git-log-tool.ts) | `git_log` — v3 JSON shape: `sha` (full), `workspaceRoot`, no `sha7`/`ageRelative`, optional `email` |
31
32
  | [`src/server/git-diff-summary-tool.ts`](src/server/git-diff-summary-tool.ts) | `git_diff_summary` — structured token-efficient diff viewer; read-only |
33
+ | [`src/server/git-diff-tool.ts`](src/server/git-diff-tool.ts) | `git_diff` — raw scoped diff text; read-only |
34
+ | [`src/server/git-show-tool.ts`](src/server/git-show-tool.ts) | `git_show` — inspect commit message + diff or file content at a ref; read-only |
35
+ | [`src/server/git-stash-tool.ts`](src/server/git-stash-tool.ts) | `git_stash_list`, `git_stash_apply` |
36
+ | [`src/server/git-fetch-tool.ts`](src/server/git-fetch-tool.ts) | `git_fetch` — fetch remote refs without touching the working tree |
37
+ | [`src/server/git-tag-tool.ts`](src/server/git-tag-tool.ts) | `git_tag` — create/delete annotated or lightweight tags |
32
38
  | [`src/server/git-worktree-tool.ts`](src/server/git-worktree-tool.ts) | `git_worktree_list`, `git_worktree_add`, `git_worktree_remove` |
33
39
  | [`src/server/batch-commit-tool.ts`](src/server/batch-commit-tool.ts) | `batch_commit` — sequential multi-commit; mutating; exports `PushReport`, `runPushAfter` |
34
40
  | [`src/server/git-push-tool.ts`](src/server/git-push-tool.ts) | `git_push` — standalone push with optional upstream tracking |
@@ -36,6 +42,7 @@ IDEs injecting this as context: do not re-link from rules.
36
42
  | [`src/server/git-cherry-pick-tool.ts`](src/server/git-cherry-pick-tool.ts) | `git_cherry_pick` — mutating |
37
43
  | [`src/server/git-reset-soft-tool.ts`](src/server/git-reset-soft-tool.ts) | `git_reset_soft` — soft-reset; mutating |
38
44
  | [`src/server/presets-resource.ts`](src/server/presets-resource.ts) | `rethunk-git://presets` resource |
45
+ | [`src/server/tool-parameter-schemas.ts`](src/server/tool-parameter-schemas.ts) | `buildToolParameterSchemaDocument`, `captureToolParameterSchemas`; backs `tool-parameters.schema.json` and published `schemas/*.json` snapshots |
39
46
  | [`src/repo-paths.ts`](src/repo-paths.ts) | `resolvePathForRepo`, `assertRelativePathUnderTop`, `isStrictlyUnderGitTop` |
40
47
 
41
48
  ## Changing contracts
@@ -43,20 +50,40 @@ IDEs injecting this as context: do not re-link from rules.
43
50
  - **No banner paragraphs** in shipped docs. Use normal titles + cross-links.
44
51
  - **JSON format version** (currently `"3"`, discoverable via MCP `initialize`): bump on incompatible JSON changes (renamed/nested/omitted fields). Document migration here + [docs/mcp-tools.md](docs/mcp-tools.md). v2 removed the `rethunkGitMcp` envelope; payloads are minified; optional fields omitted when empty/null/false. v3 changes in `git_log`: `sha7` → `sha` (full SHA), `workspace_root` → `workspaceRoot`, `ageRelative` removed, `email` omitted when empty.
45
52
  - **Preset file:** keep `presets.ts` Zod schemas aligned with [`git-mcp-presets.schema.json`](git-mcp-presets.schema.json).
46
- - **Public tool surface:** rename/add → update [docs/mcp-tools.md](docs/mcp-tools.md) + [README.md](README.md) (if mentioned). Install/client wiring → [docs/install.md](docs/install.md) only. `.cursor/rules/rethunk-git-mcp.mdc` → only when *MCP-vs-shell* guidance changes.
53
+ - **Public tool surface:** rename/add → update [docs/mcp-tools.md](docs/mcp-tools.md) + [README.md](README.md) (if mentioned), then regenerate the shipped schema artifacts (`tool-parameters.schema.json`, `schemas/index.json`, `schemas/*.json`). Install/client wiring → [docs/install.md](docs/install.md) only.
47
54
 
48
55
  ## Validate + CI
49
56
 
50
- Local: `bun run build` | `bun run check` | `bun run test`. CI ([`ci.yml`](.github/workflows/ci.yml)) runs same on PRs + `main` after `bun install --frozen-lockfile`, uploads prerelease `npm pack` artifact. Tag `v*.*.*` matching `package.json` version → [`release.yml`](.github/workflows/release.yml) publishes to GitHub Packages as `@rethunk-ai/mcp-multi-root-git` + cuts GitHub Release. npmjs publish is manual (see [HUMANS.md](HUMANS.md)).
57
+ Local: `bun run build` | `bun run check` | `bun run schema:tools:check` | `bun run test`. CI ([`ci.yml`](.github/workflows/ci.yml)) runs same on PRs + `main` after `bun install --frozen-lockfile`, then `bun run test:coverage` + `bun run coverage:check`, and uploads prerelease `npm pack` artifact. Tag `v*.*.*` matching `package.json` version → [`release.yml`](.github/workflows/release.yml) publishes to GitHub Packages as `@rethunk-ai/mcp-multi-root-git` + cuts GitHub Release. npmjs publish is manual (see [HUMANS.md](HUMANS.md)).
51
58
 
52
59
  Optional [`.githooks/`](.githooks): `bun run setup-hooks` once per clone. pre-commit=`check`; pre-push=frozen install + build + check + test.
53
60
 
54
61
  Path confinement: [`src/repo-paths.ts`](src/repo-paths.ts) — extend tests when changing.
55
62
 
63
+ ## AI constraints
64
+
65
+ Rules for LLMs operating in or against this repository.
66
+
67
+ **End-user Git/MCP preference** (status/log/diff/commits): **`~/.claude/CLAUDE.md`** § **Git & GitHub** — same policy when dogfooding this server from a harness.
68
+
69
+ **Mutating tools require workspace-root confirmation** — `git_fetch`, `batch_commit`, `git_push`, `git_merge`, `git_cherry_pick`, `git_reset_soft`, `git_tag`, and `git_stash_apply` operate only on roots confirmed by `requireGitAndRoots` / `requireSingleRepo`. Never pass caller-supplied absolute paths to mutating tools; use `workspaceRoot` or MCP roots.
70
+
71
+ **`batch_commit` atomic staging — single call per logical change** — Do NOT attempt incremental staging across multiple `batch_commit` calls. Each call is self-contained: it stages all files in all entries, commits them sequentially, and the moment the call completes, all commits have landed. Include all related files (for all related commit entries) in a single `batch_commit` call. A call cannot be resumed or extended by a later call — each is an independent transaction. If entry N fails, entries before N remain committed; entries after N are skipped (not rolled back).
72
+
73
+ **`absoluteGitRoots` is read-only** — pass it only on read tools (`git_status`, `git_inventory`, `git_parity`, `git_log`, `git_diff_summary`, `list_presets`). Mutating tools reject this parameter.
74
+
75
+ **Protected branches are enforced by the server** — do not attempt `git_worktree_add` with a branch name matching `main`, `master`, `dev`, `develop`, `stable`, `trunk`, `prod`, `production`, `release*`, or `hotfix*`. The server rejects such calls.
76
+
77
+ **Never force-push** — `git_push` has no force-push mode by design. `git_merge` with `strategy: "ff-only"` will fail cleanly rather than force.
78
+
79
+ **Contract bumps need documentation** — if a JSON output shape changes incompatibly, bump `MCP_JSON_FORMAT_VERSION` in `src/server.ts` and document the migration in both this file and [docs/mcp-tools.md](docs/mcp-tools.md).
80
+
81
+ **Path confinement** — any tool accepting file paths must use `resolvePathForRepo` / `assertRelativePathUnderTop` from [`src/repo-paths.ts`](src/repo-paths.ts) and include escaping-attempt tests.
82
+
56
83
  ## Repo MCP entry (contributors)
57
84
 
58
85
  Dogfood from clone: [docs/install.md](docs/install.md) — *From source*.
59
86
 
60
- Repo ships `.cursor/` with alwaysApply rule [`.cursor/rules/rethunk-git-mcp.mdc`](.cursor/rules/rethunk-git-mcp.mdc) covering MCP-vs-shell usage. Rule does not re-link this file (already injected).
87
+ Client Git policy is still **`~/.claude/CLAUDE.md`** § Git & GitHub (see **End-user Git/MCP preference** above).
61
88
 
62
89
  User-level skills may mention README for discovery. Canonical refs: tools/JSON → [docs/mcp-tools.md](docs/mcp-tools.md); install → [docs/install.md](docs/install.md); presets → [HUMANS.md](HUMANS.md).
package/CHANGELOG.md CHANGED
@@ -2,6 +2,63 @@
2
2
 
3
3
  All notable changes to `@rethunk/mcp-multi-root-git` are documented here. Format loosely follows [Keep a Changelog](https://keepachangelog.com); the project uses [Semantic Versioning](https://semver.org).
4
4
 
5
+ ## [Unreleased]
6
+
7
+ ## [2.4.0] — 2026-05-07
8
+
9
+ 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`.
10
+
11
+ ### Added
12
+
13
+ - **New tools:** `git_fetch`, `git_diff`, `git_show`, `git_tag`, `git_stash_list`, and `git_stash_apply`.
14
+ - **`batch_commit` enhancements:** `dryRun: true` preview mode plus hunk-level staging via `{ path, lines: { from, to } }`.
15
+ - **Published per-tool schema artifacts:** `schemas/index.json` plus one JSON Schema file per tool alongside `tool-parameters.schema.json`.
16
+
17
+ ### Changed
18
+
19
+ - **`GIT_SUBPROCESS_PARALLELISM`** is now configurable via environment and clamps to a safe `2×CPU` maximum.
20
+ - **`git_show`**, **`git_fetch`**, and **`git_tag`** now use the standard single-repo workspace pick (`workspaceRoot` / `rootIndex`) and omit multi-root-only parameters.
21
+ - **Build / release tooling** now aligns on Bun `1.3.13`, updated dev dependencies, and the current prerelease tarball flow.
22
+
23
+ ### Fixed
24
+
25
+ - **MCP roots** — workspace root collection now scans active MCP sessions and dedupes `file://` roots instead of relying on a fixed server `cwd`.
26
+ - **`git_push`** and **`batch_commit`** now surface raw git stdout/stderr on failure for easier recovery.
27
+ - **Published schema snapshots** are now complete and in sync with the registered tool surface, including `schema:tools:check`.
28
+ - **`publish:preflight`** now writes temporary coverage output under the platform temp directory instead of a hard-coded `/tmp` path.
29
+
30
+ ### Documentation
31
+
32
+ - **README / HUMANS / AGENTS / CONTRIBUTING / install docs** refreshed for the current tool surface, shipped schema artifacts, and contributor workflow.
33
+ - **`SECURITY.md`** added with repository access, git-operation risk, and disclosure guidance.
34
+ - **`docs/mcp-tools.md`** now documents the full tool surface, `batch_commit` atomic staging semantics, and the shipped schema artifacts.
35
+ - **`TODO.md`** backlog entries now reflect genuine remaining gaps instead of listing already-implemented tools as missing.
36
+ - **`specs/` scaffold** added with standard `active`, `done`, and `parked` layout for repo planning.
37
+ - **CHANGELOG references** for `v2.3.2`–`v2.3.4` were restored.
38
+
39
+ ### Tests
40
+
41
+ - Coverage expanded across `list_presets`, `git_parity`, `git_cherry_pick`, `git_merge`, `git_show`, schema generation, and roots handling.
42
+ - The shared git test harness now reuses repo-init / commit helpers and speeds up fixture setup.
43
+
44
+ ## [2.3.4] — 2026-04-26
45
+
46
+ Publication-prep patch for the `absoluteGitRoots` line.
47
+
48
+ ### Added
49
+
50
+ - **`tool-parameters.schema.json`** — generated JSON Schema snapshot for every registered tool parameter surface, plus `bun run schema:tools` / `bun run schema:tools:check`.
51
+ - **`git_parity` absolute-root regression coverage** — sibling clone batches are now covered directly.
52
+
53
+ ### Fixed
54
+
55
+ - **CI coverage gate** now checks `% Lines` from Bun's coverage table instead of accidentally reading `% Funcs`.
56
+
57
+ ### Documentation
58
+
59
+ - **`HUMANS.md`** — added sibling-clone `absoluteGitRoots` examples for `git_status` and `git_parity`.
60
+ - **`docs/mcp-tools.md`** — clarified direct `git_push` use for already-committed work and `git_parity` sibling-clone batches.
61
+
5
62
  ## [2.3.3] — 2026-04-21
6
63
 
7
64
  ### Added
@@ -120,6 +177,10 @@ Mutating git operations: merge, cherry-pick, and optional push-after for `batch_
120
177
 
121
178
  - Initial release: `git_status`, `git_inventory`, `git_parity`, `list_presets`.
122
179
 
180
+ [2.4.0]: https://github.com/Rethunk-AI/mcp-multi-root-git/releases/tag/v2.4.0
181
+ [2.3.4]: https://github.com/Rethunk-AI/mcp-multi-root-git/releases/tag/v2.3.4
182
+ [2.3.3]: https://github.com/Rethunk-AI/mcp-multi-root-git/releases/tag/v2.3.3
183
+ [2.3.2]: https://github.com/Rethunk-AI/mcp-multi-root-git/releases/tag/v2.3.2
123
184
  [2.3.1]: https://github.com/Rethunk-AI/mcp-multi-root-git/releases/tag/v2.3.1
124
185
  [2.3.0]: https://github.com/Rethunk-AI/mcp-multi-root-git/releases/tag/v2.3.0
125
186
  [2.2.0]: https://github.com/Rethunk-AI/mcp-multi-root-git/releases/tag/v2.2.0
package/HUMANS.md CHANGED
@@ -53,6 +53,24 @@ With **multiple MCP file roots**, the server picks a root whose git toplevel def
53
53
 
54
54
  If you installed from **GitHub Packages**, use **`./node_modules/@rethunk-ai/mcp-multi-root-git/git-mcp-presets.schema.json`** in **`$schema`** instead (see [docs/install.md](docs/install.md#github-packages)).
55
55
 
56
+ ## Tool parameter schema artifact
57
+
58
+ The package ships **`tool-parameters.schema.json`**, a generated JSON Schema snapshot of every registered tool's parameter schema, plus the published **`schemas/`** directory with **`schemas/index.json`** and one per-tool JSON Schema file. Maintainers regenerate them with:
59
+
60
+ ```bash
61
+ bun run schema:tools
62
+ bun run schema:individual
63
+ ```
64
+
65
+ CI and `prepublishOnly` use:
66
+
67
+ ```bash
68
+ bun run schema:tools:check
69
+ bun run schema:individual
70
+ ```
71
+
72
+ These artifacts are for inspection, drift checks, code generation, and clients that want offline schema snapshots. Runtime MCP schema discovery remains the source of truth for connected clients.
73
+
56
74
  **Layouts:**
57
75
 
58
76
  1. **Wrapped (recommended):** `{ "schemaVersion": "1", "presets": { "<name>": { ... } } }`.
@@ -74,13 +92,91 @@ Invalid JSON or schema errors return **`preset_file_invalid`** (not a silent emp
74
92
 
75
93
  Relative preset paths must stay inside the git toplevel; escapes are rejected.
76
94
 
95
+ ## Sibling clone batches
96
+
97
+ Use **`absoluteGitRoots`** when you want one read-only call to inspect independent sibling clones that are not all exposed as MCP workspace roots. This is most useful from agent workflows rooted at a parent directory or when an MCP client exposes only one repo root.
98
+
99
+ Example `git_status` batch:
100
+
101
+ ```json
102
+ {
103
+ "format": "json",
104
+ "absoluteGitRoots": [
105
+ "/usr/local/src/com.github/Rethunk-AI/mcp-multi-root-git",
106
+ "/usr/local/src/com.github/Rethunk-AI/rethunk-github-mcp"
107
+ ]
108
+ }
109
+ ```
110
+
111
+ Example `git_parity` batch using the same pair in each sibling clone:
112
+
113
+ ```json
114
+ {
115
+ "format": "json",
116
+ "absoluteGitRoots": [
117
+ "/usr/local/src/com.github/Rethunk-AI/mcp-multi-root-git",
118
+ "/usr/local/src/com.github/Rethunk-AI/rethunk-github-mcp"
119
+ ],
120
+ "pairs": [{ "left": "packages/shared", "right": "apps/web/shared", "label": "shared" }]
121
+ }
122
+ ```
123
+
124
+ `absoluteGitRoots` is read-only by design. Mutating tools such as **`batch_commit`**, **`git_push`**, **`git_merge`**, and **`git_cherry_pick`** omit it from their schema; use `workspaceRoot` or MCP roots for writes. Full parameter rules and error codes live in **[docs/mcp-tools.md](docs/mcp-tools.md#absoluteGitRoots-sibling-clones)**.
125
+
126
+ ## Prerequisites
127
+
128
+ - **Git** on `PATH` (`git --version`). Missing git → all tools return `git_not_found`.
129
+ - **Node.js ≥ 22** (for `npx`) or **Bun** (for `bunx`). See `engines` in `package.json`.
130
+ - No other runtime dependencies; the server is a self-contained MCP stdio process.
131
+
132
+ ## Running the server
133
+
134
+ The server is a **stdio** MCP process — your MCP client starts it. You do not run it directly. Quick start:
135
+
136
+ ```bash
137
+ # npmjs (public, may lag tags)
138
+ npx -y @rethunk/mcp-multi-root-git
139
+
140
+ # GitHub Packages (CI-aligned, every tag)
141
+ npx -y @rethunk-ai/mcp-multi-root-git # requires ~/.npmrc with @rethunk-ai registry token
142
+ ```
143
+
144
+ Add the server to your MCP client config under a stable name (e.g. `rethunk-git`). Full per-client config (Cursor, VS Code, Claude Desktop, Zed): **[docs/install.md](docs/install.md)**.
145
+
146
+ ## Common operations
147
+
148
+ Call tools by their registered id (prefix depends on client config name):
149
+
150
+ | Operation | Tool |
151
+ |-----------|------|
152
+ | Check status across workspace roots | `git_status` |
153
+ | Status + ahead/behind for submodules | `git_inventory` |
154
+ | Compare HEAD between path pairs | `git_parity` |
155
+ | List preset names | `list_presets` |
156
+ | View commit log | `git_log` |
157
+ | View structured diff | `git_diff_summary` |
158
+ | View raw diff text | `git_diff` |
159
+ | Inspect commit content | `git_show` |
160
+ | List stashes | `git_stash_list` |
161
+ | Apply or pop a stash | `git_stash_apply` |
162
+ | Fetch remote refs | `git_fetch` |
163
+ | Create commits | `batch_commit` |
164
+ | Push a branch | `git_push` |
165
+ | Create or delete tags | `git_tag` |
166
+ | Merge branches | `git_merge` |
167
+ | Cherry-pick commits | `git_cherry_pick` |
168
+ | Soft-reset HEAD | `git_reset_soft` |
169
+ | Manage worktrees | `git_worktree_list` / `git_worktree_add` / `git_worktree_remove` |
170
+
171
+ Full parameter tables and JSON shapes: **[docs/mcp-tools.md](docs/mcp-tools.md)**.
172
+
77
173
  ## `git_not_found`
78
174
 
79
- If **`git`** is missing or not runnable, tools and the presets resource respond with **`git_not_found`**. Prerequisites and `PATH`: **[docs/install.md](docs/install.md)**.
175
+ If **`git`** is missing or not runnable, tools and the presets resource respond with **`git_not_found`**. Ensure `git` is on `PATH` in the environment that launches the MCP server.
80
176
 
81
177
  ## Installation
82
178
 
83
- **Package install and MCP clients:** **[docs/install.md](docs/install.md)**.
179
+ **Full install instructions and MCP client wiring:** **[docs/install.md](docs/install.md)**.
84
180
 
85
181
  ## Development
86
182
 
@@ -97,6 +193,14 @@ Tag pushes run [`.github/workflows/release.yml`](.github/workflows/release.yml):
97
193
 
98
194
  Prerequisite: push a **semver git tag** `vX.Y.Z` that **exactly matches** `version` in `package.json` (e.g. `v1.2.3` and `"version": "1.2.3"`).
99
195
 
196
+ Before tagging, run the clean-tree preflight from the release commit:
197
+
198
+ ```bash
199
+ bun run publish:preflight
200
+ ```
201
+
202
+ It verifies the `package.json` version has a matching `CHANGELOG.md` section, both schema artifacts are current, build/check/coverage pass, and `npm pack --dry-run` includes the expected package files.
203
+
100
204
  ### npmjs (manual) — maintainers only
101
205
 
102
206
  npmjs no longer fits an unattended CI publish flow for this org; **do not** rely on automation to [npmjs](https://www.npmjs.com/package/@rethunk/mcp-multi-root-git). To publish the **same** package name consumers already use (**`@rethunk/mcp-multi-root-git`**):
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  [![npm version](https://img.shields.io/npm/v/%40rethunk%2Fmcp-multi-root-git.svg)](https://www.npmjs.com/package/@rethunk/mcp-multi-root-git)
5
5
  [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
6
6
 
7
- **git** tools over MCP: read-only status, multi-root inventory, `HEAD` parity, presets, structured diff viewer, log, push, worktrees, soft-reset, batch commit, merge, and cherry-pick. **Install and MCP client wiring:** **[docs/install.md](docs/install.md)** only — do not duplicate those steps elsewhere.
7
+ **git** tools over MCP: status, multi-root inventory, `HEAD` parity, presets, logs, structured and raw diff views, commit inspection, fetch, stash, tag, batch commit, push, merge, cherry-pick, worktrees, and soft-reset. **Install and MCP client wiring:** **[docs/install.md](docs/install.md)** only — do not duplicate those steps elsewhere.
8
8
 
9
9
  **Repository:** [github.com/Rethunk-AI/mcp-multi-root-git](https://github.com/Rethunk-AI/mcp-multi-root-git) · **npmjs (manual releases):** [`@rethunk/mcp-multi-root-git`](https://www.npmjs.com/package/@rethunk/mcp-multi-root-git) · **GitHub Packages (CI on each tag):** [`@rethunk-ai/mcp-multi-root-git`](https://github.com/Rethunk-AI/mcp-multi-root-git/packages) — see [docs/install.md](docs/install.md) and [HUMANS.md](HUMANS.md) Publishing.
10
10
 
@@ -14,7 +14,21 @@
14
14
  |-----|----------|
15
15
  | **[docs/install.md](docs/install.md)** | Single source for prerequisites, running the package, and every supported MCP client (plus from-source and troubleshooting) |
16
16
  | **[docs/mcp-tools.md](docs/mcp-tools.md)** | Tool ids, client naming, `format` / JSON, resource URI, workspace root resolution (canonical reference) |
17
+ | **[schemas/index.json](schemas/index.json)** | Published JSON schemas for all MCP tool parameters (JSON Schema draft 2020-12 format) |
17
18
  | **[HUMANS.md](HUMANS.md)** | Preset file, dev commands, CI, publishing |
18
19
  | **[AGENTS.md](AGENTS.md)** | Contributors: implementation map ([`src/server/`](src/server/) + entry [`src/server.ts`](src/server.ts)), contract bumps, CI |
20
+ | **[CONTRIBUTING.md](CONTRIBUTING.md)** | Dev setup, hooks, commit conventions, release checks, and how to add tools |
21
+ | **[SECURITY.md](SECURITY.md)** | Disclosure policy, threat model, and repository safety guidance |
22
+ | **[specs/README.md](specs/README.md)** | Active / done / parked specification layout used for repo planning |
19
23
 
20
24
  **Tools at a glance:** see the table in **[docs/mcp-tools.md](docs/mcp-tools.md)**.
25
+
26
+ ## JSON Schemas
27
+
28
+ All MCP tool parameters are published as JSON Schema (draft 2020-12) documents in the **[`schemas/`](schemas/)** directory. Tools and validators can use these schemas to validate tool input arguments without reading source code.
29
+
30
+ **Schema files:**
31
+ - `schemas/index.json` — Index of all 20 tool schemas with file paths
32
+ - `schemas/{tool_name}.json` — Individual schema for each tool (e.g., `schemas/batch_commit.json`, `schemas/git_status.json`)
33
+
34
+ For programmatic use, read `schemas/index.json` to discover available tools and their schema files.