git MCP server
OfficialThis MCP server lets an LLM read, search, and manipulate Git repositories (via stdio, scoped by --repository or per-call repo_path).
Inspect state:
git_status(working tree status),git_diff_unstaged/git_diff_staged(with configurablecontext_lines)Compare revisions:
git_diffbetween the current state and a target branch/commitBrowse history:
git_log(max count, start/end timestamp filtering),git_show(contents of a commit, or a file/directory at a revision)Explore branches:
git_branch(local/remote/all, filtered by containing or not containing a commit sha)Stage and commit:
git_add(specific files or["."]),git_reset(unstage everything),git_commit(including concluding an in-progress merge)Manage branches:
git_create_branch(optionally from a base branch),git_checkout(switch branches; detached HEAD supported)Errors are returned in-band as
isErrorresults the model can read and correct; unknown tools are JSON-RPC-32602Speaks both MCP eras over stdio (2026-07-28 and 2025-11-25) with no configuration
Provides tools to read, search, and manipulate Git repositories via Large Language Models. Includes functionalities for viewing git status, diffs, committing changes, managing branches, and other git operations.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@git MCP servershow me the last 5 commits in the /home/user/projects/myapp repo"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
git_statusShows the working tree status
Input:
repo_path(string): Path to Git repository
Returns: Current status of working directory as text output
git_diff_unstagedShows changes in working directory not yet staged
Inputs:
repo_path(string): Path to Git repositorycontext_lines(number, optional): Number of context lines to show (default: 3)
Returns: Diff output of unstaged changes
git_diff_stagedShows changes that are staged for commit
Inputs:
repo_path(string): Path to Git repositorycontext_lines(number, optional): Number of context lines to show (default: 3)
Returns: Diff output of staged changes
git_diffShows differences between branches or commits
Inputs:
repo_path(string): Path to Git repositorytarget(string): Target branch or commit to compare withcontext_lines(number, optional): Number of context lines to show (default: 3)
Returns: Diff output comparing current state with target
git_commitRecords changes to the repository
Inputs:
repo_path(string): Path to Git repositorymessage(string): Commit message
Returns: Confirmation with new commit hash; an error if nothing is staged (as
git commitwithout--allow-empty), except while a merge is in progress (MERGE_HEADpresent), where git also allows an empty commit. While a merge is in progress the commit concludes it: its parents areHEADand everyMERGE_HEADcommit, and the merge state is cleared
git_addAdds file contents to the staging area
Inputs:
repo_path(string): Path to Git repositoryfiles(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
git_resetUnstages all staged changes
Input:
repo_path(string): Path to Git repository
Returns: Confirmation of reset operation
git_logShows the commit logs with optional date filtering
Inputs:
repo_path(string): Path to Git repositorymax_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
git_create_branchCreates a new branch
Inputs:
repo_path(string): Path to Git repositorybranch_name(string): Name of the new branchbase_branch(string, optional): Base branch to create from (defaults to current branch)
Returns: Confirmation of branch creation
git_checkout
Switches branches
Inputs:
repo_path(string): Path to Git repositorybranch_name(string): Name of branch to checkout
Returns: Confirmation of branch switch, or
HEAD is now detached at <short sha>whenbranch_nameis not a branch (a sha, tag or other revision)
git_show
Shows the contents of a commit, or of a file or directory at a revision
Inputs:
repo_path(string): Path to Git repositoryrevision(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
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 specifiednot_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: truewhose text isError executing tool <name>: <message>, so the model can read it and correct the call. This covers git errors (an unknown revision, a failed command), arepo_paththat 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 anisErrorresult.
Related MCP server: GitHub Tools MCP Server
Installation
Using uv (recommended)
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-gitAfter installation, you can run it as a script using:
python -m mcp_server_gitConfiguration
--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...
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
Go to the Zencoder menu (...)
From the dropdown menu, select
Agent ToolsClick on the
Add Custom MCPAdd the name (i.e. git) and server configuration from below, and make sure to hit the
Installbutton
{
"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-gitOr 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-gitRunning 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=jsonThe 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:
Run the MCP inspector to test your changes. See Debugging for run instructions.
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 toolsgit_addCIdempotent
Adds file contents to the staging area
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | ||
| repo_path | Yes |
TDQS
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.
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.
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.
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.
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.
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_branchCRead-onlyIdempotent
List Git branches
| Name | Required | Description | Default |
|---|---|---|---|
| contains | No | The commit sha that branch should contain. Do not pass anything to this param if no commit sha is specified | |
| repo_path | Yes | The path to the Git repository. | |
| branch_type | Yes | Whether to list local branches ('local'), remote branches ('remote') or all branches('all'). | |
| not_contains | No | The commit sha that branch should NOT contain. Do not pass anything to this param if no commit sha is specified |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| repo_path | Yes | ||
| branch_name | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | ||
| repo_path | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| repo_path | Yes | ||
| base_branch | No | ||
| branch_name | Yes |
TDQS
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.
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.
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.
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.
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.
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_diffCRead-onlyIdempotent
Shows differences between branches or commits
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | ||
| repo_path | Yes | ||
| context_lines | No |
TDQS
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.
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.
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.
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.
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.
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_stagedBRead-onlyIdempotent
Shows changes that are staged for commit
| Name | Required | Description | Default |
|---|---|---|---|
| repo_path | Yes | ||
| context_lines | No |
TDQS
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.
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.
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.
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.
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.
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_unstagedBRead-onlyIdempotent
Shows changes in the working directory that are not yet staged
| Name | Required | Description | Default |
|---|---|---|---|
| repo_path | Yes | ||
| context_lines | No |
TDQS
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.
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.
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.
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.
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.
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_logCRead-onlyIdempotent
Shows the commit logs
| Name | Required | Description | Default |
|---|---|---|---|
| max_count | No | ||
| repo_path | Yes | ||
| end_timestamp | No | 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') | |
| start_timestamp | No | 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') |
TDQS
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.
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.
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.
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.
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.
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_resetBDestructiveIdempotent
Unstages all staged changes
| Name | Required | Description | Default |
|---|---|---|---|
| repo_path | Yes |
TDQS
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.
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.
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.
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.
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.
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_showBRead-onlyIdempotent
Shows the contents of a commit, or of a file or directory given as :
| Name | Required | Description | Default |
|---|---|---|---|
| revision | Yes | ||
| repo_path | Yes |
TDQS
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.
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.
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.
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.
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.
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_statusBRead-onlyIdempotent
Shows the working tree status
| Name | Required | Description | Default |
|---|---|---|---|
| repo_path | Yes |
TDQS
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.
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.
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.
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.
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.
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.
12 tool updates
v2.0.0- Changed
git_add1 field changed- changed
Input schema / titlePrevious value: -"GitAdd"New value: +"addArguments"
- Changed
git_branch1 field changed- changed
Input schema / titlePrevious value: -"GitBranch"New value: +"branchArguments"
- Changed
git_checkout1 field changed- changed
Input schema / titlePrevious value: -"GitCheckout"New value: +"checkoutArguments"
- Changed
git_commit1 field changed- changed
Input schema / titlePrevious value: -"GitCommit"New value: +"commitArguments"
- Changed
git_create_branch1 field changed- changed
Input schema / titlePrevious value: -"GitCreateBranch"New value: +"create_branchArguments"
- Changed
git_diff1 field changed- changed
Input schema / titlePrevious value: -"GitDiff"New value: +"diffArguments"
- Changed
git_diff_staged1 field changed- changed
Input schema / titlePrevious value: -"GitDiffStaged"New value: +"diff_stagedArguments"
- Changed
git_diff_unstaged1 field changed- changed
Input schema / titlePrevious value: -"GitDiffUnstaged"New value: +"diff_unstagedArguments"
- Changed
git_log1 field changed- changed
Input schema / titlePrevious value: -"GitLog"New value: +"logArguments"
- Changed
git_reset1 field changed- changed
Input schema / titlePrevious value: -"GitReset"New value: +"resetArguments"
- Changed
git_show1 field changed- changed
Input schema / titlePrevious value: -"GitShow"New value: +"showArguments"
- Changed
git_status1 field changed- changed
Input schema / titlePrevious value: -"GitStatus"New value: +"statusArguments"
1 tool update
- Changed
git_add1 field changed- added
Input schema / properties / files / minItemsAdded value: +1
12 tool updates
v1.0.0- Added
git_add - Added
git_branch - Added
git_checkout - Added
git_commit - Added
git_create_branch - Added
git_diff - Added
git_diff_staged - Added
git_diff_unstaged - Added
git_log - Added
git_reset - Added
git_show - Added
git_status
TDQS
Scored across 12 tools
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.
All tools consistently use a git_ prefix and snake_case, matching familiar Git subcommands. No mixed conventions or ambiguous naming styles are present.
12 tools is well-scoped for a Git server covering core local operations. Each tool earns its place without excessive bloat or thin coverage.
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
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
An MCP server that gives your AI access to the source code and docs of all public github repos
The Mercado Pago MCP Server implements the Model Context Protocol to provide AI agents and LLMs with access to Mercado Pago's APIs and tools within compatible development environments. It acts as an intermediary that translates Mercado Pago resources into executable functions (tools) that AI applications can invoke to perform actions and automate flows. The server simplifies integration, enables using documentation to implement or improve code, and optimizes operations through natural language interactions without manual implementations.
A Model Context Protocol server for Wix AI tools
Related MCP Servers
- AlicenseAqualityBmaintenanceA 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.283,619 npm242Apache 2.0
- FlicenseNot gradedqualityNot gradedmaintenanceModel Context Protocol server that enables interaction with GitHub repositories, issues, pull requests, and search functionality through natural language.1-
- AlicenseBqualityDmaintenanceA 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.12MIT
- AlicenseCqualityBmaintenanceA 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.224MIT