Prototype · Preview: every server in the official registry, synced every 30 minutes. Reviews and accounts come in a later step.
PopNx MCPMCP servers for people who use AI · explained in plain words

Git Why

by alliecatowoversion 0.2.0i★ –iRuns on your computer
Registry nameio.github.alliecatowo/git-why

Install

Overview

Description from the maker (original English)

Finds the Git commits that explain why code is the way it is: semantic and full-text history search.

PopNx MCP’s three pillars

These three are never merged into one score: opinions, measurements and popularity are different things.

What you can do with it

We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.

  • Connection: Runs on your computer
  • Transport: stdio
  • Category: Developer tools

Install

Pick the AI app you use, then copy the settings.

Before you install

  • Basic checks: 1 of 1 passed
  • Runs on your computer with your user’s permissions (files, network, apps).
  • The registry lists no key to fill in.

You need

  • npmNode.js installed (for the npx command)

Which app do you use?

Pick your app above. We remember it, so next time the button says “Install in …”.

Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json

{
  "mcpServers": {
    "git-why": {
      "command": "npx",
      "args": [
        "-y",
        "@alliecatowo/git-why",
        "mcp"
      ]
    }
  }
}

Run this in your terminal

claude mcp add git-why -- npx -y @alliecatowo/git-why mcp

Open in Cursor

Or copy the settings yourself

Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json

{
  "mcpServers": {
    "git-why": {
      "command": "npx",
      "args": [
        "-y",
        "@alliecatowo/git-why",
        "mcp"
      ]
    }
  }
}

Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.

Open in VS Code

Or copy the settings yourself

Paste into .vscode/mcp.json in your project

{
  "servers": {
    "git-why": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@alliecatowo/git-why",
        "mcp"
      ]
    }
  }
}

Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.

This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.

Your choice stays on this device in a cookie; no account needed.

These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.

What it can do

Runs on your computer; the tool list appears in your AI app after you install it.

Basic checksi

We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 7, 2026

  • ✓ Pass

    Maker matches the repo

    The registry name was verified with the GitHub account alliecatowo, which owns the repo

  • … Not checked yet

    Still maintained

    We have not read this repo from GitHub yet

  • … Not checked yet

    Has a licence

    We have not read this repo from GitHub yet

  • – Not applicable

    Endpoint responds

    This one runs on your computer; there is no internet endpoint

  • – Not applicable

    Sign-in with OAuth

    Runs on your computer and uses local settings instead

  • … Not checked yet

    No hidden instructions in tool descriptions

    Runs on your computer; we can only read tool lists from internet endpoints

Compared with others in Developer toolsi

  • More stars than 0% of the other 1391 servers in this category
  • Published to the registry more recently than 61% of the other 1391 servers in this category
  • Basic checks equal to or better than 100% of the other 1391 servers in this category

Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.

Common questions

Is Git Why safe?

It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.

What keys or codes does it need?

The registry does not list a required key, though some servers ask you to sign in on first use.

Does it run on my computer or in the cloud?

It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).

Is it still maintained?

The GitHub repo last changed –, and the latest version (0.2.0) reached the registry 33 days ago.

Which apps can use it?

Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Node.js on your computer.

What can I use instead?

In the same category: GitHub, Desktop Commander, Cloudflare MCP

Alternatives

Servers in the same category from other makers, sorted by stars.

Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi

GitHub

by github

GitHub’s official server lets AI read and manage code, issues and pull requests in your account. Use GitHub’s hosted version or run it locally with Docker.

Computer or cloud★ 34,245MITUpdated 3 days ago
Install

Desktop Commander

by wonderwhy-er

MCP server for terminal commands, file operations, and process management

Runs on your computer★ 10,225MITUpdated 15 days ago
Install

Cloudflare MCP

by cloudflare

Cloudflare MCP servers

Runs in the cloud★ 4,446Apache-2.0Updated 14 months ago
Install

README from the maker

Open the README

Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.

Git Why

`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"
  1. 7deab42 Stop duplicate subscriptions after reconnect 2025-11-20 · Maya Chen

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) {

  • const s = new Socket(url);
  • s.on('reconnect', () => resubscribeOnce(s));
  • return s; +}
$ git why "why do we keep the session when the refresh token is empty?"
  1. f17db20 Fix infinite token-refresh loop 2025-11-03 · Maya Chen

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) {

  • if (!refreshToken) throw new InvalidTokenError();
  • if (!refreshToken) return session; return exchange(refreshToken); }

Install

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.

First run

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.

Use it with an agent

Two plugins ship in plugins/:

pluginwhat you get
git-whyThe MCP server, a routing skill, and an index-management skill.
git-why-fullThe 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.

Make it faster (optional)

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.

Why

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.

Measured, not claimed

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.

Against the tools you would otherwise use

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.

strategyHit@1Hit@5MRRreturned nothing
git why0.2010.3740.2660
zg (semantic code search)0.0170.0400.0262
git log -G0.0060.0170.01115
git log --grep0.0000.0110.0030
git log --grep --all-match0.0000.0000.000109
git log -S0.0000.0000.00015

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.

Where it loses

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:

  • cannot name the term → git why
  • can name the term → git log -S
  • current code, not history → zg
Scale and cost
Does it help an agent?

Retrieval 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.

modelpaired naccuracy W-Lmedian tool calls saved
gemini-3.1-flash-lite61-22.5
claude-haiku-4-591-11
claude-sonnet-580-01
deepseek-v4-flash80-03.5
gemini-2.5-flash-lite62-11
gemini-3.1-flash-lite72-01
gemini-3.5-flash60-00.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.

measurementresult
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 on384 ms p50, 491 ms p95
The same query with no daemon851 ms p50, 1371 ms p95
Diff/evidence ingestion, real-repo ablationearns its cost, ΔHit@5 +0.375
What works, and what does not

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

Only the beginning is shown; read the rest in the repo

Ask PopNx