A fake travel assistant backend that provides weather, forecasts, flight search, and destination information. Built as a reference implementation for the MCP workshop.
Four tools with complete schemas and descriptions. Naming follows verb_noun pattern (list_, get_, search_). Descriptions are concise (10-50 chars) and action-oriented. All parameters have types and descriptions. Output schemas are documented via Pydantic models (Weather, ForecastDay, Flight). Input validation is present (city lookup, range checks). However, descriptions are at the lower end of the 10-1024 char baseline (avg 194 chars for A+ tools); some lack context on WHEN to use vs similar tools. Error messages are generic ValueError rather than recovery-guided. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite all being read-only. Composition is clean, each tool has one responsibility.
Get a multi-day weather forecast for a city.
Get today's weather for a city. Only supported destinations work.
List every city this travel service knows about.
Search for flights between two cities.
Descriptions lack WHEN-to-use guidance. 'Get today's weather for a city' does not explain when to call get_weather vs get_forecast, or that only supported destinations work until error.
Error messages are generic ValueError with no recovery guidance. 'Unknown city' error lists known cities, but other errors (e.g. 'origin and destination must be different') do not suggest next steps.
No tool annotations despite all tools being read-only. Adding readOnlyHint=true would signal to agents that these tools are safe to call speculatively without side effects.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 67 | 2025-06-18+ | v2 |
Parameter descriptions use example values ('e.g. Amsterdam', 'e.g. Tokyo'). LLMs may reuse these literally. Replace with enum constraints or format declarations where applicable.
get_forecast 'units' parameter has enum constraint (celsius|fahrenheit) but description does not mention the default or that conversion is automatic.