iflow-mcp_commit-helper-mcp 0.6.0
MCP server for Commitizen integration with direct API access
License: MIT
Requires Python: >=3.13
Keywords: commit, commitizen, fastmcp, git, mcp

# Commit Helper MCP

A Model Context Protocol (MCP) server that provides Commitizen functionality through MCP tools and resources, enabling AI assistants to generate, validate, and work with conventional commit messages.

## Features

### Core Functionality
- **Generate Commit Messages**: Create conventional commit messages with validation
- **Validate Messages**: Check existing commit messages against Commitizen rules
- **Interactive Questions**: Get commit questions for guided message creation
- **Commit Types**: Access available commit types and their descriptions
- **Configuration Access**: View current Commitizen configuration and schema
- **Plugin Support**: Works with any Commitizen plugin (conventional commits, custom plugins)
- **Health Monitoring**: Built-in health checks and configuration refresh

### 🚀 Enhanced Git Integration with GitPython
Commit Helper MCP now supports GitPython for enhanced git operations:

- **Repository Health Analysis**: Comprehensive repository metrics and scoring
- **Smart Commit Suggestions**: AI-powered commit message suggestions based on file patterns
- **Detailed Diff Analysis**: Line-by-line change analysis with statistics
- **Branch Management**: Comprehensive branch and remote analysis
- **Performance Improvements**: 2x faster operations, thread-safe execution
- **Advanced Git Operations**: Enhanced commit previews, repository analytics, and batch operations

### 📦 GitPython Installation
```bash
# GitPython is automatically installed
uv sync

# Or install manually
uv add "GitPython>=3.1.40"
```

### 🔄 Automatic Fallback
The system automatically selects the best available implementation:
- **GitPython** (preferred): Enhanced features and performance
- **commitizen.git** (fallback): Basic functionality, full compatibility

### 📊 Feature Comparison
| Feature | Basic | Enhanced (GitPython) |
|---------|-------|---------------------|
| Repository status | ✅ | ✅ Rich metadata |
| Commit preview | ✅ | ✅ Diff analysis |
| Smart suggestions | ❌ | ✅ AI-powered |
| Repository health | ❌ | ✅ Comprehensive |
| Performance | Standard | 2x faster |

See [GitPython Integration Guide](docs/GITPYTHON_INTEGRATION.md) for complete documentation.

## Installation

### Prerequisites

