git-context-mcp
git-context-mcp
모든 개발자가 가진 질문인 **"이 코드는 왜 존재하는가?"**에 답하는 MCP 서버입니다.
git blame은 코드 한 줄을 누가 작성했는지 알려줍니다. 이 도구는 왜 작성했는지 알려줍니다.
파일과 줄 범위를 지정하면 git-context-mcp가 커밋을 역추적하여 해당 코드가 포함된 풀 리퀘스트(PR)를 찾고, PR 설명을 읽은 뒤, 연결된 모든 GitHub 이슈를 한 번에 Claude 안에서 바로 보여줍니다.
데모
You: Why does line 87 of src/auth/session.ts exist?
Claude (using blame_context):
Commit `a3f9c12` by Sarah Chen on 2024-08-14
Message: "fix: rotate session tokens on privilege escalation"
PR #441 — "Security: fix session fixation vulnerability"
Merged: 2024-08-15 | Labels: security, critical
PR Description:
> After the pen test in sprint 22, we found that session tokens
> weren't being rotated when a user's role changed. This allows
> a stolen low-priv token to be used after the account is promoted.
Linked Issue #389 — "Session token not rotated on role change" (closed)
> Reported by @contractor-red: "I was able to reuse a captured
> token after my account was upgraded to admin..."더 이상 git 로그를 뒤지거나, GitHub를 검색하거나, 이슈 트래커를 교차 참조할 필요가 없습니다. Claude가 한 번에 처리합니다.
Related MCP server: Selvedge
도구
도구 | 기능 |
| 파일 + 줄 범위 → 커밋 + PR 설명 + 연결된 이슈 |
| 커밋 해시 → 전체 내러티브 (메시지, diff 통계, PR, 이슈) |
| 파일 → 최근 N개의 커밋 (각각 PR 및 이슈 정보 포함) |
| 키워드 → PR/이슈 컨텍스트가 포함된 일치하는 커밋 |
| 파일 → 기여자 순위 표 (커밋 수, 소유한 줄 수, 활동 날짜) |
설치
옵션 1 — npx (설치 불필요)
claude mcp add git-context -- npx git-context-mcp옵션 2 — 전역 설치
npm install -g git-context-mcp
claude mcp add git-context -- git-context-mcp옵션 3 — 수동 설정
~/.claude/claude_mcp_config.json에 추가하세요:
{
"mcpServers": {
"git-context": {
"command": "npx",
"args": ["git-context-mcp"]
}
}
}그런 다음 Claude Code를 재시작하세요.
요구 사항
Claude Code (또는 MCP 호환 클라이언트)
PATH에
git포함ghCLI (설치) + GitHub PR/이슈 조회를 위한gh auth logingh없이도 작동하지만, PR/이슈 컨텍스트는 생략됩니다.
사용 예시
설치가 완료되면 git 저장소에서 Claude와 자연스럽게 대화하세요:
"Why does line 42 of src/db/connection.ts exist?"
"What's the story behind commit d4a8f91?"
"Who owns the most of src/payments/stripe.ts?"
"When was the rate limiting added? Search commits for 'rate limit'"
"Show me the last 5 changes to src/api/auth.ts and why each was made"작동 원리
**
blame_context**가 해당 줄에 대해git blame -p를 실행하여 커밋 해시를 찾습니다.각 커밋에 대해
git show를 호출하여 전체 메시지와 diff 통계를 가져옵니다.GitHub API (
gh api /repos/:owner/:repo/commits/:hash/pulls)를 호출하여 PR을 찾습니다.PR 본문에서
#NNN및/issues/NNN참조를 파싱하여 각 이슈를 가져옵니다.모든 정보가 Claude가 추론할 수 있도록 구조화된 마크다운으로 반환됩니다.
토큰은 저장되지 않습니다. GitHub 자체 API 외에는 데이터가 전송되지 않습니다 (gh CLI와 동일).
기여
PR을 환영합니다. 서버 전체 코드는 src/index.ts에 있습니다.
git clone https://github.com/muhannad-hash/git-context-mcp
cd git-context-mcp
npm install
npm run dev # watch mode라이선스
MIT
Available Tools
5 toolsblame_contextA
Given a file and line range, returns who wrote those lines, when, the commit message, the associated pull request (title + description), and any linked issues. Answers the question: why does this code exist?
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Path to the file (absolute or relative to repo_path) | |
| start_line | Yes | First line to inspect | |
| end_line | No | Last line to inspect (defaults to start_line) | |
| repo_path | No | Working directory / repo root (defaults to cwd) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It clearly describes the tool's behavior by specifying what information is returned, but doesn't disclose operational traits like performance characteristics, error conditions, authentication needs, or rate limits. The description doesn't contradict any annotations (none exist), but could provide more behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly concise - two sentences that efficiently communicate the tool's purpose and value. The first sentence enumerates what's returned, the second frames the tool's unique value proposition. Every word earns its place with zero waste or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 parameters, 100% schema coverage, but no annotations and no output schema, the description provides adequate context about what the tool does but lacks information about return format, error handling, or operational constraints. It's complete enough to understand the tool's purpose but leaves implementation details unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 4 parameters thoroughly. The description doesn't add any parameter-specific information beyond what's in the schema descriptions. It mentions 'file and line range' which aligns with the schema but doesn't provide additional semantic context. Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('returns', 'answers') and resources (file, line range). It enumerates exactly what information is returned (who wrote lines, when, commit message, PR details, linked issues) and explicitly distinguishes its purpose from siblings by framing it as answering 'why does this code exist?' rather than just listing commits or contributors.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by stating it answers 'why does this code exist?' which suggests it's for understanding code rationale rather than just historical tracking. However, it doesn't explicitly state when to use this tool versus alternatives like 'file_history' or 'search_commits', nor does it mention prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
commit_storyB
Given a commit hash, returns the full story: commit message, files changed, the pull request that landed it, the PR description, and all linked GitHub issues.
| Name | Required | Description | Default |
|---|---|---|---|
| hash | Yes | Full or short commit hash | |
| repo_path | No | Working directory / repo root (defaults to cwd) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. While it states what information is returned, it doesn't mention error handling (e.g., invalid hash), performance characteristics, rate limits, authentication needs, or whether it requires network access to GitHub. This leaves significant gaps for a tool that appears to query external systems.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core functionality. Every element (commit hash input, returned information) earns its place without redundancy. It could be slightly more structured but remains highly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description adequately covers what information is returned but lacks details on behavioral aspects (errors, performance, dependencies) and output structure. Given the complexity of integrating commit, PR, and issue data, more context would be helpful, but the description meets minimum viable standards.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 both parameters thoroughly. The description doesn't add any parameter-specific information beyond what's in the schema (e.g., hash format examples, repo_path implications). Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('returns the full story') and resources (commit hash, commit message, files changed, pull request, PR description, GitHub issues). It distinguishes itself from sibling tools like 'search_commits' by focusing on detailed information for a single commit rather than searching across commits.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when detailed commit information is needed, but provides no explicit guidance on when to use this tool versus alternatives like 'search_commits' (for finding commits) or 'file_history' (for file-specific history). No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
file_contributorsA
Shows every author who has ever committed to a file, ranked by number of commits. Includes current line ownership, commit percentage, and the date range they were active on the file.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Path to the file | |
| repo_path | No | Working directory / repo root (defaults to cwd) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses behavioral traits such as ranking authors by commit count and including specific metrics (line ownership, percentage, date range), but does not mention performance characteristics, error conditions, or data freshness. The description adds value beyond a minimal statement but lacks comprehensive operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that efficiently conveys the tool's functionality without redundancy. It front-loads the core purpose and elaborates with specific output details, making every word count. No extraneous information is included.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 parameters, no annotations, no output schema), the description is reasonably complete. It explains what the tool does and what information it returns, compensating for the lack of output schema. However, it could improve by addressing potential limitations or example use cases to fully guide an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 both parameters ('file' path and 'repo_path' default). The description does not add meaning beyond the schema, as it focuses on output semantics rather than input details. Baseline 3 is appropriate since the schema provides adequate parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('shows', 'ranked') and resources ('every author who has ever committed to a file'), including detailed output information (line ownership, commit percentage, date range). It distinguishes from siblings like 'blame_context' or 'file_history' by focusing on contributor statistics rather than change tracking or commit narratives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for analyzing file authorship and contributor activity, but does not explicitly state when to use this tool versus alternatives like 'blame_context' (which might show per-line attribution) or 'search_commits' (which could filter commits). No exclusions or prerequisites are mentioned, leaving usage context somewhat open-ended.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
file_historyA
Returns the N most recent commits that touched a file, each annotated with its associated pull request and linked issues.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Path to the file | |
| limit | No | Number of commits to return (default 10) | |
| repo_path | No | Working directory / repo root (defaults to cwd) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states the tool returns data (non-destructive) but lacks critical details: whether it requires authentication, rate limits, error handling, pagination behavior, or what happens with invalid inputs. The mention of 'annotated with pull request and linked issues' hints at enriched output but doesn't specify format or completeness guarantees.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, dense sentence with zero wasted words. It front-loads the core functionality ('Returns the N most recent commits that touched a file') and efficiently adds value with the annotation detail. Every element earns its place, making it highly scannable and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with 3 parameters (100% schema coverage) but no output schema or annotations, the description is minimally complete. It clarifies the tool's purpose and output nature but lacks behavioral context (e.g., error cases, performance). The absence of output schema means the description doesn't explain return values, though it hints at enriched data structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are fully documented in the schema. The description adds no additional parameter semantics beyond what's in the schema (e.g., no clarification on 'file' path format, 'limit' constraints, or 'repo_path' resolution). Baseline score of 3 reflects adequate but minimal value addition over structured schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Returns'), resource ('N most recent commits that touched a file'), and scope ('each annotated with its associated pull request and linked issues'). It distinguishes itself from siblings like 'blame_context' (line-level attribution) and 'search_commits' (general commit search) by focusing on file-specific commit history with rich annotations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving annotated commit history for a specific file, but provides no explicit guidance on when to choose this tool over alternatives like 'commit_story' or 'file_contributors'. There's no mention of prerequisites, limitations, or comparative use cases, leaving the agent to infer context from tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_commitsA
Search commits by keyword across commit messages (and optionally code changes). Returns matching commits annotated with their pull requests and linked issues. Useful for finding when a feature was added, a bug was fixed, or a dependency was changed.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Keyword or phrase to search for (case-insensitive) | |
| repo_path | No | Working directory / repo root (defaults to cwd) | |
| limit | No | Max number of results to return (default 20) | |
| search_code | No | Also search the actual code changes (git pickaxe / -S), not just commit messages (default false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses key behavioral traits like case-insensitive search, optional code change searching, and that results include annotations with pull requests and linked issues. However, it lacks details on permissions, rate limits, or error handling, which are important for a search tool with no structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded, with two concise sentences that directly state the tool's function and utility. Every sentence earns its place by clarifying search scope and use cases without unnecessary elaboration or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (4 parameters, no output schema, no annotations), the description is somewhat complete but has gaps. It explains the search functionality and use cases but does not cover return values, pagination, or error scenarios, which are important for an agent to invoke the tool correctly without structured output information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 parameters thoroughly. The description adds minimal value beyond the schema, mentioning 'keyword' and 'optionally code changes' which align with the schema's 'query' and 'search_code' parameters, but does not provide additional syntax or format details, meeting the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('search commits by keyword') and resources ('commit messages', 'code changes'), distinguishing it from siblings like 'blame_context' or 'file_history' by focusing on keyword-based search across commits rather than line-level attribution or file-specific history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool ('useful for finding when a feature was added, a bug was fixed, or a dependency was changed'), but it does not explicitly mention when not to use it or name specific alternatives among the sibling tools, such as 'file_history' for tracking file changes over time.
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.
5 tool updates
v1.0.0- First observed
blame_context - First observed
commit_story - First observed
file_contributors - First observed
file_history - First observed
search_commits
TDQS
Scored across 5 tools
Each tool has a clearly distinct purpose with no overlap: blame_context focuses on line-level authorship and rationale, commit_story provides comprehensive commit details, file_contributors shows author statistics, file_history gives recent commit timeline, and search_commits enables keyword-based discovery. The descriptions clearly differentiate their scopes and use cases.
All tools follow a consistent snake_case naming pattern with clear, descriptive compound names (e.g., blame_context, commit_story, file_contributors). The naming convention is uniform throughout, making the tool set predictable and easy to understand at a glance.
With 5 tools, this server is well-scoped for its purpose of providing Git context and history insights. Each tool serves a specific, valuable function in the domain, and the count is neither too sparse nor bloated, allowing comprehensive coverage without overwhelming complexity.
The tool set offers complete coverage for exploring Git history and context: from line-level blame and commit details to file authorship, recent changes, and commit search. There are no obvious gaps; agents can navigate from high-level searches to detailed investigations seamlessly, covering the full lifecycle of code changes.
Maintenance
Related MCP Connectors
Deterministic context layer for your codebase: change impact, blast radius, answers with receipts.
Ask a codebase what calls what: search, blast radius, paths between symbols, and diffs.
Never explain the same context twice. Capture it once, load it anywhere, fork it to make it yours.
Writes your daily standup from GitLab or GitHub merge request state: what's ready, blocked or waiting on your review, and why a pipeline is red, read from the failing job log. OAuth sign-in, no API keys; can post the note to Slack, Discord or Google Chat on a schedule.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceThe shared AI context engine for git — save, search, and share the reasoning behind code changes. Captures the why behind every commit and slide on PRs for coding agents.37 npmMIT
- AlicenseAqualityAmaintenanceChange tracking for AI-era codebases. AI agents call it to log structured change events (entity + diff + reasoning) before the session ends, then query history with diff, blame, history, changeset, and search. Captures the intent that would otherwise evaporate.8205 PyPI25MIT
- AlicenseAqualityCmaintenanceSemantic git queries via MCP. Beyond git log — answer who/what/why about any line, file, or branch with blame, co-change, PR linkage.69 npm2MIT
- AlicenseNot gradedqualityDmaintenanceAnswers why code exists by tracing file:line or natural-language questions through git blame, commits, PRs, and linked issues, providing cited evidence from history.50 npmMIT