Skip to main content
Glama
shaiu
by shaiu

rami-levy-mcp

An MCP server that lets an LLM agent shop at Rami Levy (an Israeli supermarket chain): search products, manage a cart, and reorder from purchase history — talking to Rami Levy's real API directly.

The one thing this package does NOT solve

Rami Levy's site is behind Cloudflare, which blocks requests that don't look like they're coming from a real Israeli browser. This package makes the request; getting that request to actually reach Rami Levy's origin without being challenged is your infrastructure's job — a residential/mobile proxy, a VPN, a box that's actually in Israel, whatever gets you there. If rami_levy_check_status reports blocked_by_cloudflare, see the error table below: recapture first, suspect your egress only if a fresh capture still fails.

Related MCP server: Shufersal MCP Server

Requirements

Node >= 22.13. The cart store uses Node's built-in node:sqlite — there is no native addon to compile. Build with:

npm ci && npm run build

What you need to configure

Three required, three optional:

Env var

What it is

RAMI_LEVY_BEARER_TOKEN

The Authorization: Bearer token from a logged-in browser session

RAMI_LEVY_ECOM_TOKEN

A separate JWT, sent as the ecomtoken header

RAMI_LEVY_USER_AGENT

Must match whatever browser the above were captured from

RAMI_LEVY_COOKIE (optional)

The full cookie string. Measured live (2026-09-18) from an Israeli residential IP: neither the orders API (www-api) nor search (www) needed a cookie at all — bearer + ecomtoken + user-agent were enough. It only helps once Cloudflare starts challenging your egress; in that case, include at least cf_clearance.

RAMI_LEVY_STORE (optional)

Store id (default 412)

RAMI_LEVY_DB_PATH (optional)

Where the cart's SQLite file lives (default ./cart.db)

Capturing the bundle: log into rami-levy.co.il in a real browser, go to /he/dashboard/orders, open DevTools → Network, find the request to www-api.rami-levy.co.il/api/v3/site/orders, right-click it → Copy → Copy as cURL, and pull Authorization, ecomtoken, and User-Agent out of the copied headers. That single request carries everything needed — no separate capture of the catalog search is required. Only add RAMI_LEVY_COOKIE if you later see blocked_by_cloudflare and need to supply cf_clearance.

These expire. An expired bearer/ecom session shows up as auth_expired. If you do supply a cookie with cf_clearance, that's a short-lived anti-bot cookie (hours to a few days) and an expired one most likely shows up as blocked_by_cloudflare (a challenge page). Either way, repeat the capture above first.

The 7 tools

  • rami_levy_search_products(query, limit?)

  • rami_levy_add_item(productId, name, price, qty?)

  • rami_levy_view_cart()

  • rami_levy_remove_item(productId)

  • rami_levy_clear_cart()

  • rami_levy_reorder_from_history(numOrders?, minOccurrences?) — adds onto whatever is already in the cart, it does not replace it. A newly reordered product is priced at the last price paid — the price from the most recent order line that carried it — which may differ from today's price. view_cart's total is therefore only an estimate until the cart is synced; serverTotal (returned by every cart-mutating tool) is the authoritative number.

  • rami_levy_check_status() — probes both the catalog search and page 1 of the order history (which needs the logged-in session); returns the first failure, else { ok: true, cartSize }.

