git-mcp 0.3.2
MCP server for managing Git operations
Requires Python: >=3.10

# Git MCP
[![smithery badge](https://smithery.ai/badge/@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