Skip to main content
Glama
AleBrito124356

mcp-git-historian

mcp-git-historian

tests License: MIT

MCP server and CLI for git archaeology: rename-aware churn hotspots, change coupling, knowledge-loss risk, bus factor, blame and commit forensics over any local repository.

Why

Every codebase carries answers to the questions that matter most during maintenance. Which files keep breaking? Which files secretly depend on each other? Who actually knows this legacy module, and is that person still around? When did this weird constant appear? The answers are buried in git history. Digging them out means chaining log, blame, shortlog and pickaxe invocations with arcane flags, then fixing up renames, duplicate identities and merge commits by hand, so nobody does it.

mcp-git-historian gives your AI assistant, or your terminal, those forensic tools directly. It shells out to the git CLI you already have. Nothing leaves your machine and there are no API keys or network calls. It returns structured, LLM-friendly results: hotspot rankings, coupled file pairs, orphaned files, ownership percentages and the exact commit where a piece of code first showed up.

Related MCP server: git-intel

Tools

Every tool is read-only and is annotated as such (readOnlyHint, idempotentHint) for MCP clients.

Tool

Arguments (defaults)

Returns

repo_summary

repo_path, include_merges=false

Branch, total and merge commits, first/last commit, number of authors, 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, with +/- lines and churn_percentile. Renames are followed (renamed_from) and deleted files excluded. Only real outliers get a hint (see the rules)

change_coupling

repo_path, file="", since="1 year ago", min_shared=3, max_files_per_commit=30, top=20

Files that keep changing in the same commits: shared commits, degree (shared / min revisions) and jaccard. With file, that file's partners

knowledge_risk

repo_path, inactive_after="6 months ago", top=20, path="", max_files=200

What breaks if someone leaves? Blame-based ownership against each author's last commit: orphaned files, a per-author rollup (lines, files as main owner, last commit) and a per-directory rollup

bus_factor

repo_path, top=10, include_merges=false

Global bus factor (the fewest authors covering >50% of commits), plus the dominant author and knowledge silos per top-level directory

file_history

repo_path, file, limit=20

Commits that touched the file (hash, date, author, subject, +/- lines), following renames

blame_summary

repo_path, file

% of surviving lines per author, dominant author, dates of the oldest and newest lines

commit_details

repo_path, ref

Full message, author/committer, parents (merge detection), every file with status A/M/D/R/C/T and +/- lines, old path for renames, branches and tags that contain it

search_commits

repo_path, query, author="", since="", limit=20, regex=false

Case-insensitive commit-message search. The query is literal text by default, so [WIP] just works; regex=true for POSIX extended regexes

find_change

repo_path, pattern, file="", limit=10, regex=false

Commits where the pattern was added or removed (pickaxe git log -S), following file across renames; regex=true switches to git log -G

health_report

repo_path, since="1 year ago", inactive_after="6 months ago", top=10, max_files=200

Everything above as one Markdown report, including a what to look at first list

repo_path can be the repository root or any folder inside it. A sub-folder scopes the analysis to that folder. File arguments are relative to the repository root, and absolute paths inside the repository work too. Errors come back as MCP tool errors with an actionable message ("Repo not found at … pass an absolute path", "limit must be at least 1", "Invalid regular expression … pass regex=false"), so the model can fix its own call.

What the numbers mean

The analyses are only useful if their numbers are right, so these rules are explicit, tested, and echoed in the results:

  • Renames are followed. Commits made under a file's former names count towards its current name (hotspots, change_coupling, file_history, find_change with file).

  • One person is one author. Identities go through .mailmap everywhere (%aN), exactly like git blame, so Alice Dev <alice@work> and alice <alice@home> are not two people.

  • Merges are not authorship. Merging a pull request is not writing its code. repo_summary and bus_factor exclude merge commits unless include_merges=true and report how many were excluded. Churn and coupling always ignore them, because their changes were already counted in the commits they merge.

  • Hotspot flag: a file gets the hint only with ≥ 3 commits and churn_percentile ≥ 90 (the top decile of files changed in the window). The percentile uses mid-ranks, so when many files tie nobody stands out.

  • Knowledge silo: a directory with ≥ 3 commits where one author made > 80% of them.

  • Orphaned file: authors with no commit since inactive_after own > 50% of its lines at HEAD.

  • Coupling noise filter: commits touching more than max_files_per_commit files (reformatting sweeps, vendoring) are skipped and counted in commits_skipped_large.

  • Dates: since / inactive_after accept any git date ("6 months ago", "2025-01-01"). Results echo the resolved date (since_date), and nonsense that git would silently read as "now" is rejected.

