A powerful MCP server for Git actions — enabling AI assistants (Cursor, Claude, ChatGPT) to safely control repositories including private and self-hosted remotes.
Git Mind MCP aims to be the go-to MCP server for Git intelligence and actions. It provides read operations (status, diff, blame, branches) and write workflows (stage, unstage, commit, push, pull, checkout, merge, stash, fetch, reset, cherry_pick, revert, tag, branching) with built-in guardrails to prevent destructive operations.
March 2, 2026
Optional config file✅ — Load config fromgit-mind.config.jsonor.git-mind.json; env vars override; supportsGIT_MIND_CONFIG_FILEfor custom pathDry-run support for critical ops✅ —GIT_MIND_DRY_RUN=1simulates push, pull, merge, delete_branch, reset, cherry_pick, revertClient setup docs✅ — Cursor, Claude Desktop, ChatGPT setup guides indocs/setup/✅ — Rebase current branch onto target; supports abort/continue for conflict resolutionrebasetoolchangelog, contribution guide✅ — CHANGELOG.md, CONTRIBUTING.md✅ — Add/remove/set-url remotes; config file (protectedRemotes) + dry-runremotetool✅ — Reflog for recovery and debuggingget_reflogtoolResponse UX improvements✅ — Markdown-style formatting, icons, clearer structure for status, history, branches, remotes, stage, commit, push✅ — Initialize new Git repository (git init; supports bare)inittool✅ — Clone repository from URL (git clone; config + dry-run)clonetool✅ — Show commit details (message, author, diff)get_showtool✅ — Read Git configuration (key or all)get_configtool✅ — Rename branch (protected branches blocked; dry-run)branch_renametool✅ — Read .gitignore and optional .git/info/exclude (useful for AI context)get_ignoretool✅ — Get current branch name (git branch --show-current equivalent)get_current_branchtool
| Area | Status |
|---|---|
| Read tools | ✅ Complete |
| Write tools | ✅ stage, unstage, commit, push, force_push, pull, checkout, create_branch, delete_branch, merge, stash, fetch, reset, cherry_pick, revert, tag, rebase, remote, init, clone |
| Safety layer | ✅ Config file + env + guard |
| Private server support | ✅ Via standard Git (SSH/HTTPS) |
Read
get_status— Working tree and staged changesget_commit_history— Recent commits with author, date, messageget_diff— Diffs for working tree, staged, or between refsget_blame— Line-by-line blameget_branches— Local and remote branchesget_remotes— List remotes and URLsget_reflog— Reflog (recovery, lost commits, branch history)get_show— Show commit details (message, author, diff)get_config— Read Git configuration (key or all)get_log— Commit log with filtersget_describe— Human-readable ref description (e.g. v1.2.3-5-gabc1234)get_ls_files— List tracked (or staged, others) filesget_shortlog— Summarize commits by authorget_ignore— Read .gitignore (and optional .git/info/exclude)get_current_branch— Get current branch namesuggest_commit_message— Staged diff for AI commit message suggestions
Write
stage,unstage,commit— Stage and commit changespush,force_push,pull— Sync with remotes (guardrails applied; force_push opt-in)checkout— Switch branch or restore filecreate_branch,delete_branch,branch_rename— Branch management (protected branches blocked)merge— Merge a branch into current (cannot merge into protected branches)stash— Stash working changes (push/pop/list)fetch— Fetch from remote (updates refs, no merge)reset— Reset HEAD (soft/mixed only; --hard blocked)cherry_pick— Apply a commit onto current branch (protected branches blocked)revert— Create revert commit (protected branches blocked)tag— List tags or create lightweight/annotated tagrebase— Rebase current branch onto another (rebase/abort/continue; protected branches blocked)remote— Add, remove, set-url remotes (config file + dry-run; protected remotes blocked)init— Initialize new Git repository (bare or normal)clone— Clone repository from URL into local directorymv— Move or rename files (git mv; tracks rename for better diff history)archive— Create tar/zip archive of repo at a ref (release bundles; dry-run)bisect— Binary search to find bug-introducing commit (start/bad/good/reset/run; dry-run)worktree— Manage multiple working trees (add/list/remove; dry-run)
Target: ~1 week ✅
Safety layer (operation allowlist, protected branches)✅Environment-based config (✅GIT_MIND_*)Write tools:✅stage,unstage,commit✅get_remotesread toolUnit tests for stage, unstage, commit✅
Target: ~1 week ✅
✅push,pullwith safety checks✅checkout,create_branch,delete_branchProtected-branch enforcement✅Unit tests for push, pull, checkout, create_branch, delete_branch✅
Target: ~1 week ✅ Complete
✅merge✅stash(push/pop/list)✅reset(soft/mixed only)✅fetchOptional✅ (addforce_pushbehind config flagforce_pushto GIT_MIND_ALLOWED_ACTIONS)Dry-run support for critical ops✅ (GIT_MIND_DRY_RUN=1)Client setup docs: Cursor, Claude, ChatGPT✅- Deferred: Integration tests for remote operations (optional)
Target: Ongoing ✅ Ready
changelog✅ (CHANGELOG.md)contribution guide✅ (CONTRIBUTING.md)✅cherry_pick,revert,tagOptional: config file✅All tools implemented & tested✅ (50 tool test files, 217+ tests)prepublishOnly script✅ — Runs build + test beforenpm publish- npm publish — Run
npm run ci && npm publishwhen ready - Community feedback and iteration
| Tool | Status | Risk |
|---|---|---|
| get_status | ✅ | — |
| get_commit_history | ✅ | — |
| get_diff | ✅ | — |
| get_blame | ✅ | — |
| get_branches | ✅ | — |
| suggest_commit_message | ✅ | — |
| get_remotes | ✅ | — |
| get_reflog | ✅ | — |
| get_show | ✅ | — |
| get_config | ✅ | — |
| stage | ✅ | Low |
| unstage | ✅ | Low |
| commit | ✅ | Low |
| push | ✅ | Medium |
| pull | ✅ | Medium |
| checkout | ✅ | Low |
| create_branch | ✅ | Low |
| delete_branch | ✅ | Medium |
| branch_rename | ✅ | Low |
| merge | ✅ | Medium |
| stash | ✅ | Low |
| reset | ✅ | Medium (soft/mixed only) |
| fetch | ✅ | Low |
| cherry_pick | ✅ | Medium |
| revert | ✅ | Medium |
| tag | ✅ | Low |
| rebase | ✅ | Medium |
| remote | ✅ | Low |
| init | ✅ | Low |
| clone | ✅ | Medium |
| mv | ✅ | Low |
| archive | ✅ | Low |
| bisect | ✅ | Low |
| worktree | ✅ | Low |
| get_describe | ✅ | — |
| get_ls_files | ✅ | — |
| get_shortlog | ✅ | — |
| get_ignore | ✅ | — |
| get_current_branch | ✅ | — |
| force_push | ✅ | High (opt-in via GIT_MIND_ALLOWED_ACTIONS) |
- Safe by default — Destructive ops (
reset --hard,push --force) blocked unless explicitly enabled - Protected branches — Configurable list (e.g.
main,master) where force/delete are blocked - Operation allowlist — Only approved actions can run; configurable per environment
See docs/safety.md for details.
- README — Installation and usage
- CHANGELOG — Version history
- CONTRIBUTING — Contribution guide
- LibreChat Integration — Setup for LibreChat
Last updated: March 2, 2026