An MCP server that provides tools to fetch Metis blockchain block information and GitHub repository statistics
Server has 4 tools with basic verb-noun naming (list_, get_). However, critical gaps undermine quality: (1) Input schemas are present but lack proper JSON Schema structure with explicit type declarations in the source code shown. (2) Parameter descriptions are minimal or absent, 'org_name' has a description, but many lack detail on format/constraints. (3) Output schemas are not documented, tools return dicts/strings without declared field structure. (4) Error handling is minimal: list_org_repos returns ['Error fetching data'] (a string in a list, not structured); get_repo_stats returns a dict with 'error' key but no guidance on recovery. (5) No tool annotations (readOnlyHint, etc.). (6) Descriptions are present but generic (10-50 chars), below the 50-200 char baseline for LLM optimization. Per-tool analysis: list_org_repos and get_repo_stats have basic descriptions but no output schema docs; get_latest_block and get_previous_block have trivial descriptions (under 20 chars when stripped of context) and no input validation despite empty input objects.
Returns the latest block number from Metis mainnet.
Returns the previous block number.
Returns stars, forks, and watchers count for a GitHub repo.
Returns a list of public repo names for a GitHub organization.
Output schemas not documented. Tools return dicts/strings without declared field structure. LLMs cannot plan downstream calls or extract fields reliably.
Error handling is unstructured and non-actionable. list_org_repos returns ['Error fetching data'] (string in list); get_repo_stats returns {error: ...} with no recovery guidance. LLMs cannot determine if errors are retryable or what to do next.
Descriptions are too short and generic. get_latest_block and get_previous_block have descriptions under 20 chars (hard cap: score ≤20). Descriptions lack WHEN to use, WHAT it returns, and prerequisites.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | 2026-07-28+ | v2 |
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All tools are READ_ONLY but this is not declared in the tool definition, forcing LLMs to infer safety from descriptions.
Parameter descriptions are minimal. 'org_name' and 'owner'/'repo' lack format constraints, length limits, or examples of valid values. LLMs may pass invalid input without guidance.