Skip to main content
Glama
HasanJahidul

Git Insight MCP

by HasanJahidul

git-insight-mcp

通过 MCP 进行语义化 git 查询。超越 git log —— 回答关于任何代码行、文件或分支的“谁/什么/何时/为什么”。

demo

与 terminal-history-mcp 和 localhost-mcp 配合使用。组合起来:你运行了什么、正在运行什么、你更改了什么。

为什么

开发人员经常问这些问题;git 的回答效果不佳:

  • “谁最后修改了这个函数?” —— git blame 只给出代码行,而不是按区域划分的作者

  • “哪一个 PR 引入了这一行?” —— 手动操作:blame → 提交 SHA → 搜索 GH

  • “哪些文件总是同时更改?” —— 没有内置功能

  • “显示超过 30 天未合并的分支” —— 需要复杂的 bash 单行命令

  • “我上周做了什么?” —— 手动清理日志

LLM 代理需要这些上下文来进行安全的编辑。目前它们只能使用 git log -n 5,从而遗漏所有内容。

Related MCP server: semamerge

安装

npm install -g git-insight-mcp

接入 Claude Code:

claude mcp add --scope user git-insight -- git-insight-mcp

或任何兼容 MCP 的客户端。作为 stdio MCP 服务器运行。

对于 PR / issue 查询,请设置 GitHub 令牌:

export GH_TOKEN=ghp_...

如果没有令牌,本地 git 工具仍然有效。PR 关联功能将被跳过。

工具

工具

用途

who_touched

按作者对 blame 进行分组。包括代码行、提交、最后修改时间、主要所有者。可选代码行范围缩小。

introducing_pr

查找引入某一行(或提交)的 PR。首先解析合并消息;如果失败则回退到 GitHub API。

co_change

与输入文件最常一起更改的文件。

branch_hygiene

列出分支及其领先/落后情况、最后提交、合并状态、过期标记。

recent_work

站会助手:作者在一段时间内的提交 + 文件 + 插入/删除量。

commit_context

完整的提交上下文:主题、正文、文件、PR、相关 issue。

示例输出 (who_touched)

{
  "file": "src/auth.ts",
  "total_lines": 124,
  "authors": [
    { "name": "alice", "email": "alice@x.com", "lines": 87, "commits": 12, "last_commit_date": "2026-04-12T10:33:01.000Z" },
    { "name": "bob", "email": "bob@x.com", "lines": 37, "commits": 4, "last_commit_date": "2026-01-03T18:14:55.000Z" }
  ],
  "primary_owner": "alice"
}

CLI 使用(完整性检查)

git-insight-mcp who-touched src/auth.ts
git-insight-mcp co-change src/auth.ts
git-insight-mcp branches
git-insight-mcp recent alice
git-insight-mcp commit a3e577e
git-insight-mcp intro-pr src/auth.ts:42
git-insight-mcp intro-pr a3e577e
git-insight-mcp                # MCP stdio server

从源码构建

git clone https://github.com/HasanJahidul/git-insight-mcp.git
cd git-insight-mcp
npm install
npm run build
node dist/cli.js branches

限制 (v0.1)

  • 仅限 GitHub(暂不支持 GitLab/Bitbucket)。

  • co_change 的复杂度为 O(窗口 × 每次提交的文件数) —— 默认限制为 1000 次提交。

  • 函数级 blame 是按代码行范围进行的,而不是 AST。尚未跟踪重命名。

  • 适用 GH API 速率限制(认证用户每小时 5000 次)。此版本中 PR 结果未缓存。

许可证

MIT

Available Tools

6 tools
branch_hygieneA
Read-onlyIdempotent

Read-only. Inventory of branches with ahead/behind counts versus the default branch, last commit date and author, merged status, and a stale flag (no commits in stale_days days). Use it to find unmerged, abandoned branches. The default branch itself is excluded from the list. Pure local git; no network. Returns { count, branches, default_branch_excluded }.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNoPath inside the target git repo. Defaults to the server's current working directory.
remoteNoInspect remote (`origin`) branches instead of local branches. Default false.
stale_daysNoA branch with no commit newer than this many days is flagged `stale`. Default 30.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
branchesNo
default_branch_excludedNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already set readOnlyHint=true, idempotentHint=true, destructiveHint=false. Description adds that it's 'Pure local git; no network' and that 'The default branch itself is excluded from the list.' It also outlines the return structure. No contradiction with annotations.

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?

