Public read+write reference MCP server over the GitHub REST API. Env-gated tool groups (read always on, write off by default), fine-grained PAT auth that degrades to the unauthenticated tier, typed rate-limit/error payloads. Reference portfolio implementation, NOT the official GitHub MCP server.
Strong foundation with 14 well-named tools, complete input schemas, and clear descriptions. All tools follow verb_noun naming (get_, list_, create_, etc.). Descriptions are concise (50-150 chars) and state what each tool does. Input parameters have types and descriptions. However, output schemas are not documented, LLMs cannot see what fields to expect from responses. Write-gated tools lack explicit permission/scope declarations. Error handling guidance is minimal. No tool annotations (readOnlyHint/destructiveHint) despite clear read/write distinction.
Add one or more labels to an issue or pull request. Requires GITHUB_MCP_ENABLE_WRITE=1 and GITHUB_TOKEN.
Post a comment on an issue or pull request. Requires GITHUB_MCP_ENABLE_WRITE=1 and GITHUB_TOKEN.
Open a new issue on a repository. Requires GITHUB_MCP_ENABLE_WRITE=1 and GITHUB_TOKEN.
Create a review comment on a specific line of a pull request's diff. Requires GITHUB_MCP_ENABLE_WRITE=1 and GITHUB_TOKEN.
Read a UTF-8 text file from a repo at a given path (base64-decoded). Reports binary files rather than decoding them.
Fetch a single issue's full detail: title, body, state, labels, comment count.
Output schemas not documented. LLMs cannot see what fields responses contain (e.g., does get_repo return 'stars' or 'stargazers_count'?). This forces agents to guess field names and risks chaining failures.
Write tools lack explicit permission/scope declarations. Descriptions mention 'Requires GITHUB_MCP_ENABLE_WRITE=1 and GITHUB_TOKEN' but no formal scope metadata (e.g., 'write:issues', 'write:pull_requests'). Prevents least-privilege agent configuration.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Fetch a single pull request's full detail, including merge state.
Get metadata for a repository: description, language, stars, forks, open issues, default branch, archived flag, license, last-push time.
Get a public profile for a GitHub user or organization.
List commits on a repo's default branch (or a given ref), newest first.
List issues for a repository (pull requests filtered out), most-recently-updated first.
List pull requests for a repository, most-recently-updated first.
Search public repositories by keyword/qualifiers, sorted by best match.
Set an issue's state to 'open' or 'closed'. Requires GITHUB_MCP_ENABLE_WRITE=1 and GITHUB_TOKEN.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). The server clearly distinguishes read vs write tools, but this is not signaled to clients via MCP annotations. Clients cannot auto-detect which tools are safe to retry or require confirmation.
Error handling lacks recovery guidance. No evidence of structured error responses that tell LLMs what to do next (e.g., 'User not found. Try search_users() first.'). Raw API errors will not guide agent recovery.
Parameter 'state' in list_issues and list_pull_requests accepts free-form strings with default 'open'. Should be an enum (open|closed|all) to prevent hallucinated values and guide LLM selection.