The Git MCP Server enables programmatic interaction with Git repositories for AI agents, IDE extensions, and other MCP-compatible applications.
Capabilities include:
Repository Operations: Initialize, clone, and check repository status
Version Control: Stage files, commit changes, push/pull from remotes
Branch Management: Create, list, delete, and switch branches
Tag Handling: Create, list, and delete tags (including signed/annotated tags)
Remote Management: Add, remove, and list remote repositories
Stash Operations: Save, apply, pop, and remove stashed changes
Advanced Operations: Merge branches, rebase commits, reset HEAD, show diffs
Bulk Actions: Execute multiple Git operations in sequence
Safety Features: Includes safeguards for destructive operations
Note: Most operations require absolute paths for precise repository and file targeting.
Provides comprehensive Git operations including repository initialization, cloning, file staging, committing, branch management, tag operations, remote repository handling, and stash management, enabling LLMs to interact with Git repositories.
Supports interactions with GitHub repositories through Git operations like cloning from GitHub URLs, pushing to and pulling from GitHub remotes, enabling LLMs to manage code on GitHub.
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., "@Git MCP Servershow me the commit history for the last week"
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.
Tools
28 git operations organized into seven categories:
Category | Tools | Description |
Repository Management |
| Initialize repos, clone from remotes, check status, clean untracked files |
Staging & Commits |
| Stage changes, create commits, compare changes |
History & Inspection |
| View commit history, inspect objects, trace authorship, view ref logs |
Analysis |
| Gather git context and instructions for LLM-driven changelog analysis |
Branching & Merging |
| Manage branches, switch contexts, integrate changes, apply specific commits |
Remote Operations |
| Configure remotes, fetch updates, synchronize repositories, publish changes |
Advanced Workflows |
| Tag releases, stash changes, reset state, manage worktrees, set/clear session directory |
Related MCP server: GitHub MCP Server
Resources
Resource | URI | Description |
Git Working Directory |
| The current session working directory, set via |
Prompts
Prompt | Description | Parameters |
Git Wrap-up | Workflow protocol for completing git sessions: review, document, commit, and tag changes. |
|
Getting started
Runtime
Works with both Bun and Node.js. Runtime is auto-detected.
Runtime | Command | Minimum Version |
Node.js |
| >= 20.0.0 |
Bun |
| >= 1.2.0 |
MCP client configuration
Add the following to your MCP client config (e.g., cline_mcp_settings.json). Update the environment variables to match your setup — especially the git identity fields.
{
"mcpServers": {
"git-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["@cyanheads/git-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"GIT_BASE_DIR": "~/Developer/",
"LOGS_DIR": "~/Developer/logs/git-mcp-server/",
"GIT_USERNAME": "cyanheads",
"GIT_EMAIL": "casey@caseyjhand.com",
"GIT_SIGN_COMMITS": "true"
}
}
}
}Bun users: replace "command": "npx" with "command": "bunx".
For Streamable HTTP, set MCP_TRANSPORT_TYPE=http and MCP_HTTP_PORT=3015.
Features
Built on mcp-ts-template.
Feature | Details |
Declarative tools | Define capabilities in single, self-contained files. The framework handles registration, validation, and execution. |
Error handling | Unified |
Authentication | Supports |
Pluggable storage | Swap backends ( |
Observability | Structured logging (Pino) and optional auto-instrumented OpenTelemetry for traces and metrics. |
Dependency injection | Built with |
Cross-runtime | Auto-detects Bun or Node.js and uses the appropriate process spawning method. |
Provider architecture | Pluggable git provider system. Current: CLI. Planned: isomorphic-git for edge deployment. |
Working directory management | Session-specific directory context for multi-repo workflows. |
Configurable git identity | Override author/committer info via environment variables, with fallback to global git config. |
Commit signing | Optional GPG/SSH signing for commits, merges, rebases, cherry-picks, and tags. |
Safety | Destructive operations ( |
Security
All file paths are validated and sanitized to prevent directory traversal.
Optional
GIT_BASE_DIRrestricts operations to a specific directory tree for multi-tenant sandboxing.Git commands use validated arguments via process spawning — no shell interpolation.
JWT and OAuth support for authenticated deployments.
Optional rate limiting via the DI-managed
RateLimiterservice.All operations are logged with request context for auditing.
Configuration
All configuration is validated at startup in src/config/index.ts. Key environment variables:
Variable | Description | Default |
| Transport: |
|
| HTTP session mode: |
|
| Response format: |
|
| Detail level: |
|
| HTTP server port. |
|
| HTTP server hostname. |
|
| MCP request endpoint path. |
|
| Authentication mode: |
|
| Storage backend: |
|
| Enable OpenTelemetry. |
|
| Minimum log level: |
|
| Enable GPG/SSH signing for commits, merges, rebases, cherry-picks, and tags. |
|
| Git author name. Aliases: |
|
| Git author email. Aliases: |
|
| Absolute path to restrict all git operations to a specific directory tree. |
|
| Path to custom markdown file with workflow instructions. |
|
| Required for |
|
| Required for |
|
Running the server
Via package manager (no install)
npx @cyanheads/git-mcp-server@latestConfigure through environment variables or your MCP client config.
Local development
# Build and run
npm run rebuild
npm run start:stdio # or start:http
# Dev mode with hot reload
npm run dev:stdio # or dev:http
# Checks and tests
npm run devcheck # lint, format, typecheck
npm testCloudflare Workers
npm run build:worker # Build the worker bundle
npm run deploy:dev # Run locally with Wrangler
npm run deploy:prod # Deploy to CloudflareProject structure
Directory | Purpose |
| Tool definitions ( |
| Resource definitions ( |
| HTTP and STDIO transport implementations, including auth. |
|
|
| Git service provider (CLI-based git operations). |
| DI container registrations and tokens. |
| Logging, error handling, performance, security utilities. |
| Environment variable parsing and validation (Zod). |
| Unit and integration tests, mirroring |
Response format
Configure output format and verbosity via MCP_RESPONSE_FORMAT and MCP_RESPONSE_VERBOSITY.
JSON format (default, optimized for LLM consumption):
{
"success": true,
"branch": "main",
"staged": ["src/index.ts", "README.md"],
"unstaged": ["package.json"],
"untracked": []
}Markdown format (human-readable):
# Git Status: main
## Staged (2)
- src/index.ts
- README.md
## Unstaged (1)
- package.jsonThe LLM always receives the complete structured data via responseFormatter — full file lists, metadata, timestamps — regardless of what the client displays. Verbosity controls how much detail is included: minimal (core fields only), standard (balanced), or full (everything).
Development guide
See AGENTS.md for architecture, tool development patterns, and contribution rules.
Testing
Tests use Bun's test runner with Vitest compatibility.
bun test # Run all tests
bun test --coverage # With coverage
bun run devcheck # Lint, format, typecheck, auditRoadmap
The server uses a provider-based architecture for git operations:
CLI provider (current) — Full 28-tool coverage via native git CLI. Requires local git installation.
Isomorphic git provider (planned) — Pure JS implementation for edge deployment (Cloudflare Workers, Vercel Edge, Deno Deploy). Uses isomorphic-git.
GitHub API provider (maybe) — Cloud-native operations via GitHub REST/GraphQL APIs, no local repo required.
Contributing
Issues and pull requests are welcome. Run checks before submitting:
npm run devcheck
npm testLicense
Apache 2.0. See LICENSE.