California Culinary MCP Server - provides tools to search and recommend restaurants across California with structured data, vibe-based recommendations, and user reviews
Three tools with basic schemas and descriptions, but significant gaps in parameter documentation and error guidance. All tools have descriptions (10-100 chars baseline met), but descriptions lack actionable context for LLM selection. Input schemas present but minimal, only restaurant_name and vibe parameters, no enums, ranges, or format constraints. No output schemas documented. Error responses return JSON status objects but lack recovery guidance ('Try a partial name' is a start, but incomplete). No tool annotations (readOnlyHint, idempotentHint). Tools are read-only and well-scoped (single responsibility), but descriptions don't explain WHEN to use each tool vs. alternatives or what downstream data is available.
Search for a restaurant by name and return its structured details including cuisine, rating, price range, and signature dish.
Retrieve the full review for a restaurant.
Find restaurants that match a given vibe or atmosphere keyword. Searches both structured vibe tags and raw text descriptions. Examples of vibe keywords: "moody", "sun-drenched", "romantic", etc.
No output schemas documented. LLMs cannot predict response structure (fields, types, nesting) and must infer from examples. Increases hallucination risk and wastes tokens on parsing.
Parameter descriptions lack format/constraint details. 'restaurant_name' and 'vibe' accept free-form strings with no guidance on case sensitivity, partial matching, or valid ranges. LLMs may pass invalid values.
Tool descriptions do not explain WHEN to use each tool or how they differ. 'get_restaurant_info' vs 'recommend_by_vibe' distinction is unclear, when should an LLM pick one over the other? Descriptions lack selection context.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 46 | <=2025-11-25 | v2 |
Error responses lack recovery guidance. 'No restaurant found' returns a suggestion to 'Try a partial name', but this is inconsistent and not actionable for all error cases. No categorization of retryable vs. fatal errors.
No tool annotations (readOnlyHint, idempotentHint). All three tools are read-only and idempotent, but this is not declared in the schema. LLMs cannot optimize retry logic or understand safety guarantees.