Install

Not yet published to PyPI or the MCP registry (server.json and the mcp-name marker are ready for when it is). Install it straight from GitHub.

Requires Python 3.10+ and the git CLI on your PATH. The MCP Python SDK is installed automatically; both major versions work (tested with mcp 1.10.0, 1.30.0 and 2.2.0).

With uv nothing is installed permanently:

uvx --from git+https://github.com/AleBrito124356/mcp-git-historian mcp-git-historian --version

Or with pip, into any virtual environment:

pip install "git+https://github.com/AleBrito124356/mcp-git-historian"
mcp-git-historian --version

Use it from an MCP client

Launched with no arguments, mcp-git-historian is a stdio MCP server.

Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "git-historian": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/AleBrito124356/mcp-git-historian", "mcp-git-historian"]
    }
  }
}

If you installed with pip instead, use "command": "/absolute/path/to/venv/bin/mcp-git-historian" (on Windows, ...\\Scripts\\mcp-git-historian.exe) and no args.

Claude Code:

claude mcp add git-historian -- uvx --from git+https://github.com/AleBrito124356/mcp-git-historian mcp-git-historian

Command line

Every tool is also a sub-command, so you can use and demo it without any MCP client:

Command

Tool

mcp-git-historian summary REPO [--include-merges]

repo_summary

mcp-git-historian hotspots REPO [--since S] [--top N]

hotspots

mcp-git-historian coupling REPO [--file F] [--since S] [--min-shared N] [--max-files-per-commit N] [--top N]

change_coupling

mcp-git-historian knowledge-risk REPO [--inactive-after D] [--path P] [--top N] [--max-files N]

knowledge_risk

mcp-git-historian bus-factor REPO [--top N] [--include-merges]

bus_factor

mcp-git-historian history REPO FILE [--limit N]

file_history

mcp-git-historian blame REPO FILE

blame_summary

mcp-git-historian commit REPO REF

commit_details

mcp-git-historian search REPO QUERY [--author A] [--since S] [--limit N] [--regex]

search_commits

mcp-git-historian find-change REPO PATTERN [--file F] [--limit N] [--regex]

find_change

mcp-git-historian report REPO [--since S] [--inactive-after D] [--top N] [-o FILE]

health_report

mcp-git-historian or mcp-git-historian serve

run the MCP server over stdio

Output is a readable table. Add --json for the exact tool result. Tool errors print error: … and exit with status 1. python -m mcp_git_historian … works as well.

Real output, run on this repository at commit e5666be (the absolute path is shortened):

$ mcp-git-historian hotspots . --since "" --top 5
Churn hotspots in /path/to/mcp-git-historian — all history

  commits  added  deleted  pctl  flag  file
  -------  -----  -------  ----  ----  --------------------------------------------
        4  +1460     -206  89.5        mcp_git_historian/core.py  (was core.py)
        4   +691     -145  89.5        tests/test_core.py
        4   +377      -90  89.5        mcp_git_historian/server.py  (was server.py)
        4    +47       -4  89.5        pyproject.toml
        3   +142      -28  76.3        README.md

19 files changed; flagged when a file has >= 3 commits and churn_percentile >= 90 (top decile of the 19 files changed in the window).

core.py and server.py started at the repository root and were moved into the package later. Their earlier commits still count, and the tie at 4 commits means no file is a statistical outlier, so nothing is flagged.

$ mcp-git-historian coupling . --since "" --top 4
Change coupling in /path/to/mcp-git-historian — all history

  shared  degree  jaccard  pair
  ------  ------  -------  --------------------------------------------------
       4    1.00     1.00  mcp_git_historian/core.py  <->  tests/test_core.py
       4    1.00     1.00  mcp_git_historian/server.py  <->  pyproject.toml

2 pairs found; 9 commits analysed, 0 skipped for touching more than 30 files.

Health report

mcp-git-historian report REPO -o health.md writes a deterministic Markdown report (no timestamps, no absolute paths) that you can commit, diff or paste into an issue. The first lines of mcp-git-historian report . --since "" --top 5 for this repository at the same commit:

