Skip to content

v2.0.0

Choose a tag to compare

@blade47 blade47 released this 11 Oct 04:52
17a8aaa

Rewritten on the MCP TypeScript SDK v2, serving the 2026-07-28 and 2025-11-25 protocol revisions.

Changed

  • The tools other than list_repos work on the current project when repo is omitted (Claude Code's project directory, or the only tracked project when the client names no project directory). end_session no longer needs a session id: it ends the project's active session.
  • end_session takes an optional session_id (was sessionId); commitHash is gone.
  • end_session with no session on the current project names the project that has one, with its session id.
  • checkpoint is made by the ShadowGit app, so it follows .shadowgit-ignore; it needs ShadowGit 0.3.4 or later. The author parameter 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_API points at.
  • Server instructions tell the assistant when to use each tool; tools carry titles, annotations and output schemas.
  • git_command output is capped at 25,000 characters, git runs asynchronously, and status no longer touches the snapshot index.
  • SHADOWGIT_STORAGE_DIR points the server at a non-default ShadowGit storage folder, as it does for the app.
  • git_command accepts -C, -c and -e again (copy detection, combined diffs, cat-file -e).
  • git_command ends its output with [git exited with status N] when git exits non-zero, so cat-file -e on a missing object does not read as success.
  • Tool failures come back as MCP errors (isError) instead of a success: false field.
  • list_repos reports a project whose history cannot be read in its own row, and keeps listing the others.
  • Requires Node.js 20 or later.

Security

  • git_command refuses options that read or write files outside the snapshot history: --output and -O/--orderfile on every subcommand, diff --no-index, blame --contents/--ignore-revs-file/-S, ls-files --exclude-from/-X/--exclude-per-directory and rev-parse --resolve-git-dir, abbreviated or bundled, and any path outside the project (which diff would otherwise compare with --no-index).
  • git_command refuses --ext-diff, --textconv and --filters on every subcommand, which would run helper commands from the history's git configuration, and --submodule and --recurse-submodules, which would open a submodule's repository outside the project. git always runs with core.fsmonitor, diff.submodule and submodule.recurse fixed, so the history's own config cannot run a program or switch submodule recursion on.
  • git_command refuses --help, which would open git's manual.
  • git_command runs git without the GIT_* 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.git folder.

Removed

  • SHADOWGIT_HINTS, SHADOWGIT_LOG_LEVEL and the workflow banners appended to results.

Install

claude mcp add --scope user shadowgit -- npx -y shadowgit-mcp-server

On npm as shadowgit-mcp-server@2.0.0.