Skip to main content
Glama
modelcontextprotocol

git MCP server

Official

mcp-server-git: A git MCP server

Overview

A Model Context Protocol server for Git repository interaction and automation. This server provides tools to read, search, and manipulate Git repositories via Large Language Models.

Source: https://github.com/modelcontextprotocol/servers/tree/main/src/git

Requires MCP Python SDK 2.x (mcp>=2.3,<3). The server is built on the SDK's high-level MCPServer: each tool is a typed Python function, and the SDK derives its input schema from the signature.

Please note that mcp-server-git is currently in early development. The functionality and available tools are subject to change and expansion as we continue to develop and improve the server.

Tools

  1. git_status

    • Shows the working tree status

    • Input:

      • repo_path (string): Path to Git repository

    • Returns: Current status of working directory as text output

  2. git_diff_unstaged

    • Shows changes in working directory not yet staged

    • Inputs:

      • repo_path (string): Path to Git repository

      • context_lines (number, optional): Number of context lines to show (default: 3)

    • Returns: Diff output of unstaged changes

  3. git_diff_staged

    • Shows changes that are staged for commit

    • Inputs:

      • repo_path (string): Path to Git repository

      • context_lines (number, optional): Number of context lines to show (default: 3)

    • Returns: Diff output of staged changes

  4. git_diff

    • Shows differences between branches or commits

    • Inputs:

      • repo_path (string): Path to Git repository

      • target (string): Target branch or commit to compare with

      • context_lines (number, optional): Number of context lines to show (default: 3)

    • Returns: Diff output comparing current state with target

  5. git_commit

    • Records changes to the repository

    • Inputs:

      • repo_path (string): Path to Git repository

      • message (string): Commit message

    • Returns: Confirmation with new commit hash; an error if nothing is staged (as git commit without --allow-empty), except while a merge is in progress (MERGE_HEAD present), where git also allows an empty commit. While a merge is in progress the commit concludes it: its parents are HEAD and every MERGE_HEAD commit, and the merge state is cleared

  6. git_add

    • Adds file contents to the staging area

    • Inputs:

      • repo_path (string): Path to Git repository

      • files (string[]): Non-empty array of file paths to stage; ["."] stages everything

    • Returns: Confirmation of staged files, or a message saying nothing was staged when the call left the index unchanged

  7. git_reset

    • Unstages all staged changes

    • Input:

      • repo_path (string): Path to Git repository

    • Returns: Confirmation of reset operation

  8. git_log

    • Shows the commit logs with optional date filtering

    • Inputs:

      • repo_path (string): Path to Git repository

      • max_count (number, optional): Maximum number of commits to show (default: 10)

      • start_timestamp (string, optional): Start timestamp for filtering commits. Accepts ISO 8601 format (e.g., '2024-01-15T14:30:25'), relative dates (e.g., '2 weeks ago', 'yesterday'), or absolute dates (e.g., '2024-01-15', 'Jan 15 2024')

      • end_timestamp (string, optional): End timestamp for filtering commits. Accepts ISO 8601 format (e.g., '2024-01-15T14:30:25'), relative dates (e.g., '2 weeks ago', 'yesterday'), or absolute dates (e.g., '2024-01-15', 'Jan 15 2024')

    • Returns: Array of commit entries with hash, author, date, and message

  9. git_create_branch

    • Creates a new branch

    • Inputs:

      • repo_path (string): Path to Git repository

      • branch_name (string): Name of the new branch

      • base_branch (string, optional): Base branch to create from (defaults to current branch)

    • Returns: Confirmation of branch creation

  10. git_checkout

  • Switches branches

  • Inputs:

    • repo_path (string): Path to Git repository

    • branch_name (string): Name of branch to checkout

  • Returns: Confirmation of branch switch, or HEAD is now detached at <short sha> when branch_name is not a branch (a sha, tag or other revision)

  1. git_show

  • Shows the contents of a commit, or of a file or directory at a revision

  • Inputs:

    • repo_path (string): Path to Git repository

    • revision (string): The revision (commit hash, branch name, tag) or object spec (HEAD:path/to/file) to show

  • Returns: Contents of the specified commit, file content, or directory listing

  1. git_branch

  • List Git branches

  • Inputs:

    • repo_path (string): Path to the Git repository.

    • branch_type (string): Whether to list local branches ('local'), remote branches ('remote') or all branches('all').

    • contains (string, optional): The commit sha that branch should contain. Do not pass anything to this param if no commit sha is specified

    • not_contains (string, optional): The commit sha that branch should NOT contain. Do not pass anything to this param if no commit sha is specified

  • Returns: List of branches

