MCP server: real-time fuel prices at 14,000+ gas stations in Germany (Tankerkönig)
Two tools with clear, concise descriptions and properly typed input schemas. Naming follows verb_noun convention (find_fuel, find_fuel_at). However, output is unstructured plain text rather than structured JSON, limiting downstream tool chaining. Error handling returns human-readable strings but lacks actionable recovery guidance. No parameter validation constraints (enums for fuel_type, min/max for radius_km) are declared in schemas. Missing output schema documentation.
Find the cheapest gas stations near a location in Germany (real-time MTS-K data).
Same as find_fuel, but by exact GPS coordinates.
Output is unstructured plain text (string return type) instead of structured JSON. Prevents LLM from extracting station data for downstream operations (e.g., filtering by price, distance, or brand). Violates pattern:response-shaper.
fuel_type parameter lacks enum constraint in schema. Description mentions 'e5, e10, diesel' but schema does not enforce these values. LLM may pass invalid fuel types, causing runtime errors.
radius_km parameter lacks min/max bounds in schema. Description states '1 - 25 km' but schema does not declare minimum or maximum. LLM may pass out-of-range values; code silently clamps them, hiding the constraint from the agent.
No output schema documented. LLM cannot predict the structure of returned station data (fields, types, nesting). Limits ability to chain results into downstream operations.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | <=2025-11-25 | v2 |
Error messages are human-readable but lack actionable recovery guidance. E.g., 'Geocoding service is unavailable' does not tell LLM whether to retry, ask user, or try alternative tool. Violates pattern:recovery-guide.