MCP server for interacting with GitHub repositories, issues, pull requests, and projects through the Model Context Protocol
The GitHub MCP server provides 32 tools across issue and pull request management. Strengths: tool naming is consistently verb-based and clear (create_issue, update_issue_title, etc.); descriptions are present and contextual for most tools; input schemas are well-structured with proper JSON Schema syntax; tool annotations (risk levels: READ_ONLY, WRITE, DESTRUCTIVE) are declared. Weaknesses: descriptions are often brief (50-120 chars) and lack actionable context about when to use each tool vs. alternatives; many parameter descriptions are minimal (e.g., 'Issue number', 'Reaction type'); no output schemas are documented in the visible code; error handling guidance is absent; several tools expose overlapping responsibilities without clear composition hints (e.g., 10 separate update_issue_* tools rather than a single update_issue with a fields map); no enumerated constraints on parameters like 'state', 'reaction', or 'event', these accept free-form strings. Tool definitions appear to be registered via test files (__toolsnaps__) rather than explicit implementation visibility, which limits confidence in schema completeness.
Add a reaction to a GitHub issue comment
Add a reaction to a GitHub issue
Add a comment to a pull request review in a GitHub repository
Add a reaction to a pull request review comment in a GitHub repository
Add a sub-issue to a GitHub issue
Create a new issue in a GitHub repository
Granular update tools lack composition guidance. Ten separate update_issue_* tools (title, body, assignees, labels, milestone, type, state, reactions, sub-issues, fields) should be consolidated into a single update_issue tool that accepts a fields map, or each tool should explicitly document when to use it vs. alternatives. This forces agents to reason about which specific tool to call and prevents batch updates.
Parameter descriptions lack actionable constraints. 'state' and 'event' parameters accept free-form strings with no enum declarations or format guidance. 'Reaction type' offers no list of valid reactions. LLMs will hallucinate invalid values, causing API errors. All constraint-based parameters must declare enums or regex patterns.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 64 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Create a review on a pull request in a GitHub repository
Delete a pending review on a pull request in a GitHub repository
Get details of the authenticated GitHub user. Use this when a request is about the user's own profile for GitHub. Or when information is missing to build other tool calls.
Get member usernames of a specific team in an organization. Limited to organizations accessible with current credentials
Get details of the teams the user is a member of. Limited to organizations accessible with current credentials
Remove a reaction from a GitHub issue comment
Remove a reaction from a GitHub issue
Remove a reaction from a pull request review comment in a GitHub repository
Remove a sub-issue from a GitHub issue
Reprioritize a sub-issue in a GitHub issue
Request reviewers for a pull request in a GitHub repository
Resolve a review thread in a pull request in a GitHub repository
Set custom fields on a GitHub issue
Submit a pending review on a pull request in a GitHub repository
Unresolve a review thread in a pull request in a GitHub repository
Update assignees of an issue in a GitHub repository
Update the body of an issue in a GitHub repository
Update labels on an issue in a GitHub repository
Update the milestone of an issue in a GitHub repository
Update the state of an issue in a GitHub repository
Update the title of an issue in a GitHub repository
Update the type of an issue in a GitHub repository
Update the body of a pull request in a GitHub repository
Update the draft state of a pull request in a GitHub repository
Update the state of a pull request in a GitHub repository
Update the title of a pull request in a GitHub repository
No output schemas documented. Tool descriptions do not explain what fields are returned, their types, or what IDs/references downstream tools need. Agents cannot chain tools without trial-and-error. All tools must declare return types and field structure.
Many descriptions are generic and under 100 characters, missing context about when to use the tool, dependencies, or side effects. E.g., 'Update the title of an issue' lacks guidance on when this is preferred over set_issue_fields. Descriptions should answer WHAT, WHEN, and any dependencies.
No error handling guidance provided. Tools do not describe what errors may occur, which are retryable, or what the agent should do next. E.g., 'Resource not found' should suggest checking the owner/repo/issue_number.
Tool annotations present (READ_ONLY, WRITE, DESTRUCTIVE) but not tied to structured hints in schema. Use toolAnnotations format (readOnlyHint, destructiveHint, idempotentHint) for consistency with MCP spec.