Protocol versions

The server speaks both eras of the Model Context Protocol over stdio, with nothing to configure: a 2026-07-28 client (discovered with server/discover, no session) and a 2025-11-25 client (the initialize handshake). The client's first request decides which. Tools behave the same in both.

Roots is deprecated in 2026-07-28, and this server never asks a client for Roots in either era: repository access comes from --repository alone, or, with no --repository, from each tool call's repo_path. Methods the 2026-07-28 specification removes, such as ping, are answered only on a 2025-11-25 connection.

Errors

  • A tool that fails returns a result with isError: true whose text is Error executing tool <name>: <message>, so the model can read it and correct the call. This covers git errors (an unknown revision, a failed command), a repo_path that is not a repository or is outside --repository, the flag-injection guards, and arguments that do not match the tool's input schema.

  • An unknown tool name is a protocol error, JSON-RPC -32602 (Unknown tool: <name>), as the specification requires in both eras. Before 2.0.0 it was an isError result.

Related MCP server: GitHub Tools MCP Server

Installation

When using uv no specific installation is needed. We will use uvx to directly run mcp-server-git.

Using PIP

Alternatively you can install mcp-server-git via pip:

pip install mcp-server-git

After installation, you can run it as a script using:

python -m mcp_server_git

Configuration

--repository (-r) accepts any path inside a Git working tree. At startup the server walks up to the enclosing repository root, the way git rev-parse --show-toplevel does, so --repository . works when a shared config is launched from any subdirectory of the repository. A path inside the repository therefore allows tool calls anywhere in that repository, not only under the subdirectory given. A path that does not exist, or is not inside a Git repository, is logged as a one-line error at startup.

Usage with Claude Desktop

Add this to your claude_desktop_config.json:

"mcpServers": {
  "git": {
    "command": "uvx",
    "args": ["mcp-server-git", "--repository", "path/to/git/repo"]
  }
}
  • Note: replace '/Users/username' with a path that you want to be accessible by this tool

"mcpServers": {
  "git": {
    "command": "docker",
    "args": ["run", "--rm", "-i", "--mount", "type=bind,src=/Users/username,dst=/Users/username", "mcp/git"]
  }
}
"mcpServers": {
  "git": {
    "command": "python",
    "args": ["-m", "mcp_server_git", "--repository", "path/to/git/repo"]
  }
}

Usage with VS Code

For quick installation, use one of the one-click install buttons below...

Install with UV in VS Code Install with UV in VS Code Insiders

Install with Docker in VS Code Install with Docker in VS Code Insiders

For manual installation, you can configure the MCP server using one of these methods:

Method 1: User Configuration (Recommended) Add the configuration to your user-level MCP configuration file. Open the Command Palette (Ctrl + Shift + P) and run MCP: Open User Configuration. This will open your user mcp.json file where you can add the server configuration.

Method 2: Workspace Configuration Alternatively, you can add the configuration to a file called .vscode/mcp.json in your workspace. This will allow you to share the configuration with others.

For more details about MCP configuration in VS Code, see the official VS Code MCP documentation.

{
  "servers": {
    "git": {
      "command": "uvx",
      "args": ["mcp-server-git"]
    }
  }
}

For Docker installation:

{
  "mcp": {
    "servers": {
      "git": {
        "command": "docker",
        "args": [
          "run",
          "--rm",
          "-i",
          "--mount", "type=bind,src=${workspaceFolder},dst=/workspace",
          "mcp/git"
        ]
      }
    }
  }
}

Usage with Zed

Add to your Zed settings.json:

"context_servers": [
  "mcp-server-git": {
    "command": {
      "path": "uvx",
      "args": ["mcp-server-git"]
    }
  }
],
"context_servers": {
  "mcp-server-git": {
    "command": {
      "path": "python",
      "args": ["-m", "mcp_server_git"]
    }
  }
},

