A side-by-side look at the Git MCP Server and Instagit MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Git MCP Server for version control work as a local process; choose Instagit for version control as a local process. You can also run both side by side in one mcpServers block.
MCP_TRANSPORT_TYPE, MCP_LOG_LEVEL, MCP_HTTP_PORT, GIT_BASE_DIR, LOGS_DIR, GIT_USERNAME, GIT_EMAIL, GIT_SIGN_COMMITS.git_add, git_blame, git_branch.INSTAGIT_API_KEY, INSTAGIT_API_URL.ask_repo.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Version Control | Version Control |
| Quality signal | 69/100 · Great | 53/100 · Good |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | No auth required | Not declared |
| Pricing | Free | Not declared |
| Required env vars | MCP_TRANSPORT_TYPEMCP_LOG_LEVELMCP_HTTP_PORTGIT_BASE_DIRLOGS_DIRGIT_USERNAMEGIT_EMAILGIT_SIGN_COMMITS | INSTAGIT_API_KEYINSTAGIT_API_URL |
| Verified owner | Community listing | Community listing |
| GitHub stars | 242 | 20 |
| Directory activity | 5 views 0 installs 0 upvotes | 1 views 0 installs 0 upvotes |
| Tools | 28 | 1 |
| Full listing | View Git MCP Server | View Instagit |
git_addStage files for commit. Add file contents to the staging area (index) to prepare for the next commit.git_blameShow line-by-line authorship information for a file, displaying who last modified each line and when. For large files, use startLine/endLine to limit output.git_branchManage branches: list all branches, show current branch, create a new branch, delete a branch, or rename a branch.git_changelog_analyzeGather git history context (commits, tags) and structured review instructions to support LLM-driven changelog analysis. Changelog file should be read separately; this tool provides the supporting git data and analysis framework. Pass one or more review types to control what kind of analysis to perform.git_checkoutSwitch branches or restore working tree files. Can checkout an existing branch, create a new branch, or restore specific files.git_cherry_pickCherry-pick commits from other branches. Apply specific commits to the current branch without merging entire branches.git_cleanRemove untracked files from the working directory. Requires force flag for safety. Use dry-run to preview files that would be removed.git_clear_working_dirClear the session working directory setting. This resets the context without restarting the server. Subsequent git operations will require an explicit path parameter unless git_set_working_dir is called again.git_cloneClone a repository from a remote URL or local path. Accepts HTTP(S), SSH, git://, file://, and bare filesystem paths, with optional shallow cloning.git_commitCreate a new commit with staged changes in the repository. Records a snapshot of the staging area with a commit message.
**Commit Message Format:**
Pass commit messages as JSON string parameters. Multi-line messages are supported using standard JSON string escaping.
**Examples:**
- Single line: { "message": "feat: add user authentication" }
- Multi-line: { "message": "feat: add user authentication\n\nImplemented OAuth2 flow with JWT tokens.\nAdded tests for login and logout." }
Note: Do not use bash heredoc syntax. Literal escape sequences (\n, \t) in the message string are automatically normalized to their actual characters.git_diffView differences between commits, branches, or working tree. Shows changes in unified diff format.git_fetchFetch updates from a remote repository. Downloads objects and refs without merging them.ask_repoAnalyze any Git repository with AI. Point it at a repo and ask questions about the codebase.
Example prompts by use case:
Understanding Architecture:
- repo: "nginx/nginx", prompt: "How does nginx handle concurrent connections? Walk through the event loop, worker process model, and connection state transitions."
Integration and API Usage:
- repo: "hashicorp/terraform", prompt: "How do I implement a custom provider? What interfaces does the SDK expose, how are CRUD operations mapped to the resource lifecycle?"
Debugging and Troubleshooting:
- repo: "docker/compose", prompt: "How does Compose resolve service dependencies and startup order? What happens with depends_on and health check conditions?"
Security Review:
- repo: "redis/redis", prompt: "Review the ACL security model. How are per-user command permissions enforced, and how does AUTH prevent privilege escalation?"
Code Quality and Evaluation:
- repo: "vitejs/vite", prompt: "How does Vite's plugin system compare to Rollup's? What are the Vite-specific hooks and tradeoffs?"
Deep Technical Analysis:
- repo: "ggml-org/llama.cpp", prompt: "How does the KV cache work during autoregressive generation? How are past key-value pairs stored, reused, and evicted?"
Migration Planning (with ref — Pro/Max plans only):
- repo: "mui/material-ui", ref: "v4.12.0", prompt: "Document the Button component's full API surface — every prop, its type, default value, and behavior."
- repo: "mui/material-ui", ref: "v5.0.0", prompt: "Document the Button component's full API surface — every prop, its type, default value, and behavior."
(Compare both results to build a migration guide between v4 and v5)
- repo: "kubernetes/kubernetes", ref: "release-1.29", prompt: "How does the scheduler's scoring and filtering pipeline work for pod placement?"
Ask detailed, specific questions — the tool returns real function signatures, parameter types, return values, and source citations with exact file paths and line numbers.
If you hit a rate limit (429), the user's monthly token credits are exhausted — they can wait for the reset or upgrade their plan. Free-tier repos larger than 2 GB will be rejected with a 413 error; suggest upgrading to Pro or Max for unlimited repo size.Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
{
"mcpServers": {
"git-mcp-server-2": {
"command": "npx",
"args": [
"-y",
"@cyanheads/git-mcp-server@latest"
],
"env": {
"MCP_TRANSPORT_TYPE": "YOUR_MCP_TRANSPORT_TYPE_HERE",
"MCP_LOG_LEVEL": "YOUR_MCP_LOG_LEVEL_HERE",
"MCP_HTTP_PORT": "YOUR_MCP_HTTP_PORT_HERE",
"GIT_BASE_DIR": "YOUR_GIT_BASE_DIR_HERE",
"LOGS_DIR": "YOUR_LOGS_DIR_HERE",
"GIT_USERNAME": "YOUR_GIT_USERNAME_HERE",
"GIT_EMAIL": "YOUR_GIT_EMAIL_HERE",
"GIT_SIGN_COMMITS": "YOUR_GIT_SIGN_COMMITS_HERE"
}
}
}
}
{
"mcpServers": {
"instagit": {
"command": "npx",
"args": [
"-y",
"instagit@latest"
],
"env": {
"INSTAGIT_API_KEY": "YOUR_INSTAGIT_API_KEY_HERE",
"INSTAGIT_API_URL": "YOUR_INSTAGIT_API_URL_HERE"
}
}
}
}