# Git health report: mcp-git-historian

Generated by mcp-git-historian 0.2.0 at commit `e5666be` (2026-09-23) on branch `improve/mcp2-accurate-history-cli`. Churn and coupling window: all history.

## Summary

- **10 commits** (1 merge) from 2026-07-23 to 2026-09-23, by **1 author** (mailmap-resolved, merges excluded).
- **Bus factor 1**: the smallest number of authors who together made more than half of all authored commits.
- **0 churn hotspots** among 19 files changed in the window.
- **2 coupled file pairs** (>= 3 shared commits).
- **0 orphaned files** of 19 analysed (inactive = no commit since 2026-03-23).

## Activity (authored commits per month)

```text
2025-10 ▁▁▁▁▁▁▁▁▁▇▁█ 2026-09
```

Peak: 5 commits in 2026-09.

## What to look at first

Files that change often **and** carry a knowledge or coupling risk:

1. `mcp_git_historian/core.py`: 4 commits in the window; single owner: Alejandro Brito wrote 100% of it; changes together with `tests/test_core.py` (degree 1.00).
2. `mcp_git_historian/server.py`: 4 commits in the window; single owner: Alejandro Brito wrote 100% of it; changes together with `pyproject.toml` (degree 1.00).

The full report continues with the rest of that list, the hotspot table, coupled pairs, directory silos, orphaned files and code ownership. What to look at first ranks files with ≥ 3 commits in the window that are also orphaned (weight 3), single-owner (weight 1) or strongly coupled (degree ≥ 0.5, weight 1). A one-person project like this one naturally shows "single owner" everywhere. On a team repository, this list is where orphaned hotspots show up.

How it works

flowchart LR
    A[Claude / MCP client] -->|stdio JSON-RPC| B[server.py<br/>MCP SDK 1.x or 2.x]
    T[Terminal] --> CLI[cli.py / report.py]
    B --> C[core.py<br/>pure stdlib analysis]
    CLI --> C
    C -->|subprocess, timeout| D[git -C root<br/>log -z -M --numstat / blame --incremental<br/>ls-tree / diff-tree / for-each-ref]
    D --> E[(local git repository)]
    D -->|NUL-separated porcelain output| C
    C -->|rename aliasing, .mailmap identities,<br/>merge filtering, percentiles| B
    B -->|structured result or tool error| A
  • Parsing relies on machine-friendly git output: custom --pretty formats with ASCII unit/record separators, NUL-terminated --numstat -z / --name-status -z records (paths with spaces or => in them parse exactly), and blame --incremental.

  • Every git call pins the config that could corrupt parsing (log.showSignature, colours, log encoding, rename detection, path quoting). It also sets LC_ALL=C, so error messages are the same whatever your locale, and never takes optional locks.

  • knowledge_risk blames files in parallel and caps the work at max_files (the most frequently changed files first), with an explicit truncated flag.

Measured on a synthetic repository with 30,000 commits and 3,000 files (Windows 11, Python 3.14): hotspots over all history 3.2 s, bus_factor 3.3 s, change_coupling over all history 3.1 s, knowledge_risk with 200 blamed files 8.8 s, and repo_summary 0.4 s. Each single git call stays far below the timeout.

Configuration

Environment variable

Default

Meaning

GIT_HISTORIAN_TIMEOUT

30

Seconds each git invocation may run before the tool returns a timeout error. Raise it for very large repositories

Development

git clone https://github.com/AleBrito124356/mcp-git-historian
cd mcp-git-historian
python -m venv .venv
.venv/bin/python -m pip install -e ".[dev]"      # Windows: .venv\Scripts\python
.venv/bin/python -m pytest

The suite (81 tests) builds two real throwaway git repositories with pinned dates. The first is the original small fixture. The second, a forensics fixture, reproduces every trap the analysis has to handle: a second identity reconciled by .mailmap, a merge-only integrator, a rename followed by edits, a [WIP] commit message, a 32-file mass commit, an author who left, and a tag.

  • tests/test_core.py covers the analyses with exact expected values and never imports mcp.

  • tests/test_cli.py covers every sub-command and the report.

  • tests/test_server.py speaks the real protocol: the installed SDK's own client in-process, plus a subprocess driven with raw JSON-RPC over stdio. It is skipped when mcp is not installed.