Usage with Zencoder

  1. Go to the Zencoder menu (...)

  2. From the dropdown menu, select Agent Tools

  3. Click on the Add Custom MCP

  4. Add the name (i.e. git) and server configuration from below, and make sure to hit the Install button

{
    "command": "uvx",
    "args": ["mcp-server-git", "--repository", "path/to/git/repo"]
}

Debugging

You can use the MCP inspector to debug the server. For uvx installations:

npx @modelcontextprotocol/inspector uvx mcp-server-git

Or if you've installed the package in a specific directory or are developing on it:

cd path/to/servers/src/git
npx @modelcontextprotocol/inspector uv run mcp-server-git

Running tail -n 20 -f ~/Library/Logs/Claude/mcp*.log will show the logs from the server and may help you debug any issues.

Development

Tests and coverage

The test suite drives serve() in-process through an MCP ClientSession (see tests/conftest.py), and tests/test_eras.py runs a Client against it as a 2026-07-28 and as a 2025-11-25 client. From src/git:

uv run --frozen pytest                 # the tests
uv run --frozen pytest --cov --cov-report=term-missing --cov-report=json

The second command adds branch coverage of src/mcp_server_git, printed per file and written to coverage.json (ignored by git). Every file must stay at or above 90% of its lines and 90% of its branches. Code that cannot be reached is marked # pragma: no cover # <reason> rather than lowering that bar.

Trying changes in a client

There are two ways to try your changes in a client:

  1. Run the MCP inspector to test your changes. See Debugging for run instructions.

  2. Test using the Claude desktop app. Add the following to your claude_desktop_config.json:

Docker

{
  "mcpServers": {
    "git": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "--mount", "type=bind,src=/Users/username/Desktop,dst=/projects/Desktop",
        "--mount", "type=bind,src=/path/to/other/allowed/dir,dst=/projects/other/allowed/dir,ro",
        "--mount", "type=bind,src=/path/to/file.txt,dst=/projects/path/to/file.txt",
        "mcp/git"
      ]
    }
  }
}

UVX

{
"mcpServers": {
  "git": {
    "command": "uv",
    "args": [
      "--directory",
      "/<path to mcp-servers>/mcp-servers/src/git",
      "run",
      "mcp-server-git"
    ]
    }
  }
}

Build

Docker build:

cd src/git
docker build -t mcp/git .

License

This MCP server is licensed under the MIT License. This means you are free to use, modify, and distribute the software, subject to the terms and conditions of the MIT License. For more details, please see the LICENSE file in the project repository.

Available Tools

12 tools
git_addC
Idempotent

Adds file contents to the staging area

NameRequiredDescriptionDefault
filesYes
repo_pathYes

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), so the description carries a lighter burden. It usefully identifies the staging-area target, which is the core behavioral effect and is not encoded in any structured field, but it omits what forms the 'files' argument accepts (paths, globs, directories) and doesn't clarify that nothing is committed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single eight-word sentence with no filler and the effect front-loaded. It is efficient, though the brevity edges toward under-specification rather than genuine conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating tool with zero parameter documentation, no output schema, and a dense ecosystem of sibling git operations, the description does too little. It never explains the staging concept, how it relates to git_commit or git_reset, or what the caller learns about success.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for both parameters, so the description must compensate, and it does not. 'File contents' gestures vaguely at 'files' but gives no path syntax or multi-file semantics, and 'repo_path' is entirely unaddressed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb ('Adds') and resource ('file contents') plus the destination ('staging area'), which is enough for an agent familiar with git to distinguish it from git_commit and git_reset. However, it never explicitly contrasts itself with any sibling, so the differentiation is inferred from domain knowledge rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description contains no when-to-use guidance: no mention that it precedes git_commit, no note that git_reset unstages, and no statement about selecting subsets of files. An agent must rely entirely on prior git knowledge to sequence this tool against its 11 siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

git_branchC
Read-onlyIdempotent

List Git branches

