GitHub MCP server with read-only, capped, and field-trimmed results to keep context window small
Solid foundation with clear naming (verb_noun pattern: gh_whoami, gh_my_repos, gh_search_*) and consistent parameter schemas. All 9 tools have descriptions and input schemas with types. However, descriptions are terse (avg ~60 chars, well below the 194-char baseline), parameter descriptions lack depth (e.g., 'GitHub username or organization name' for gh_user_repos is minimal), and output schemas are entirely undocumented. No error handling guidance, no recovery hints, and no tool annotations (readOnlyHint, etc.). Pagination is present but not fully documented. Security is sound (token via env var, read-only scope), but descriptions don't explain WHEN to use each tool vs. alternatives (e.g., gh_my_repos vs. gh_search_repos).
Recent commits of a repo ("owner/name") — sha, date, author, subject line.
One file's contents (truncated to 20k chars), or a directory listing.
Issues of a repo ("owner/name"). state: open | closed | all.
The authenticated user's own repos, newest-updated first. visibility: all | public | private. Use this for "my repositories" — never a search.
Pull requests of a repo ("owner/name"). state: open | closed | all.
Search code. Returns repo/path/url per hit — no snippets.
Search repositories across GitHub. sort: stars | forks | updated (optional).
Output schemas completely undocumented. No tool returns a documented schema showing what fields the LLM should expect (e.g., gh_my_repos returns repos but fields are not listed). LLMs cannot plan downstream calls or extract data reliably without knowing response structure.
Descriptions are too terse (avg ~60 chars vs. 194-char baseline). They state WHAT but not WHEN to use each tool. E.g., gh_my_repos says 'The authenticated user's own repos' but doesn't explain it should be used for 'my repositories' instead of search. LLMs conflate similar tools.
Parameter descriptions lack actionable constraints. E.g., 'sort: stars | forks | updated (optional)' is in the tool description, not the parameter description. 'limit' lacks min/max bounds in description (only schema). 'repo' format ('owner/name') is mentioned in description but not enforced in schema.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
Public repos of any GitHub user or org, newest-updated first.
The authenticated GitHub account (login, name, public repo count).
No error handling guidance. If a repo is not found, a user is invalid, or rate limits are hit, the tool returns an error but provides no recovery hint (e.g., 'Try search_repos() with a partial name'). Agents cannot self-correct.
No tool annotations. All tools are read-only but lack readOnlyHint annotation. This prevents clients from optimizing caching, retry logic, or UI presentation. Spec 2026-07-28 supports tool annotations; they should be present.