alko-mcp is a domain-specific service for Finnish alcohol products. Tool definitions are present with descriptions and schemas, but quality is inconsistent. Most tools have reasonable descriptions (100-200 chars) and structured input parameters with type hints. However, several critical gaps exist: (1) output schemas are not explicitly documented, responses are inferred from code structure rather than declared in tool registration; (2) error handling descriptions are absent, tools do not explain failure modes or recovery paths; (3) parameter relationships and constraints are incompletely documented; (4) some parameter descriptions lack actionable detail (e.g., 'City filter' vs 'City name (e.g., Helsinki, Turku, Tampere)')). The server leverages Zod validation and Firestore/Playwright integration, suggesting robust backend logic, but the tool interface itself needs polish for LLM reliability. Scoring reflects solid foundational structure with notable gaps in completeness.
Check real-time product availability at Alko stores. Returns store names with stock quantities. Filter by city. Scrapes alko.fi for live data.
Retrieve detailed product info by Alko product ID. Optional: includeEnrichedData=true adds taste profile, food pairings, serving tips (slower, scrapes alko.fi).
Get personalized product recommendations. Specify occasion, food pairing (uses Alko official pairing data), price range, or preferences (organic, vegan). Supports 33 food categories.
Get Alko store opening hours for today and tomorrow. Filter by store name, city, or openNow=true for currently open stores. Auto-refreshes stale data.
Check database health: product count, last sync timestamp, sync status. Use to verify data freshness before searches.
Look up wine ratings from Vivino.com. Search by wine name/winery or provide direct URL. Returns: average rating (1-5 stars), rating count, wine details. Results are cached.
Output schemas not documented. Response structures inferred from code, not declared in tool metadata. LLMs cannot reliably predict what fields to extract or how to chain tools.
Error handling and recovery guidance missing. No tool describes failure modes (e.g., scraping timeout, product not found, empty results) or suggests recovery actions (retry, call discovery tool, adjust filters).
Parameter constraints underspecified. Enums for categorical parameters (foodPairing, occasion, preferences, sync status, store hours format) are not declared. LLMs may hallucinate invalid values.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 57 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 11 | - | v1 |
List all ~360 Alko stores in Finland. Filter by city name. Returns: store id, name, address, city, postal code.
Search Finnish Alko alcohol catalog (~12,000 products). Filter by name, type, country, price, alcohol%. Returns: id, name, price, type, country, alcohol%, producer.
Admin: Download latest Alko price list and update product database. Takes 2-5 minutes. Updates ~12,000 products. Use get_sync_status to check progress.
Parameter relationships undocumented. 'get_availability' and 'list_stores' have ambiguous filters (city vs name); 'get_vivino_rating' has unclear mutual exclusivity (wineName+winery vs vivinoUrl); 'get_store_hours' has optional multiple filters with no clarification on AND/OR logic.
Pagination and result limits not declared. 'search_products' accepts limit and offset but no guidance on max limit, default limit, or total count semantics. Risk of context window exhaustion if agent requests large result sets.
Permission gates not documented. 'sync_products' is marked 'Admin' but no description of permission checks or error handling if called by unauthorized agent.
Data format ambiguities. Timestamp formats not specified (ISO 8601 vs epoch?). Price currency not stated (EUR assumed but not explicit). Alcohol percentage precision unclear (0.5% vs 0.50% vs integer?).