NameRequiredDescriptionDefault
containsNoThe commit sha that branch should contain. Do not pass anything to this param if no commit sha is specified
repo_pathYesThe path to the Git repository.
branch_typeYesWhether to list local branches ('local'), remote branches ('remote') or all branches('all').
not_containsNoThe commit sha that branch should NOT contain. Do not pass anything to this param if no commit sha is specified

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds no behavioral context beyond the word 'List', such as return format, filtering behavior, or handling of remote branches.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded with the core action. However, it is under-specified for a tool with required branch_type and optional commit filters, so it is not appropriately sized to support reliable invocation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The rich input schema and annotations reduce the description's burden, and no output schema is present. Still, the description omits the key distinction between local, remote, and all branches and the contains/not_contains filtering capability, leaving the agent to infer these entirely from the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters are documented in the schema. The description adds no parameter meaning beyond what the schema already provides, making the baseline score of 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource: 'List Git branches'. It distinguishes the tool from write-oriented siblings like git_create_branch and git_checkout by using 'List', but it does not explicitly differentiate among the several read-only siblings such as git_status and git_log.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives. The description gives no conditions, no exclusions, and no mention of related tools like git_create_branch or git_log.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

git_checkoutC

Switches branches

NameRequiredDescriptionDefault
repo_pathYes
branch_nameYes

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=false. The description adds no behavioral context beyond that, such as effect on uncommitted changes, working tree state, or whether the operation can fail on dirty state. It does not contradict annotations, but it adds little value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

'Switches branches' is extremely concise but under-specified for a tool with two required parameters and no schema descriptions. It is front-loaded but not appropriately sized for the complexity, so it reads as incomplete rather than efficiently concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The annotations provide a basic safety profile, and no output schema exists. However, the description leaves out any explanation of the required parameters, usage context, or behavioral side effects, making it too thin for a non-read-only Git operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not mention either required parameter (repo_path or branch_name). With two undocumented required parameters, the description must compensate but provides no semantic detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a clear verb+resource: 'Switches branches.' It identifies the core operation but does not distinguish it from sibling tools like git_create_branch or explain the repo_path/branch_name scope. This fits the rubric for a clear purpose without sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no when-to-use guidance, no conditions, and no mention of alternatives among the many sibling git tools. It only implies usage through the phrase 'switches branches,' which is not enough for explicit selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

git_commitD

Records changes to the repository

NameRequiredDescriptionDefault
messageYes
repo_pathYes

TDQS

D1.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare that this is a mutating, non-idempotent, non-destructive, closed-world operation. The description adds no behavioral context beyond that, such as required git identity configuration, whether staged changes are required, or what happens if the working tree is clean.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single sentence is short, but it is under-specified rather than concise. Every word is vague and no useful information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation tool with no parameter descriptions, no output schema, and only generic annotations, the description is far too thin. It omits essential information about how to call the tool correctly and what the parameters mean.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description mentions neither parameter. It does not explain that repo_path specifies the repository and message provides the commit message, leaving both required parameters completely undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Records changes to the repository' essentially restates what the tool name git_commit already implies, rather than specifying a verb and resource with distinguishing detail. It does not mention that it creates a commit from staged changes using the provided message, so an agent cannot easily differentiate it from sibling tools like git_add or git_reset.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives. It does not state that changes must be staged first, nor does it mention any prerequisites or relationship to sibling tools such as git_add or git_status.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

git_create_branchC

Creates a new branch from an optional base branch

NameRequiredDescriptionDefault
repo_pathYes
base_branchNo
branch_nameYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose the key traits (readOnlyHint=false, idempotentHint=false, destructiveHint=false), so the description only needs to add context. It adds almost none: it never says whether the new branch is checked out afterwards, what happens when branch_name already exists (relevant given idempotentHint=false), or how the base branch defaults.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with the verb and resource front-loaded and no filler. It is efficient, though its brevity edges toward under-specification rather than true conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with 3 undocumented parameters, no output schema, and only hint-level annotations, the description leaves too much unspecified: checkout behavior, default base resolution, and collision handling. An agent can guess the mechanics but is not fully equipped.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden. It conveys only that base_branch is optional; repo_path and branch_name remain completely undocumented, and the default-base behavior for the optional parameter is left ambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (creates) and resource (new branch) plus the notion of an optional base branch, so an agent immediately understands the operation. It does not, however, distinguish itself from siblings like git_branch or git_checkout, which is the only thing keeping it from a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use guidance, no prerequisite (e.g. a clean repo, existing base branch), and no pointer to alternatives such as git_checkout for switching branches or git_branch for listing them. Usage must be inferred entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