To check the other SDK major version, install it into a second environment, e.g. pip install -e ".[dev]" "mcp>=1.10,<2", and run pytest again.

Part of a family of small, dependency-light MCP servers:

License

MIT, see LICENSE.

Available Tools

11 tools
blame_summaryBlame summaryA
Read-onlyIdempotent

Summarize line ownership of a file at HEAD: percentage of surviving lines per author, the dominant author, and the dates of the oldest and newest lines. Answers "who wrote / who knows this file?".

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path relative to the repository root, e.g. 'src/app.py' (an absolute path inside the repository also works).
repo_pathYesAbsolute path to a local git repository, or to any folder inside one (a sub-folder scopes the analysis to it).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description goes beyond them by disclosing the analysis scope ('at HEAD') and exactly what the summary contains, which is meaningful behavioral context for an analytics tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action and scope, then the output contents, then the user-facing question it answers. No filler, nothing repeated from the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and rich annotations, the description need not explain return values, yet it still does so helpfully. Nothing essential is missing, though a note on performance cost for large files or on large-file handling would round it out.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both repo_path and file documented in the schema itself, including sub-folder scoping and relative-vs-absolute path behavior. The description adds nothing about parameters, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('summarize line ownership of a file at HEAD') and enumerates the concrete outputs (per-author percentages, dominant author, oldest/newest line dates). It does not name or distinguish itself from siblings like bus_factor or knowledge_risk, which also deal with ownership/risk, so the definition stops short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The closing question 'who wrote / who knows this file?' implies the use case but never states when to prefer this over knowledge_risk, bus_factor, or file_history. Usage is inferable rather than explicit, which is the definition of minimum-viable guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bus_factorBus factor and knowledge silosA
Read-onlyIdempotent

Analyze knowledge concentration by commits. Per top-level directory: dominant author and their share of commits; directories with >= 3 commits where one author made more than 80% of them are flagged as knowledge silos. Also returns the global bus factor: the minimum number of authors whose commits cover more than 50% of all commits (lower = riskier). For line-level ownership and inactive authors use knowledge_risk.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoMaximum number of directories and authors to list.
repo_pathYesAbsolute path to a local git repository, or to any folder inside one (a sub-folder scopes the analysis to it).
include_mergesNoCount merge commits as authored work (default false: merging a pull request is not writing its code).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds substantive behavioral detail beyond them: the silo thresholds (>= 3 commits and > 80% single-author share) and the precise bus-factor definition (>50% of commits). These thresholds tell the agent exactly how results are computed, not just that the call is safe.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: purpose, then outputs, then the bus-factor definition, then the sibling pointer. Every clause carries information an agent needs to interpret the result, with no filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-shape explanation is unnecessary, and the description still supplies definitions of the terms it reports (silo, bus factor). Combined with full schema coverage and annotations, nothing an agent needs to call or interpret this tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents repo_path, top, and include_merges in detail. The description adds algorithmic context but no additional meaning about the parameters themselves, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Analyze knowledge concentration by commits') and enumerates the concrete outputs: per-directory dominant author and share, silo flags, and the global bus factor. It clearly differentiates from the sibling knowledge_risk by naming it as the tool for line-level ownership.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent to an alternative for a related need ('For line-level ownership and inactive authors use knowledge_risk'), giving a clear condition that selects the sibling. It stops short of a full when-to-use/when-not framing for this tool itself, but the routing is unusually concrete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

change_couplingChange couplingA
Read-onlyIdempotent

