Git MCP
# 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
TDQS
Scored across 6 tools
Each tool has a clearly distinct purpose with no overlap: creating tags, getting the last tag, listing commits since the last tag, listing repositories, pushing tags, and refreshing repositories. The descriptions reinforce these distinct functions, making misselection unlikely.
The naming follows a consistent verb_noun pattern (e.g., create_git_tag, list_commits_since_last_tag) with clear, descriptive names. The only minor deviation is 'refresh_repository' which uses 'refresh' instead of a more common verb like 'update', but it still fits the pattern and is understandable.
With 6 tools, this server is well-scoped for managing git repositories, focusing on tag operations and repository maintenance. Each tool serves a specific, useful function without bloat, making the count appropriate for the domain.
The toolset covers tag management and basic repository operations well, but there are notable gaps in the git domain, such as creating commits, branching, merging, or handling remotes beyond pushing tags. This limits agents from performing full git workflows, though the provided tools are coherent for their specific scope.