git_diffC
Read-onlyIdempotent

Shows differences between branches or commits

NameRequiredDescriptionDefault
targetYes
repo_pathYes
context_linesNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds nothing beyond that — no output format, no size/pagination caveats, no note that the working tree is untouched.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight, front-loaded sentence with no filler. It is appropriately sized, though brevity here borders on under-specification rather than economy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter tool with 0% schema coverage and no output schema, the description leaves key information missing: target syntax (branch vs commit range vs SHA), the meaning of context_lines, and the shape of the diff output.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across three parameters. The description only loosely gestures at the "target" parameter (branches or commits) and says nothing about repo_path or the context_lines default of 3, so it fails to compensate for the undocumented schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Shows differences") and scopes it to branches or commits, which partly separates it from the unstaged/staged diff siblings. However, it never names those siblings, so the agent must infer the distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase "between branches or commits" hints at the comparison scope but gives no explicit when-to-use, when-not-to-use, or routing advice against git_diff_unstaged, git_diff_staged, git_show, or git_status.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

git_diff_stagedB
Read-onlyIdempotent

Shows changes that are staged for commit

NameRequiredDescriptionDefault
repo_pathYes
context_linesNo

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and a closed world, so the safety profile is fully covered without the description. The description adds no further behavior (output format, behavior with nothing staged, pagination), so it is adequate but contributes little.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short, front-loaded sentence with zero filler. It is appropriately sized, though it is so terse that it omits useful detail rather than trimming waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only diff tool with full annotation coverage and no output schema, the essentials are inferable, but the description never mentions what the diff looks like, how paths are interpreted, or what happens when nothing is staged. Minimum viable rather than complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for both parameters, so the description must compensate and does not: neither repo_path nor context_lines (default 3) is explained, and there is no hint about path format or what context lines do. Only the obvious reading of the names carries any meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Shows') and resource ('changes that are staged for commit'), which is precise enough to separate it from git_diff_unstaged by the staged/unstaged qualifier. It does not explicitly name the sibling, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use statement, no prerequisite (e.g. must have staged changes), and no mention of alternatives like git_diff_unstaged or git_status. The 'staged for commit' phrasing faintly implies a pre-commit review context, but nothing is stated explicitly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

git_diff_unstagedB
Read-onlyIdempotent

Shows changes in the working directory that are not yet staged

NameRequiredDescriptionDefault
repo_pathYes
context_linesNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false and destructiveHint=false, so the safety profile is fully covered elsewhere. The description adds only the scoping qualifier ('working directory, not staged'); it says nothing about output format, whether context_lines truncates output, or behavior on a clean tree. With annotations carrying the load, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the defining scope constraint appears immediately. It could have used a few more words productively (alternatives, parameters) but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, non-destructive diff tool with complete annotations and no output schema, the purpose statement is sufficient to call it correctly. However, the entirely undocumented parameters (repo_path required, context_lines default) leave a real gap that a slightly longer description could have closed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% — neither repo_path nor context_lines has any documentation in the schema — and the description mentions no parameters at all. It does not explain that repo_path is the repository to inspect or what context_lines controls, so it fails to compensate for the coverage gap, though both parameters are conceptually self-explanatory to a git-literate agent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Shows') plus a precise resource scope ('changes in the working directory that are not yet staged'), which implicitly separates it from git_diff_staged and git_diff. It is clear, but it never names the sibling it is contrasted with, so differentiation requires the agent to reason about the git workflow rather than being told.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The scope phrase 'not yet staged' implies when this tool is appropriate, but there is no explicit when-to-use guidance, no mention of git_diff_staged or git_diff as alternatives, and no prerequisite (e.g. valid repo_path). Usage is inferable but not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

git_logC
Read-onlyIdempotent

Shows the commit logs

