MCP server that fetches trending articles from Zenn API
Single tool with basic structure but significant quality gaps. Tool name lacks action verb prefix (should be 'get_' or 'fetch_'). Description is present but minimal (Japanese text, ~80 chars). Input schema exists with one parameter, but parameter description is generic ('API endpoint URL'). No output schema documented. No error handling guidance. No parameter constraints or validation hints. Tool does one thing (read-only), but definition quality falls well below production baseline.
Zenn トレンド APIから、記事のタイトルとリンクを抽出して返す。
Tool name does not start with action verb. 'fetch_trending_articles_json' is acceptable but 'get_trending_articles' would be clearer and more conventional. Current name is 18 chars (within baseline p10=10, p90=27) but lacks the verb-noun clarity pattern.
Output schema not documented. Tool returns list[dict] with 'title' and 'link' fields, but LLM has no formal schema to understand structure. Docstring mentions return format in prose, but no JSON Schema provided.
Parameter description is generic ('API endpoint URL'). Does not explain when to use custom URL vs default, what format is expected, or constraints. Baseline: 94% of A+ tools have detailed param descriptions.
No error handling guidance. Tool calls external API (requests.get) with raise_for_status() but provides no recovery hints to LLM. If API is down or returns unexpected JSON, LLM gets raw exception with no actionable next step.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 38 | 2026-07-28+ | v2 |
No input validation or constraints. Parameter 'api_url' accepts any string; no URL format validation, no enum of allowed endpoints, no length limits. LLM could pass malformed URLs or unintended endpoints.