MCP Server Git
A Model Context Protocol (MCP) server for executing git push operations with flexible branch mapping.
README
MCP Server Git
A Model Context Protocol (MCP) server for executing git push operations with flexible branch mapping.
Features
- Execute
git pushcommands with flexible branch mapping and auto add/commit - Comprehensive Git operations: status, diff, add, log, push
- Push history tracking and duplicate prevention
- Pending changes review system with forced validation
- Operation logging for debugging and monitoring
- Support for multiple languages (English, Chinese, Traditional Chinese)
- Environment variable configuration for flexibility
- Proxy support (HTTP, HTTPS, SOCKS5) for corporate networks
Installation
npm install -g @liangshanli/mcp-server-git
Environment Variables
The server requires the following environment variables:
Required
PROJECT_PATH: Absolute path to the git repositoryLOCAL_BRANCH: Local branch name to push fromREMOTE_BRANCH: Remote branch name to push to
Optional
REMOTE_NAME: Remote name (default: "origin")PULL_SOURCE_BRANCH: Source branch forgit_pull(default: same asREMOTE_BRANCH)GIT_PUSH_FLAGS: Additional git push flags (default: "--progress")TOOL_PREFIX: Prefix for MCP tool names (default: "")REPO_NAME: Repository identifier for logging and identificationLANGUAGE: Language for messages ("en", "zh", "zh-CN", "zh-TW") (default: "en")MCP_LOG_DIR: Directory for log files (default: "./.setting" or "./.setting.{REPO_NAME}")MCP_LOG_FILE: Log filename (default: "mcp-git.log")MCP_PUSH_HISTORY_FILE: Push history filename (default: "push-history.json")MCP_CHANGES_FILE: Pending changes filename (default: "pending-changes.json")HTTP_PROXY: HTTP proxy URL (e.g., "http://proxy.company.com:8080")HTTPS_PROXY: HTTPS proxy URL (e.g., "http://proxy.company.com:8080")SOCKS_PROXY: SOCKS5 proxy URL (e.g., "socks5://proxy.company.com:1080"). Note: Git may require additional configuration for SOCKS5 proxy support.NO_PROXY: Comma-separated list of hosts that should not use proxyALL_PROXY: Universal proxy URL for all protocols
Usage
1. Set Environment Variables
export PROJECT_PATH="/path/to/your/git/repository"
export LOCAL_BRANCH="main"
export REMOTE_BRANCH="main"
export REMOTE_NAME="origin" # optional
export GIT_PUSH_FLAGS="--progress --verbose" # optional
export TOOL_PREFIX="myproject" # optional
export REPO_NAME="my-project" # optional
# Proxy settings (optional)
export HTTP_PROXY="http://proxy.company.com:8080"
export HTTPS_PROXY="http://proxy.company.com:8080"
export SOCKS_PROXY="socks5://proxy.company.com:1080"
export NO_PROXY="localhost,127.0.0.1,.local"
2. Start the Server
Using npm script
npm start
Using the CLI
mcp-server-git
Using start-server.js (with validation)
npm run start-managed
Editor Integration
Multiple Project Instances Support
You can configure multiple instances of the Git MCP server in your editor to manage different repositories simultaneously. Use REPO_NAME and TOOL_PREFIX to isolate the tools and logs for each project.
Cursor Editor Configuration
Create or update .cursor/mcp.json in your project root:
{
"mcpServers": {
"git-web-app": {
"command": "npx",
"args": ["@liangshanli/mcp-server-git"],
"env": {
"PROJECT_PATH": "D:/projects/web-app",
"LOCAL_BRANCH": "main",
"REMOTE_BRANCH": "main",
"REPO_NAME": "web-app",
"TOOL_PREFIX": "web"
}
},
"git-api-service": {
"command": "npx",
"args": ["@liangshanli/mcp-server-git"],
"env": {
"PROJECT_PATH": "D:/projects/api-service",
"LOCAL_BRANCH": "develop",
"REMOTE_BRANCH": "develop",
"REPO_NAME": "api-service",
"TOOL_PREFIX": "api"
}
}
}
}
Benefits of Multiple Instances:
- Tool Isolation: Each instance has its own prefixed tools (e.g.,
web_git_push,api_git_push). - Log Isolation: Logs are stored in separate directories (e.g.,
./.setting.web-app/,./.setting.api-service/). - Independent Config: Different branches and paths for each repository.
💡 Best Practices and Usage Suggestions
To fully leverage the power of MCP Git Server, it is recommended to follow these "strong constraint" instructions when collaborating with AI:
-
Atomic Recording (
save_changes):- Instruction Suggestion: "Please call the
save_changestool immediately after completing each independent small feature or bug fix. You need to clearly list the modified files and briefly describe your modification logic in one or two sentences. Strictly forbid accumulating a large number of changes without recording them." - Value: This ensures that AI's memory fragments are solidified in real-time, preventing the loss of initial intent in subsequent complex refactors.
- Instruction Suggestion: "Please call the
-
Modular Pushing (
git_push):- Instruction Suggestion: "When we have completed all development and self-testing for the current feature module, please push by calling
git_push. Before pushing, you must first fully read and summarize all our saved records from this session viaget_pending_changes, generating a clear, structured Commit Message that covers all changes." - Value: Making "summarizing historical records" a statutory pre-step for pushing, completely eliminating "goldfish memory" commits.
- Instruction Suggestion: "When we have completed all development and self-testing for the current feature module, please push by calling
-
Periodic Review:
- If the session is extremely long (e.g., lasting several hours), you can occasionally ask the AI to call
get_pending_changesfor a mid-term summary to ensure the stored records perfectly match the current actual code state.
- If the session is extremely long (e.g., lasting several hours), you can occasionally ask the AI to call
3. MCP Tools
The server provides the following MCP tools:
git_push (or <TOOL_PREFIX>_git_push)
Execute git push command with a commit message. Automatically adds and commits changes before pushing. Requires reviewing pending changes first.
Important: You MUST call get_pending_changes to review changes before using this tool. The push will be blocked if changes haven't been reviewed.
What it does:
- Automatically runs
git add .to stage all changes - Automatically runs
git commit -m "message"to commit changes - Executes
git pushto push to remote repository - Clears all pending changes and resets review status
Parameters:
message(string, required): Commit message
Example:
{
"name": "git_push",
"arguments": {
"message": "Update project files"
}
}
If TOOL_PREFIX is set (e.g., "myproject"), the tool name becomes myproject_git_push.
Required Workflow:
- Make code changes
- Call
save_changesto record your modifications - Call
get_pending_changesto review and mark changes as reviewed - Call
git_pushto automatically add, commit, and push changes - For subsequent pushes, repeat steps 3-4 (review status is reset after each push attempt)
This executes: git push <REMOTE_NAME> <LOCAL_BRANCH>:<REMOTE_BRANCH> --progress
get_push_history (or <TOOL_PREFIX>_get_push_history)
Get the last 5 push history records to check for duplicates.
Parameters: None
get_operation_logs (or <TOOL_PREFIX>_get_operation_logs)
Get operation logs for debugging.
Parameters:
limit(number, optional): Number of logs to return (default: 50)offset(number, optional): Offset for pagination (default: 0)
git_status (or <TOOL_PREFIX>_git_status)
Show the working directory and staging area status.
Parameters: None
Example:
{
"name": "git_status"
}
git_diff (or <TOOL_PREFIX>_git_diff)
Show changes between working directory and HEAD or staging area.
Parameters:
staged(boolean, optional): Show staged changes instead of unstaged (default: false)files(array, optional): Specific files to show diff for
Examples:
{
"name": "git_diff"
}
{
"name": "git_diff",
"arguments": {
"staged": true
}
}
git_add (or <TOOL_PREFIX>_git_add)
Add file contents to the staging area.
Parameters:
files(array, optional): Files to add (default: ["."] for all files)
Examples:
{
"name": "git_add"
}
{
"name": "git_add",
"arguments": {
"files": ["src/main.js", "src/utils.js"]
}
}
git_log (or <TOOL_PREFIX>_git_log)
Show commit history.
Parameters:
limit(number, optional): Number of commits to show (1-100, default: 10)oneline(boolean, optional): Show commits in oneline format (default: false)
Examples:
{
"name": "git_log"
}
{
"name": "git_log",
"arguments": {
"limit": 5,
"oneline": true
}
}
git_pull (or <TOOL_PREFIX>_git_pull)
Execute git pull command from the configured remote and source branch.
Parameters: None
Example:
{
"name": "git_pull"
}
This executes: git pull <REMOTE_NAME> <PULL_SOURCE_BRANCH>
save_changes (or <TOOL_PREFIX>_save_changes)
Save pending changes before pushing. Records modified files and change content for review.
Parameters:
files(array, required): Array of modified file pathscontent(string, required): Description of the changes made
Example:
{
"name": "save_changes",
"arguments": {
"files": ["src/main.js", "src/utils.js"],
"content": "Fixed bug in user authentication"
}
}
get_pending_changes (or <TOOL_PREFIX>_get_pending_changes)
Get and review pending changes before pushing. This tool MUST be called before git_push to enable pushing.
Important: Calling this tool marks changes as reviewed, allowing git_push to proceed. The review status is reset after each push attempt.
Parameters:
limit(number, optional): Number of changes to return (1-1000, default: 1000 - shows all changes)offset(number, optional): Offset for pagination (default: 0)
Command Mapping
The server executes the following git command:
cd <PROJECT_PATH>
git push <REMOTE_NAME> <LOCAL_BRANCH>:<REMOTE_BRANCH> --progress
For example, with the default settings:
cd /path/to/project
git push origin main:main --progress
Validation
The server performs the following validations on startup:
- Checks for required environment variables
- Verifies that
PROJECT_PATHexists - Ensures
PROJECT_PATHis a valid git repository (contains.gitdirectory)
Logging
- All operations are logged to files in the configured log directory
- Push history is maintained to prevent duplicate operations
- Operation logs include request/response details for debugging
Error Handling
- Environment variable validation on startup
- Git command error handling with detailed error messages
- Automatic logging of all operations and errors
License
MIT
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。