NameRequiredDescriptionDefault
max_countNo
repo_pathYes
end_timestampNoEnd timestamp for filtering commits. Accepts: ISO 8601 format (e.g., '2024-01-15T14:30:25'), relative dates (e.g., '2 weeks ago', 'yesterday'), or absolute dates (e.g., '2024-01-15', 'Jan 15 2024')
start_timestampNoStart timestamp for filtering commits. Accepts: ISO 8601 format (e.g., '2024-01-15T14:30:25'), relative dates (e.g., '2 weeks ago', 'yesterday'), or absolute dates (e.g., '2024-01-15', 'Jan 15 2024')

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds nothing beyond that — no ordering, no default limit behavior, no filtering semantics — so it earns no credit for extra disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single short sentence with no filler, which is structurally clean, but the brevity reflects under-specification rather than disciplined concision. Nothing is front-loaded because there is nothing else to load.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter tool with a defaulted max_count, timestamp filtering, and no output schema, five words are far from sufficient. The agent lacks any sense of what the log entries contain, their ordering, or how the filters interact.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 50%: start_timestamp and end_timestamp are well documented in the schema, but max_count (default 10) and repo_path have no descriptions anywhere. The description does nothing to compensate for those gaps, so it falls below the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a verb ('Shows') and a resource ('commit logs'), so the basic operation is inferable, but it essentially restates the tool name git_log and offers no differentiation from siblings like git_show or git_diff. An agent cannot tell from this text how it relates to those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as git_show for inspecting a single commit. The agent must infer usage purely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

git_resetB
DestructiveIdempotent

Unstages all staged changes

NameRequiredDescriptionDefault
repo_pathYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered. The description contributes one real behavioral fact - that the reset is unscoped ('all') and index-only - but says nothing about whether working-tree edits are preserved or how that differs from a hard reset.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single five-word clause with zero filler and the scope caveat ('all') front-loaded. It is efficient, though so terse that it borders on under-specification rather than crispness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, no-output-schema tool this is roughly the minimum viable: the effect on the index is stated and annotations cover safety. Missing is any hint about repo_path's expected form and whether unstaging leaves working-tree changes intact.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description never mentions repo_path, so nothing compensates for the undocumented parameter. The name 'repo_path' is fairly intuitive, which keeps this above a 1, but format or example guidance is absent from both sources.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('unstages ... staged changes') and makes the 'all' scope explicit, so the agent knows it cannot be limited to one file. It does not name or contrast itself with siblings like git_add or git_diff_staged, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to reach for this tool versus git_add, git_diff_staged, or a hard reset, and no exclusions or prerequisites. Usage must be inferred entirely from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

git_showB
Read-onlyIdempotent

Shows the contents of a commit, or of a file or directory given as :

NameRequiredDescriptionDefault
revisionYes
repo_pathYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds the useful `<revision>:<path>` addressing form, a genuinely behavioral detail, but says nothing about output shape (diff vs. blob vs. metadata) or how large/binary content is handled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler. The verb leads and the two scoping modes (whole commit vs. sub-path) follow immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With safety annotations present and no output schema, the remaining burden is explaining what comes back and how args combine. The description covers the two addressing modes but leaves 'repo_path' unexplained and gives no hint of the return format, so it is adequate but incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for two parameters, so the description carries the burden. It clarifies the `<revision>:<path>` syntax for 'revision', which the bare schema string type does not, but 'repo_path' is left completely undocumented in both places.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Shows') and resource ('contents of a commit, or of a file or directory'), making it clear this is an inspection tool. It separates itself implicitly from git_diff/git_log by scoping to a named revision, though it never names a sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance and no mention of alternatives like git_log or git_diff. An agent must infer from the resource scope alone that this is the tool for reading historical content rather than working-tree changes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

git_statusB
Read-onlyIdempotent

Shows the working tree status

