mcp-git-historian

mcp-git-historian

MCP server for git archaeology — churn hotspots, blame summaries, bus factor, commit forensics and file history over any local repository.

Category
Visit Server

README

mcp-git-historian

tests

MCP server for git archaeology — churn hotspots, blame summaries, bus factor, commit forensics and file history over any local repository.

Why

Every codebase carries answers to the questions that matter most during maintenance: Which files keep breaking? Who actually knows this legacy module? When did this weird constant appear? What happens if that one developer leaves? The answers are buried in git history, but digging them out means chaining log, blame, shortlog and pickaxe invocations with arcane flags — so nobody does it.

mcp-git-historian gives your AI assistant those forensic tools directly. It shells out to the git CLI you already have (no extra dependencies, no network calls, nothing leaves your machine) and returns structured, LLM-friendly summaries: hotspot rankings, ownership percentages, knowledge silos, and the exact commit where a piece of code first showed up.

Tools

Tool Arguments Returns
repo_summary repo_path Current branch, total commits, first/last commit (hash + date), top 10 contributors, commits per month for the last 12 months
hotspots repo_path, since="1 year ago", top=15 Files ranked by commits touching them + lines added/deleted; deleted files excluded; top 3 flagged as high-churn refactor candidates
file_history repo_path, file, limit=20 Commits that touched the file (hash, date, author, subject, +/- lines), following renames via --follow
blame_summary repo_path, file % of surviving lines per author, dominant author, dates of the oldest and newest lines
bus_factor repo_path, top=10 Per top-level directory: dominant author and share of commits, knowledge silos (>80% one author); global bus factor (min authors covering >50% of commits)
search_commits repo_path, query, author="", since="", limit=20 Case-insensitive commit-message search (git log --grep) with optional author/date filters
find_change repo_path, pattern, file="", limit=10 Commits that added/removed the pattern via pickaxe (git log -S) — "when did this code appear?" (-S tracks occurrence-count changes; -G would also match moved lines)

How it works

flowchart LR
    A[Claude / MCP client] -->|tool call| B[server.py<br/>FastMCP wiring]
    B --> C[core.py<br/>pure stdlib logic]
    C -->|subprocess, 30s timeout| D[git -C repo_path<br/>log / blame / ls-files]
    D --> E[(local git repository)]
    D -->|"porcelain output<br/>(pretty %x1f/%x1e, numstat,<br/>blame --line-porcelain)"| C
    C -->|structured dict| B
    B -->|JSON result| A

All parsing relies on machine-friendly git output: custom --pretty formats with ASCII unit/record separators (%x1f/%x1e), --numstat for line churn, and blame --line-porcelain for ownership. Everything runs locally against repositories on your disk.

Quickstart

pip install -e .

Requires Python 3.10+ and the git CLI on your PATH.

Claude Desktop — add to claude_desktop_config.json:

{
  "mcpServers": {
    "git-historian": {
      "command": "python",
      "args": ["/absolute/path/to/mcp-git-historian/server.py"]
    }
  }
}

Claude Code:

claude mcp add git-historian -- python /absolute/path/to/mcp-git-historian/server.py

Example session

User: Nobody on the team dares to touch legacy/parser.py. Who actually knows that module, and how risky is it?

Claude: (calls blame_summary(repo_path="/work/acme-api", file="legacy/parser.py"))

Ownership is extremely concentrated: Alice Dev wrote 94.6% of the surviving lines (Bob Ops has the remaining 5.4%). The oldest line dates to 2019-03-11 and the newest to 2024-08-02 — it is old code, but still being touched.

(calls bus_factor(repo_path="/work/acme-api"))

The legacy/ directory is a knowledge silo: Alice authored 96.2% of all commits touching it. The repository's global bus factor is 2 — just two people account for more than half of all commits. If Alice is unavailable, legacy/ has no realistic second owner.

User: And where did that MAGIC_TOKEN constant in the parser even come from?

Claude: (calls find_change(repo_path="/work/acme-api", pattern="MAGIC_TOKEN", file="legacy/parser.py"))

The pickaxe found exactly one commit that introduced it: a1b2c3d (2019-04-02, Alice Dev) — "feat: add legacy parser handshake token". It has never been removed or re-added since, so that constant has survived untouched for years. I'd recommend pairing someone with Alice on the next legacy/ change and starting with tests around parse().

Development

pip install -e ".[dev]"
python -m pytest

The test suite builds a real throwaway git repository (two authors, a rename, a deleted file, pinned commit dates) and never imports mcp, so it runs with plain pytest.

License

MIT — see LICENSE.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured