Git Commit Message Generator MCP Server
An intelligent MCP server that automatically generates Conventional Commits style commit messages using LLM providers like DeepSeek and Groq.
Features
- AI-Powered: Leverages LLM providers (DeepSeek, Groq) for intelligent commit message generation
- Conventional Commits: Follows industry-standard commit message conventions
- Multi-Provider: Supports multiple LLM providers with easy switching
- MCP Compatible: Works seamlessly with Claude, Cursor, Gemini CLI, and other MCP clients
- Easy Setup: Simple configuration via environment variables
Table of Contents
Quick Start
-
Clone and install:
git clone https://github.com/FradSer/mcp-server-git-cz.git cd mcp-server-git-cz uv venv && uv pip install -r requirements.txt -
Configure environment:
cp .env.example .env # Edit .env with your API keys -
Run the server:
uv run mcp-server-git-cz
Installation
Prerequisites
- Python 3.10+
- uv package manager
Step-by-step Installation
-
Clone the repository:
git clone https://github.com/FradSer/mcp-server-git-cz.git cd mcp-server-git-cz -
Create virtual environment and install dependencies:
uv venv uv pip install -r requirements.txt -
Set up environment variables:
cp .env.example .envEdit
.envfile:DEEPSEEK_API_KEY=your_deepseek_api_key GROQ_API_KEY=your_groq_api_key LLM_PROVIDER=deepseek # or groq
Configuration
Environment Variables
| Variable | Description | Default | Required |
|---|---|---|---|
DEEPSEEK_API_KEY | DeepSeek API key | - | Yes (if using DeepSeek) |
GROQ_API_KEY | Groq API key | - | Yes (if using Groq) |
LLM_PROVIDER | LLM provider to use | deepseek | No |
Transport Options
The server supports multiple transport methods:
# STDIO transport (recommended)
uv run mcp-server-git-cz
# SSE transport
uv run mcp-server-git-cz --transport sse --port 8000
Usage
The server exposes a single tool: generate_commit_message that analyzes your git diff and generates conventional commit messages.
Basic Example
import asyncio
from mcp.client.session import ClientSession
from mcp.client.stdio import StdioServerParameters, stdio_client
async def main():
async with stdio_client(
StdioServerParameters(command="uv", args=["run", "mcp-server-git-cz"])
) as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
# Generate commit message
result = await session.call_tool("generate_commit_message", {})
print(result)
asyncio.run(main())
MCP Client Setup
Note: Replace
/path/to/mcp-server-git-czwith your actual project directory path in all configurations below.
Claude Code
# Project scope (recommended for teams)
claude mcp add git-cz -s project -- uv run --python /path/to/mcp-server-git-cz/.venv/bin/python -m mcp_server_git_cz
# User scope (personal use)
claude mcp add git-cz -s user -- uv run --python /path/to/mcp-server-git-cz/.venv/bin/python -m mcp_server_git_cz
Cursor
Add to Cursor settings:
{
"mcpServers": {
"git-cz": {
"command": "uv",
"args": ["run", "--python", "/path/to/mcp-server-git-cz/.venv/bin/python", "-m", "mcp_server_git_cz"],
"env": {},
"transport": "stdio"
}
}
}
Gemini CLI
Add to ~/.gemini/settings.json:
{
"mcpServers": {
"git-cz": {
"command": "uv",
"args": ["run", "--python", "/path/to/mcp-server-git-cz/.venv/bin/python", "-m", "mcp_server_git_cz"],
"env": {}
}
}
}
Detailed Setup Instructions
Finding Your Paths
-
Get virtual environment path:
cd mcp-server-git-cz uv venv which python # Copy this path -
Get project directory:
pwd # Copy this path -
Update configurations with your actual paths
Advanced Configuration
With Environment Variables
{
"mcpServers": {
"git-cz": {
"command": "uv",
"args": ["run", "--python", "/path/to/mcp-server-git-cz/.venv/bin/python", "-m", "mcp_server_git_cz"],
"env": {
"DEEPSEEK_API_KEY": "your_key_here",
"LLM_PROVIDER": "deepseek"
}
}
}
}
With Working Directory
{
"mcpServers": {
"git-cz": {
"command": "uv",
"args": ["run", "--python", "/path/to/mcp-server-git-cz/.venv/bin/python", "-m", "mcp_server_git_cz"],
"cwd": "/path/to/mcp-server-git-cz",
"env": {}
}
}
}
Examples
Using with MCP Clients
Once configured, you can interact with the tool using natural language:
- "Generate a commit message for my current changes"
- "Create a conventional commit message based on my git diff"
- "Help me write a commit message following conventional commits"
The server will:
- Analyze your current git diff
- Generate a conventional commit message using AI
- Return the formatted message for review
Example Output
feat(auth): add OAuth2 integration with GitHub
- Implement OAuth2 authentication flow
- Add GitHub provider configuration
- Update user model to support external auth
- Add tests for authentication endpoints
Closes #123
Contributing
We welcome contributions! Please follow these guidelines:
Development Setup
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes
- Run tests:
make test - Commit using conventional commits:
git commit -m 'feat: add amazing feature' - Push to your branch:
git push origin feature/amazing-feature - Open a Pull Request
Code Style
- Follow PEP 8 for Python code
- Use Black for code formatting
- Add type hints where appropriate
- Write tests for new features
Reporting Issues
Found a bug? Have a feature request? Please open an issue with:
- Clear description of the problem
- Steps to reproduce
- Expected vs actual behavior
- Environment details
License
This project is licensed under the MIT License - see the LICENSE file for details.
Support
- Documentation: Full documentation
- Bug Reports: GitHub Issues
- Feature Requests: GitHub Discussions
- Email: fradser@gmail.com
Acknowledgments
- Conventional Commits specification
- Model Context Protocol framework
- DeepSeek and Groq for AI capabilities
- All contributors who help improve this project
⭐ Star this repo if you find it useful!