NameRequiredDescriptionDefault
repo_pathYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered without the description. The description adds only a minimal restatement of scope ('working tree'), giving no insight into what the output contains or whether it reflects staged vs unstaged state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short, front-loaded sentence with no filler. It is efficient, though its brevity contributes to the gaps in the other dimensions rather than being purely a virtue.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With strong annotations covering safety and no output schema to explain, the definition is nearly complete for a simple read tool. The remaining gap is the undocumented required repo_path parameter, which an agent must guess at.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the single parameter repo_path is entirely undocumented in both schema and description. The description says nothing about how the repository location is specified, so an agent gets no help on the one required input.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Shows') and resource ('working tree status'), which an agent can map directly onto git status. It does not distinguish itself from siblings like git_diff_unstaged or git_diff, but each sibling is semantically distinct enough that confusion is unlikely.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this versus git_diff or git_diff_staged, nor any note about prerequisites. The agent is left to infer usage entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 12 tool updatesv2.0.0
    • Changedgit_add1 field changed
      • changedInput schema / title
        Previous value: -"GitAdd"New value: +"addArguments"
    • Changedgit_branch1 field changed
      • changedInput schema / title
        Previous value: -"GitBranch"New value: +"branchArguments"
    • Changedgit_checkout1 field changed
      • changedInput schema / title
        Previous value: -"GitCheckout"New value: +"checkoutArguments"
    • Changedgit_commit1 field changed
      • changedInput schema / title
        Previous value: -"GitCommit"New value: +"commitArguments"
    • Changedgit_create_branch1 field changed
      • changedInput schema / title
        Previous value: -"GitCreateBranch"New value: +"create_branchArguments"
    • Changedgit_diff1 field changed
      • changedInput schema / title
        Previous value: -"GitDiff"New value: +"diffArguments"
    • Changedgit_diff_staged1 field changed
      • changedInput schema / title
        Previous value: -"GitDiffStaged"New value: +"diff_stagedArguments"
    • Changedgit_diff_unstaged1 field changed
      • changedInput schema / title
        Previous value: -"GitDiffUnstaged"New value: +"diff_unstagedArguments"
    • Changedgit_log1 field changed
      • changedInput schema / title
        Previous value: -"GitLog"New value: +"logArguments"
    • Changedgit_reset1 field changed
      • changedInput schema / title
        Previous value: -"GitReset"New value: +"resetArguments"
    • Changedgit_show1 field changed
      • changedInput schema / title
        Previous value: -"GitShow"New value: +"showArguments"
    • Changedgit_status1 field changed
      • changedInput schema / title
        Previous value: -"GitStatus"New value: +"statusArguments"
  2. 1 tool update
    • Changedgit_add1 field changed
      • addedInput schema / properties / files / minItems
        Added value: +1
  3. 12 tool updatesv1.0.0
    • Addedgit_add
    • Addedgit_branch
    • Addedgit_checkout
    • Addedgit_commit
    • Addedgit_create_branch
    • Addedgit_diff
    • Addedgit_diff_staged
    • Addedgit_diff_unstaged
    • Addedgit_log
    • Addedgit_reset
    • Addedgit_show
    • Addedgit_status

TDQS

B3/5.0

Scored across 12 tools

Disambiguation4/5

The three diff tools (git_diff_unstaged, git_diff_staged, git_diff) are distinguished by scope, but an agent must read descriptions carefully to choose correctly. Other tools target unique actions/resources, with only minor overlap between git_show and git_log.

Naming Consistency5/5

All tools consistently use a git_ prefix and snake_case, matching familiar Git subcommands. No mixed conventions or ambiguous naming styles are present.

Tool Count5/5

12 tools is well-scoped for a Git server covering core local operations. Each tool earns its place without excessive bloat or thin coverage.

Completeness3/5

The set covers staging, committing, diffing, branching, checkout, log, and show, but omits notable Git lifecycle operations such as branch deletion, merge, rebase, remote push/pull, and stash. Core local workflows work, but the surface is not complete for general Git use.

Maintenance

ActivityActive
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    A Model Context Protocol server that enables Large Language Models to interact with Git repositories through a robust API, supporting operations like repository initialization, cloning, file staging, committing, and branch management.
    28
    3,619 npm
    242
    Apache 2.0
  • A
    license
    B
    quality
    D
    maintenance
    A Model Context Protocol server that enables LLMs to interact with Git repositories, providing tools to read, search, and manipulate Git repositories through commands like status, diff, commit, and branch management.
    12
    MIT
  • A
    license
    C
    quality
    B
    maintenance
    A Model Context Protocol server that enables LLMs to interact with Git repositories, providing tools to read, search, and manipulate Git repositories through commands like status, diff, commit, and branch operations.
    22
    4
    MIT