MCP server for controlling Rohlik.cz grocery shopping website
This server has 17 tools with generally well-defined schemas and descriptions, but several critical gaps limit production readiness. Naming is clear and action-oriented (search_, get_, add_, remove_). All tools have non-empty descriptions (ranging 30-150 chars). Input schemas are present and use proper JSON Schema with types. However: (1) descriptions are somewhat generic and lack WHEN/WHY guidance for LLM tool selection; (2) some parameter descriptions are minimal (e.g., 'The ID of the product to add' for product_id); (3) no documented output schemas, LLMs cannot infer what fields to expect from responses; (4) no error handling guidance or recovery hints; (5) no tool annotations (readOnlyHint/destructiveHint); (6) password parameter exposed in initialization (see security issue below). The server is serviceable for domain-specific grocery shopping automation, but falls short of production-grade agent tooling standards. Average per-tool score: 58/100.
Add products to the shopping cart
Get comprehensive account information including delivery details, orders, announcements, cart, and more
Get current announcements and notifications from Rohlik
Get the current contents of the shopping cart
Get current delivery information and available time slots
Get available delivery time slots for your address
No documented output/response schemas. LLMs cannot infer what fields to expect from tool responses, forcing them to guess at downstream parameter bindings and causing chaining failures.
Generic, short descriptions lacking WHEN/WHY guidance. Descriptions like 'Get your shopping lists from Rohlik.cz' (55 chars) do not explain when the LLM should call this vs related tools (get_account_data also returns shopping data). Descriptions should be 50-200 chars and include decision guidance.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 67 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 36 | - | v1 |
Analyze your order history to find the most frequently purchased items
Get smart shopping suggestions for specific meal types (breakfast, lunch, dinner, etc.) based on your purchase history
Get comprehensive detailed information about a specific order by its ID, including all available data fields
Get your past delivered orders
Get information about your Rohlik Premium subscription
Get information about your reusable bags and environmental impact
Get your shopping lists from Rohlik.cz
Get predefined shopping scenarios for common shopping needs
Get information about your upcoming orders
Remove an item from the shopping cart
Search for products on Rohlik.cz by name
No tool annotations. Tools like add_to_cart and remove_from_cart lack destructiveHint annotations. Tools like get_order_history lack readOnlyHint annotations. This prevents agents from reasoning about idempotency, reversibility, and retry safety.
No error handling or recovery guidance. Tool handlers lack try-catch blocks with actionable error messages. When a product is not found or a cart operation fails, the LLM receives no guidance on what to do next (retry, call search_products, ask user, etc.).
Credentials passed as environment variables but validated at runtime in getCredentials(). If missing, server crashes. No graceful error message or hint to set ROHLIK_USERNAME and ROHLIK_PASSWORD. Production servers should fail fast with clear guidance.
Limited parameter validation and description. E.g., 'limit' parameter in search_products has description 'Maximum number of results to return' but no min/max bounds. 'orders_to_analyze' in get_frequent_items does have bounds (1-20) but many other numeric params lack explicit constraints in descriptions.
No pagination support documented. Tools returning lists (search_products, get_order_history, get_frequent_items) should accept offset/limit or cursor parameters and return total_count. If large result sets are possible, they will exhaust context windows.
No tool composition guidance. Multiple tools query overlapping data (get_account_data, get_cart_content, get_shopping_lists). Descriptions do not clarify which tool is lightest-weight or when to prefer one over the other.