Python library, CLI, TUI, and MCP server for discovering Japanese restaurants on Tabelog
Gurume demonstrates solid tool design with comprehensive descriptions, well-structured parameters, and clear schemas. All 5 tools are explicitly registered with detailed docstrings that guide multi-step workflows. Parameter typing is complete with enums (SortOption), constraints (minLength, pattern, min/max), and nullable types properly declared. Output schemas are documented via Pydantic models. The server excels at composition, tools are single-purpose and chained logically (suggestion tools feed into search tools). Key strengths: detailed descriptions explaining WHEN and HOW to use tools, parameter inter-dependencies documented, pagination metadata returned. Weaknesses: error handling lacks recovery guidance (tools don't explain what to do when validation fails), no explicit error messages or fallback suggestions in tool bodies visible, security considerations not documented (API keys/tokens not discussed), and no evidence of input sanitization for web scraping context (Tabelog URL validation in detail tool is minimal).
Get Tabelog area suggestions for a user query (e.g., prefecture, city, station names). Validates the user's area input against known Tabelog geography (AddressMaster, RailroadStation, etc.) and returns ranked suggestions with coordinates and unique identifiers. Recommended use: 1. User provides a vague or ambiguous area name. 2. Call this tool with the raw user input. 3. Present suggestions to the user or pick the best-ranked match. 4. Pass the matched suggestion's `name` field to `tabelog_search_restaurants(area=...)` or to this tool again for further disambiguation.
Get Tabelog keyword suggestions for a user query (e.g., cuisine name, restaurant name, or free-text). Validates the user's keyword input against known Tabelog cuisines (Genre2), restaurant names, and free-text patterns, returning ranked suggestions. Recommended use: 1. User provides a cuisine name or restaurant keyword. 2. Call this tool with the raw user input. 3. If the top suggestion has datatype 'Genre2', pass its `name` field to `tabelog_search_restaurants(cuisine=...)`. 4. Otherwise, pass the suggestion's `name` field to `tabelog_search_restaurants(keyword=...)`.
Fetch detailed information about a specific restaurant from its Tabelog page. Scrapes the restaurant detail page for comprehensive metadata including address, phone, business hours, reviews, menu items, courses, and reservation information. Recommended use: 1. Obtain a restaurant URL from `tabelog_search_restaurants` results. 2. Call this tool with the restaurant's Tabelog URL. 3. Parse the returned structured data for display or analysis.
Error handling lacks recovery guidance. Tools do not explain what to do when validation fails, cuisine not found, or page bounds exceeded. Errors should state the constraint violated and suggest corrective action (e.g., 'Invalid cuisine. Use tabelog_list_cuisines() to see supported types.').
No explicit input sanitization or validation messaging visible for web scraping context. The detail tool accepts restaurant_url but does not document URL format constraints, validation failures, or handling of malformed/phishing URLs. Given the scraping nature, URL whitelisting and validation should be explicit.
tabelog_list_cuisines has empty input schema ({}). While this is technically valid, the tool should document what it returns (e.g., 'Returns a CuisineListOutput with all supported Japanese and international cuisine types recognized by Tabelog') so LLMs know what to expect.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 76 | 2026-07-28+ | v2 |
List all supported cuisine types for use in `tabelog_search_restaurants(cuisine=...)`. Returns the complete set of Japanese and international cuisine names recognized by Tabelog. Use this to validate cuisine names before passing them to the search tool.
Search Tabelog restaurants with validated filters and pagination metadata. Recommended workflow: 1. Validate ambiguous areas with `tabelog_get_area_suggestions`. 2. Validate cuisines or names with `tabelog_get_keyword_suggestions`. 3. Search using the normalized area and cuisine values. 4. Use `page` together with the returned `meta.has_next_page` and `has_more` fields to fetch later pages. Returns a structured envelope with restaurants, applied filters, pagination metadata, and non-fatal warnings that help the caller refine follow-up tool calls.
Parameter inter-dependencies are documented in prose (reservation_date must be used with reservation_time) but not formally declared. JSON Schema could use 'dependentRequired' to enforce this at schema level, preventing LLMs from accidentally passing only one.
No evidence of security considerations for API key / credential handling. If Tabelog requires authentication, the server should document server-side secret injection and never expose keys as parameters.