A simple MCP server with packaged tools for Harry Potter API and GitHub Octodex API interactions
Even the 2 tools with parameters (get_characters_in_house, display_text) lack parameter descriptions. Tool descriptions are present but generic (avg ~60 chars), falling short of the 194-char baseline for production tools. No output schemas are documented. Error handling is minimal, the mcpServer.js shows only basic try-catch with a generic 'API error' message, offering no recovery guidance. The tool set mixes disparate domains (Harry Potter API, GitHub Octodex, LED badge) without a coherent purpose or composition strategy. Most critically, 6 tools accept zero parameters and offer no way to customize behavior, making them low-utility for agent composition.
Display text on the LED name badge.
Fetch Octocats from the Octodex API.
Fetch spells from the Harry Potter API.
Retrieve all characters from the Harry Potter API.
Retrieve characters from a specific Hogwarts house.
Retrieve all Hogwarts staff characters.
Fetch all Hogwarts students from the Harry Potter API.
6 of 8 tools have empty input schemas (required=[], properties={}).
No output schemas documented. LLMs cannot plan downstream tool calls or extract fields without knowing the response structure. Agents must infer output format from JSON stringified responses.
Parameter descriptions missing entirely for get_characters_in_house (house param) and display_text (text param). Both have zero-char descriptions in visible schema.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 39 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 32 | - | v1 |
Get predefined icons from the LED Name Badge API.
No pagination support. Tools like get_all_characters and fetch_octocats return unbounded lists with no limit, offset, or cursor parameters. Large result sets will blow context windows.
Generic error handling. mcpServer.js CallToolRequestSchema handler catches errors and returns only 'API error: {message}' with no guidance on recovery, retryability, or next steps.
Tool descriptions are too short (avg ~55 chars vs 194-char baseline). Descriptions like 'Fetch Octocats from the Octodex API.' lack context on WHEN to use the tool and what it returns. LLMs cannot reliably select tools without complete docstrings.
No tool composition strategy. The 8 tools span unrelated domains (Harry Potter, GitHub Octocats, LED badge). No tool outputs are documented to feed into other tools. Agents cannot chain operations.
Parameters lack type enforcement and constraints. The 'house' parameter in get_characters_in_house accepts any string with no enum constraint or length limits. The 'text' parameter in display_text has no length limit or character restrictions documented.