🔍 gitlog-mcp
Give your AI coding agent superpowers over git history.
gitlog-mcp is a Model Context Protocol (MCP) server that lets AI agents (Claude Code, Cursor, Windsurf, and any MCP client) understand what changed in a repository — auto-generate changelogs, analyze commits, attribute blame, and draft release notes.
"What changed in this repo?" is the question every AI agent gets wrong. This fixes it.
Why this exists
AI coding agents are great at writing code but famously bad at knowing the history of a codebase. They hallucinate changelogs, misattribute blame, and guess at release notes. gitlog-mcp gives them a reliable, structured window into git log — so their answers are grounded in what actually happened, not invented.
Features
- 📝 Auto-changelog — generate a clean, grouped changelog from any tag/commit range
- 🔎 Commit analysis — explain why a change happened, not just what changed
- 👤 Blame attribution — who touched what, and when (with context)
- 🏷️ Release notes — draft release notes from tag-to-tag diffs
- 📊 Repo health — commit frequency, top contributors, churn hotspots
- 🧱 Zero runtime dependencies — pure Python stdlib + the MCP SDK, one file
Quick start
# 1. Install (not yet on PyPI — install from source)
git clone https://github.com/ManiaSacha/gitlog-mcp.git
cd gitlog-mcp
pip install -e .
# 2. Run standalone (for testing) — defaults to the current directory
gitlog-mcp
gitlog-mcp --repo /path/to/your/repo
# 3. Or add directly to your agent's MCP config (see below)
pip install gitlog-mcpwill work once this is published to PyPI. Until then, install from source as shown above. There's a real, tested publish pipeline ready to go (tag-triggered, PyPI Trusted Publishing) — see RELEASING.md for the full process.
Want the local web dashboard too? It's an optional extra, not installed by default:
pip install -e ".[ui]"(orpip install "gitlog-mcp[ui]"once on PyPI). Plainpip install gitlog-mcpstays exactly as dependency-free as ever.
Claude Code config
{
"mcpServers": {
"gitlog": {
"command": "gitlog-mcp",
"args": ["--repo", "."]
}
}
}
Cursor config (.cursor/mcp.json)
{
"mcpServers": {
"gitlog": {
"command": "gitlog-mcp",
"args": ["--repo", "."]
}
}
}
Debug it standalone
Want to poke at the tools directly before wiring up an agent? The MCP Inspector gives you a UI to call each tool by hand:
npx @modelcontextprotocol/inspector gitlog-mcp --repo .
Example agent prompts
"Generate a changelog of everything that changed between
v1.2.0andv1.3.0."
"Who introduced this buggy line in
src/parser.pyand why?"
"Draft release notes for the next version based on recent commits."
Tools exposed
| Tool | Description |
|---|---|
changelog |
Grouped changelog for a commit/tag range |
analyze_commit |
Explain a specific commit's intent and impact |
blame_file |
Line-level attribution for a file |
release_notes |
Draft release notes between two tags |
repo_health |
Contributor + churn summary |
search_commits |
Find commits by message/author/date |
Web dashboard (optional)
Prefer a browser to a terminal? gitlog-mcp-ui serves a small local dashboard on top of the same git-reading code the MCP tools use — same data, human-readable.
pip install "gitlog-mcp[ui]"
gitlog-mcp-ui --repo /path/to/repo
This prints a URL (http://127.0.0.1:8765 by default) — open it in your browser; it won't open one for you.
| View | What it shows |
|---|---|
| Changelog | Commit range picker (since / until) |
| Repo Health | Contributor stats, commit totals |
| Blame | Per-file, per-line attribution |
Read-only — no write actions anywhere. Local-only by construction: binds to 127.0.0.1 only (there's no --host flag, so it can't be exposed to the network even by accident), and validates every request's Host header too, closing the DNS-rebinding gap a loopback bind alone doesn't cover. No auth needed, because nothing but your own machine can reach it.
It's an optional extra (pip install gitlog-mcp[ui]), not installed by default. The core gitlog-mcp server has zero runtime dependencies beyond the MCP SDK, full stop — the dashboard doesn't change that. It's http.server from the stdlib, no framework, no extra deps of its own.
Architecture
gitlog-mcp (single file, ~250 lines)
├── FastMCP server (stdio transport)
├── GitRunner — thin wrapper over `git` CLI
└── Tools — each maps to a git subcommand + parsing
Deliberately small. You can read the whole thing in an afternoon — that's a feature.
Contributing
PRs welcome. Small, focused, well-tested changes only. See CONTRIBUTING.md.
Release process and versioning are documented in RELEASING.md.
Roadmap
-
--repoauto-detection from cwd - Structured JSON output for all tools
- GitHub/GitLab remote integration
- Tests + CI badge
License
MIT © 2026 — built in the open, for the open-source community.
Star this repo if you want AI agents to stop hallucinating your changelog. ⭐
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gitlog_mcp-0.1.2.tar.gz.
File metadata
- Download URL: gitlog_mcp-0.1.2.tar.gz
- Upload date:
- Size: 20.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d534a896f9e107efa0da4faaeb41ba87633061bdb13e6ecb32961bd2fc6c107f
|
|
| MD5 |
2e66333625d837dc8c0e5f3088702b33
|
|
| BLAKE2b-256 |
91bd0d07476ac1313ab2e76a9f8c5acefc0e39b4995ef6f73cc6ff189d1bbbd1
|
Provenance
The following attestation bundles were made for gitlog_mcp-0.1.2.tar.gz:
Publisher:
publish.yml on ManiaSacha/gitlog-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gitlog_mcp-0.1.2.tar.gz -
Subject digest:
d534a896f9e107efa0da4faaeb41ba87633061bdb13e6ecb32961bd2fc6c107f - Sigstore transparency entry: 2492737294
- Sigstore integration time:
-
Permalink:
ManiaSacha/gitlog-mcp@0711e5411b8aac3e5df08a9a72ba27d81f14f850 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/ManiaSacha
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0711e5411b8aac3e5df08a9a72ba27d81f14f850 -
Trigger Event:
push
-
Statement type:
File details
Details for the file gitlog_mcp-0.1.2-py3-none-any.whl.
File metadata
- Download URL: gitlog_mcp-0.1.2-py3-none-any.whl
- Upload date:
- Size: 16.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
21e5ef50f33508908ae589b7cd09224617d7cd337883093d78b1eca4d0f6ab0e
|
|
| MD5 |
ee824adc1cd090d77c50f9178a9a55b9
|
|
| BLAKE2b-256 |
023f16bedb2615f5d996277904704a26c397ee5a7c12f039716b375e71f138ba
|
Provenance
The following attestation bundles were made for gitlog_mcp-0.1.2-py3-none-any.whl:
Publisher:
publish.yml on ManiaSacha/gitlog-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gitlog_mcp-0.1.2-py3-none-any.whl -
Subject digest:
21e5ef50f33508908ae589b7cd09224617d7cd337883093d78b1eca4d0f6ab0e - Sigstore transparency entry: 2492737315
- Sigstore integration time:
-
Permalink:
ManiaSacha/gitlog-mcp@0711e5411b8aac3e5df08a9a72ba27d81f14f850 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/ManiaSacha
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0711e5411b8aac3e5df08a9a72ba27d81f14f850 -
Trigger Event:
push
-
Statement type: