MCP Server · Go · 100% Local

Your AI agent can't use git

Raw git returns text for humans. Your agent has to parse it, guess state, and hope it doesn't break. git-courer is an MCP server that speaks JSON — so your agent actually understands what's happening.

$ go install github.com/blak0p/git-courer@latest

Every git operation. Rebuilt for agents.

All return structured JSON. No text parsing, no pager hangs, no guessing. But one of them is special.

statusComplete repo state in one call — branch, ahead/behind, staged, unstaged, conflicts, stash. Raw git needs 5+ commands.
diffAST-annotated: [NEW_FUNC] [MOD_SIG ⚠BREAKING] [DEL]. Your agent knows what changed, not just what lines moved.
commit ★The special one. 3-phase pipeline: PREVIEW parses AST and groups files by dependency graph, APPLY executes. Each commit is a structured JSON capsule with WHY + WHAT.
branchCreate, delete, rename, switch. Auto-stashes dirty tree. Structured JSON output.
merge / rebaseConflicts returned as a JSON list, not >>>>>> markers. The agent knows exactly what to fix.
stage / reset / stashStructured add, restore, clean, reset, stash. Safety gates on destructive operations.
history / blameStructured log and reflog. Paginated, filterable. No pager hangs. Blame returns JSON per line.
sync / remotes / tagPush, pull, fetch, remotes, tags. PUSH requires explicit confirmation. All structured.
backup / undoAuto-backup before every destructive operation. One call to undo anything.
pr-reviewTests + conflicts + diff stats + divergence in one call. Pre-PR gate.
config / initRead/write config. Init creates .git-courer/ — the persistent memory directory.
commit-jobsList active background commit jobs. The agent doesn't block while PREVIEW runs.

Commits that any LLM can read directly.

A git-courer commit is not a text blob. It's a structured JSON capsule with WHY and WHAT — designed so any LLM can consume it without parsing, guessing, or hallucinating.

fix: refactor user navigation and implement profile page

WHY
The user navigation lacked visual consistency and clear indicators for unauthenticated states, and there was no dedicated interface for users to manage their personal information or account details.

WHAT
* Redesigned the user dropdown and navigation bar with improved typography, icons, and dynamic greeting labels. * Implemented a new user profile page with real-time data fetching from the authentication API. * Removed redundant silent refresh logic in Layout.astro to prevent UI desynchronization. * Refactored authentication logic to handle session state updates and secure logout redirection.

Go parses the AST, classifies the change type, and groups files by dependency graph — all before the LLM sees anything. The LLM only writes the human-readable message from the annotated diff. Zero tokens spent on understanding what changed.

Every commit survives squash merges.

Each commit is persisted as JSON in .git-courer/. When GitHub squashes your PR, git log loses the individual history. git-courer doesn't use git log — it reads its own store.

✕ What git log sees after a squash

feat: add dark mode
One commit. The 14 individual commits that built it are gone.
vs

✓ What git-courer remembers

feat: add theme context provider
WHY: persist theme preference across sessions
feat: add dark mode CSS variables
WHY: base styles for dark color scheme
fix: contrast ratio on dark mode buttons
WHY: accessibility audit flagged 3.2:1 ratio

Release reads from the CommitStore — not git log. Aggregates commits across all branches, deduplicates by SHA. Go calculates the version bump from commit types (feat: → minor, fix: → patch). The LLM only writes the changelog. The version number is never at the mercy of a model.

A real session. Zero cloud calls.

The agent calls status, reads structured JSON, then commits with full AST context — all locally.

git-courer · MCP session

Built in the open. Growing organically.

31GitHub Stars
22MCP tools
14Auto-configured clients
0Cloud tokens per commit

Your agent deserves better than raw git.

Install once. Your code never leaves your machine.

View on GitHub →