mcp-server-git
Provides tools for interacting with Git repositories, including status, diffs, commits, staging, branch management, logs, and showing commit contents.
Click on "Install 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., "@mcp-server-gitshow me the git status of /path/to/my-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.
Requires MCP Python SDK 1.x (mcp>=1.29.0,<2). SDK 2.0 renamed APIs this server uses. The port to v2 is in progress.
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
git_addAdds file contents to the staging area
Inputs:
repo_path(string): Path to Git repositoryfiles(string[]): Array of file paths to stage
Returns: Confirmation of staged files
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_checkoutSwitches branches
Inputs:
repo_path(string): Path to Git repositorybranch_name(string): Name of branch to checkout
Returns: Confirmation of branch switch
git_showShows the contents of a commit
Inputs:
repo_path(string): Path to Git repositoryrevision(string): The revision (commit hash, branch name, tag) to show
Returns: Contents of the specified commit
git_branchList 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
Related MCP server: GitPilot MCP
Installation
Using uv (recommended)
Install uv, then prepare the project environment from the lock file:
uv --directory /path/to/mcp-server-git sync --lockedUsing pip
Alternatively, install the package with pip:
pip install mcp-server-gitDeployment
This server communicates over stdio. A host service must launch the process and connect its standard input and output to the MCP client. The project does not expose an HTTP endpoint by itself.
Using uv from the source tree
uv --directory /path/to/mcp-server-git run --no-sync mcp-server-git --repository /path/to/git/repo--repository limits the server to the specified repository and its subdirectories. Omit --no-sync if the environment has not been prepared with uv sync.
Using an installed package
mcp-server-git --repository /path/to/git/repoThe equivalent module invocation is:
python -m mcp_server_git --repository /path/to/git/repoDocker
Build the image from the project root:
docker build -t mcp/git .Run it with a repository mounted into the container:
docker run --rm -i \
--mount type=bind,src=/path/to/git/repo,dst=/workspace \
mcp/git --repository /workspaceThe container also communicates over stdio, so it must be started by an MCP-capable host service.
Verification
Use the MCP Inspector to verify the stdio server locally:
npx @modelcontextprotocol/inspector uv --directory /path/to/mcp-server-git run --no-sync mcp-server-git --repository /path/to/git/repoFor automated unit tests:
uv --directory /path/to/mcp-server-git run pytestAvailable Tools
12 toolsgit_addBIdempotent
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 readOnlyHint=false, destructiveHint=false, and idempotentHint=true, so the safety and mutation profile is known. The description does not add behavioral context beyond restating the core operation; it does not mention reversible staging semantics, overwriting previously staged content, or any interesting side effects.
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 a single short sentence that front-loads the core verb and object. There is no filler, redundant wording, or unnecessary detail.
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 two-parameter, idempotent git tool, the description is minimally viable. However, it lacks usage guidance, does not clarify repo_path semantics, and offers no information about edge cases such as empty file lists or non-existent files. With no output schema, the agent has to infer the expected call behavior.
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 must compensate for both parameters. It faintly suggests that 'files' refers to content being staged, but it says nothing about repo_path or how file paths should be specified (absolute, relative, globs, etc.). This leaves significant parameter ambiguity.
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 specific verb ('Adds') and resource ('file contents to the staging area'), making the tool's purpose unmistakable. It is clearly distinct from siblings like git_status, git_diff, git_commit, and 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 implies when to use the tool (when you want to stage file contents), but it provides no explicit guidance about when not to use it or which sibling tool might be a better alternative. There is no mention of prerequisites such as an initialized repository or that files must already exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
git_branchARead-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, and destructiveHint=false, so the safety profile is established. The description adds no behavioral context beyond stating the listing operation, and it does not contradict the annotations.
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 four words, front-loads the action, and contains no filler. Every word contributes to meaning.
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 low-complexity read-only listing tool, the terse description combined with complete schema documentation and safety annotations is largely sufficient. It does not describe return values, but the absence of an output schema is mitigated by the obvious nature of a branch listing.
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 the input schema fully documents repo_path, branch_type, contains, and not_contains. The description does not add parameter-level detail, which is acceptable given the schema's completeness.
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 names a specific verb and resource: 'List Git branches'. It is clearly distinct from sibling operations like git_create_branch, git_checkout, and git_status, so an agent can select it as the listing operation.
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 implies the tool is for enumeration of branches but offers no explicit when-to-use guidance or exclusions, such as using git_create_branch instead when creation is intended. For a simple listing tool this is acceptable, but the guidance is only implied.
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 flag readOnlyHint=false, so the operation is known to be non-read-only, but the description adds no new behavioral context. It does not disclose that switching branches can fail with uncommitted changes, can alter the working directory, or may be rejected by Git in certain states. The description carries the burden and fails to provide this information.
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 extremely concise, with no wasted words, and the core action is front-loaded. While it sacrifices richer context, the two-word phrase is efficient and directly states the primary purpose.
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?
This is a state-changing Git operation with no output schema and annotations that only provide false hints. The description is under-specified: it lacks prerequisites, failure conditions, parameter semantics, and any indication of side effects. An agent would not know that checkout may be interrupted by local modifications or that the working tree is affected.
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 was expected to compensate for undocumented parameters. It does not mention repo_path or branch_name at all, and the schema itself only provides type and title, no descriptive text. The parameter names are self-explanatory, but the description adds no meaning beyond the 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?
The description states a specific action ('switches') and resource (branches), making it clear this tool changes the current branch. It is distinguishable from siblings like git_create_branch or git_branch, though it does not explicitly name alternatives or address checkout's broader file-level behavior.
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?
No guidance is provided on when to use this tool versus alternatives such as git_create_branch or git_reset. There is no mention of prerequisites, scenarios, or caveats like needing a clean working tree, leaving the agent without decision support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
git_commitC
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?
Annotations are all false and provide no strong behavioral signal. The description adds only 'records changes', which implies mutation but does not disclose side effects such as creating a permanent commit, requiring user identity, or being a one-way local operation. No additional behavioral context is provided.
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 a single sentence with no fluff, but it is under-specified rather than concise. It simply paraphrases the tool name and omits essential context, adding little value beyond the name itself.
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 git commit operation, understanding that only staged changes are committed is crucial, but the description ignores this entirely. It also does not mention that repo_path must be a valid local repository or that a message is required, leaving important operational context missing.
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?
Input schema description coverage is 0%, and the description gives no meaning for repo_path or message. While the parameter names are somewhat self-explanatory, the description fails to clarify that message is the commit message and repo_path is the target repository, so it does not compensate for the schema gap.
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' provides a verb and resource, broadly distinguishing it from siblings like git_status (shows state) or git_diff (shows differences). However, it is vague and does not explicitly mention committing, staged changes, or creating a snapshot, so it relies on the tool name for clarity.
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 offers no guidance on when to use this tool versus alternatives. It does not mention that changes must first be staged with git_add, nor does it contrast with git_reset or git_status, leaving the agent without selection context.
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 indicate the operation is not read-only, not idempotent, and not destructive, which is consistent with creation. However, the description adds little beyond that: it does not clarify whether the new branch is checked out, what the default base is when base_branch is null, or what happens if the branch already exists. These are meaningful behavioral traits an agent would need to know.
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 a single, front-loaded sentence with no wasted words. It states the core action and the key variant (optional base branch) efficiently.
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 creation tool with no output schema and minimal annotations, the description is incomplete. It fails to specify the default base behavior or whether the branch becomes the current branch, both of which are relevant to correct invocation and subsequent git operations. The presence of git_checkout as a sibling makes this omission more noticeable.
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 must compensate, but it only mentions the optional base branch. It provides no additional meaning for repo_path or branch_name beyond their titles. The phrase 'optional base branch' adds little because the schema already marks base_branch as optional with a default of null.
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 is clear and specific: it creates a new branch and mentions the optional base branch. It distinguishes this tool from most siblings (status, diff, add, commit, reset, checkout, show, log) because it uniquely creates a branch, but it does not explicitly differentiate from git_branch, which could also have a create mode.
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?
No guidance is provided about when to use this tool versus git_branch or git_checkout. There is no mention of prerequisites, such as being in a Git repository, or exclusions like 'this does not switch branches'. The description implies use for creating branches but offers no contextual direction.
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 declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, fully covering the safety profile — the description need not restate this. The description adds the semantic scope (differences between branches or commits) but doesn't disclose what the output format looks like (e.g., unified diff, patch text) or mention the default of 3 context lines shown by the parameter default. That gap is modest, so a 3 is fair.
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 a single efficient sentence with no filler or repetition. It isn't front-loaded with a redundant restatement of the tool name. It earns a 4 for being appropriately sized, though a second sentence clarifying the target parameter would push it higher.
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?
This is a read-only tool with a trivial annotation profile, so no output schema is needed, but the description still leaves gaps. It doesn't specify valid 'target' formats (branch name vs. commit hash vs. range like 'main..dev'), doesn't say what the output looks like, and doesn't mention the context_lines behavior. For a three-parameter tool with zero schema documentation of those parameters, that is an incomplete definition.
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 for parameter semantics — and it fails to do so. The description mentions 'differences between branches or commits', which loosely maps to 'target', but says nothing about what 'target' should contain (a branch name, a commit hash, or a range), what 'repo_path' is, or what the optional 'context_lines' controls (number of surrounding lines shown in the diff). With all three parameters undocumented in the schema, the description would need to explain at least 'target' to earn a 3; it only gestures at it.
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 'Shows differences between branches or commits' provides a clear verb ('shows'), a specific resource ('differences between branches or commits'), and is unambiguous about what the tool does. It doesn't explicitly differentiate from sibling tools, but the resource is specific enough to distinguish it from common alternatives like git_log or git_show.
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 doesn't state whether to use it for uncommitted working-directory changes, staged changes, or particular diff formats, nor does it mention branches/commits as alternative scopes. An agent is left to infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
git_diff_stagedARead-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, and destructiveHint=false, covering the safety profile. The description adds the staging scope, which is useful, but does not disclose any other behavior such as output format or behavior when there are no staged changes.
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?
One short sentence with no filler. The core meaning is front-loaded and every word contributes. The description earns its place without redundancy.
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 tool is simple and annotations cover its read-only, non-destructive nature. However, with no output schema, the description does not clarify output format, empty-diff behavior, or the optional context_lines parameter. It is minimally viable but leaves some invocation-relevant gaps.
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 needed to compensate, but it does not mention repo_path or context_lines at all. The parameter names and titles are reasonably self-explanatory, but the description itself adds no meaning beyond the 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?
The description uses a specific verb and resource: 'Shows changes that are staged for commit.' The term 'staged' clearly distinguishes this from siblings like git_diff_unstaged and git_status, so an agent can identify the right tool without opening schemas.
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 clear context: use this when you want staged changes. It does not explicitly name alternatives or state when not to use it, but 'staged for commit' gives an unambiguous selection signal against the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
git_diff_unstagedARead-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=true, idempotentHint=true, and destructiveHint=false, so the safety profile is well covered. The description adds the unstaged-scope detail, but does not disclose output format, error behavior, or how it handles an empty diff. This is consistent with annotations and provides modest 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?
The description is a single, front-loaded sentence with no filler or redundant detail. It states the core behavior clearly and economically, making it easy for an agent to parse quickly.
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 git operation, the description is minimally viable: it communicates scope and is consistent with annotations. However, it leaves parameter semantics and output format entirely to inference, and it could usefully mention that the output is a diff between the working tree and the index.
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?
The description does not mention either repo_path or context_lines, and schema description coverage is 0%. The parameter names and types are somewhat self-explanatory, especially repo_path, but context_lines' meaning (number of context lines around each diff hunk) is left implicit and the description adds no parameter-level guidance.
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 uses a specific verb ('Shows') and a precise resource ('changes in the working directory that are not yet staged'), which clearly differentiates this tool from its sibling git_diff_staged. An agent can immediately understand both what the tool does and what scope it covers.
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 'not yet staged' provides clear context for when this tool is appropriate: when an agent needs to inspect working-tree changes that have not been added to the index. However, it does not explicitly name alternatives or state when not to use it, though the sibling list makes the comparison available.
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?
The description is consistent with readOnlyHint, idempotentHint, and destructiveHint=false, but it adds no behavioral context beyond what the annotations already state. It does not mention default truncation, output characteristics, or repository-scope behavior.
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, but it is under-specified rather than appropriately concise. A single five-word phrase is not enough structure for a tool with four parameters and several closely related sibling tools.
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 no output schema and no sibling differentiation, the description leaves the agent to infer what the logs contain and when this tool is appropriate. The annotations cover safety, but the description alone does not make the tool's usage context 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 only 50%; end_timestamp and start_timestamp are documented, but repo_path and max_count are not. The tool description itself provides no parameter meaning, so it does not compensate for the undocumented parameters.
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 uses a specific verb and resource ('Shows the commit logs'), so an agent can understand the basic operation. It does not differentiate from siblings like git_show or provide scope, but the action and resource are clear.
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?
No guidance is given about when to use git_log instead of sibling tools such as git_show, git_diff, or git_status. There are no conditions, exclusions, or alternative pointers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
git_resetADestructiveIdempotent
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?
The annotations already indicate destructive and idempotent behavior. The description adds the scope of the operation ('all staged changes') but does not clarify side effects such as whether working-tree changes or commit history are affected. It does not contradict the annotations.
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 a single concise sentence with no wasted words. It front-loads the core behavior immediately and is easy for an agent to parse.
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 one-parameter git operation, the description covers the action and scope. The annotations cover destructive and idempotent behavior, so the remaining gaps, such as output format and non-effect on working tree, are minor.
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?
The input schema has zero description coverage and the description does not explain repo_path. Although repo_path is a single self-explanatory parameter, the description adds no meaning about its format, required location, or default behavior, so it does not compensate for the low schema coverage.
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?
Description uses a specific verb and resource: 'Unstages all staged changes'. It clearly tells the agent exactly what the tool does and distinguishes it from siblings like git_add, git_status, and git_diff_staged.
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?
No guidance is given about when to use this tool versus alternatives. There is no mention of when not to use it, what prerequisites apply, or how it compares to git_checkout, git_commit, or git_add.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
git_showCRead-onlyIdempotent
Shows the contents of a commit
| 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=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds no behavioral context beyond the operation itself, such as output format, error behavior, or requirements like a valid repository.
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?
One short sentence with no superfluous words. The core action is front-loaded and nothing needs to be trimmed.
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 no output schema, the description should indicate what 'contents' means or what the return value looks like, but it does not. It also omits practical details such as revision format or that repo_path must be a valid Git repository.
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 explain repo_path or acceptable revision formats. It only weakly implies that revision identifies a commit; the parameter names themselves carry most of the 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 clear verb and resource ('Shows the contents of a commit'), which broadly distinguishes it from status/diff/branch tools. However, 'contents' is ambiguous (patch vs snapshot) and there is no explicit differentiation from siblings like git_log or git_diff.
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?
No guidance on when to use this tool versus alternatives such as git_log or git_diff. The description provides no context for tool selection and no exclusions or prerequisites.
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, and destructiveHint=false, so the agent knows this is a safe, non-mutating operation. The description adds minimal context by specifying the resource ('working tree status') but does not reveal any additional behavioral traits such as whether it includes staged, unstaged, or untracked files, or any limitations. The description is consistent with annotations, so no contradiction.
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 a single, well-formed sentence that delivers the core purpose without any wasted words. It is front-loaded and immediately understandable, making it an excellent example of 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?
Given the tool's low complexity (one parameter, no output schema) and the presence of annotations that cover the safety profile, the description is minimally adequate. However, it is missing useful context such as what exactly the status includes (e.g., branch, staged, unstaged, untracked files) and how repo_path should be specified. An agent could call the tool correctly but might lack expectations about the returned 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%, and the description does not mention or explain the 'repo_path' parameter. Although the parameter name and title 'Repo Path' are somewhat self-explanatory, the description fails to compensate for the lack of schema documentation, leaving the agent without guidance on how the path should be formatted or validated.
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 uses a specific verb ('Shows') and resource ('working tree status'), clearly indicating what the tool does. While it does not explicitly differentiate itself from sibling tools, 'working tree status' is a distinct concept that separates it from git_diff and git_log, making the purpose unambiguous.
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 guidance on when to use this tool versus alternatives. It does not mention git_diff for viewing changes, git_log for history, or any conditions that would make git_status the preferred choice. The usage context is only implied by the tool name and basic description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools map to distinct Git operations, but git_diff, git_diff_staged, and git_diff_unstaged overlap enough that an agent could select the wrong one without careful attention. The descriptions help separate them, but the boundary between general diff and specific diff variants creates slight ambiguity.
All tools follow a consistent git_ prefix with familiar Git command names, making the set predictable and easy to navigate. Verb and noun forms align with standard Git vocabulary, so there is no stylistic mixing or confusing variation.
Twelve tools is well-scoped for a Git server, covering common local repository workflows without unnecessary bloat. Each tool addresses a concrete Git operation, and the count feels appropriate rather than sparse or excessive.
The toolset covers the core local Git workflow: status, diff, add, commit, branch, checkout, log, and show. Minor gaps like branch deletion or merge are missing, but agents can perform essential repository inspection and commit tasks without dead ends.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
AI-native git hosting — repos, PRs, issues, CI gates, and AI code review over MCP (60 tools).
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
A MCP server built for developers enabling Git based project management with project and personal…
Use AI models for chat, image, and video generation from Claude Code and other MCP hosts.
Related MCP Servers
- AlicenseBqualityDmaintenanceProvides comprehensive Git functionality to MCP clients, enabling users to manage repositories through operations like commits, diffs, and branch management via natural language. It automatically detects the current working directory and supports multi-project workflows across different local environments.166072MIT
- AlicenseNot gradedqualityNot gradedmaintenanceA lightweight MCP server that enables AI assistants to manage local Git repositories by executing commands like status, add, and commit. It streamlines development workflows by providing repository context and diffs directly to the assistant.
- AlicenseNot gradedqualityDmaintenanceAn MCP server that provides tools for interacting with Git repositories, enabling AI assistants to manage repositories, branches, commits, and files through a standardized interface.7,1221Apache 2.0
- AlicenseNot gradedqualityFmaintenanceProvides comprehensive git tooling via MCP, including status, diffs, commits, branches, stashes, and multi-root inventory, enabling AI agents to manage repositories.40MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/yinghuohuichao/mcp-server-git'
If you have feedback or need assistance with the MCP directory API, please join our Discord server