The surface maps onto the commands you would type anyway, one tool per verb, with the flags that usually decide the outcome exposed rather than hidden: push carries force, tags and noVerify; stash_save carries includeUntracked and keepIndex; tag_create carries annotated and sign. What keeps that from being a round trip per verb is bulk_action, which takes an ordered actions list against one path. There is no merge, rebase, diff or log tool in this set, so history inspection and conflict resolution still happen outside it — this covers the write path rather than the reading-what-changed path.
A Git wrapper exposing 21 tools over a repository path, covering the working tree, branches, tags, remotes, stashes and batched execution.
- The commit path end to end: init creates a repository and clone brings one down from a url, status reports the working tree, add stages files, commit takes a message, and push exposes remote, branch, force, tags and noVerify as parameters.
- Branches as first-class calls: branch_list enumerates them, branch_create takes force, track and setUpstream, branch_delete removes one by name, and checkout switches branches or restores working-tree files from a target.
- Tags with their annotation options: tag_create takes annotated, message, sign and force, while tag_list and tag_delete cover the rest of the lifecycle.
- Remotes: remote_list shows them, remote_add takes a name and url, remote_remove drops one by name.
- Stashes: stash_save takes a message plus all, includeUntracked and keepIndex, stash_list enumerates them, and stash_pop applies and removes one by index.
- Batched execution: bulk_action runs an ordered actions list against one path, and its description names it the preferred way to execute more than one operation.
A local Git repository — every tool takes the path to one, and clone additionally takes the source url. No credentials are configured on the server.
One command — npx -y git-mcp-server