Temporal coupling: files that keep changing in the same commits, a hidden dependency static analysis cannot see (e.g. code and the test or config that must always be edited with it). Per pair: shared commits, each file's revisions, degree = shared / min(revisions) (1.0 = every change to the rarer file also touched the other) and jaccard = shared / union. Rename-aware; merges and huge commits are ignored.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoMaximum number of pairs/partners to return.
fileNoOptional file (relative to the repository root): return only the files coupled to it.
sinceNoOnly count commits newer than this git date expression, e.g. '1 year ago', '6 months ago', '2025-01-01'. Empty string = all history.1 year ago
repo_pathYesAbsolute path to a local git repository, or to any folder inside one (a sub-folder scopes the analysis to it).
min_sharedNoMinimum number of shared commits for a pair.
max_files_per_commitNoSkip commits touching more files than this (mass reformatting, vendoring).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), yet the description adds real substance beyond them: rename-aware matching, and explicit exclusion of merges and huge commits. It also defines exactly how degree and jaccard are computed and what a 1.0 means, so the agent understands the semantics of the output.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences, front-loaded with the core concept then the per-pair output fields and caveats. No filler; every clause (formulas, exclusions, rename-awareness) carries information the agent needs to interpret results.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present the description need not enumerate return fields, and it still goes further by defining the metrics' meaning. Combined with the filtering caveats, an agent has everything required to call this correctly and interpret results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter (top, file, since, repo_path, min_shared, max_files_per_commit) is already documented, including defaults and date syntax. The description adds metric semantics (degree, jaccard, shared commits) but nothing extra about the parameters themselves, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific analysis verb/resource: identifying files that change together in the same commits, and explicitly frames it as 'a hidden dependency static analysis cannot see', which distinguishes it conceptually from static-analysis-oriented siblings like hotspots or repo_summary. The reader immediately knows what the tool computes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: the parenthetical example ('code and the test or config that must always be edited with it') suggests the investigative intent, but there is no explicit when-to-use, when-not-to-use, or named alternative among the ten siblings. Adequate but leaves the agent to infer routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

commit_detailsCommit detailsB
Read-onlyIdempotent

Inspect one commit: full message, author and committer with dates, parents (merge detection), every file changed with status (A/M/D/R/C/T), old path for renames and +/- lines, totals, and the branches and tags that contain it (plus the first tag that includes it). Merges are diffed against their first parent.

ParametersJSON Schema
NameRequiredDescriptionDefault
refYesCommit to inspect: full or abbreviated hash, branch, tag, or an expression such as 'HEAD~2'.
repo_pathYesAbsolute path to a local git repository, or to any folder inside one (a sub-folder scopes the analysis to it).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuinely useful behavior beyond them: merge commits are diffed against their first parent, rename detection yields old paths, and it reports the first tag containing the commit. It omits cost/pagination behavior for very large commits, keeping it out of 5 territory.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence that front-loads 'Inspect one commit' and then lists the payload; every clause carries information. The enumerated list is long but each item earns its place given the tool's breadth.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the extended enumeration of return fields is partly redundant, while the description still omits any usage context against the ten sibling tools. Adequate for calling the tool, but not complete for selecting it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both ref and repo_path including format details (abbreviated hash, HEAD~2, sub-folder scoping) in the schema itself. The description adds no parameter-level meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Inspect one commit') and enumerates exactly what it returns, making the purpose unmistakable. It does not explicitly name or contrast with siblings like search_commits or find_change, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description never says when to reach for this tool over search_commits, file_history, or find_change, nor does it state any prerequisite such as needing a local repo. It is purely a description of output content, leaving all routing decisions to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

file_historyFile historyA
Read-onlyIdempotent

List the commits that touched one file, newest first: short hash, date, author, subject, and lines added/deleted per commit. Follows the file across renames (rename commits include a 'renamed_from' key).

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesFile path relative to the repository root, e.g. 'src/app.py' (an absolute path inside the repository also works).
limitNoMaximum number of commits to return.
repo_pathYesAbsolute path to a local git repository, or to any folder inside one (a sub-folder scopes the analysis to it).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint/destructiveHint, so safety is covered. The description adds genuine behavioral context beyond that: results are ordered newest first, history follows renames across the file, and rename commits carry a 'renamed_from' key.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, with the primary scope front-loaded and the rename caveat following. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and annotations covering the safety profile, the description supplies the remaining essentials: ordering, per-commit fields, and rename-following semantics. Nothing needed to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so file, limit, and repo_path are fully documented in the schema itself. The description adds no parameter-level detail (e.g., default limit behavior), so it lands at the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List the commits that touched one file') and enumerates the returned fields (short hash, date, author, subject, added/deleted lines). It is clearly distinguishable from siblings like search_commits and commit_details.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The scope ('one file') implies when to use it versus repo-wide tools, but there is no explicit statement of when to prefer this over search_commits, commit_details, or find_change. Usage is implied rather than spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_changeFind when code appeared or disappearedA
Read-onlyIdempotent

