A Spring Boot-based MCP server that provides weather information for cities using Open-Meteo APIs
Single tool with basic schema and minimal description. Tool name follows verb_noun pattern (get_current_weather), but description is only 44 characters in Indonesian, below the 50-200 char LLM-optimized range. Input schema is present with proper JSON Schema structure and city parameter has a description. However, no output schema is documented, and error handling provides generic messages without recovery guidance. Missing parameter constraints (e.g., city name format, length limits). No tool annotations for read-only nature despite being declared READ_ONLY in metadata.
Ambil cuaca terkini untuk sebuah kota
Description too short and in Indonesian. 'Ambil cuaca terkini untuk sebuah kota' (44 chars) lacks context for LLM selection. Should be 50-200 chars in English, explaining WHAT (fetches current weather), WHEN (when user asks about weather), and WHAT IT RETURNS (temperature, conditions, etc.).
No output schema documented. LLMs cannot plan downstream calls or extract fields without knowing the response structure. Must document return type: e.g., {temperature: number, condition: string, humidity: number, city: string}.
Missing parameter constraints. 'city' parameter has no length limits, format validation, or examples of valid input. Should specify: 'City name (1-100 chars, e.g., Jakarta, New York). Supports English and local names.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 46 | 2026-07-28+ | v2 |
Error messages are generic and non-actionable. 'Gagal mengambil data cuaca: <exception>' gives LLM no recovery path. Should categorize: 'City not found, try search_cities() first' (user-fixable) vs 'API timeout, retry in 30s' (retryable).
Tool marked READ_ONLY in metadata but no readOnlyHint annotation in schema. Current MCP spec (2026-07-28) supports tool annotations (readOnlyHint, destructiveHint, idempotentHint) to help clients optimize caching and retry logic.