MCP server exposing GitHub operations as tools for reading and writing issues, pull requests, and searching code
Server has 9 tools with complete input schemas and descriptions. Naming follows verb_noun convention (list_, get_, create_, close_, add_, merge_, search_). Descriptions are present and explain destructive vs. read-only operations. However, parameter descriptions are sparse (many lack detail beyond type), output schemas are not documented, and error handling guidance is minimal. The confirm pattern for destructive operations is well-designed but not universally applied (e.g., search_code lacks confirmation despite being a read-only operation). No tool annotations (readOnlyHint/destructiveHint) present in source. Average description length ~120 chars (below 194 baseline). Parameter descriptions average ~40 chars (below 72 baseline).
Add a comment to an issue or PR. DESTRUCTIVE: requires confirm=True, otherwise returns a preview without posting it.
Close an existing issue. DESTRUCTIVE: requires confirm=True, otherwise returns a preview without closing it.
Create a new issue in a GitHub repo. DESTRUCTIVE: requires confirm=True, otherwise returns a preview without creating it.
Get details of a single GitHub issue by its number.
Get details of a single pull request by its number.
List issues in a GitHub repo. state must be 'open', 'closed', or 'all'.
Output schemas not documented. LLMs cannot infer what fields list_issues, get_issue, search_code return, forcing them to guess downstream field names and risk broken tool chains.
Parameter descriptions are minimal or missing. E.g., 'owner' and 'repo' appear in 9 tools but lack context (e.g., 'GitHub organization or user account name' vs bare 'Repository owner/organization'). Inconsistent detail across tools.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) in source. Destructive tools (create_issue, close_issue, add_comment, merge_pull_request) should declare destructiveHint=true; read-only tools should declare readOnlyHint=true. This enables agents to reason about safety without parsing descriptions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
List pull requests in a GitHub repo. state must be 'open', 'closed', or 'all'.
Merge a pull request. DESTRUCTIVE: requires confirm=True, otherwise returns a preview without merging it.
Search code on GitHub. Optionally scope to a specific owner/repo.
Error handling guidance absent. No recovery hints in tool descriptions (e.g., 'If issue not found, try list_issues to verify the issue_number'). Agents have no guidance on what to do if a call fails.
Pagination not documented for list_* tools. list_issues and list_pull_requests may return large result sets but lack limit/offset/page parameters or documentation of result caps. Risk of context window exhaustion.