A Model Context Protocol (MCP) server for GitHub that provides tools for interacting with the GitHub API
This GitHub MCP server presents 24 well-structured tools with consistent naming conventions and documented schemas. All tools follow verb_noun patterns (search_, get_, list_) and include JSON Schema definitions with required parameters and descriptions. However, there are systematic gaps: most tool descriptions are adequate but generic (not LLM-optimized per the 50 - 200 char sweet spot baseline); parameter descriptions are present but terse and sometimes lack actionable guidance; output schemas are not explicitly documented in the source; and error handling guidance is absent. The server is READ_ONLY (no write operations), which simplifies the security surface but also limits utility. Tool composition is solid, related tools chain naturally (e.g., search_repositories → get_file_contents). The primary deficiency is that descriptions prioritize brevity over the LLM-optimization guidance that modern agentic tools require.
Compare two commits, branches, or tags in a GitHub repository
Download and extract logs for a workflow run
Get a specific branch and its protection status
Get a specific commit from a GitHub repository
Get the combined status of a commit in a GitHub repository
Get the contents of a file from a GitHub repository
Output schemas not documented in source code. Tool descriptions define inputs but do not specify what fields each tool returns or their types. LLMs cannot plan downstream tool calls or extract relevant fields without knowing response structure.
Tool descriptions are generic and lack LLM-optimization guidance. Descriptions like 'Search for repositories on GitHub' do not indicate when to use search_repositories vs other discovery tools, what the common use case is, or what qualifies as a good query. Descriptions should be 50 - 200 characters and answer WHAT, WHEN, and WHAT YOU GET.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 69 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 39 | - | v1 |
Get a specific GitHub issue
Get a specific GitHub pull request
Get the diff of a GitHub pull request
Get detailed information about a specific workflow
Get detailed information about a specific job
Get detailed information about a specific workflow run
List branches in a GitHub repository with optional filtering
List comments on a commit in a GitHub repository
List commits in a GitHub repository
List comments on a GitHub issue
List issues in a GitHub repository
List jobs for a workflow run
List workflow runs for a repository or a specific workflow
List all workflows in a repository
Search for code on GitHub
Search for commits on GitHub
Search for issues on GitHub
Search for repositories on GitHub
Pagination parameters (page, per_page) are present in list_* tools but no guidance on result limits, total counts, or when pagination is required.
No error handling guidance. Tools do not document what errors might occur (e.g., repository not found, invalid branch name), whether errors are retryable, or what the agent should do if a call fails. Error descriptions should guide recovery, e.g., 'Repository not found. Try search_repositories() with a partial name.'
Parameter descriptions are terse and lack format guidance. For example, 'language' in search_repositories lacks an enum of valid values or examples. 'branch' in get_file_contents lacks guidance on default behavior. Descriptions should include constraints, enums, and defaults inline to guide LLM input generation.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). While all tools are READ_ONLY, explicitly marking them as such via annotations would improve protocol compliance and allow clients to apply optimizations or safety policies.