Find when a piece of code appeared or disappeared using git's pickaxe (log -S): returns the commits where the number of occurrences of the pattern changed, i.e. the code was actually added or removed (unlike -G, which also matches lines that merely moved). Great for "when was this constant/function introduced?" forensics.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNoOptional file (relative to the repository root) to restrict the search to; followed across renames.
limitNoMaximum number of commits to return.
regexNoUse git's -G (regex matched against changed lines, also catches edits and moves) instead of the -S pickaxe.
patternYesExact code snippet or identifier to track, e.g. 'MAGIC_TOKEN' (a regex only when regex=true).
repo_pathYesAbsolute path to a local git repository, or to any folder inside one (a sub-folder scopes the analysis to it).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so safety is covered. The description adds genuine behavioral context: it explains that only commits where the occurrence count changed are returned, and that -G also matches edits and moved lines — useful for interpreting results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the core purpose followed by a parenthetical clarification and a usage hook. Every clause earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only query tool with a full schema and an output schema, the description is essentially complete: it covers what it does, how it differs from -G, and a motivating use case. The only omission is routing to sibling tools for related questions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters are already documented in the schema, including the file, limit, regex, and repo_path semantics. The description's -S/-G explanation reinforces the regex parameter but does not add meaning beyond what the schema already provides, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: finding commits where a code pattern appeared or disappeared, and explains the -S pickaxe mechanism vs the -G regex mode. It is very clear what it does, but it does not distinguish itself from siblings like search_commits or file_history, which an agent might otherwise confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Great for 'when was this constant/function introduced?' forensics" gives a concrete use case and the -S vs -G contrast implies when to keep regex=false. However, there are no explicit when-not conditions or named alternative tools for adjacent use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

health_reportHealth reportA
Read-onlyIdempotent

One-call Markdown health report combining repo_summary, hotspots, change_coupling, bus_factor and knowledge_risk, with a "what to look at first" list of files that change often AND are orphaned, single-owner or strongly coupled. Use it for an overview; use the individual tools to dig into details. Returns {"markdown": ...}.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoRows per section.
sinceNoOnly count commits newer than this git date expression, e.g. '1 year ago', '6 months ago', '2025-01-01'. Empty string = all history.1 year ago
max_filesNoBlame at most this many files.
repo_pathYesAbsolute path to a local git repository, or to any folder inside one (a sub-folder scopes the analysis to it).
inactive_afterNoAuthors with no commit since this git date are considered gone.6 months ago

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world, so the safety profile is covered. The description adds genuinely non-obvious behavior: this is a multi-analysis aggregation in a single call (implying cost/latency beyond the individual tools) and it returns a {"markdown": ...} payload rather than structured rows. It does not mention any timeouts or partial-failure behavior for a composite call, which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the deliverable, then the composition list, then the routing advice, then the return shape — a sensible ordering with no filler. The middle sentence runs long with its embedded 'AND are orphaned, single-owner or strongly coupled' qualifier, which costs a little scannability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a five-parameter composite tool with an output schema present and full schema coverage, the description supplies everything an agent needs to choose it over siblings and predict its shape: what it aggregates, what the headline list means, when to prefer the individual tools, and that the result is Markdown. No material gaps remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and each of the five parameters (top, since, max_files, repo_path, inactive_after) is documented inline including defaults and git-date syntax. The description adds no parameter-level detail beyond that, so this sits at the baseline for a fully documented schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete deliverable (a one-call Markdown health report) and enumerates exactly which analyses it composes: repo_summary, hotspots, change_coupling, bus_factor, knowledge_risk. The definition of the 'what to look at first' heuristic (files that change often AND are orphaned, single-owner or strongly coupled) tells an agent precisely what makes this output actionable rather than just a bundle of the sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: 'Use it for an overview; use the individual tools to dig into details.' The alternatives it points at are named sibling tools that appear in the composition list, so the when-to-use vs when-not-to-use split is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hotspotsChurn hotspotsA
Read-onlyIdempotent

