Git MCP
by kjozsa
# Git MCP
[](https://smithery.ai/server/@kjozsa/git-mcp)
MCP server for managing Git operations on local repositories.
## Installation
### Installing via Smithery
To install Git MCP for Claude Desktop automatically via [Smithery](https://smithery.ai/server/@kjozsa/git-mcp):
```bash
npx -y @smithery/cli install @kjozsa/git-mcp --client claude
```
### Installing Manually
```bash
uvx install git-mcp
```
## Configuration
Add the MCP server using the following JSON configuration snippet:
```json
{
"mcpServers": {
"git-mcp": {
"command": "uvx",
"args": ["git-mcp"],
"env": {
"GIT_REPOS_PATH": "/path/to/your/git/repositories"
}
}
}
}
```
## Features and Usage
### Environment Variables
- `GIT_REPOS_PATH`: Path to the directory containing your Git repositories (required)
You can set this in your environment or create a `.env` file in the directory where you run the server.
### Available Methods
#### list_repositories
Lists all Git repositories in the configured path.
- Parameters: None
- Returns: List of repository names
#### get_last_git_tag
Finds the last Git tag in the specified repository.
- Parameters: `repo_name` (Name of the Git repository)
- Returns: Dictionary with `version` (tag name) and `date` (tag creation date)
#### list_commits_since_last_tag
Lists commit messages between the last Git tag and HEAD.
- Parameters:
- `repo_name`: Name of the Git repository
- `max_count` (optional): Maximum number of commits to return
- Returns: List of dictionaries with `hash`, `author`, `date`, and `message`
#### create_git_tag
Creates a new git tag in the specified repository.
- Parameters:
- `repo_name`: Name of the git repository
- `tag_name`: Name of the tag to create
- `message` (optional): Message for annotated tag (if not provided, creates a lightweight tag)
- Returns: Dictionary with `status`, `version` (tag name), `date` (tag creation date), and `type` (annotated or lightweight)
#### push_git_tag
Pushes an existing git tag to the default remote repository.
- Parameters:
- `repo_name`: Name of the git repository
- `tag_name`: Name of the tag to push
- Returns: Dictionary with `status`, `remote` (name of the remote), `tag` (name of the tag), and `message` (success message)
#### refresh_repository
Refreshes a repository by checking out the main branch (or master as fallback) and pulling from all remotes.
- Parameters:
- `repo_name`: Name of the git repository
- Returns: Dictionary with `status`, `repository`, `branch`, and `pull_results` (results for each remote)
### Troubleshooting
- **Repository Not Found**: Ensure `GIT_REPOS_PATH` is set correctly and the repository exists
- **No Tags Found**: The repository doesn't have any tags yet
## Development
```bash
# Install dependencies
uv pip install -r requirements.txt
# Run in dev mode with Inspector
mcp dev git_mcp/server.py
```
## Testing
The project includes two test scripts:
1. `test_git_mcp.py` - Tests the underlying Git command functionality directly, without using the MCP server.
2. `test_mcp_server.py` - Tests the MCP server functionality by starting a server instance and making calls to it.
To run the tests:
```bash
# Test the Git command functionality
python test_git_mcp.py
# Test the MCP server (requires the git-mcp package to be installed)
python test_mcp_server.py