rami-levy-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| RAMI_LEVY_STORE | No | Store id (default 412) | 412 |
| RAMI_LEVY_COOKIE | No | The full cookie string (optional). Only needed when Cloudflare starts challenging your egress; include at least cf_clearance. | |
| RAMI_LEVY_DB_PATH | No | Where the cart's SQLite file lives (default ./cart.db) | ./cart.db |
| RAMI_LEVY_ECOM_TOKEN | Yes | A separate JWT, sent as the ecomtoken header | |
| RAMI_LEVY_USER_AGENT | Yes | Must match whatever browser the above were captured from | |
| RAMI_LEVY_BEARER_TOKEN | Yes | The Authorization: Bearer token from a logged-in browser session |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| rami_levy_search_productsA | Search Rami Levy's real catalog. Returns productId, name, price for each hit. Call this before rami_levy_add_item — a productId is never invented. |
| rami_levy_add_itemA | Add a product to the shared cart. productId, name, and price all come from a prior rami_levy_search_products result — never guessed, and never re-fetched (there is no "get one product" endpoint). If this product is already in the cart, qty is ADDED to what's there, not overwritten. Syncs the whole cart to the real Rami Levy account immediately. Returns cartTotal (local estimate) and serverTotal (Rami Levy's own total — authoritative). ok:false with a transport reason means nothing changed. reason items_rejected means the server refused the listed products; they have been removed from the cart too, so tell the user and pick alternatives. If resetAfterOrder {orderId, createdAt} is present, an order was placed since the last sync, so the items from before it were treated as bought and cleared first; tell the user the cart started fresh after that order. |
| rami_levy_view_cartA | Show this tool's own list of what it has put in the cart since the last checkout, with a running total and the checkout URL. This is NOT a read of the Rami Levy website cart: the API has no way to read the cart back, so anything added, removed or emptied on the website is not visible here (see |
| rami_levy_remove_itemA | Remove one product from the cart by productId, then re-syncs the remaining cart to the real account. Returns cartTotal (local estimate) and serverTotal (Rami Levy's own total — authoritative). ok:false with a transport reason means nothing changed. reason items_rejected means the server refused the listed products; they have been removed from the cart too, so tell the user and pick alternatives. If resetAfterOrder {orderId, createdAt} is present, an order was placed since the last sync, so the items from before it were treated as bought and cleared first; tell the user the cart started fresh after that order. |
| rami_levy_clear_cartA | Empty the cart completely, both locally and on the real Rami Levy account. Returns cartTotal (local estimate) and serverTotal (Rami Levy's own total — authoritative). ok:false with a transport reason means nothing changed. reason items_rejected means the server refused the listed products; they have been removed from the cart too, so tell the user and pick alternatives. If resetAfterOrder {orderId, createdAt} is present, an order was placed since the last sync, so the items from before it were treated as bought and cleared first; tell the user the cart started fresh after that order. |
| rami_levy_reorder_from_historyA | Look at the last numOrders (default 10, max 50) real orders, find items that appear in at least minOccurrences (default 3) of them, and add each at its median past quantity. ADDS onto whatever is already in the cart — it does not replace it. Returns cartTotal (local estimate) and serverTotal (Rami Levy's own total — authoritative). ok:false with a transport reason means nothing changed. reason items_rejected means the server refused the listed products; they have been removed from the cart too, so tell the user and pick alternatives. If resetAfterOrder {orderId, createdAt} is present, an order was placed since the last sync, so the items from before it were treated as bought and cleared first; tell the user the cart started fresh after that order. |
| rami_levy_check_statusA | Check whether the Rami Levy connection is working: probes the catalog search and the (session-authenticated) order history, returning the first failure if either fails, else the current cart size. Read-only. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 7 tools
Each tool targets a distinct operation: searching, adding, removing, clearing, viewing the local cart, checking connectivity, and reordering from history. The only possible overlap is check_status returning cart size, but it is clearly framed as a health check, not a cart read.
All tools follow a consistent rami_levy_<verb>_<noun> pattern, e.g. search_products, add_item, remove_item, clear_cart. The naming convention is uniform and predictable across the entire set.
Seven tools is well-scoped for a grocery cart integration: search, add, remove, clear, view, status, and reorder each earn their place. There is no redundancy or bloat.
The cart lifecycle is well covered with search, add, remove, clear, local view, and reorder-from-history. Minor gaps like no direct order-history listing and no quantity-update operation are workarounds but do not break core workflows.