github-repo-mcp
Provides tools for analyzing public GitHub repositories, including repo health scoring, recent commit summaries, good first issue discovery, and semantic Q&A over README and docs.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@github-repo-mcpCheck the health of facebook/react and find a good first issue."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
github-repo-mcp
An MCP (Model Context Protocol) server that lets any AI agent — Claude Desktop, Claude Code, Cursor — reason about a public GitHub repository directly, instead of the human manually reading READMEs, commit logs, and issue trackers.
Why this exists
Evaluating an unfamiliar repo ("is this actively maintained? is this issue actually beginner-friendly? what changed recently?") is repetitive manual work every developer does. This server turns that into four callable tools any MCP-compatible agent can use.
Related MCP server: GitHub MCP Server
Tools
Tool | What it does |
| Deterministic 0–100 health score from commit recency, issue-triage ratio, and contributor count. Flags archived repos immediately. |
| Groups commits from the last N days by type (feature/fix/docs/refactor/chore) for a quick "what changed" view. |
| Finds beginner-labeled issues, scores each for genuine clarity, and flags ones that look mislabeled (e.g. touches core architecture despite the "good first issue" tag). |
| Free-text Q&A over README + |
Setup
npm install
cp .env.example .env
# Add a GitHub personal access token to .env — raises the rate limit from 60/hr to 5000/hr.
# No special scopes needed for public repo data: https://github.com/settings/tokens
#
# ask_repo also needs, both free tier:
# VOYAGE_API_KEY — https://dashboard.voyageai.com/ (API Keys -> Create new key)
# QDRANT_URL, QDRANT_API_KEY — https://cloud.qdrant.io/ (create a free cluster)
npm run buildRunning locally with Claude Desktop
Add this to your Claude Desktop MCP config (claude_desktop_config.json):
{
"mcpServers": {
"github-repo-mcp": {
"command": "node",
"args": ["/absolute/path/to/github-repo-mcp/build/index.js"],
"env": { "GITHUB_TOKEN": "your_token_here" }
}
}
}Restart Claude Desktop, then try: "Use github-repo-mcp to check the health of facebook/react and find me a good first issue."
Architecture notes
GitHub API, not scraping — clean, documented, generously rate-limited with a token.
Deterministic scoring, generative explanation —
get_repo_health's score is a fixed formula (recency + issue triage + contributor diversity), not an LLM guess. This keeps the number reproducible; an LLM (in the calling agent) can narrate why on top of it.Mislabel detection in
find_good_first_issues— real "good first issue" labels are often wrong. The tool checks body length, red-flag keywords (architecture, migration, security), and comment count to catch issues that are mislabeled, not just present them at face value.
Demo
See docs/demo.md for a real (not mocked) protocol exchange against
facebook/react, including the embeddings-based ask_repo retrieving the correct
answer for a query that shares no words with the source text.
How ask_repo retrieval works
ask_repo started as keyword-window retrieval over the README (see git history) and
was upgraded to embeddings-based RAG, implemented in src/rag.ts:
On first query for a repo, chunk README +
docs/*.md(top-level, cap 15 files) + top 8 most-discussed issue threads (title + body, ~500-word chunks, 50-word overlap)Embed each chunk with Voyage AI (
voyage-3.5-lite)Store vectors in Qdrant Cloud, one collection per repo (
repo_<owner>_<name>)On every query: embed the question, cosine-similarity search top-5 chunks
Subsequent queries for the same repo skip re-indexing (checked via the collection's
points_count) — only the query itself gets embedded
Why embeddings over keyword matching: keyword overlap requires literal shared words — "how do I install React?" and a README section titled "Getting Started" share zero words and would never match. Embeddings place semantically similar text near each other in vector space regardless of exact wording, so retrieval survives paraphrasing and synonyms — the actual failure mode keyword search hits in practice.
Known simplifications (marked ponytail: in src/rag.ts), each with a stated
upgrade path:
Issue threads index title+body only, not the full comment discussion (avoids one extra API call per issue) — fetch
/issues/{n}/commentsif answers need to reflect resolution discussion, not just the original report.Chunk sizing uses word count as a token-count approximation, not a real tokenizer.
No staleness check — a repo indexed once stays indexed even if its docs change. Add a TTL or a
pushed_atcheck against the stored index if content goes stale.
License
MIT
Available Tools
4 toolsask_repoAsk RepoA
Answers a free-text question about a repo via embeddings-based semantic search over its README, docs/*.md, and top issue threads. Use this for questions the other structured tools can't answer directly, e.g. 'does this support TypeScript?' or 'how do I configure X?' Requires VOYAGE_API_KEY and QDRANT_URL/QDRANT_API_KEY to be set.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | Repository name, e.g. 'anthropic-sdk-python' | |
| owner | Yes | Repository owner or organization, e.g. 'anthropics' | |
| query | Yes | The question to answer about this repo |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It discloses the underlying mechanism (embeddings-based semantic search), the data sources searched, and the required environment variables (VOYAGE_API_KEY, QDRANT_URL/QDRANT_API_KEY). This goes beyond the tool name and helps the agent understand dependencies and scope. It does not explicitly state read-only behavior, but that's implied by 'answers'.
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?
Two sentences, efficiently front-loaded: first states purpose and mechanism, second gives usage guidance and prerequisites. No redundant words; every part earns its place.
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 simple 3-parameter tool with no output schema, the description covers the input sources, usage scenario, and environment requirements. It does not explicitly describe the return value format, but the nature of the tool (answering a question) makes it inferable. Minor gap, but overall sufficient for correct invocation.
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 baseline is 3. The description adds context for the 'query' parameter through examples (e.g., 'does this support TypeScript?'), but does not detail formats for owner/repo beyond what the schema provides. This is a modest addition that meets the baseline without exceeding it.
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 answers free-text questions about a repo using embeddings-based semantic search over specific sources (README, docs/*.md, top issue threads). It includes concrete examples and explicitly positions it as the tool for questions other structured tools can't answer, distinguishing it from siblings like get_repo_health and find_good_first_issues.
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?
Provides explicit guidance: 'Use this for questions the other structured tools can't answer directly.' This directly tells the agent when to select this tool over alternatives, backed by illustrative examples. It implicitly covers when not to use it (when a structured tool fits).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_good_first_issuesFind Good First IssuesA
Finds open issues labeled for beginners/first-time contributors, then scores each for genuine clarity of scope and flags ones that look mislabeled (e.g. touches core architecture despite the 'good first issue' label).
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | Repository name, e.g. 'anthropic-sdk-python' | |
| owner | Yes | Repository owner or organization, e.g. 'anthropics' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden and goes beyond the basic lookup by revealing notable behavior: each issue is scored for genuine scope clarity and mislabeled issues are flagged, with a concrete example. It does not detail output format or scoring criteria, but the key non-obvious behaviors are communicated.
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 sentence that front-loads the core action and then adds the scoring/flagging behavior. There is no filler, and every clause contributes meaningful information beyond the schema.
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 simple tool with two required parameters and no output schema, the description adequately conveys what the tool does and what the agent can expect conceptually: scored issues and mislabel flags. Exact output formatting is omitted, but that is minor given the straightforward input contract.
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?
The description adds no parameter-specific detail, but schema coverage is 100% and both owner and repo are already documented in the input schema. The description doesn't need to compensate, so the baseline of 3 applies.
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 specifies a distinct action: finding open issues labeled for beginners/first-time contributors, then scoring scope clarity and flagging mislabeled ones. This clearly distinguishes it from sibling tools like get_repo_health, summarize_recent_commits, and ask_repo.
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 intended use is implied: use this when you want beginner-friendly issues from a repo. However, the description provides no explicit when-to-use/when-not-to-use guidance and names no alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_repo_healthGet Repo HealthA
Computes a maintenance-health score (0-100) for a public GitHub repo from commit recency, issue-triage ratio, and contributor diversity. Use this before deciding whether to depend on or contribute to a repo.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | Repository name, e.g. 'anthropic-sdk-python' | |
| owner | Yes | Repository owner or organization, e.g. 'anthropics' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It states the score is computed from commit recency, issue-triage ratio, and contributor diversity, and it notes the repo must be public. It does not detail the exact return shape or rate-limit behavior, but the core behavior is transparent for a read-only scoring tool.
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?
Two sentences with no filler: the first states the computation and output, the second states the intended use. The most important information is front-loaded, and every sentence earns its place.
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 simple two-parameter schema and no output schema, the description adequately covers inputs, output range, and use context. It could mention the exact response shape, but the score range and computation criteria are sufficient for an agent to invoke it correctly.
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 coverage is 100%, so the schema already documents both owner and repo with examples. The description adds only the 'public GitHub repo' context and does not deepen parameter meaning, matching the baseline expectation for well-documented 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 names a specific verb ('Computes') and resource ('maintenance-health score for a public GitHub repo'), and explicitly defines the output range (0-100). This clearly distinguishes it from siblings like summarize_recent_commits and find_good_first_issues, which target different operations.
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?
'Use this before deciding whether to depend on or contribute to a repo' gives a clear, actionable context for when the tool is appropriate. It does not explicitly list exclusions or alternatives, but the stated use case is specific enough for an agent to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
summarize_recent_commitsSummarize Recent CommitsB
Fetches commits from the last N days and groups them by type (feature/fix/docs/refactor/chore) so an agent can describe what changed without reading raw commit logs.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Lookback window in days | |
| repo | Yes | Repository name, e.g. 'anthropic-sdk-python' | |
| owner | Yes | Repository owner or organization, e.g. 'anthropics' |
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 states the grouping behavior and the benefit of avoiding raw logs, but it does not disclose error handling, rate limits, output format specifics, or what happens when there are no commits. For a read-only fetch operation, this is thin coverage; a 2 reflects the missing behavioral detail beyond the basic action.
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?
A single, well-structured sentence that front-loads the action ('Fetches commits from the last N days') and adds the grouping purpose efficiently. No filler or redundancy; every word earns its place.
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 3 parameters, no output schema, and no annotations, the description is adequate but incomplete. It explains the purpose and grouping but does not describe the output structure (e.g., what the grouped result looks like), pagination, or edge cases. Given the moderate complexity, this is a 3—functionally usable but with gaps an agent might need to infer.
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 all parameters are already documented (days, repo, owner). The description mentions 'last N days' which aligns with the 'days' parameter but does not add any syntax or additional meaning beyond the schema. Baseline 3 is correct given 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?
States a clear verb ('Fetches commits') and resource (commits from a repo), and adds the grouping purpose. It distinguishes itself from the siblings implicitly—get_repo_health, find_good_first_issues, ask_repo—by focusing on commit summarization, but does not explicitly name them or contrast. A 4 is appropriate for a clear purpose without explicit sibling differentiation.
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 gives context ('so an agent can describe what changed without reading raw commit logs'), implying when it's useful, but it does not specify when to prefer this over alternatives or when not to use it. No exclusions or alternative tool names are mentioned, so guidance is implied rather than explicit.
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.
4 tool updates
v0.1.0- First observed
ask_repo - First observed
find_good_first_issues - First observed
get_repo_health - First observed
summarize_recent_commits
TDQS
Scored across 4 tools
Each tool targets a clearly distinct purpose: health scoring, commit summarization, beginner-issue discovery, and semantic Q&A. There is no meaningful overlap—ask_repo explicitly serves as a fallback for questions the structured tools cannot answer.
All tool names use lowercase snake_case and follow a predictable verb-first pattern: get_, summarize_, find_, ask_. The consistency makes it easy to infer each tool's action at a glance.
Four tools is a well-scoped count for a focused repository-analysis server. Each tool covers a distinct aspect of evaluating or exploring a repo, and none feel redundant or missing from the apparent purpose.
The server covers the core repo-evaluation workflow well: health, recent changes, contribution entry points, and open-ended questions. Minor gaps exist, such as structured access to license, stars, or PR activity, but ask_repo can work around many of these.
Maintenance
Related MCP Connectors
Code intelligence for LLMs. Analyze, search, and retrieve code from any public git repository.
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Screens public GitHub repos and PRs to generate risk maps, findings, and merge-readiness signals.
Ask any GitHub repository a question. Get source-backed answers.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables Large Language Models to analyze GitHub repositories in real-time, providing tools for retrieving repository information, analyzing issues, accessing documentation, and visualizing activity.-
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to interact with GitHub repositories, issues, pull requests, code, and more through a comprehensive set of tools.-
- AlicenseNot gradedqualityDmaintenanceEnables Claude to analyze GitHub repositories with tools for health scoring, contributor analysis, issue tracking, code search, and more.MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to perform GitHub analytics and management tasks, including repository analysis, PR summarization, issue triage, release notes generation, and contributor statistics.44 npmMIT