GitHub
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Beschreibung vom Entwickler (englisches Original)
Finds the Git commits that explain why code is the way it is: semantic and full-text history search.
Diese drei werden nie zu einer Punktzahl zusammengefasst: Meinungen, Messungen und Beliebtheit sind verschiedene Dinge.
Für diesen Server haben wir noch keine Zusammenfassung in einfacher Sprache geschrieben. Unten stehen die Fakten, die wir aus der Registry gelesen haben.
Wähle die KI-App, die du nutzt, und kopiere die Einstellungen.
Du brauchst
Welche App nutzt du?
Wähle oben deine App. Wir merken sie uns, damit der Button beim nächsten Mal „In … installieren“ anzeigt.
Öffne Claude Desktop → Settings → Developer → Edit Config und füge dies in claude_desktop_config.json ein
{
"mcpServers": {
"git-why": {
"command": "npx",
"args": [
"-y",
"@alliecatowo/git-why",
"mcp"
]
}
}
}Führe das in deinem Terminal aus
claude mcp add git-why -- npx -y @alliecatowo/git-why mcpIn .cursor/mcp.json in deinem Projekt oder in ~/.cursor/mcp.json einfügen
{
"mcpServers": {
"git-why": {
"command": "npx",
"args": [
"-y",
"@alliecatowo/git-why",
"mcp"
]
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
In .vscode/mcp.json in deinem Projekt einfügen
{
"servers": {
"git-why": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@alliecatowo/git-why",
"mcp"
]
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
Dieser Server läuft auf deinem Computer, und ChatGPT kann sich nur mit Servern im Internet verbinden. Wähle eine andere App.
Deine Auswahl bleibt in einem Cookie auf diesem Gerät; kein Konto nötig.
Diese Einstellungen werden aus dem Registry-Eintrag des Entwicklers erzeugt. Wenn in der README etwas anderes steht, folge der README.
Läuft auf deinem Computer; die Tool-Liste erscheint nach der Installation in deiner KI-App.
Wir prüfen Informationen, die jeder sehen kann; den Code haben wir nicht gelesen. Checks, die nicht zutreffen, werden nicht mitgezählt. · Geprüft am 6. Nov. 2026
Der Registry-Name wurde mit dem GitHub-Konto alliecatowo bestätigt, dem das Repo gehört
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieser Server läuft auf deinem Computer; es gibt keinen Endpunkt im Internet
Läuft auf deinem Computer und nutzt stattdessen lokale Einstellungen
Läuft auf deinem Computer; Tool-Listen können wir nur von Endpunkten im Internet lesen
Verglichen mit allen aktiven Servern dieser Kategorie in der Registry. Sterne zählen nur, wenn dem Herausgeber das Repo gehört.
Er hat 1 von 1 zutreffenden Basischecks bestanden. Den Code haben wir nicht gelesen. Bevor du einen Schlüssel oder Token hinzufügst, sieh nach, welche Zugriffe der Server verlangt, und nutze einen Schlüssel, der nur die Berechtigungen hat, die du brauchst.
Die Registry nennt keinen erforderlichen Schlüssel, manche Server bitten dich aber bei der ersten Nutzung, dich anzumelden.
Er läuft auf deinem Computer. Deine KI-App startet ihn bei Bedarf, und die Daten laufen nicht über die Server des Entwicklers (außer der Server ruft selbst einen Onlinedienst auf).
Das GitHub-Repo wurde zuletzt – geändert, und die neueste Version (0.2.0) kam vor 33 Tagen in die Registry.
Apps, die MCP unterstützen, etwa Claude Desktop, Claude Code, Cursor und VS Code. Außerdem brauchst du Node.js auf deinem Computer.
In derselben Kategorie: GitHub, Desktop Commander, Cloudflare MCP
Server derselben Kategorie von anderen Entwicklern, sortiert nach Sternen.
So liest du eine Karte:★ GitHub-SterneiDrei Säulen: Bewertungen · Checks · NutzungiAktualisiert = neueste Version in der Registry veröffentlichti
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
MCP server for terminal commands, file operations, and process management
Cloudflare MCP servers
Unverändert aus dem Repo des Entwicklers übernommen. PopNx MCP hat den Inhalt weder geprüft noch empfiehlt es ihn. HTML, Bilder und Skripte wurden entfernt. Links führen von dieser Website weg.
`git blame` tells you who changed the code. `git why` finds the history that explains it.
Local-first semantic + full-text search over Git history. It returns the actual commit, its author's real words, and the relevant diff. It retrieves evidence; it does not generate an explanation of its own.
Real output from mise run demo, which rebuilds a small fixture repository from bench/fixtures/demo/build.mjs and runs these two queries against it. Nothing here is hand-written, and you can reproduce it in one command.
For output against real repositories — curl, zod, redis — including a worked case where this is the wrong tool, see docs/examples.md or the recorded terminal sessions.
$ git why "that bizarre bug where reconnecting subscribed twice"
Reconnecting re-ran the subscribe handler without clearing the previous registration, so every reconnect doubled the delivered events.
src/net/socket.ts -export function connect(url) { return new Socket(url); } +export function connect(url) {
$ git why "why do we keep the session when the refresh token is empty?"
Provider X can return an empty refresh token while the current access token remains valid. Retrying here puts clients into an infinite loop.
src/auth/refresh.ts export function refresh(session, refreshToken) {
Install from npm (Node >= 22.12):
npm install -g @alliecatowo/git-why
Or with Homebrew (macOS and Linux; pulls in node):
brew install alliecatowo/tap/git-why
Or build from source:
git clone https://github.com/alliecatowo/git-why.git
cd git-why npm ci npm run build npm install -g .
The package installs a git-why executable, which Git dispatches as the subcommand git why. No alias setup needed. More install paths — pinned versions, a GitHub release tarball, building from source, uninstalling — are in docs/install.md.
cd your-repo
git why "why do we retry twice before giving up"
The first query downloads a small embedding model (about 32 MB, checksum-verified, cached under ~/.cache/git-why/models) and indexes the repository's history into .git/why/; later queries are incremental. Behind a proxy or offline, see HTTPS_PROXY, GIT_WHY_MODEL_BASE_URL (mirror) and GIT_WHY_OFFLINE in docs/operations.md. git why status shows whether the index is current.
Two plugins ship in plugins/:
| plugin | what you get |
|---|---|
git-why | The MCP server, a routing skill, and an index-management skill. |
git-why-full | The same, plus zg for current-code search and a history-explorer agent for questions that need several searches. |
OpenCode users get opencode/ — an opencode.json with the MCP registration and an AGENTS.md fragment.
What the skill actually teaches is when not to reach for history. It tells an agent to use git log -S when it can name the symbol, because that is a case this tool measurably loses (Hit@10 0.950 against 0.350), and to use code search rather than history for the current state of the code. A skill that claims its own tool is always best makes an agent worse at its job.
Any other MCP client can run the server directly: npx -y @alliecatowo/git-why mcp (or git why mcp once installed). It is also listed in the MCP registry as io.github.alliecatowo/git-why.
See docs/plugin.md.
git why server on
Holds the index, the embedding model and the lineage table open between queries. On curl — 30,000 commits — that is 569 ms a query down to 286 ms. Searches use it automatically once it is running.
It can never be the reason a search fails: if no daemon is running, or it is unreachable, or your index moved under it, the query runs directly instead. --daemon=direct opts out, --daemon=server requires one. See docs/daemon.md.
git log --grep only matches words you already know. The reason code changed usually lives in a commit message, but you rarely remember its exact wording — you remember the _problem_, in your own words, months later.
Look again at the first example above: the query is "reconnecting subscribed twice" and the commit is titled "Stop duplicate subscriptions after reconnect." They share almost no vocabulary. That's not a coincidence Git Why is showing off — it's the actual point of a semantic index. It carries the meaning of the change, not just its words, alongside an ordinary keyword index for when you _do_ know the exact term.
Git Why retrieves historical evidence: the commit, the author's actual words, and the relevant diff. Historical commit messages are assertions by their authors, not infallible accounts of intent, and some reasons were never committed at all — Git Why will not manufacture those.
Every number below is written into this file by bench/report.mjs from raw run data, and CI fails if it drifts — no figure here was typed by hand. Full methodology, limits, and the negative results are in docs/report.md.
174 recall questions — you remember a problem but cannot name anything in the commit that fixed it — derived mechanically from 6 pinned real repositories (curl, redis, requests, ripgrep, caddy, zod). Every question is verified unanswerable by keyword search before it enters the set: if git log --grep or git log -S finds the answer from the question's own words, the case is discarded.
| strategy | Hit@1 | Hit@5 | MRR | returned nothing |
|---|---|---|---|---|
| git why | 0.201 | 0.374 | 0.266 | 0 |
| zg (semantic code search) | 0.017 | 0.040 | 0.026 | 2 |
| git log -G | 0.006 | 0.017 | 0.011 | 15 |
| git log --grep | 0.000 | 0.011 | 0.003 | 0 |
| git log --grep --all-match | 0.000 | 0.000 | 0.000 | 109 |
| git log -S | 0.000 | 0.000 | 0.000 | 15 |
10.2x `zg` and 23x the best Git-native strategy — and the only approach that answers nearly every question rather than returning an empty set.
When you can name the symbol, use pickaxe search instead. On cross-file causal questions, git log -S scores Hit@10 0.950 against git why's 0.350. Semantic search has no advantage over a tool you can hand the exact literal.
That boundary is the honest positioning, and the shipped skill tells agents both halves:
git whygit log -SzgRetrieval quality is not the product. The question is whether an agent answering a real question does it more accurately, or in fewer turns, with the tool than without. Four arms over the same frozen tasks, paired per task, with token counts reconciled against the provider's own accounting database.
| model | paired n | accuracy W-L | median tool calls saved |
|---|---|---|---|
| gemini-3.1-flash-lite | 6 | 1-2 | 2.5 |
| claude-haiku-4-5 | 9 | 1-1 | 1 |
| claude-sonnet-5 | 8 | 0-0 | 1 |
| deepseek-v4-flash | 8 | 0-0 | 3.5 |
| gemini-2.5-flash-lite | 6 | 2-1 | 1 |
| gemini-3.1-flash-lite | 7 | 2-0 | 1 |
| gemini-3.5-flash | 6 | 0-0 | 0.5 more |
Results are mixed across models. At single-digit paired n per model this is descriptive, not significant, and it is reported that way deliberately — the direction is consistent, the magnitude is not established. Full method and per-arm figures in the benchmark report.
Method, per-arm figures and the registered hypothesis: docs/report.md.
| measurement | result |
|---|---|
| Index across 6 real repos (56,781 commits) | 5.51–7.84 KB/record |
| curl-curl (30,000 commits, 182,772 records) | 1.37 GiB, 7.84 KB/record |
Query on curl-curl (30,000 commits) with git why server on | 384 ms p50, 491 ms p95 |
| The same query with no daemon | 851 ms p50, 1371 ms p95 |
| Diff/evidence ingestion, real-repo ablation | earns its cost, ΔHit@5 +0.375 |
Eight optimisations were implemented and measured. One survived.
The one that did: lexical overlap between the question and the commit's own message, reranked over a candidate pool deeper than the result list. Weight chosen on a dev half, evaluated once on the held-out half — +26% MRR and +44% Hit@1 on cases it never saw. Shipped.
The seven that did not: a prose-tuned embedding model, pseudo-relevance feedback, a prose-commit penalty, caller-side query restatement, wider result windows, structural expansion, and phrase fusion. None improved MRR.
What made the difference was not a better idea but a different question. The seven all asked "does this rank better". The one that worked started by asking where the right commit actually is — and found that a quarter of the corpus is retrieved but ranked below 5, which is a reordering problem, while 42% is never retrieved at all, which is not. See docs/decisions.md.
The remaining headroom is that 42%: a recall problem in the embedding itself. That is now measured rather than guessed — docs/embedding.md compares ten models on a fixed pool. Transformer embedders score +41% (jina-v2-small) and +64% (jina-v2-base) MRR over the shipped static one, at 191x and 1287x the indexing time plus an ONNX runtime. Both are available o
Nur der Anfang wird gezeigt; den Rest findest du im Repo