Rank the most frequently changed files (churn hotspots): commits touching each file and total lines added/deleted, following renames (older commits under a former name count towards the current name, listed in 'renamed_from'). Deleted files and merge commits are excluded. Each row has 'churn_percentile'; only files with >= 3 commits in the top decile carry a 'hint' marking them as refactoring / extra-review candidates.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoMaximum number of files to return.
sinceNoOnly count commits newer than this git date expression, e.g. '1 year ago', '6 months ago', '2025-01-01'. Empty string = all history.1 year ago
repo_pathYesAbsolute path to a local git repository, or to any folder inside one (a sub-folder scopes the analysis to it).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description adds real edge-case behavior beyond them: renames are followed (old commits counted under current name), deleted files and merge commits are excluded, and the 'hint' only appears for files with >=3 commits in the top decile. Missing details like large-repo performance or output ordering limit it below 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence leads with the core action before enumerating behavior. It is dense but every clause (rename handling, exclusions, hint rule) carries information, so little is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return-value explanation is unnecessary, and the description covers exclusions, rename handling, and the derived 'hint'/'churn_percentile' fields. It is complete for calling the tool correctly; only sibling-relative routing guidance is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so top/since/repo_path are already fully documented. The description adds only indirect meaning (top-decile and >=3-commit thresholds that relate to 'top') rather than syntax or format guidance beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (rank) and resource (frequently changed files / churn hotspots) and enumerates the metrics returned (commits per file, lines added/deleted). The scope is clearly distinguishable from siblings like file_history or change_coupling, though it never names an alternative to route against.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when the tool is useful (identifying churn-heavy files as refactoring/extra-review candidates) but gives no explicit when-to-use or when-not-to-use guidance relative to siblings such as bus_factor, knowledge_risk, or change_coupling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

knowledge_riskKnowledge-loss riskA
Read-onlyIdempotent

What breaks if someone leaves? Blames the tracked text files and compares line ownership with each author's last commit. Files where inactive authors own more than 50% of the lines are 'orphaned'. Returns the riskiest files, a per-author rollup (lines owned, files they are the main owner of, last commit) and a per-directory rollup.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoMaximum number of files, authors and directories to list.
pathNoOptional folder or file (relative to the repository root) to restrict the analysis to.
max_filesNoBlame at most this many files (the most frequently changed ones); the result says when it truncated.
repo_pathYesAbsolute path to a local git repository, or to any folder inside one (a sub-folder scopes the analysis to it).
inactive_afterNoAuthors with no commit since this git date are considered gone, e.g. '6 months ago', '2025-01-01'.6 months ago

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, non-destructive, closed-world behavior, so the bar is lower. Beyond that, the description adds genuinely useful behavioral detail: the orphaned-file threshold (>50% inactive ownership), the three rollup shapes returned, and the notion that the analysis is scoped to tracked text files. It stops short of noting cost or performance implications of blaming up to max_files files.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A tight single paragraph: the framing question is front-loaded, then method, then threshold definition, then return shape. The rhetorical opener costs little and earns its place by situating the tool. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a full output schema, annotations covering the safety profile, and 100% parameter coverage, the description only needs to carry conceptual framing — which it does, including the analysis methodology and the orphaned-file rule. The one meaningful gap is that bus_factor, the closest sibling, is never mentioned to help the agent disambiguate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema fully documents all five parameters and the baseline of 3 applies. The description reinforces the conceptual meaning of inactive ownership (which underpins inactive_after) and the >50% rule, but adds no syntax or semantics beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource with unusual precision: it blames tracked text files, compares line ownership against each author's last commit, and defines 'orphaned' files at >50% inactive ownership. That is enough for an agent to understand the analysis. It never names or contrasts with the nearest sibling, bus_factor, which measures a related-but-distinct concept, so sibling differentiation is absent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: the lead question 'What breaks if someone leaves?' frames the scenario, and the methodology makes it clear this is a post-departure risk audit. There is no explicit when-to-use / when-not-to-use and no routing to alternatives such as bus_factor or blame_summary, which an agent must infer.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

repo_summaryRepository summaryA
Read-onlyIdempotent

Overview of a local git repository: current branch, total and merge commits, first and last commit (short hash + date), number of authors, top 10 contributors by authored commits and commit activity per month for the 12 calendar months ending at the most recent commit. Good first call.

