Verified MCP server: Git

The git MCP server, verified live on a real Mac.

  • Verified2026-08-03macOS 14.4.1
  • Packagemcp-server-git (PyPI) 2026.7.10
  • Self-reportedmcp-git 1.29.0
  • MCP protocol2025-06-18
  • Runtimev25.8.1 (test client)

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]

  • Tools

    12, enumerated live

  • Credentials

    None needed

  • Transport

    stdio, runs on your Mac [6]

  • Maintainer

    modelcontextprotocol [1][3]

  • Downloads

    129k last week on PyPI [2]

  • License

    MIT to Apache-2.0 [4]

Verification

How this MCP server was verified.

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

Every tool, enumerated from the running server.

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.

ToolWhat 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

Working configs, one per app.

Copy the block for the app you use. Each one is the configuration this server was verified with.

Claude Desktop

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]

Claude Code

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]

Cursor

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]

Routines

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

Set the Git MCP server up without the terminal.

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.

  1. 01

    Install Routines, and uv

    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.

  2. 02

    Open the MCP settings

    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.

  3. 03

    Choose Command (stdio)

    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.

  4. 04

    Point it at one repository

    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.

  5. 05

    Test, then add

    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.

  6. 06

    Use it

    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

Routines worth scheduling.

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.

A Monday standup from the log

Prompt

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.

A Friday release-notes draft

Prompt

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.

An end-of-day uncommitted-work check

Prompt

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

The errors we hit, and what fixed them.

Real errors captured during the verification run, printed exactly as the server returned them.

The server dies the moment your client starts it

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.

Every call about another repository is refused

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.

A branch or commit the assistant asked for does not exist

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.

An error message that is only a path

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.

Your MCP client cannot start the server at all

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

Questions people ask.

What is the git MCP server?

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]

What tools does the git MCP server include?

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.

Is the git MCP server the same as the GitHub MCP server?

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]

Is the git MCP server safe?

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.

Do I need the terminal to set it up?

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]

Does it need an API key or an account?

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]

Why does the server report version 1.29.0 in the handshake?

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

Every external claim, receipted.

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. [1]

    PyPI registry: mcp-server-gitaccessed 2026-08-03

    Latest version 2026.7.10, published 2026-07-10; author Anthropic, PBC.; declares mcp>=1.0.0.

  2. [2]

    PyPI download stats: mcp-server-gitaccessed 2026-08-03

    128,807 downloads in the last week and 758,320 in the last month at access time.

  3. [3]

    GitHub: modelcontextprotocol/serversaccessed 2026-08-03

    89,142 stars and a push dated 2026-08-03 at access time, per the GitHub API.

  4. [4]

    modelcontextprotocol/servers LICENSE fileaccessed 2026-08-03

    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. [5]

    Git server README (src/git)accessed 2026-08-03
  6. [6]

    Git server source: server.pyaccessed 2026-08-03

    Creates Server("mcp-git") with no version and runs stdio_server(): the server speaks stdio and declares no version of its own.

  7. [7]

    PyPI registry: mcp (the Python MCP SDK)accessed 2026-08-03

    mcp 2.0.0 was published on 2026-07-28, the release that breaks mcp-server-git 2026.7.10.

  8. [8]

    modelcontextprotocol.io: Connect to local MCP serversaccessed 2026-08-03

    The Claude Desktop config file path and the mcpServers command and args shape.

  9. [9]

    Claude Code docs: MCPaccessed 2026-08-03

    The claude mcp add [options] <name> -- <command> [args...] syntax for local stdio servers.

  10. [10]

    Cursor docs: Model Context Protocolaccessed 2026-08-03

    The mcp.json shape and file locations.

  11. [11]

    Routines: Connectorsaccessed 2026-08-03

    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