Every cart-mutating tool (add_item, remove_item, clear_cart, reorder_from_history) syncs the whole cart to the real account and returns cartTotal (local estimate), itemCount, and serverTotal (Rami Levy's own total from the sync response, null if it gave none). If the sync fails at the transport level (auth_expired, blocked_by_cloudflare, network_error), the local cart is rolled back: ok: false means nothing changed, so retrying is safe.

Errors

Every tool responds with { ok: false, reason, ... } instead of throwing. Reasons and what to do about each:

Reason

When

What to do

auth_expired

A JSON response came back 401/403

Re-capture the token bundle above

blocked_by_cloudflare

The response wasn't JSON, at any HTTP status

Recapture the bundle first (cf_clearance expires). Only if a fresh capture still fails, suspect your egress IP (proxy/VPN/Israeli IP)

network_error

Fetch failed, the body was invalid JSON, the response shape was unexpected, or search ignored the query

Check connectivity; if it persists, the API may have changed (see below)

items_rejected

The cart sync succeeded but the server dropped some products (rejected: [{productId, name}])

They were removed from the local cart too; search for alternatives

not_in_cart

remove_item was called for a product not currently in the cart (nothing was synced)

Check view_cart for the current contents

invalid_args

reorder_from_history's numOrders/minOccurrences were out of bounds

Pass numOrders 1–50 and minOccurrences between 1 and numOrders

internal_error

An unexpected exception was caught at the tool boundary

Inspect the details field; likely a bug worth reporting

Verified against the live API

Search wire format, order response nesting, and the cart sync response were all verified against the real API on 2026-09-18 with fresh logged-in captures from an Israeli IP, and match what the client parses. One thing to know about the cart response: Rami Levy adds its own delivery-fee line to items server-side (e.g. {id, name: "מחיר משלוח", price, quantity}); this tool ignores it (it's never matched to a local cart product), and the top-level price — surfaced as serverTotal — excludes it, so serverTotal is the product total only, not what checkout will actually charge.

Manual smoke test (not part of automated tests — needs a real, live bundle)

RAMI_LEVY_COOKIE is optional (see above) — leave it unset and the Cookie header below is just empty, which the real API accepts fine.

curl -s -X POST "https://www.rami-levy.co.il/api/catalog" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $RAMI_LEVY_BEARER_TOKEN" \
  -H "ecomtoken: $RAMI_LEVY_ECOM_TOKEN" \
  -H "Cookie: $RAMI_LEVY_COOKIE" \
  -H "User-Agent: $RAMI_LEVY_USER_AGENT" \
  -d '{"q":"milk","store":"412"}' | head -c 600

It works only if the response echoes "q":"milk" (not "q":null) and contains product data. A 200 with "q":null means the query was ignored (the wire format is wrong). An HTML body, at any status, is a Cloudflare challenge: recapture the bundle and retry before blaming your egress.

Installing into NanoClaw

This ships as an Agent Plugins 1.0.0 plugin (plugin.json + mcp.json) — copy this directory into a group's plugins/rami-levy/, fill in the real values for the placeholder env vars in that group's stored MCP server config, and restart the group.

Available Tools

7 tools
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.

ParametersJSON Schema
NameRequiredDescriptionDefault
qtyNo
nameYes
priceYes
productIdYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully carries the behavioral burden. It discloses additive qty semantics, immediate sync to the real Rami Levy account, the distinction between local cartTotal and authoritative serverTotal, and the exact meaning of ok:false, transport failure, and items_rejected. No contradiction exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: purpose, input sourcing rule, qty semantics, sync behavior, return values, and error handling. The most important constraint is front-loaded immediately after the purpose statement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, this is unusually complete. It explains side effects (cart sync, product removal on rejection), return values (cartTotal, serverTotal), and failure modes, so an agent has enough information to invoke it correctly and handle outcomes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 0% schema description coverage, the description compensates richly: productId, name, and price are tied to a prior search result, and qty is defined as additive rather than overwriting. This gives the agent more semantic meaning than the raw schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Add a product to the shared cart.' It also distinguishes itself from the search flow by stating inputs must come from a prior rami_levy_search_products result and that no 'get one product' endpoint exists, so an agent can tell it apart from sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: productId, name, and price must come from a prior search result and must never be guessed or re-fetched. It does not explicitly compare itself to alternatives like remove_item or reorder_from_history, but for an add-item operation this is strong enough guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden, and it delivers: it explicitly states the operation is read-only, reveals that two subsystems are probed, acknowledges the order history requires a session, and specifies the failure/fallback return behavior. This is unusually transparent for a tool definition.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, well-structured sentence front-loads the purpose and then packs in the probe targets, return semantics, and read-only guarantee. Every clause earns its place with no redundant wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter diagnostic tool, the description is complete: it states what is checked, what the possible outcomes are, and the read-only nature. Without an output schema, the description still conveys the return shape well enough for an agent to invoke and interpret the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the schema covers 100% of them, so the description need not add parameter detail. The baseline of 4 applies, and the description appropriately focuses on behavior rather than nonexistent inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Check whether') and a clear resource (the Rami Levy connection), and it details exactly what is probed: catalog search and session-authenticated order history. This distinguishes it from sibling tools like view_cart or add_item, which perform concrete shopping operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use case is clear: verify that the Rami Levy connection is working. It does not explicitly list alternative tools or exclusion conditions, but the health-check framing makes it obvious when this tool is appropriate versus the sibling operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses important behavioral traits beyond what annotations provide (no annotations exist). It explains the dual local/server effect, the meaning of ok:false with a transport reason ('nothing changed'), and the items_rejected case where the server refused products and they are removed locally. This is rich, actionable behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each carrying distinct information: the action and scope, the return values and their meaning, and the failure modes with guidance. No filler, no repetition of the name or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with no output schema, the description is complete. It explains the action, the return values, the failure modes, and the recommended follow-up action. An agent can invoke this tool correctly and interpret its result without additional information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema provides no parameter semantics. The description doesn't need to explain parameters, but it does explain the return values (cartTotal, serverTotal, ok, reason), which is the closest analog. Since there are no parameters, the description fully covers what an agent needs to know to invoke it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Empty'), a specific resource ('the cart'), and the scope ('completely, both locally and on the real Rami Levy account'). It clearly distinguishes this from sibling tools like rami_levy_remove_item (which removes a single item) and rami_levy_view_cart (which views).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies when to use this tool: when the user wants to clear the entire cart. It doesn't explicitly name alternatives or exclusions, but the sibling list makes the distinction obvious. It also provides guidance on how to interpret the result and what to do in the items_rejected case ('tell the user and pick alternatives').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
productIdYes

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure scrub and does so thoroughly. It discloses a side-effect beyond the obvious removal: 're-syncs the remaining cart to the real account'. It also explains return semantics (cartTotal vs serverTotal), the meaning of ok:false with a transport reason, and the special items_rejected case including follow-up guidance to 'tell the user and pick alternatives'. This is rich, practical behavior context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no filler. It front-loads the primary action, then explains return valuesholistically, and finally addresses failure semantics. Every sentence adds meaningful, non-redundant information, making the description dense and structured for an agent to quickly parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no annotations or output schema, the description is notably complete: it covers the action, side effects, return fields, failure modes, and a recommended user interaction upon items_rejected. Minor gaps remain, such as how to locate a valid productId or what happens if the product is not already in the cart, but these are secondary to the tool's core behavior and are partially implied by the description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema only defines productId as a required string with minLength 1ley, and schema description coverage is 0%. The description adds some meaning by identifying productId as the identifier of the product to remove, but it does not elaborate further on what format or where the productId comes from. Given the low schema coverage, the description partially compensates but could provide more detail about how to obtain a valid productId.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: remove one product from the cart by productId ('Remove one product from the cart'). It also clarifies the action's scope ('one product'), which distinguishes it from sibling tools like clear_cart and add_item. The follow-up re-sync behavior further defines the tool's responsibility.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies when to use this tool – when a single product must be removed from the cart – but it does not explicitly provide exclusion conditions or point to alternatives. It also does not name sibling tools or explain when another tool (e.g., clear_cart) would be more appropriate. Usage is inferred rather than explicitly guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
numOrdersNo
minOccurrencesNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully carries behavioral disclosure. It explicitly states that items are added to the cart without replacement, explains the meaning of cartTotal vs serverTotal, and details error semantics (transport vs items_rejected, including that rejected items are removed). This is excellent transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: the algorithm, the non-replacing behavior, the output semantics, and the error handling. No redundancy or filler, with the core action front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema or annotations, the description covers the main aspects: input parameters, side effects, return values, and failure modes. It could mention duplicate handling or interaction with existing cart items in more detail, but it is otherwise quite complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, but the description compensates fully by explaining both parameters: numOrders controls the number of past orders examined (default 10, max 50) and minOccurrences sets the frequency threshold (default 3). This adds essential meaning absent from the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly defines the tool's operation: analyzing past orders, finding items meeting a frequency threshold, and adding them to the cart at median quantity. It is easily distinguishable from siblings like add_item (single item) and view_cart (inspection), making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly conveys when to use this tool: when a user wants to reorder frequent items from order history. It does not explicitly name alternatives or state when not to use it, but the context is clear enough that an agent can select it appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that the tool returns productId, name, and price, and that it accesses a 'real catalog' (implying authoritative data). However, it doesn't explicitly state that it's read-only or has no side effects, though this is implied by the search nature. It adds useful context without contradicting anything.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and efficiently organized. It opens with the core action, then lists the return fields, and closes with a crucial usage note. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a search tool with no output schema, the description provides essential information: what is returned (productId, name, price) and when to use it (before add_item). The missing detail of the 'limit' parameter is a minor gap, but since it's in the schema and optional, it doesn't compromise the overall completeness. The description is sufficient for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain the 'limit' parameter at all. The 'query' parameter is obvious from the tool name and description ('Search'), but the description fails to mention that 'limit' constrains the number of results, its range, or its optionality. The description does not compensate for the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: it searches Rami Levy's real catalog and returns productId, name, and price for each hit. It distinguishes itself from siblings like rami_levy_add_item by explicitly noting that a productId is never invented, making it clear this is the source for valid product IDs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit usage guidance: 'Call this before rami_levy_add_item'. This tells the agent when to use this tool, and the phrase 'a productId is never invented' reinforces that this is the only way to obtain a valid productId for adding items. This is clear and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rami_levy_view_cartA

