MCP server for searching grocery products and stores across Finnish grocery chains: K-Ruoka, S-Kaupat, and Alko
Two tools are registered with schemas and descriptions. Both tool names follow verb_noun convention (get_stores, search_products). Descriptions are present and moderately detailed (102-180 chars, within baseline range). Input schemas use proper JSON Schema with type definitions and constraints. However, output schemas are not documented in the source code provided, which is a critical gap. Parameter descriptions are present and reasonably detailed. The tools demonstrate good parameter constraint use (enums, min/max values), but lack error handling guidance and do not declare output structure or field mappings for downstream tool chaining. No tool annotations (readOnlyHint/destructiveHint/idempotentHint) are present.
List stores from K-Ruoka (k-ruoka.fi), S-Kaupat (s-kaupat.fi), and Alko (alko.fi). Returns store IDs and chain values needed for search_products.
Search for products. Supports K-Ruoka (k-ruoka.fi), S-Kaupat (s-kaupat.fi), and Alko (alko.fi). Requires chain from get_stores. storeId is required for K-Ruoka and S-Kaupat, optional for Alko (national catalog).
Output schemas not documented. The tools return data but the source code does not show what fields are returned or their types. LLMs cannot plan downstream calls or extract the right data without knowing the response structure.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Both tools are read-only, which should be declared via schema annotations for clarity and agent behavior guidance.
No error recovery guidance. Descriptions do not explain what LLMs should do if a tool call fails (e.g., if a store ID is invalid, or no products match the query).
Parameter 'limit' in search_products uses a default of 10 but cap is 50. The description mentions the max but does not explain why there is a limit or what happens if the user requests more results.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | <=2025-11-25 | v2 |
Dependency documentation is implicit. The search_products description states 'Requires chain from get_stores' but does not explain whether the storeId returned by get_stores can be directly passed to search_products, or if any transformation is needed.