MCP server for Cantonese dictionary (yyzd - 開放粵語字典)
The server defines 6 tools with consistent naming and clear descriptions. Tool names follow verb-noun pattern (lookup_*, search_*), which is strong. All tools have descriptions (194-char baseline met). Input schemas are present for all tools with Zod validation and parameter descriptions. However, there are critical gaps: (1) Output schemas are NOT documented, the code returns text wrapped in content arrays, but no schema is declared for clients to understand the structure; (2) Parameter descriptions lack constraint details (e.g., tone 1-6 is validated in code but not explained in the description text itself); (3) No error handling guidance, tools return plain text messages on failure with no actionable recovery hints; (4) The tool set is narrow and domain-specific, missing composition patterns (e.g., no batch lookup, no phrase-character decomposition); (5) Response limiting (maxResults=20) is implemented but not documented in tool descriptions. These gaps push the server into the 'Fair' (C) to 'Good' (B-) range despite solid naming and basic structure.
Get statistics about the Cantonese dictionary.
Look up a Chinese character in the Cantonese dictionary. Returns pronunciation (Jyutping), definition, and examples.
Look up pronunciation for each character in a phrase or sentence.
Search for characters by their Cantonese pronunciation (Jyutping). For example, 'gong2' for 講.
Find all characters with a specific Cantonese tone (1-6).
Search for characters by keywords in their definition (in Chinese).
No documented output schemas. All tools return text in a content array, but clients cannot discover or validate the response structure. Per the rubric baseline, 100% of A+ tools have documented return types.
Error messages lack actionable recovery guidance. When no entries are found, tools return 'No entries found for X' with no suggestion for next steps (e.g., 'Try a partial search' or 'Use search_by_jyutping for pronunciation'). Per pattern, errors must guide the LLM to the next action.
Result limiting (20 items max) is implemented but not documented in tool descriptions. LLMs are unaware that results are capped and may misinterpret 'only 20 results shown' as a complete set. Descriptions should state: 'Returns up to 20 results; use pagination or refine your query for more.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2026-07-28+ | v2 |
Parameter 'tone' has min/max constraints (1-6) enforced in Zod schema, but the description does not state the constraint explicitly.
dictionary_stats tool has minimal description ('Get statistics about the Cantonese dictionary') and no documented output fields. The LLM cannot predict what statistics are returned (count? metadata? coverage?).
No dependency hints in descriptions. For example, lookup_character could document: 'If you have pronunciation but not the character, try search_by_jyutping first.' This guides multi-step planning and reduces wasted calls.