A Monday standup from the log
Every Monday at 8:30, read the git log of my repository for the last seven days, group the commits by what they changed, and write a short standup note I can read in two minutes.
Verified MCP server: Git
The short answer
Last verified 2026-08-03
The git MCP server runs git commands against repositories that already sit on your Mac: status, diffs, log, branches, commits. It is not the GitHub server, and the twelve tools it exposes stop at the edge of your machine, with no clone, no fetch and no push among them, so there is no token to paste and no account to create. It ships from the Model Context Protocol project as a Python package, mcp-server-git, and starts with uvx. We did not take the README's word for any of that: we pointed it at a throwaway repository, spoke the protocol to it, enumerated every tool, ran real calls, and kept the raw output, including the crash the plain uvx command gave us and the one-flag fix. All of it is on this page. [1][3][6]
Verification
Method
We spawned the server with uvx over stdio, pointed at one throwaway repository with --repository, completed the MCP initialize handshake, called tools/list, and ran nine real tool calls: five read-only ones that succeeded, and four we expected to fail, which is where most of the troubleshooting section comes from. Nothing we called changed the repository. A second session, started with no --repository at all, produced the last error below. The plain uvx mcp-server-git command crashed before the handshake on this Mac, so both sessions used uvx --with mcp<2 mcp-server-git, which pins the Python MCP SDK to 1.29.0. The Mac ran Python 3.14.3 and uv 0.10.11. Node appears in the strip above only because our test client is a Node process; this server does not need it. The server prints nothing at all on startup, on stdout or stderr, so the banner below is the raw one-line initialize response as it came off the wire.
Startup banner
{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-06-18","capabilities":{"experimental":{},"tools":{"listChanged":false}},"serverInfo":{"name":"mcp-git","version":"1.29.0"}}}One real tool call
tools/call git_status {"repo_path": "/private/tmp/mcp-git-demo/demo-repo"}Repository status: On branch main Changes not staged for commit:
Real lines from the captured result: enough to prove the call answered.
Tools
The server answered tools/list with 12 tools on 2026-08-03. The names, descriptions and parameters below are its own words, copied from that response and never edited.
| Tool | What it does |
|---|---|
| git_statusrepo_path* | Shows the working tree status |
| git_diff_unstagedrepo_path*context_lines | Shows changes in the working directory that are not yet staged |
| git_diff_stagedrepo_path*context_lines | Shows changes that are staged for commit |
| git_diffrepo_path*target*context_lines | Shows differences between branches or commits |
| git_commitrepo_path*message* | Records changes to the repository |
| git_addrepo_path*files* | Adds file contents to the staging area |
| git_resetrepo_path* | Unstages all staged changes |
| git_logrepo_path*max_countstart_timestampend_timestamp | Shows the commit logs |
| git_create_branchrepo_path*branch_name*base_branch | Creates a new branch from an optional base branch |
| git_checkoutrepo_path*branch_name* | Switches branches |
| git_showrepo_path*revision* | Shows the contents of a commit |
| git_branchrepo_path*branch_type*containsnot_contains | List Git branches |
Parameters marked with * are required.
Setup
Copy the block for the app you use. Each one is the configuration this server was verified with.
Open the file ~/Library/Application Support/Claude/claude_desktop_config.json (in Claude Desktop: Settings, then Developer, then Edit Config) and add:
{
"mcpServers": {
"git": {
"command": "uvx",
"args": [
"--with",
"mcp<2",
"mcp-server-git",
"--repository",
"/Users/yourname/code/your-repo"
]
}
}
}Replace the repository path with your own, then quit and reopen Claude Desktop. The two --with lines pin the Python MCP SDK below 2.0, which is what made the server start on 2026-08-03; drop them once a release of mcp-server-git supports mcp 2.x. If the server does not appear, put the full path that which uvx prints in the command field, because a Mac app does not always inherit your shell PATH. [8][7]
One command in your terminal:
claude mcp add git -- uvx --with 'mcp<2' mcp-server-git --repository ~/code/your-repo
Everything after the double dash is the exact command Claude Code will run. Keep the quotes around mcp<2 so your shell does not read the less-than sign as a redirect, and swap the path for the repository you want to open. [9]
Add to ~/.cursor/mcp.json for every project, or to .cursor/mcp.json inside one project:
{
"mcpServers": {
"git": {
"command": "uvx",
"args": [
"--with",
"mcp<2",
"mcp-server-git",
"--repository",
"/Users/yourname/code/your-repo"
]
}
}
}Cursor picks the file up on restart. Point --repository at the project you are in, and add a second entry with a different name for a second repository. [10]
No JSON file and no terminal. In Routines: Settings, then Assistant, then Connections, then Add MCP Server. Switch the form to Command (stdio) and enter:
Name Git Command uvx Arguments --with mcp<2 mcp-server-git --repository /Users/yourname/code/your-repo
The Arguments field splits on spaces and does no quoting, so mcp<2 goes in bare and the repository path must have no spaces in it, starting with /Users. Click Test Connection first: a working server answers with its tool count, twelve for this one. [11]
No terminal needed
If you have never opened Terminal and would rather keep it that way, this is your path, with one unavoidable exception noted in the first step. Routines is a Mac app that runs MCP servers for you: fill in three fields once, and this server's tools are available to your AI in chat and in scheduled routines.
01
Download the app from getroutines.ai/download, drag it to Applications, and sign in. This server is Python, so it also needs uv, the tool that provides the uvx command. Install it from astral.sh/uv, or with one terminal line if you already use Homebrew: brew install uv.
02
Click your account at the bottom of the sidebar and choose Settings. Open the Assistant section, then the Connections tab, scroll to MCP Servers, and click Add MCP Server.
03
The form opens in URL mode. Switch it to Command (stdio): this server is a command that runs on your Mac, not a web address.
04
Name: Git. Command: uvx. Arguments: --with mcp<2 mcp-server-git --repository followed by a space and the full path of the repository folder, like /Users/yourname/code/your-repo. Write the path in full, starting with /Users, with no spaces in it.
05
Leave Environment Variables empty, this server needs none. Click Test Connection: Routines starts the server and reports how many tools it found, twelve for this one. Then click Add Server.
06
The tools work in chat right away, so you can ask what changed in the repo this week. To let a scheduled routine use them, open the routine, find the Tools & connections card, and tick the server under Apps.
Routine ideas
Once the server is connected, a scheduled routine can use its tools while you are away. Copy a prompt, paste it into Routines, and pick a time.
Every Monday at 8:30, read the git log of my repository for the last seven days, group the commits by what they changed, and write a short standup note I can read in two minutes.
Every Friday at 17:00, list the commits on the main branch since last Friday, drop the merge and formatting ones, and draft plain-language release notes with one line per user-visible change.
Every weekday at 18:00, check the git status of my repository, and if anything is modified or staged but not committed, list the files with a one-line summary of the unstaged diff so I know what I left open.
Troubleshooting
Real errors captured during the verification run, printed exactly as the server returned them.
What you see
File "/Users/[REDACTED]/.cache/uv/archive-v0/OwIFwgGFXK4fyeBJ7kmJc/lib/python3.14/site-packages/mcp_server_git/server.py", line 321, in serve
@server.list_tools()
^^^^^^^^^^^^^^^^^
AttributeError: 'Server' object has no attribute 'list_tools'The fix
This is what plain uvx mcp-server-git did on our Mac on 2026-08-03, and it reproduced with uvx --refresh. The package asks for mcp>=1.0.0, uv installs the newest one, and mcp 2.0.0 dropped the decorator API this server still uses. Your client will not show the traceback; it reports a dead server, and our stdio client reported MCP error -32000: Connection closed. Add --with mcp<2 in front of mcp-server-git, as every config on this page does, and the server starts. What you see above is the final lines of the traceback, the home directory in them is redacted, and the full capture is banked in the verification receipts.
What you see
Repository path '/private/tmp' is outside the allowed repository '/private/tmp/mcp-git-demo/demo-repo'
The fix
Working as designed, and we triggered it on purpose. When you start the server with --repository, that one folder is the fence, and any repo_path outside it comes back like this. Either ask about the repository you allowed, or add a second server entry with a different name pointed at the other repository.
What you see
Ref 'no-such-branch' did not resolve to an object
The fix
The name reached git and git could not resolve it: a typo, a branch that only exists on the remote, or a commit that was rebased away. Ask for git_branch first to see the real list, then repeat the request with a name from it. This server has no fetch tool, so a branch that has never been pulled to your Mac is invisible to it.
What you see
/private/tmp/mcp-git-demo
The fix
That whole line is the error. It happens when the server was started without --repository and the folder it was handed is not a git repository: GitPython raises InvalidGitRepositoryError, whose message is just the path, and the server passes it straight through. Point the request at a folder that contains a .git directory, or start the server with --repository so the mistake is caught with a sentence instead.
The fix
The uvx command belongs to uv. If uv is not installed, every client on this page fails at the spawn step before the server can say anything. Install it from astral.sh/uv, then run which uvx in a terminal: if it prints a path but a Mac app still cannot start the server, paste that full path into the command field, because an app launched from the Dock does not always inherit your shell PATH.
FAQ
It is the git server of the Model Context Protocol project: a small Python program that runs git commands on a repository already cloned on your Mac and reports the results back to an AI assistant. Once connected, Claude can read the log, show diffs, list branches, stage files and commit, all through git itself. It runs as a local process and talks to your AI app over stdio. [5][6]
The running server exposes 12 tools: reading (git_status, git_log, git_show, git_branch), comparing (git_diff, git_diff_staged, git_diff_unstaged), and changing (git_add, git_commit, git_reset, git_create_branch, git_checkout). The table above is the live tools/list output, word for word.
No, and the difference is the whole point. This one drives the git binary against a folder on your Mac and never signs in anywhere: the twelve tools include no clone, no fetch and no push. The GitHub server talks to github.com over the API and needs a token, which is how it can open pull requests and read issues. Many people run both, one for the working copy and one for the hosted side. [5]
It is fenced to the repository you name with --repository, and we tested that fence: asking about /private/tmp while another folder was allowed returned the refusal printed in the troubleshooting section. The real risk is that four of the twelve tools write. git_commit records commits, git_add stages, git_reset unstages everything, and git_checkout can move you off unfinished work, so point it at a repository whose history you would not mind rewinding, and read what the assistant proposes before approving it.
Almost never. In Routines you fill three fields in Settings and click Test Connection; the walkthrough above shows every click. The one exception is uv itself, which this server runs on: it has a downloadable installer, and one terminal line if you prefer Homebrew. Claude Desktop needs a small JSON file edited once, and only Claude Code is terminal-first by nature. [11][8]
No. There is nothing to sign up for and no credential to paste, because everything happens against a repository that is already on your disk. The uvx command downloads the package from the public PyPI registry on first run, so the very first start needs an internet connection; after that it is cached on your Mac. [1]
Because it does not report one of its own. The source creates its MCP server as Server("mcp-git") with no version argument, so the SDK falls back to printing its own package version, and our run pinned that SDK to 1.29.0. The package we installed is mcp-server-git 2026.7.10, a date stamped at publish time. Three numbers, all real, all captured above. [1][6][7]
Sources
Anything on this page we did not observe in the run is linked here, with the date we read it. The run itself is the receipt for the rest.
[1]
Latest version 2026.7.10, published 2026-07-10; author Anthropic, PBC.; declares mcp>=1.0.0.
[2]
128,807 downloads in the last week and 758,320 in the last month at access time.
[3]
89,142 stars and a push dated 2026-08-03 at access time, per the GitHub API.
[4]
The project states it is transitioning from the MIT License to Apache-2.0; docs are CC-BY-4.0. The package metadata still declares MIT.
[5]
[6]
Creates Server("mcp-git") with no version and runs stdio_server(): the server speaks stdio and declares no version of its own.
[7]
mcp 2.0.0 was published on 2026-07-28, the release that breaks mcp-server-git 2026.7.10.
[8]
The Claude Desktop config file path and the mcpServers command and args shape.
[9]
The claude mcp add [options] <name> -- <command> [args...] syntax for local stdio servers.
[10]
[11]
How Routines runs one-click OAuth connectors and any MCP server.
This page describes Git as it behaved in one dated run on one Mac. Versions move: if something here no longer matches what you see, the capture date at the top says how old the reading is.
Behind this directory
Routines, the app behind this directory, runs MCP servers like this one without a terminal: see how connectors work. Your notes stay markdown files on your Mac, there is no cloud bill, and it works offline. Download Routines