Show everything currently in the cart, with the running total and the checkout URL. Reads local state only — no network call.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and does so well: it explicitly states there is no network call and that it reads local state only, signaling a read-only, side-effect-free operation. It does not discuss edge cases like an empty cart, but for a local view operation the core behavior is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence covers action, output details, and the key local/network behavior. No filler or repetition; every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, no-output-schema view operation, the description is sufficient: it says what is shown (cart items, total, checkout URL) and how it behaves (local, no network). An agent can invoke it correctly without additional context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the schema confirms this, so the baseline is 4. The description needs to explain no parameter semantics, and it doesn't introduce any confusing parameter expectations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and object ('Show everything currently in the cart') and adds the exact outputs (running total, checkout URL). This clearly distinguishes it from sibling mutation/search tools like add_item or search_products.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Reads local state only — no network call' gives clear context for when this lightweight read is appropriate. It doesn't explicitly name exclusions or alternatives, but the sibling names and the phrase 'currently in the cart' make the intended use obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updatesv0.1.0
    • First observedrami_levy_add_item
    • First observedrami_levy_check_status
    • First observedrami_levy_clear_cart
    • First observedrami_levy_remove_item
    • First observedrami_levy_reorder_from_history
    • First observedrami_levy_search_products
    • First observedrami_levy_view_cart

TDQS

A4.5/5.0

Scored across 7 tools

Disambiguation5/5

Each tool maps to a clear, distinct action: searching, viewing, adding, removing, clearing, reordering, and status checking. Even where add_item and reorder_from_history both add to the cart, their purposes are obviously different (single product vs. bulk from order history). check_status overlaps slightly with view_cart by reporting cart size, but its primary role is connection health, which is separate.

Naming Consistency5/5

All tool names share the rami_levy_ prefix and follow the same verb_noun snake_case pattern: view_cart, search_products, add_item, remove_item, clear_cart, reorder_from_history, check_status. This makes the tool surface highly predictable and easy for an agent to navigate.

Tool Count5/5

Seven tools is a well-scoped size for this server's purpose: search a catalog, manage a cart, reorder from history, and verify connectivity. Each tool earns its place with no obvious redundancy or bloat.

Completeness4/5

Core cart lifecycle is covered: search products, view cart, add, remove, clear, reorder, and check status. The main gap is that there is no way to adjust a product's quantity directly (only add-to-existing or remove the whole line), and order history is used internally by reorder_from_history but not exposed for viewing.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers