A DIY MCP server that provides tools to query a coffee shop menu and resources to access the menu data
This server has two tools with minimal definitions. Both tools have extremely short descriptions (under 20 chars for getDrinkNames, 27 chars for getDrinkInfo), no parameter descriptions, and no documented output schemas. Input schemas are present but lack description metadata. The tool names are adequate (verb-noun style: getDrinkNames, getDrinkInfo) but descriptions fail to explain WHEN to use each tool or WHAT to expect in the response. No error handling guidance, no pagination despite returning lists, and no output schema documentation. This is typical of a DIY/educational server and would not pass code review for production use.
Get more info about the drink
Get the names of the drinks in the shop
Tool descriptions critically short and uninformative. 'Get the names of the drinks in the shop' (44 chars) and 'Get more info about the drink' (29 chars) lack context for LLM selection. No description explains WHEN to call getDrinkInfo vs getDrinkNames, what fields are returned, or whether results are paginated.
No parameter descriptions. getDrinkInfo accepts 'name' parameter but provides no description explaining format expectations (exact match vs substring?), whether to match case-sensitively, or what happens if the drink is not found.
No output schema documented. Response is embedded in a 'content' array with 'type: text' and JSON string payload. LLMs cannot plan downstream operations without knowing the response structure (e.g., whether 'names' is an array of strings or objects, what fields are in drink info).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 38 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 35 | 2025-03-26+ | v1 |
getDrinkInfo error handling returns raw JSON error object ('error: Drink not found') nested in text content. No actionable recovery guidance. LLM cannot distinguish success from failure or know what to do if a drink is not found.
No input validation or constraints. getDrinkInfo accepts 'name' as any string; no validation that name is non-empty, and no guidance on case sensitivity or exact-match vs fuzzy matching.