Four sentences with no wasted words. The first sentence immediately conveys read-only nature and the key fields. Return format is given. Every sentence serves a purpose.

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?

Despite having 3 optional params and an output schema (implied by the return structure described), the description covers the key behavioral aspects: what it returns, default branch exclusion, network independence, and the stale flag logic. No gaps for an agent to invoke correctly.

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 already documents all three parameters. The description does not add significant extra meaning beyond what is in the schema descriptions (e.g., default for stale_days). Baseline of 3 is appropriate.

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?

Description clearly states the tool provides an inventory of branches with ahead/behind counts, last commit date, author, merged status, and stale flag. It explicitly says 'Use it to find unmerged, abandoned branches,' which is a specific use case. The name 'branch_hygiene' is metaphorical but the description makes it concrete. Sibling tools like co_change or commit_context focus on different aspects, so this tool is well-differentiated.

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?

Description gives explicit guidance: 'Use it to find unmerged, abandoned branches.' It also states it's read-only and pure local git with no network. It does not explicitly mention when not to use or provide alternatives, but the context is clear enough for an agent to decide.

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

co_changeA
Read-onlyIdempotent

Read-only. Files that historically change together with the input file — answers "if I edit X, what else should I check?". Mines up to window recent commits that touch file, counts how often each other file appears alongside it, and returns those above threshold, with the co-occurrence count and ratio (count / commits-touching-file), capped at limit. Pure local log mining; no network. Cost is O(window × files-per-commit) — keep window ≤ a few thousand on large repos.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNoPath inside the target git repo. Defaults to the server's current working directory.
fileYesFile path relative to the repo root to find co-changing files for.
limitNoMaximum number of co-changing files to return, highest count first. Default 20.
windowNoHow many recent commits touching `file` to mine. Default 1000.
thresholdNoMinimum co-occurrence count for a file to be included. Default 3.

Output Schema

ParametersJSON Schema
NameRequiredDescription
fileNo
co_changedNo
total_commits_touchingNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds significant behavioral context: read-only, mines commits, cost O(window × files-per-commit), and parameter effects. No contradiction.

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 description is concise given the complexity, with a front-loaded summary of purpose. Every sentence adds value, but it could be slightly tighter.

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?

The description fully covers what the tool does, how it works, algorithm details, return values (co-occurrence count and ratio), performance cost, and parameter constraints. With an output schema present, it is complete.

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

Parameters4/5

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

Schema coverage is 100% with descriptions. The description adds meaning by explaining how parameters (window, threshold, limit) affect the algorithm and providing default values contextually.

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?

The description clearly states the tool finds files that historically change together with the input file, using commits and co-occurrence. It explicitly distinguishes from sibling tools by focusing on co-change analysis.

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?

The description provides a use case ('if I edit X, what else should I check?') and notes it's local log mining with no network. It could explicitly mention when not to use, but the context is clear.

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

commit_contextA
Read-onlyIdempotent

