github-repo-mcp-server
This server provides a read-only interface for an AI assistant to query GitHub on your behalf. It covers your personal repositories (restricted to a configured allowlist) and offers public trending repo discovery that is not gated.
Repository Metadata & Browsing:
get_repo(description, stars, language, default branch, visibility),list_repos(all allowlisted repos),list_branches,list_commits,get_file_contents(read file at any ref),search_code(within a single allowlisted repo).Issues & Pull Requests:
list_issues(filter by state, label, assignee),get_issue(detail + comment thread),list_pull_requests(filter by state, base, head),get_pull_request(diff stats, mergeable state, review status).CI/CD & Notifications:
get_workflow_runs(recent GitHub Actions status) andget_notifications(unread mentions/review requests, requires token permission).Discovery:
search_trending_reposfinds trending public repositories by topic, ranked by star count among recently pushed repos.Resources: Access README, issue details, and PR details via URI templates (e.g.,
repo://owner/repo/readme).Prompts: Reusable templates for summarizing open PRs (
summarize_prs_for_review), generating a weekly digest (weekly_repo_digest), and surfacing trending topics (whats_trending).Utility:
pingfor health check.
All actions are read-only; write operations like creating issues are intentionally excluded.
Provides tools for querying GitHub data, including personal repositories, issues, pull requests, commit history, file contents, code search, workflow runs, and notifications, as well as discovering trending public repositories by topic.
Click on "Install 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-mcp-serverwhat are the latest issues in my repo?"
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-server
An MCP (Model Context Protocol) server that lets an AI assistant query GitHub on your behalf — your own repos, issues, PRs, and CI status, plus discovery of trending repos by topic across public GitHub.
See SPEC.md for the full design and development plan.
Why we built this
This started as a learning project to understand MCP by actually building one, not just reading about it - so the goal was a server that (a) does something genuinely useful day to day, and (b) touches all three MCP primitives (tools, resources, prompts) instead of just tools, which is where most "hello world" MCP examples stop.
GitHub was the right domain for that: it has a mature, well-documented, official REST API (no scraping, no unofficial endpoints, no partner approval needed to get started), it's something we already use constantly, and it naturally splits into two different trust boundaries worth modeling - your own repos (should be tightly scoped) vs. public GitHub data at large (fine to query more freely). That split became the project's actual design backbone: see Architecture below.
The specific tool set also traces back to a real question asked earlier in
this project: "what's trending in machine learning right now?" Answering
that honestly - GitHub's real Trending page has no API, and "trending in
the US" isn't answerable at all since repos have no geography field - is
what shaped search_trending_repos into an honest proxy instead of a
fake exact match. That mix of "build the useful thing" and "be upfront
about what's actually possible" carried through the rest of the tools too.
Related MCP server: AI Project Explorer
Architecture
flowchart LR
subgraph Host["MCP Host (Claude Code / Claude Desktop / Cursor)"]
AI["AI assistant"]
end
AI <-->|"JSON-RPC over stdio"| Server
subgraph Server["github-repo-mcp-server"]
direction TB
Tools["Tools (13)\npersonal-scope + search_trending_repos"]
Resources["Resources (3)\nrepo://.../readme, issues/{n}, pulls/{n}"]
Prompts["Prompts (3)\nreview summary, weekly digest, trending"]
Config["config.ts\nrepo allowlist"]
Client["client.ts\nOctokit + throttling"]
Tools --> Config
Resources --> Config
Tools --> Client
Resources --> Client
Prompts -.->|"instructs AI to call"| Tools
end
Client -->|"personal-scope calls\n(allowlist-gated)"| GH["GitHub REST API"]
Tools -->|"search_trending_repos\n(not allowlist-gated)"| GH
GH -->|"read-only, fine-grained PAT"| Repos[("Your repos\n+ public GitHub data")]Two trust boundaries drive the whole design:
Personal scope — every tool that touches a specific repo (
get_repo,list_issues,get_file_contents, etc.) is checked againstconfig.json's allowlist before it's allowed to run. A token scoped to your repos plus code that enforces the allowlist means the server physically cannot read a repo you didn't list, even if the AI asked it to.Global discovery —
search_trending_reposis deliberately exempt from the allowlist, since it searches public GitHub data at large rather than a specific repo. Same GitHub API, different trust model, so it's routed differently in code, not just documented differently.
Prompts sit a layer above both: they don't call GitHub directly, they return instructions telling the AI which tools to call and how to summarize the results - the same primitive as a saved prompt template a human would write, just server-hosted so every client that connects gets it for free.
Status
✅ All planned milestones complete.
M0 — Project scaffold: TypeScript + MCP SDK, minimal
pingtool over stdioM1 — GitHub client + config (Octokit auth, repo allowlist)
M2 — Tier 1 read-only personal-repo tools (12 tools)
M3 —
search_trending_reposdiscovery toolM4 — MCP resources (README, issue/PR content)
M5 — MCP prompts (reusable templates)
M6 — Tests, rate-limit hardening, docs
Tier 2 write tools (create issue, comment, etc.) were scoped out of v1 intentionally — see SPEC.md §11. This is a read-only server.
Requirements
Node.js 18+ (developed against Node 20; see
.nvmrc)
Configuration
Copy
.env.exampleto.envand setGITHUB_TOKENto a fine-grained personal access token with read-onlyContents,Issues,Pull requests, andActionspermissions, scoped to the repos you want this server to access.List those repos (as
"owner/repo"strings) inconfig.json— this is the allowlist personal-scope tools are restricted to.search_trending_reposis exempt, since it queries public GitHub data rather than a specific repo.get_notificationsadditionally needs the token's Notifications account permission (separate section from repository permissions on the token creation page) — every other tool works without it.
Tools
Personal scope (allowlist-gated): get_repo, list_repos, list_branches,
list_commits, get_file_contents, list_issues, get_issue,
list_pull_requests, get_pull_request, search_code, get_workflow_runs,
get_notifications.
Global discovery (not allowlist-gated, searches public GitHub data):
search_trending_repos — finds trending repos for a topic, ranked by star
velocity among recently-created repos. A documented proxy for
github.com/trending, which has no official API.
Resources
URI template | Content |
| The repo's README, as markdown |
| Issue title, body, and comments |
| PR title, description, diff stats |
Prompts
Name | What it does |
| Finds open PRs and summarizes which need attention |
| Commits, issues, PRs, and CI status from the last week |
| Trending public repos for a GitHub topic |
Getting started
npm install
npm run dev # run the server directly via tsx
npm run build # compile to dist/
npm start # run the compiled serverThe server communicates over stdio, following the MCP protocol — it's meant to be launched by an MCP-compatible host (e.g. Claude Code, Claude Desktop, Cursor), not run standalone in a terminal.
Manual testing with MCP Inspector
MCP Inspector is the official visual testing tool for MCP servers — it gives you a web UI to browse every tool/resource/prompt and call them interactively, instead of hand-typing JSON-RPC.
npm run build # inspector launches the compiled server, so build first
npx @modelcontextprotocol/inspector@latest node --env-file=.env dist/index.jsThis prints a local URL with an auth token pre-filled, e.g.:
MCP Inspector Web is up and running at:
http://localhost:6274?MCP_INSPECTOR_API_TOKEN=<token>Open that URL (it also tries to open your browser automatically). From
there you can call any tool with real arguments - e.g. get_repo with
owner: <your-username>, repo: <a-repo-in-your-allowlist>, or
search_trending_repos with topic: machine-learning - and see the live
result. The token in the URL authenticates your session; treat it like a
credential and don't share the link.
Note: Inspector v2 lists Node 22+ as its required engine. It still runs
fine on Node 20 (just an EBADENGINE warning, not a hard failure) - if you
hit a real compatibility issue, npm i -g n && n 22 (or your Node version
manager's equivalent) resolves it.
Testing
npm test # typecheck (src + test) then run the full vitest suite
npm run typecheckThe suite (32 tests) runs through the real MCP protocol layer — an
McpServer and Client connected over an in-memory transport — with
@octokit/rest mocked, so it exercises actual schema validation and request
routing without making live API calls. Every tool, resource, and prompt was
also manually verified against a real repo during development; see individual
commit messages for what was and wasn't exercised against real data.
What we learned
About MCP as a protocol:
It's JSON-RPC 2.0 underneath, nothing exotic - once you've seen the
initializehandshake and onetools/callround trip, you've seen the shape of the whole protocol. Everything else is more of the same three message types (tools, resources, prompts) repeated.Tools, resources, and prompts are genuinely different primitives, not three names for the same thing. Tools are actions the AI decides to invoke; resources are addressable content the AI (or a human) can read directly without a tool call; prompts are server-authored instructions that tell the AI which tools to call and how - a reusable playbook, not a data fetch. Building all three (not just tools, which is where most examples stop) is what made the distinction click.
A server is trust-boundary-agnostic by default - it'll do whatever the code allows. The allowlist pattern here (
config.tsgating every personal-scope tool) exists because MCP itself provides no scoping; the server author has to build it.
About testing against real data instead of assuming code is correct: Every tool, resource, and prompt was smoke-tested against a live repo during development, which surfaced real issues a "does it compile" check would have missed entirely:
GitHub's code search doesn't index unstarred forks.
search_codereturned 0 results withincomplete_results: trueagainst a fresh fork - confirmed via a rawcurlcall that this is GitHub's own indexing limitation, not a bug (forks are only code-search-indexed once they have more stars than their parent repo).get_notificationsneeds a separate token permission. It uses a GitHub account-level permission (Notifications), not a repository permission like every other tool - discovered via a live 403, now surfaced as a specific error message instead of the generic one.Composed Octokit plugin types aren't portable. Wrapping the client with
@octokit/plugin-throttlingbroke.d.tsemission (TS2883). Fixed by droppingdeclaration: truefromtsconfig.json, since this is a runnable server, not a library other packages import.A separate test tsconfig was needed. The main
tsconfig.jsonexcludestest/from compilation, sotsc --noEmitsilently never type-checked the test files - vitest's esbuild transform strips types without checking them.tsconfig.test.jsonplus wiringnpm testto typecheck first caught real unsafe-property-access bugs in the tests that were otherwise invisible.
License
MIT
Available Tools
14 toolsget_file_contentsB
Read a file's contents from a repo at a given ref.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Branch, tag, or commit sha; defaults to the default branch | |
| path | Yes | File path within the repo, e.g. src/index.ts | |
| repo | Yes | Repository name | |
| owner | Yes | Repository owner (user or org) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of behavioral disclosure. It states it reads contents but does not mention return format (e.g., base64 encoding), size limits, error behavior, or any side effects. This is minimal.
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 is concise and front-loaded, stating the core action and scope without extraneous details. 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?
With no output schema and no annotations, the description should explain return values or behavior but does not. It is too terse for a tool that likely returns file content and metadata, leaving the agent without full context.
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 no additional meaning beyond what the schema already provides for each parameter, but it does not need to since the schema is complete.
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 reads a file's contents from a repo at a given ref, which is a specific verb+resource that distinguishes it from siblings like get_issue, get_repo, and search_code. It is unambiguous and immediately understandable.
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?
No guidance is provided on when to use this tool versus alternatives such as search_code or list_commits. The description simply states the action without context on prerequisites, exclusions, or comparison to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_issueA
Get full detail for one issue, including its comment thread.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | Repository name | |
| owner | Yes | Repository owner (user or org) | |
| issue_number | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden of behavioral disclosure. It does not mention that the operation is read-only, requires any specific permissions, or has no side effects. It only describes the return content (full detail, comment thread), which does not cover safety or authorization aspects.
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 of 13 words. It avoids redundancy and directly conveys the tool's purpose without filler, scoring high on conciseness.
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 read tool with three obvious parameters, the description provides the essential purpose and mentions the comment thread as a key return component. However, with no output schema and no annotations, it does not detail the full return structure or any error/rate-limit behavior, leaving some gaps in completeness.
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 schema describes owner and repo (67% coverage), but the description adds no additional meaning for any parameter. The missing issue_number description is somewhat inferable from the name, and the tool description's 'one issue' hints at its role, but there is no explicit compensation for the coverage gap.
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 verb 'Get' and resource 'one issue', specifying that it retrieves full detail including the comment thread. This distinguishes it from sibling tools like list_issues (which lists issues) and get_pull_request (which gets a pull request).
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 phrase 'for one issue' implies this is for retrieving a single issue rather than listing multiple, but it does not explicitly mention alternatives like list_issues or exclusions for when not to use it. Usage context is present but only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_notificationsA
Get your unread GitHub notifications (mentions, review requests), filtered to repos in this server's allowlist. Requires the token's Notifications account permission - not required by other tools.
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | Include read notifications too |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the filtering to allowlisted repos, the unread-only default, and the specific permission requirement, which are valuable behavioral facts. It does not mention edge cases like missing permissions or response format, but for a simple read tool, this is reasonably transparent.
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 two sentences with no redundant words. It efficiently covers purpose, scope, and a key prerequisite, earning a top score.
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 simplicity (one optional param, no output schema), the description provides sufficient context: what it does, what it operates on, and an important permission note. It is complete for its complexity.
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 sole parameter 'all' is fully described in the schema (boolean, default false, 'Include read notifications too'), so schema coverage is 100%. The description does not add extra meaning beyond noting the unread default, which the schema already implies. Baseline of 3 is appropriate.
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 retrieves unread GitHub notifications, specifying types (mentions, review requests) and scope (repos in server's allowlist). It is distinct from sibling tools that focus on issues, PRs, code search, etc., leaving no ambiguity about its purpose.
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 explicitly calls out a required permission ('Notifications account permission') that is unique to this tool among siblings, implying when it should be used. It does not explicitly list alternative tools for other notification-related tasks, but the context strongly differentiates it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pull_requestA
Get detail for one PR: diff stats, mergeable state, and review status.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | Repository name | |
| owner | Yes | Repository owner (user or org) | |
| pull_number | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses the specific return content (diff stats, mergeable state, review status) and implies read-only behavior via 'Get', but does not mention authentication needs, rate limits, or error conditions. Some behavioral context is provided, but it is not comprehensive.
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 of 14 words, front-loaded with the action and resource. No filler or redundant information; every word adds value.
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?
There is no output schema, so the description lists the key return fields (diff stats, mergeable state, review status), providing useful output expectations. For a simple 3-param getter, this is reasonably complete, though it omits edge-case behavior like error handling or authentication details.
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 descriptions cover 67% of parameters (owner and repo), while pull_number lacks a description. The tool description adds no additional parameter semantics, leaving pull_number to be inferred from 'one PR'. It does not compensate for the missing coverage, but the missing parameter is straightforward.
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 uses a specific verb 'Get detail' and resource 'one PR', and enumerates exactly what is returned: diff stats, mergeable state, and review status. This clearly distinguishes it from sibling tools like list_pull_requests and get_issue.
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 use for retrieving a single PR's details, but does not explicitly state when to use it versus list_pull_requests or other siblings. No exclusions or alternative recommendations are provided, leaving usage guidance implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_repoB
Get metadata for a repo: description, stars, language, default branch, visibility.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | Repository name | |
| owner | Yes | Repository owner (user or org) |
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 of behavioral disclosure. It only states 'Get metadata,' implying a safe read operation, but does not mention authentication requirements, rate limits, error behavior for missing repos, or any side effects. This is minimal for a tool with zero annotation coverage.
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, front-loaded sentence that wastes no words. It includes the primary verb, the resource, and a list of returned metadata fields, making it highly scannable and efficient.
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 two-parameter read tool, the description is adequate but minimal. It lists return fields, which helps agents understand output, but with no annotations or output schema, additional context like authentication or error handling would improve completeness. The description does not explicitly differentiate from list_repos, though the singular scope is implied.
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% for both parameters (owner and repo), each with descriptive text. The description adds nothing about parameter format, relationships, or edge cases, but because the schema fully documents the parameters, a baseline of 3 is appropriate.
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 function: 'Get metadata for a repo' and lists specific metadata fields (description, stars, language, default branch, visibility). This distinguishes it from sibling tools like list_repos (which lists multiple repos) or get_issue (which fetches issue-specific data), showing a specific verb, resource, and scope.
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 no guidance on when to use this tool relative to alternatives. It does not mention list_repos for multiple repos, search_code for content search, or any other exclusions. The usage is implied from the name and description but not explicitly stated, so agents receive minimal selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workflow_runsA
Get recent GitHub Actions workflow run status (pass/fail) for a repo.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | Repository name | |
| limit | No | ||
| owner | Yes | Repository owner (user or org) | |
| branch | No | Filter to runs on this branch |
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 only mentions 'recent' and 'pass/fail' but does not disclose behavior like default limit, pagination, whether in-progress runs are included, or how branches affect results. This leaves significant ambiguity for an agent.
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, direct sentence with no filler. It is front-loaded with the action and resource, making it easily scannable.
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?
As a simple getter with no output schema, the description should clarify what is returned. It mentions 'status (pass/fail)' but does not describe the response shape (e.g., list of runs, metadata) or how parameters like limit and branch affect results. It is adequate but could provide more context for 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 coverage is 75%, with owner, repo, and branch described. The description adds no new parameter details beyond the schema, and the 'limit' parameter is left unexplained. However, the schema provides defaults and constraints, so the gap is not severe.
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 retrieves recent GitHub Actions workflow run status (pass/fail) for a repo. It uses a specific verb ('Get') and resource ('workflow run status'), distinguishing it from sibling tools like get_issue or get_file_contents.
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 checking CI status but provides no explicit guidance on when to use this tool versus alternatives, nor any exclusions. It does not mention prerequisites or typical scenarios, though the purpose is self-evident from the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_branchesB
List branches in a repo.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | Repository name | |
| limit | No | Max branches to return | |
| owner | Yes | Repository owner (user or org) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden for behavioral disclosure. It only states the basic action without addressing pagination, default limits (despite the limit parameter), return format, or any side effects. It doesn't betray hidden behavior but also reveals nothing beyond the obvious.
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, front-loaded sentence with no wasted words. It conveys the core purpose immediately and is appropriately sized for a simple list operation.
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?
The tool has no output schema and no annotations, so the description must provide sufficient context for invocation. It lacks information about the return shape, pagination behavior, or default settings. For an agent, this is insufficient to know what to expect from the call.
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 input schema already describes all three parameters with 100% coverage, so the baseline is 3. The description does not add additional meaning to the parameters beyond what the schema provides (e.g., it doesn't elaborate on the limit parameter or the required owner/repo combinations).
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 identifies the operation ('List branches') and the scope ('in a repo') using a specific verb and resource. It distinguishes itself from sibling tools like list_commits or list_pull_requests by naming the specific resource (branches).
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 no guidance on when to use this tool versus alternatives. It doesn't mention any exclusions or conditions, such as when to prefer this over list_commits or list_repos. The usage context is trivial but not explicitly communicated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_commitsA
List recent commits on a branch.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | Repository name | |
| limit | No | Max commits to return | |
| owner | Yes | Repository owner (user or org) | |
| branch | No | Branch name; defaults to the repo's default branch |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only states a basic action without revealing details like default branch behavior, limit application, sorting order, or whether the response includes commit metadata only. The term 'recent' is vague and unqualified.
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, concise sentence with no redundant information. It is short and to the point, earning a high score for efficiency.
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?
Despite having 4 parameters and no output schema, the description is minimal. It fails to explain what a commit listing contains or how 'recent' is defined. The agent might not know if commits from all branches or the default branch are included, or if the response includes diffs. The description is too sparse to fully support 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 slight emphasis on 'branch' as the scope, but it does not provide additional meaning for parameters like limit or owner/repo beyond what the schema already explains.
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 'List recent commits on a branch' uses a specific verb (List), a clear resource (commits), and a scope (branch). It clearly distinguishes from sibling tools like list_pull_requests and list_issues, which target different resource types.
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 a clear context for use: listing commits on a branch. It does not explicitly state when not to use it or mention alternatives, but the meaning is evident. This places it above implied usage but below explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_issuesA
List issues in a repo, filterable by state, label, and assignee.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | Repository name | |
| limit | No | ||
| owner | Yes | Repository owner (user or org) | |
| state | No | open | |
| labels | No | Comma-separated label names to filter by | |
| assignee | No | GitHub username to filter by assignee |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden. It calls out read-only behavior with 'List' and mentions filters, but it does not disclose pagination, default limit, or response format. This is adequate but minimal.
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 sentence with a clear verb-object structure, front-loaded with the tool's purpose. No redundant or unnecessary information.
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?
The description is sufficiently complete for a low-complexity read-only list tool. The schema documents parameters and required fields, and although the return format and pagination are not mentioned, these are minor gaps for this operation type.
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 67%. The description adds semantic grouping by naming state, label, and assignee as filters, but it does not clarify the 'limit' parameter or required owner/repo beyond what the schema already provides.
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 begins with a specific verb+resource ('List issues in a repo') and names the key filters (state, label, assignee), clearly distinguishing it from sibling tools like get_issue (single issue) and list_pull_requests (pull requests).
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 listing issues in a repo but does not explicitly state when to prefer this tool over alternatives or mention exclusions. No direct 'when to use' or 'when not to use' guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pull_requestsB
List pull requests in a repo, filterable by state and branch.
| Name | Required | Description | Default |
|---|---|---|---|
| base | No | Filter by base branch, e.g. main | |
| head | No | Filter by head branch, e.g. owner:branch | |
| repo | Yes | Repository name | |
| limit | No | ||
| owner | Yes | Repository owner (user or org) | |
| state | No | open |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It only mentions filterability by state and branch, which is already visible in the schema, and omits details like pagination, ordering, default behavior, or return format. This adds no behavioral transparency beyond the structured fields.
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, concise sentence with no redundant information. It front-loads the core purpose and filtering capability in a clear, efficient manner.
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 no output schema and no annotations, the description is insufficiently complete. It fails to mention what the response contains, whether results are paginated, or how the limit parameter affects the output. For a list operation with several parameters, this leaves important gaps for an agent to know what to expect.
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 high (most parameters have descriptions), so the baseline is 3. The description's mention of state and branch filtering adds little semantic value beyond what the schema already documents. It does not clarify the 'limit' parameter or the distinction between base and head branches beyond their schema descriptions.
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 'List pull requests in a repo' with a specific verb and resource, and explicitly mentions filtering by state and branch. This distinguishes it from sibling tools like list_issues and get_pull_request, which target different resources or 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?
The description implies use when listing pull requests, but it does not explicitly state when to choose this over alternatives or exclude other tools. No comparison with get_pull_request or list_issues is given, so the guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_reposA
List every repo in this server's allowlist, with basic metadata for each.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 scope ('every repo') and content ('basic metadata') but does not mention pagination, output format, or authentication requirements. For a read-only list operation, this is 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that immediately states the action and scope. No unnecessary words or repetition, making it highly efficient and well-structured.
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 simplicity (0 params, no output schema), the description is fairly complete. It specifies the purpose and scope, and 'basic metadata' sets expectations. However, it could be more explicit about what metadata fields are included or the exact return shape.
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 input schema has zero parameters, so the baseline is 4. The description adds no parameter info (none needed), but 'basic metadata' gives an indication of the output content, which is slightly beyond the 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 verb 'list', the resource 'repo', and the scope 'every repo in this server's allowlist'. It distinguishes from siblings like get_repo (single repo) by emphasizing 'every repo' and 'allowlist'.
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 usage context is implied (when you need an overview of all approved repos) but no explicit alternatives are mentioned. It doesn't say when not to use this tool (e.g., when needing details for a specific repo, use get_repo).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pingA
Health check — returns pong plus the current server time.
| Name | Required | Description | Default |
|---|---|---|---|
| message | No | Optional echo message |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavior itself. It states the primary behavior (returns pong and server time) but omits any mention of the optional message parameter echo behavior. The description does not contradict annotations, and for a simple read-only operation, the core behavior is transparent, though not exhaustive.
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, front-loaded with the key term 'Health check', and contains zero filler. It effectively communicates the tool's purpose without redundancy, scoring high on conciseness and structure.
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?
The tool is simple, but the description leaves out the echo behavior of the optional message parameter, which is relevant to the response. Although the schema covers the parameter, there is no output schema, so the description should have been slightly more detailed about the full return value. Minor gap, hence a 3.
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% for the single parameter 'message', which is described as 'Optional echo message'. The tool description adds no additional parameter meaning, so the baseline score of 3 applies. The schema fully handles parameter semantics.
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 identifies the tool as a health check that returns pong and the current server time. This is specific and unambiguous, distinguishing it from all sibling tools which are data retrieval or repository operations. The verb 'returns' and the resource 'server' make the purpose immediately obvious.
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 'Health check' label implies the tool is used to verify server connectivity, but no explicit when-to-use or when-not-to-use guidance is given. Since there is no alternative health-check tool among the siblings, the usage context is clear but only by implication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_codeA
Search code within a single allowlisted repo. Note: GitHub's code search only indexes forks that have more stars than their parent repo, and can lag for low-activity repos - a 0-result response may mean 'not indexed yet' rather than 'no matches'.
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | Repository name | |
| limit | No | ||
| owner | Yes | Repository owner (user or org) | |
| query | Yes | Search terms, e.g. "TODO" or "function foo" |
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 provides a valuable caveat about GitHub code search indexing lag, explaining that a 0-result response may mean 'not indexed yet' rather than 'no matches'. This adds meaningful context beyond the schema, though it does not cover auth or rate limits.
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 exactly two sentences: the first immediately states the purpose, the second provides the essential indexing caveat. There is no unnecessary verbosity 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?
There is no output schema, so the description should ideally explain what the tool returns (e.g., matching file paths, code snippets). It does not describe the response format. While the indexing caveat is useful, the missing return format leaves a gap for the 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 75%, with owner, repo, and query described. The description does not add any parameter-specific meaning beyond the schema, and the 'limit' parameter has no description but has default/min/max constraints. The indexing caveat is not directly tied to parameter semantics.
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 'Search code within a single allowlisted repo', giving a specific verb, resource, and scope. It distinguishes itself from sibling 'search_trending_repos' by specifying code search rather than repo search.
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 code search in a specific repo but does not explicitly mention when to use this tool versus alternatives or when not to use it. The 'single allowlisted repo' restriction is a context clue, but no alternative tool is named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_trending_reposA
Find trending repos for a topic across all of public GitHub, ranked by star count among repos created/pushed recently. This is a proxy for github.com/trending, which has no official API - it is not an exact match for that page's algorithm. Not restricted to the repo allowlist, since it searches public GitHub data at large.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| topic | Yes | GitHub topic slug, e.g. "machine-learning" | |
| since_days | No | How many days back to look |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden for behavioral disclosure. It transparently mentions that the tool is a proxy and not an exact match for GitHub trending, and that it searches beyond the allowlist. However, it does not mention output format, pagination, rate limits, or authorization requirements, leaving moderate gaps for a search 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?
The description is two sentences long, with the first sentence stating the core functionality and the second adding key caveats. Every sentence earns its place; there is no redundancy or filler. Critical information is front-loaded.
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?
The tool has moderate complexity with 3 parameters and no output schema. The description covers the algorithm proxy, allowlist exception, and ranking logic, which are essential context. It does not describe the return format, but given the simplicity of the tool and the lack of an output schema, this is a minor omission rather than a critical gap.
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 input schema covers 67% of parameters (topic and since_days have descriptions), and the description implies 'recently' relates to since_days. The limit parameter lacks a description but has defaults and constraints in the schema. The description adds minimal new parameter-specific detail beyond the schema, so a baseline of 3 is appropriate.
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 function: finding trending repos for a topic on public GitHub, ranked by star count among recently created/pushed repos. It distinguishes itself from sibling tools that operate on specific repos (e.g., get_issue, list_commits) and other search tools like search_code. The verb 'find' and resource 'trending repos for a topic' are specific.
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 that it's a proxy for github.com/trending and not an exact match, which helps set expectations. It also notes it is not restricted to the repo allowlist, indicating when this tool is appropriate (broad public search). However, it does not explicitly name alternative tools or say when not to use it, so it falls short of a 5.
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. Dates show when Glama detected each change.
14 tool updates
v0.1.0- First observed
get_file_contents - First observed
get_issue - First observed
get_notifications - First observed
get_pull_request - First observed
get_repo - First observed
get_workflow_runs - First observed
list_branches - First observed
list_commits - First observed
list_issues - First observed
list_pull_requests - First observed
list_repos - First observed
ping - First observed
search_code - First observed
search_trending_repos
TDQS
Each tool has a clearly distinct purpose. Getter vs. list tools are separated by singular/plural semantics, and the two search tools differ by target (code within a repo vs. trending repos across GitHub). No two tools overlap in function.
All tool names use lowercase with underscores and follow a consistent verb_noun pattern (get_, list_, search_, ping). The pattern is predictable and easy to infer from the resource being accessed.
14 tools is well within the ideal range for a GitHub-focused server. Each tool covers a distinct resource or operation, and the count feels appropriate for the scope—not bloated, not too sparse.
The read-side surface is solid: repos, issues, PRs, branches, commits, files, workflows, notifications, and trending. However, there are no create/update/delete operations for any resource, which is a significant gap if the server is expected to support full issue/PR lifecycle management. Agents can work around this only if their tasks are read-only.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Access the GitHub API, enabling file operations, repository management, search functionality, and…
AI-native git hosting — repos, PRs, issues, CI gates, and AI code review over MCP (60 tools).
An MCP server that gives your AI access to the source code and docs of all public github repos
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI-powered GitHub interactions including repository analysis, code search, PR reviews, and more through the MCP protocol.4MIT
- FlicenseNot gradedqualityBmaintenanceEnables AI assistants to discover and interact with GitHub repositories through standardized MCP tools, allowing exploration and retrieval of project information without direct API calls.-
- FlicenseNot gradedqualityCmaintenanceExposes GitHub repository data via MCP tools, a resource, and a prompt, enabling repo summaries, issue/PR listing, keyword search, and repo health review.-
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to interact with GitHub via MCP, managing repositories, issues, PRs, and analyzing repository health through tools like list_repositories, read_issues, create_issue, comment_on_pr, and analyze_repo_health.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/technomad641/github-repo-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server