- Python 3.13 or higher
- [uv](https://docs.astral.sh/uv/) package manager
- Git repository (for Commitizen configuration detection)

### Install from Source

1. Clone the repository:
```bash
git clone <repository-url>
cd commit-helper-mcp
```

2. Install dependencies:
```bash
uv sync
```

3. Install the package:
```bash
uv pip install -e .
```

## Usage

### MCP Inspector (Development & Testing)

Use the MCP Inspector to test and explore the server's capabilities:

```bash
uv run mcp dev main.py
```

This will start an interactive session where you can:
- Test all available tools
- Explore resources
- Debug server functionality
- View tool schemas and documentation

### Claude Desktop Integration

To use with Claude Desktop, install the server:

```bash
uv run mcp install main.py
```

This will add the server to your Claude Desktop configuration, making the tools available in your conversations.

### Manual Configuration

Add to your Claude Desktop configuration file (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):

```json
{
  "mcpServers": {
    "commit-helper-mcp": {
      "command": "uv",
      "args": ["run", "python", "/path/to/commit-helper-mcp/main.py"],
      "cwd": "/path/to/commit-helper-mcp"
    }
  }
}
```

## Available Tools

### `generate_commit_message`
Generate a commit message with validation using provided parameters.

**Parameters:**
- `type` (required): Commit type (e.g., 'feat', 'fix', 'docs')
- `subject` (required): Commit subject/description
- `body` (optional): Detailed description
- `scope` (optional): Scope of the change
- `breaking` (optional): Whether this is a breaking change
- `footer` (optional): Footer (e.g., issue references)

**Example:**
```python
generate_commit_message(
    type="feat",
    subject="add user authentication",
    scope="auth",
    body="Implement JWT-based authentication system with login and logout functionality"
)
```

### `create_commit_message`
Generate a commit message from a complete answers dictionary.

**Parameters:**
- `answers_dict`: Dictionary containing all answers to commit questions

**Example:**
```python
create_commit_message({
    "type": "fix",
    "subject": "resolve memory leak in data processing",
    "body": "Fixed memory leak caused by unclosed file handles",
    "scope": "core"
})
```

### `validate_commit_message`
Validate an existing commit message against current plugin rules.

**Parameters:**
- `message`: The commit message to validate

**Example:**
```python
validate_commit_message("feat(auth): add user login functionality")
```

### `get_commit_types`
Get list of available commit types from the current plugin.

**Returns:** List of commit types with descriptions

### `get_commit_questions`
Get interactive questions for commit message generation.

**Returns:** List of questions that can be used to build commit messages

### `health_check`
Check the health and status of the Commitizen service.

**Returns:** Service health information and configuration details

### `refresh_configuration`
Refresh the Commitizen configuration and reinitialize the service.

**Returns:** Status of configuration refresh

## Available Resources

### `commitizen://config`
Current Commitizen configuration including:
- Active plugin information
- Configuration settings
- Available capabilities
- Message pattern

### `commitizen://schema`
Commit message schema showing:
- Required fields
- Field types and constraints
- Validation rules

### `commitizen://example`
Example commit message demonstrating the expected format for the current plugin configuration.

## Configuration

The server automatically detects and uses your project's Commitizen configuration from:
- `pyproject.toml` (recommended)
- `.cz.toml`
- `.cz.json`
- `setup.cfg`

### Example Configuration

Add to your `pyproject.toml`:

```toml
[tool.commitizen]
name = "cz_conventional_commits"
tag_format = "v$version"
version_scheme = "semver"
version_provider = "pep621"
update_changelog_on_bump = true
```

## Supported Commitizen Plugins

The server works with any Commitizen plugin, including:

- **cz_conventional_commits** (default): Standard conventional commits
- **cz_jira**: Jira integration
- **cz_customize**: Custom commit formats
- **Third-party plugins**: Any plugin following Commitizen's plugin interface

## Troubleshooting

### Server Won't Start

1. **Check Python version**: Ensure Python 3.13+ is installed
2. **Verify dependencies**: Run `uv sync` to install dependencies
3. **Check Commitizen config**: Ensure valid Commitizen configuration exists
4. **View logs**: Check console output for specific error messages

### Invalid Commit Messages

1. **Check plugin**: Verify correct Commitizen plugin is configured
2. **Validate config**: Use `health_check` tool to verify configuration
3. **Refresh config**: Use `refresh_configuration` tool after config changes
4. **Check pattern**: View `commitizen://config` resource for expected pattern

### MCP Connection Issues

1. **Verify installation**: Ensure server is properly installed
2. **Check paths**: Verify file paths in Claude Desktop configuration
3. **Test with inspector**: Use `uv run mcp dev main.py` to test locally
4. **Restart Claude**: Restart Claude Desktop after configuration changes

### Common Error Messages

- **"No Commitizen configuration found"**: Add Commitizen config to your project
- **"Plugin not found"**: Install the specified Commitizen plugin
- **"Invalid message format"**: Check message against plugin's expected pattern
- **"Service initialization failed"**: Check Python environment and dependencies

## Development

### Running Tests

```bash
# Run all tests
uv run pytest

# Run with coverage
uv run pytest --cov=src/commit_helper_mcp

# Run specific test file
uv run pytest tests/test_integration.py
```

### Code Formatting

```bash
# Format code
uv run black src/ tests/

# Check formatting
uv run black --check src/ tests/

# Lint code
uv run ruff check src/ tests/
```

### Local Development Server

```bash
# Run server directly
python main.py

# Run with MCP inspector
uv run mcp dev main.py
```

## Contributing

1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add tests for new functionality
5. Ensure all tests pass
6. Submit a pull request

## License

MIT License - see LICENSE file for details.

## Support

For issues and questions:
1. Check the troubleshooting section above
2. Search existing issues in the repository
3. Create a new issue with detailed information about your problem

## Changelog

See [CHANGELOG.md](CHANGELOG.md) for version history and changes.