Repository navigation
v2.0.0
Rewritten on the MCP TypeScript SDK v2, serving the 2026-07-28 and 2025-11-25 protocol revisions.
Changed
- The tools other than
list_reposwork on the current project whenrepois omitted (Claude Code's project directory, or the only tracked project when the client names no project directory).end_sessionno longer needs a session id: it ends the project's active session. end_sessiontakes an optionalsession_id(wassessionId);commitHashis gone.end_sessionwith no session on the current project names the project that has one, with its session id.checkpointis made by the ShadowGit app, so it follows.shadowgit-ignore; it needs ShadowGit 0.3.4 or later. Theauthorparameter is gone (the assistant's name is used), and titles may run to 72 characters.- A slow ShadowGit app is reported as slow, not as closed; checkpoints wait up to 55 s.
- The "ShadowGit isn't running" error names the host that
SHADOWGIT_SESSION_APIpoints at. - Server instructions tell the assistant when to use each tool; tools carry titles, annotations and output schemas.
git_commandoutput is capped at 25,000 characters, git runs asynchronously, andstatusno longer touches the snapshot index.SHADOWGIT_STORAGE_DIRpoints the server at a non-default ShadowGit storage folder, as it does for the app.git_commandaccepts-C,-cand-eagain (copy detection, combined diffs,cat-file -e).git_commandends its output with[git exited with status N]when git exits non-zero, socat-file -eon a missing object does not read as success.- Tool failures come back as MCP errors (
isError) instead of asuccess: falsefield. list_reposreports a project whose history cannot be read in its own row, and keeps listing the others.- Requires Node.js 20 or later.
Security
git_commandrefuses options that read or write files outside the snapshot history:--outputand-O/--orderfileon every subcommand,diff --no-index,blame --contents/--ignore-revs-file/-S,ls-files --exclude-from/-X/--exclude-per-directoryandrev-parse --resolve-git-dir, abbreviated or bundled, and any path outside the project (whichdiffwould otherwise compare with--no-index).git_commandrefuses--ext-diff,--textconvand--filterson every subcommand, which would run helper commands from the history's git configuration, and--submoduleand--recurse-submodules, which would open a submodule's repository outside the project. git always runs withcore.fsmonitor,diff.submoduleandsubmodule.recursefixed, so the history's own config cannot run a program or switch submodule recursion on.git_commandrefuses--help, which would open git's manual.git_commandruns git without theGIT_*variables the server inherited, in any case (GIT_INDEX_FILE,GIT_OBJECT_DIRECTORY,GIT_DIR...), which would otherwise point it at another repository when a client starts from a git hook.- Projects not tracked by ShadowGit are refused even when they contain a
.shadowgit.gitfolder.
Removed
SHADOWGIT_HINTS,SHADOWGIT_LOG_LEVELand the workflow banners appended to results.
Install
claude mcp add --scope user shadowgit -- npx -y shadowgit-mcp-serverOn npm as shadowgit-mcp-server@2.0.0.