Read-only. Everything about one commit in a single call: subject, body, changed files with per-file insertions/deletions, totals, the linked PR (parsed from the merge message, or via the GitHub API when GH_TOKEN/GITHUB_TOKEN is set), and issue numbers referenced in the message (Fixes #N, Closes #N). Errors if the SHA does not resolve in cwd. May make one outbound GitHub API call for PR enrichment.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNoPath inside the target git repo. Defaults to the server's current working directory.
shaYesCommit SHA (full or abbreviated) or any revision `git` accepts, e.g. `HEAD`, `HEAD~3`, a tag.

Output Schema

ParametersJSON Schema
NameRequiredDescription
prNo
shaNo
bodyNo
dateNo
authorNo
subjectNo
deletionsNo
insertionsNo
files_changedNo
related_issuesNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate read-only and idempotent. The description adds crucial context: it may make an outbound GitHub API call for PR enrichment and errors if SHA doesn't resolve. This goes beyond the annotations, though it doesn't detail the response format or all edge cases.

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 sentences, front-loaded with the read-only nature, and efficiently enumerates returned data and special behaviors. Every sentence provides necessary information without 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?

Given the presence of an output schema (unseen but flagged), the description covers everything needed: what the tool returns, when it errors, and potential external call. It is fully adequate for an agent to invoke the tool correctly.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds value by explaining error behavior for the SHA parameter and implying the cwd default. It doesn't repeat schema but provides behavioral context that aids parameter understanding.

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?

The description clearly states it retrieves detailed information about a single commit (subject, body, changed files, PR, issues). This verb+resource approach is specific and distinct from sibling tools like 'branch_hygiene' or 'recent_work', which focus on different aspects.

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?

The description implies usage for getting a comprehensive commit summary but does not explicitly differentiate from siblings or state when not to use. It does mention an important behavioral constraint (external GitHub call) and error condition, providing some guidance.

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

introducing_prA
Read-onlyIdempotent

Read-only. Find the pull request that introduced a line or a commit. First resolves the line to a commit via git blame, then reads the local merge-commit message; if that has no PR reference and GH_TOKEN/GITHUB_TOKEN is set, falls back to the GitHub REST API. Without a token the local path still works; pr is null when nothing can be resolved (e.g. rebase-merged with no PR ref). Provide either commit, or both file and line. May make one outbound GitHub API call (subject to the 5000/h authed rate limit).

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNoPath inside the target git repo. Defaults to the server's current working directory.
fileNoFile path relative to the repo root. Requires `line`.
lineNo1-based line number in `file` to blame back to its introducing commit.
commitNoCommit SHA to look up directly. Use this instead of `file`/`line`.

Output Schema

ParametersJSON Schema
NameRequiredDescription
prNoPR details when resolved, else null.
authorNo
commitNo
sourceNoHow the PR was resolved: `merge-message`, `github-api`, or `not-found`.
commit_dateNo
commit_messageNo

TDQS

A4.6/5.0
Behavior5/5

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

Beyond annotations (readOnlyHint, idempotentHint, destructiveHint), the description details the internal process: git blame, reading merge-commit messages, fallback to GitHub REST API, rate limits, and null result scenarios. This fully discloses behavioral traits.

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 description is comprehensive but somewhat lengthy. It is well-structured with the key point 'Read-only' up front, and each sentence adds value. Could be slightly more concise but still effective.

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?

Given the tool's complexity (two-step process with fallback) and that an output schema exists, the description covers all necessary behavioral and usage aspects without missing critical details.

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

Parameters4/5

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

With 100% schema coverage, baseline is 3. The description adds meaning: explains that `file` and `line` are used together, `commit` is an alternative, and `cwd` defaults. It provides context beyond the schema definitions.

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?

The description clearly states the tool finds the PR that introduced a line or commit. It specifies exact inputs (line/commit) and distinguishes from sibling tools like 'co_change' or 'branch_hygiene' by focusing on PR introduction.

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?

The description explains when to use (when you need the introducing PR for a line or commit) and mentions token-dependent fallback behavior. However, it does not explicitly state when not to use or compare to siblings.

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

recent_workA
Read-onlyIdempotent

Read-only. Standup / changelog helper: one author's commits in a time window with files touched and insertion/deletion totals. Defaults to the repo's user.name and the last 7 days. Pure local git; no network. Returns { author, since, commit_count, commits[] } where each commit has subject, date, files, insertions, deletions.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNoPath inside the target git repo. Defaults to the server's current working directory.
limitNoMaximum number of commits to return, newest first. Default 100.
sinceNoAny git date expression, e.g. `7 days ago`, `2026-05-01`, `last monday`. Default `7 days ago`.
authorNoAuthor name or email substring (passed to `git log --author`). Defaults to `git config user.name`.

Output Schema

ParametersJSON Schema
NameRequiredDescription
sinceNo
authorNo
commitsNo
commit_countNo

TDQS

A4.4/5.0
Behavior4/5

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

The description reinforces annotations with 'Read-only' and adds behavioral context like 'Pure local git; no network', which goes beyond the annotations. It also describes the output structure. No contradictions with annotations.

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?

The description is two sentences: the first succinctly defines purpose and scope, the second details the return format. Every word contributes meaningful information, no fluff 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?

Given the tool's moderate complexity and the presence of an output schema in the description, the description covers defaults, return type, and key constraints. Minor omissions like the exact git command used are not critical for an AI agent.

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

Parameters4/5

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

Schema coverage is 100%, but the description adds valuable default behavior information (e.g., author defaults to repo's user.name, since defaults to 7 days ago). This enriches the agent's understanding beyond the raw 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?

The description clearly states it's a read-only standup/changelog helper that shows one author's commits in a time window with file changes and insertion/deletion totals. This distinctively sets it apart from sibling tools like 'branch_hygiene' or 'co_change' by focusing on individual author activity.

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?

The description implies usage scenarios (standup, changelog) and mentions defaults, but does not explicitly state when to avoid using it or compare it to sibling tools like 'who_touched' or 'commit_context'. However, the context is clear enough for an AI agent to infer appropriate use.

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

who_touchedA
Read-onlyIdempotent

Read-only. Code ownership for a file via git blame, aggregated by author. Returns each author's line count, commit count, and most recent commit date, plus the primary_owner (most lines). Pass line_start/line_end to scope to one region (e.g. a single function). Errors if cwd is not a git repo or file is untracked. Cost scales with file size; instant for typical files.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNoPath inside the target git repo. Defaults to the server's current working directory.
fileYesFile path relative to the repo root, e.g. `src/auth.ts`.
functionNoOptional label echoed back in the result; cosmetic only, does not change the blame range.
line_endNoOptional 1-based end line (inclusive). Must be paired with `line_start`.
line_startNoOptional 1-based start line. Must be paired with `line_end` to take effect.

Output Schema

ParametersJSON Schema
NameRequiredDescription
fileNo
authorsNo
total_linesNo
primary_ownerNoName of the author with the most lines.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint and idempotentHint. Description adds cost scaling and error conditions (non-git repo, untracked file), going beyond annotations without contradiction.

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?

Concise and well-structured: front-loaded with purpose and output, then usage details. Every sentence adds information with no 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?

Covers purpose, output, parameter usage, error conditions, and performance. Output schema exists so return values are documented separately. Complete for the tool's complexity.

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

Parameters4/5

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

Schema coverage is 100%, baseline 3. Description adds meaning: scoping with line_start/line_end, and clarifies that 'function' is cosmetic. This adds value beyond 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?

The description clearly states the tool reads code ownership via git blame, aggregated by author, and lists specific outputs (line count, commit count, primary owner). This distinguishes it from siblings like 'commit_context' or 'co_change'.

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?

Provides clear guidance on when to use line_start/line_end for scoping, error conditions, and performance characteristics. Does not explicitly mention alternatives but context is strong.

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. 6 tool updatesv0.1.3
    • Changedbranch_hygiene4 fields changed
      • addedInput schema / properties / cwd / description
        Added value: +"Path inside the target git repo. Defaults to the server's current working directory."
      • changedInput schema / properties / remote / description
        Previous value: -"Inspect remote (origin) branches instead of local (default false)"New value: +"Inspect remote (`origin`) branches instead of local branches. Default false."
      • changedInput schema / properties / stale_days / description
        Previous value: -"Days without commit to count as stale (default 30)"New value: +"A branch with no commit newer than this many days is flagged `stale`. Default 30."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "branches": {
        +      "items": {
        +        "properties": {
        +          "ahead": {
        +            "type": "number"
        +          },
        +          "behind": {
        +            "type": "number"
        +          },
        +          "last_commit_author": {
        +            "type": "string"
        +          },
        +          "last_commit_date": {
        +            "type": "string"
        +          },
        +          "merged": {
        +            "type": "boolean"
        +          },
        +          "name": {
        +            "type": "string"
        +          },
        +          "stale": {
        +            "type": "boolean"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "count": {
        +      "type": "number"
        +    },
        +    "default_branch_excluded": {
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedco_change6 fields changed
      • addedInput schema / properties / cwd / description
        Added value: +"Path inside the target git repo. Defaults to the server's current working directory."
      • addedInput schema / properties / file / description
        Added value: +"File path relative to the repo root to find co-changing files for."
      • changedInput schema / properties / limit / description
        Previous value: -"Max results (default 20)"New value: +"Maximum number of co-changing files to return, highest count first. Default 20."
      • changedInput schema / properties / threshold / description
        Previous value: -"Min co-occurrence count (default 3)"New value: +"Minimum co-occurrence count for a file to be included. Default 3."
      • changedInput schema / properties / window / description
        Previous value: -"How many recent commits touching the file to mine (default 1000)"New value: +"How many recent commits touching `file` to mine. Default 1000."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "co_changed": {
        +      "items": {
        +        "properties": {
        +          "count": {
        +            "type": "number"
        +          },
        +          "file": {
        +            "type": "string"
        +          },
        +          "ratio": {
        +            "description": "count / total_commits_touching, 0–1.",
        +            "type": "number"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "file": {
        +      "type": "string"
        +    },
        +    "total_commits_touching": {
        +      "type": "number"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedcommit_context3 fields changed
      • addedInput schema / properties / cwd / description
        Added value: +"Path inside the target git repo. Defaults to the server's current working directory."
      • addedInput schema / properties / sha / description
        Added value: +"Commit SHA (full or abbreviated) or any revision `git` accepts, e.g. `HEAD`, `HEAD~3`, a tag."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "author": {
        +      "type": "string"
        +    },
        +    "body": {
        +      "type": "string"
        +    },
        +    "date": {
        +      "type": "string"
        +    },
        +    "deletions": {
        +      "type": "number"
        +    },
        +    "files_changed": {
        +      "items": {
        +        "properties": {
        +          "deletions": {
        +            "type": "number"
        +          },
        +          "insertions": {
        +            "type": "number"
        +          },
        +          "path": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "insertions": {
        +      "type": "number"
        +    },
        +    "pr": {
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "related_issues": {
        +      "items": {
        +        "type": "number"
        +      },
        +      "type": "array"
        +    },
        +    "sha": {
        +      "type": "string"
        +    },
        +    "subject": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedintroducing_pr5 fields changed
      • changedInput schema / properties / commit / description
        Previous value: -"SHA (optional alternative to file/line)"New value: +"Commit SHA to look up directly. Use this instead of `file`/`line`."
      • addedInput schema / properties / cwd / description
        Added value: +"Path inside the target git repo. Defaults to the server's current working directory."
      • addedInput schema / properties / file / description
        Added value: +"File path relative to the repo root. Requires `line`."
      • addedInput schema / properties / line / description
        Added value: +"1-based line number in `file` to blame back to its introducing commit."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "author": {
        +      "type": "string"
        +    },
        +    "commit": {
        +      "type": "string"
        +    },
        +    "commit_date": {
        +      "type": "string"
        +    },
        +    "commit_message": {
        +      "type": "string"
        +    },
        +    "pr": {
        +      "description": "PR details when resolved, else null.",
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "source": {
        +      "description": "How the PR was resolved: `merge-message`, `github-api`, or `not-found`.",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedrecent_work5 fields changed
      • changedInput schema / properties / author / description
        Previous value: -"Defaults to git config user.name"New value: +"Author name or email substring (passed to `git log --author`). Defaults to `git config user.name`."
      • addedInput schema / properties / cwd / description
        Added value: +"Path inside the target git repo. Defaults to the server's current working directory."
      • changedInput schema / properties / limit / description
        Previous value: -"Max commits to return (default 100)"New value: +"Maximum number of commits to return, newest first. Default 100."
      • changedInput schema / properties / since / description
        Previous value: -"Git date expression (default '7 days ago')"New value: +"Any git date expression, e.g. `7 days ago`, `2026-05-01`, `last monday`. Default `7 days ago`."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "author": {
        +      "type": "string"
        +    },
        +    "commit_count": {
        +      "type": "number"
        +    },
        +    "commits": {
        +      "items": {
        +        "properties": {
        +          "date": {
        +            "type": "string"
        +          },
        +          "deletions": {
        +            "type": "number"
        +          },
        +          "files": {
        +            "type": "number"
        +          },
        +          "insertions": {
        +            "type": "number"
        +          },
        +          "sha": {
        +            "type": "string"
        +          },
        +          "subject": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "since": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedwho_touched6 fields changed
      • changedInput schema / properties / cwd / description
        Previous value: -"Repo path. Defaults to current working dir."New value: +"Path inside the target git repo. Defaults to the server's current working directory."
      • changedInput schema / properties / file / description
        Previous value: -"Path to file (relative to repo root)"New value: +"File path relative to the repo root, e.g. `src/auth.ts`."
      • changedInput schema / properties / function / description
        Previous value: -"Optional function name label (cosmetic)"New value: +"Optional label echoed back in the result; cosmetic only, does not change the blame range."
      • addedInput schema / properties / line_end / description
        Added value: +"Optional 1-based end line (inclusive). Must be paired with `line_start`."
      • addedInput schema / properties / line_start / description
        Added value: +"Optional 1-based start line. Must be paired with `line_end` to take effect."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "authors": {
        +      "items": {
        +        "properties": {
        +          "commits": {
        +            "type": "number"
        +          },
        +          "email": {
        +            "type": "string"
        +          },
        +          "last_commit_date": {
        +            "description": "ISO 8601 timestamp of the author's most recent commit to this range.",
        +            "type": "string"
        +          },
        +          "lines": {
        +            "type": "number"
        +          },
        +          "name": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "file": {
        +      "type": "string"
        +    },
        +    "primary_owner": {
        +      "description": "Name of the author with the most lines.",
        +      "type": "string"
        +    },
        +    "total_lines": {
        +      "type": "number"
        +    }
        +  },
        +  "type": "object"
        +}
  2. 6 tool updates
    • First observedbranch_hygiene
    • First observedco_change
    • First observedcommit_context
    • First observedintroducing_pr
    • First observedrecent_work
    • First observedwho_touched

TDQS

A4.4/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a distinct git analysis task: branches, file co-change, commit details, PR introduction, recent work, and file ownership. No functional overlap is apparent.

Naming Consistency4/5

All names use lowercase snake_case and are descriptive compound nouns (e.g., branch_hygiene, who_touched). While not strictly verb_noun, the pattern is consistent and readable.

Tool Count5/5

Six tools is a well-scoped set for a git insight server, covering key analyses without being overwhelming or too sparse.

Completeness3/5

The set covers branch analysis, co-change, commit details, PR discovery, recent work, and blame. Missing common operations like branch diff or commit log filtering, but still functional for the intended domain.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Automatically extracts architectural decisions, patterns, and insights from Git commits to build a local, structured project memory. It exposes this living context to AI tools via MCP, allowing them to understand the historical reasoning and evolution behind your codebase.
    70 npm
    6
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    MCP server that detects semantic (non-textual) merge conflicts between Git branches using AST-level analysis. Catches incompatible changes that Git merges cleanly — signature changes, removed exports, parameter changes, interface breaks, and cross-file dependency conflicts.
    4
    47 npm
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Developers: Search your zsh, bash, or fish shell history from Claude Code, Cline, Cursor, Zed, or any MCP client using tools like search_history (full-text with timestamp/CWD/exit code), recent_in_dir, failed_commands, and command_chains for multi-step sequences. Reindex after new activity. Local-only SQLite FTS5 with secrets redacted before storage.
    5
    25 npm
    4
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Inspect, manage, and kill local dev servers via MCP. Stop guessing what's on :3000. Five tools: list servers with framework detection, inspect ports, find zombies, diagnose conflicts, safe-kill with dry-run default. Local, no cloud, no telemetry.
    5
    16 npm
    3
    MIT