ParametersJSON Schema
NameRequiredDescriptionDefault
repo_pathYesAbsolute path to a local git repository, or to any folder inside one (a sub-folder scopes the analysis to it).
include_mergesNoCount merge commits as authored work (default false: merging a pull request is not writing its code).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered structurally. The description adds the analysis scope (calendar months ending at most recent commit) and the 'good first call' hint, but says nothing about cost, performance on large repos, or error behavior when a path is not a git repo. Adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The enumeration of returned fields is front-loaded and each item earns its place for a summary tool. It is a single dense sentence plus a short routing hint; only the long itemized list risks being more detail than strictly needed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't explain return values, and annotations cover safety; params are fully documented in the schema. The one remaining gap is usage routing — no mention of when a sibling like health_report or commit_details is the better choice.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: repo_path's sub-folder scoping rule and include_merges' rationale are already fully documented in the schema. The description adds no syntax or behavioral detail beyond what the input schema provides, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (local git repository) and enumerates exactly what the summary contains: branch, commit counts, first/last commit, author count, top contributors, monthly activity. Sibling tools (health_report, bus_factor, hotspots) cover narrower analyses, and the 'Overview... Good first call' framing clearly positions this as the entry point.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Good first call' gives a clear when-to-use signal and implicitly positions it ahead of the other ten repository tools. It stops short of naming alternatives or stating when not to use it (e.g. for a single file or commit), so it lacks explicit routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_commitsSearch commit messagesA
Read-onlyIdempotent

Search commit messages case-insensitively, optionally filtered by author and date. Returns matches newest first (hash, date, author, subject).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of commits to return.
queryYesText to find in commit messages (subject or body). Literal by default: brackets, dots and stars need no escaping.
regexNoTreat query as a POSIX extended regular expression instead of literal text.
sinceNoOptional date filter, e.g. '2 weeks ago', '2025-06-01'.
authorNoOptional case-insensitive substring of the author's name or e-mail, e.g. 'alice'.
repo_pathYesAbsolute path to a local git repository, or to any folder inside one (a sub-folder scopes the analysis to it).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the safety burden is offloaded. The description usefully adds behavior the annotations cannot convey: case-insensitive matching and newest-first result ordering. Return-field enumeration is partly redundant given the output schema, but the ordering default is real added context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action and scope, no filler. Every clause (case-insensitivity, filters, ordering, return shape) carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With full schema coverage, rich annotations, and an output schema, the description is sufficient for correct invocation. The only shortfall is the unstated relationship to sibling query tools, which would help an agent choose between them.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all six parameters in detail. The description's mention of author and date filtering adds no syntax or format detail beyond the schema. Baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Search commit messages') and adds scope detail: case-insensitive matching, optional author/date filters, newest-first ordering. It is distinct from commit_details by implication, but never names a sibling to differentiate explicitly, keeping it just below a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage through the filters it mentions, but gives no explicit when-to-use or when-not-to-use guidance, and does not route the agent away from similar siblings such as commit_details or find_change. Usage is inferable, not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 11 tool updatesv0.2.0
    • First observedblame_summary
    • First observedbus_factor
    • First observedchange_coupling
    • First observedcommit_details
    • First observedfile_history
    • First observedfind_change
    • First observedhealth_report
    • First observedhotspots
    • First observedknowledge_risk
    • First observedrepo_summary
    • First observedsearch_commits

TDQS

A3.9/5.0

Scored across 11 tools

Disambiguation5/5

Each tool targets a distinct git-history analysis: bus_factor for commit concentration, hotspots for churn, blame_summary for line ownership, etc. The descriptions explicitly clarify boundaries (e.g., bus_factor notes 'For line-level ownership and inactive authors use knowledge_risk'). health_report is an aggregator but is clearly marked as a combined overview, not a replacement.

Naming Consistency3/5

Mostly snake_case but mixed conventions: bus_factor and repo_summary are noun phrases, while search_commits and find_change are verb phrases. The pattern is not strictly consistent, though readable and domain-appropriate.

Tool Count5/5

11 tools for a git historian server is well-scoped, covering key analysis dimensions (bus factor, hotspots, coupling, ownership, etc.) without redundancy. The inclusion of health_report as an aggregator is justified for quick overviews.

Completeness4/5

Comprehensive for historical analysis but lacks tools for comparing branches or examining uncommitted changes (e.g., diff, status), which are common in git toolkits. Minor gap, but core forensic and health workflows are well-covered.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers