Skip to main content
Glama

Server Details

Israeli online supermarket pricing: the cheapest delivered basket for a shopping list and address.

Status
Healthy
Last Tested
Transport
Streamable HTTP
URL
Server Listing
super-mcp

Glama MCP Gateway

Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.

MCP client
Glama
MCP server

Full call logging

Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.

Tool access control

Enable or disable individual tools per connector, so you decide what your agents can and cannot do.

Managed credentials

Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.

Usage analytics

See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.

100% free. Your data is private.
Tool DescriptionsA

Average 4.6/5 across 8 of 8 tools scored.

Server CoherenceA
Disambiguation5/5

Each tool targets a distinct action: retrieving a single storefront's terms, a product's full detail, promotions, a cheap filter for who delivers, a whole-basket optimizer, a product search, an order splitter, and a correction tool for mis-priced items. The descriptions explicitly cross-reference each other to prevent misuse (e.g., list_delivery_options vs optimize_delivery, and get_product vs search_products). No two tools appear to serve the same purpose.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case: get_delivery_terms, get_product, get_promotions, list_delivery_options, optimize_delivery, search_products, split_order, suggest_similar_products. The verbs (get, list, search, optimize, split, suggest) match the action's specificity, and the nouns clearly indicate the object. There is no mixing of conventions.

Tool Count5/5

With 8 tools, the set is well-scoped for an online supermarket comparison and planning server. Each tool earns its place: search and detail for products, a lightweight delivery-option lookup, a full-basket optimizer, promotions, splitting, and a correction aid. The number is neither thin nor bloated for the domain.

Completeness4/5

The surface covers the core workflows: searching and identifying products, checking delivery options, pricing a full basket with optimizations, splitting orders, and recovering from mis-priced items. A minor gap is the absence of a direct tool to list all storefronts for a chain or to compare specific products across chains without a full basket, but the existing tools (search_products with fromPrice, optimize_delivery's lines detail) can work around this. Overall, no major dead ends.

Available Tools

8 tools
get_delivery_termsGet one storefront's delivery termsA
Read-only
Inspect

The full published terms for a single online storefront: every fee band over basket size, the minimum order, the service area, and where each figure came from. Use to explain a deliveryFee an optimize_delivery plan reported, or to answer 'what do I need to spend for free delivery?'. Take the slug from a plan's serviceSlug. catalogSize and catalogVisibility are reported here only when already known: this tool answers from published terms and never waits on the item count. A null in either means one of two things, and they are not interchangeable: we hold no priced store for this storefront, OR the count has not been taken yet. Call list_delivery_options for a count you can rely on being present; never read a null here as an empty shop.

ParametersJSON Schema
NameRequiredDescriptionDefault
service_slugYesStorefront slug, e.g. 'shufersal-online' — from a plan's serviceSlug.
Behavior5/5

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

Annotations are readOnlyHint=true and openWorldHint=true, but the description adds critical behavioral context: catalogSize/catalogVisibility are 'reported here only when already known' and 'never waits on the item count'. It explains null semantics and that they are not interchangeable, and warns against misinterpreting null. No contradiction with annotations.

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

Conciseness4/5

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

The description is 5 sentences, front-loaded with what the tool returns and key use cases. It is content-rich without being verbose. Minor improvement could be combining the last two sentences about null handling, but overall it's well-structured and efficient.

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?

Without an output schema, the description covers all expected return fields (fee bands, minimum order, service area, provenance) and explains edge cases (null values for catalogSize/catalogVisibility). It also references a sibling tool for when a reliable count is needed. This is complete for an AI agent to understand and use the tool correctly.

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?

Only one parameter (service_slug) with 100% schema coverage. The description adds extra context: 'Take the slug from a plan's serviceSlug' and provides an example ('shufersal-online'). This gives the agent explicit guidance on how to source the parameter value, going beyond the schema's description.

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?

Description clearly states the tool returns 'full published terms for a single online storefront' including specific details (fee bands, minimum order, service area, provenance). It distinguishes from siblings by specifying it's for a single storefront and gives example use cases like explaining a deliveryFee from optimize_delivery. The name is also clear.

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?

Explicit guidance: 'Use to explain a deliveryFee an optimize_delivery plan reported, or to answer what do I need to spend for free delivery?' It also tells when not to use it (e.g., never read a null as an empty shop) and directs to list_delivery_options for a reliable count. This clearly differentiates from siblings.

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

get_productGet productA
Read-only
Inspect

Fetch full detail for one canonical product by product_id (UUID) or GTIN barcode, including every per-chain listing (chain-specific item code, display name, and package size). Use after search_products to confirm identity, or directly when the GTIN is already known. Each listing carries orderable: false means no delivery or pickup storefront prices it, so it cannot be bought through this API. A listing is catalogue identity, not availability: never present an orderable: false chain as somewhere the shopper can buy. When every listing is orderable: false the product is not purchasable right now, whatever its chains suggest.

ParametersJSON Schema
NameRequiredDescriptionDefault
gtinNoGTIN/barcode, used only if product_id is omitted.
product_idNoCanonical product UUID.
Behavior5/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true. The description adds significant value by explaining the semantics of 'orderable: false', clarifying that it means no storefront prices and that the product cannot be bought through this API. It also warns against misrepresenting catalogue identity as availability. No contradiction with annotations.

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 earning its place. The first sentence states the purpose and scope, the second gives usage guidance, and the third explains a critical behavioral nuance. No fluff or repetition.

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?

Given the complexity (two parameters, no output schema), the description adequately covers the return structure by mentioning 'chain-specific item code, display name, and package size' and the orderable flag. However, it does not explicitly describe the top-level product fields (e.g., id, gtin) or the overall shape of the response. Slightly incomplete for a fully self-contained 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?

Schema description coverage is 100%, so baseline is 3. The description adds 'by product_id (UUID) or GTIN barcode', but the schema already describes each parameter with similar clarity (e.g., gtin: 'GTIN/barcode, used only if product_id is omitted'). The description does not add meaningful new semantics beyond 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 states 'Fetch full detail for one canonical product by product_id (UUID) or GTIN barcode, including every per-chain listing.' This is a specific verb-resource combination that distinguishes it from sibling tools like 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 Guidelines5/5

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

Explicit guidance: 'Use after search_products to confirm identity, or directly when the GTIN is already known.' It also provides clear instructions on interpreting orderable: false, telling the agent when not to present a chain as purchasable.

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

get_promotionsGet promotionsA
Read-only
Inspect

List promotions (e.g. '2 for 30₪', club-member price, second-unit discount), optionally filtered by store_id or product_id, and by active=true to only return promotions currently running. Use this to explain why an optimize_delivery line price is lower than list_price.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNoCity name in Hebrew or English (also accepts CBS locality codes). Restricts to promotions at stores in that city plus chain-wide promotions of chains present there.
limitNoMax promotions to return, ordered by soonest end date. Defaults to 50, max 200.
activeNoIf true, only currently-active promotions. Defaults to true.
store_idNoFilter to promotions at this store.
product_idNoFilter to promotions covering this canonical product.
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the description's main behavioral addition is the clarity that the active filter defaults to true and why active=true is useful. The description also specifies ordering by 'soonest end date,' which adds useful behavioral context beyond annotations. While it could mention rate limits or data freshness, the core traits are well-covered.

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 two concise sentences with zero redundant words. It front-loads the core action and examples, then adds the critical usage guidance. Every sentence serves a distinct purpose.

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?

Given the tool has no output schema, the description compensates somewhat by explaining the promotional examples and ordering. However, it doesn't clearly state that the response includes fields like promotion type, discount amount, or validity period. For a tool with 5 optional parameters and moderate complexity, slightly more detail on what the response contains would be helpful. Still, for a read-only filtered list tool, it is largely complete.

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?

Schema description coverage is 100%, so the baseline is 3. The description adds a usage hint linking to optimize_delivery and shows how to use active=true, but it doesn't add syntax, format, or example values beyond what the schema already provides for each parameter. The description doesn't compensate further; thus, a 3 is warranted.

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 a specific verb ('List') and resource ('promotions'), provides concrete examples of what a promotion looks like ('2 for 30₪', club-member price, second-unit discount), and explains filtering options. This effectively distinguishes the tool from siblings like get_product or search_products, which deal with different resources.

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?

The description explicitly tells when to use this tool: 'to explain why an optimize_delivery line price is lower than list_price.' This directly connects it to a sibling tool (optimize_delivery) and provides clear context for invocation. No other sibling seems to serve this purpose, making the guidance highly effective.

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

list_delivery_optionsList storefronts that deliver hereA
Read-only
Inspect

Which Israeli online supermarkets deliver to an address, with each one's delivery fee, minimum order, free-delivery threshold and whether it offers click-and-collect — without pricing a basket. Use for 'who delivers to me?'. For 'what will my shopping cost delivered?', use optimize_delivery instead. Every entry carries deliveryTerms.confidence and verifiedAt; quote a fee only when it is verified or reported, and say the fee is unknown otherwise. Every entry also carries catalogSize (priced items we hold) and catalogVisibility. catalogVisibility 'partial_index' means WE cannot see the whole shop: that storefront's prices are read off a website that cannot be paged, so catalogSize is the part we indexed and says nothing about how much the retailer stocks. 'full_catalogue' means the count is the retailer's complete published price file. Never recommend a storefront on its delivery fee alone: one where we hold a few hundred items cannot fill a normal basket, so price the basket with optimize_delivery before naming a winner. An entry carrying notesRef instead of notes shares its terms with other storefronts: read the text from sharedNotes[notesRef]. Marketplace terms are written once per chain and held per venue, so they would otherwise repeat verbatim on every branch.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNoCity name in Hebrew or English. Enough for chains that publish a settlement list, not enough for a storefront whose area is a polygon or a depot radius.
nearNo'lat,lng' string, e.g. '32.078,34.774'. Do not combine with address.
chainNoFilter to one chain, by its name as it appears in chainName (שופרסל) or by its legal barcode id. A value matching neither returns no options, which is not the same answer as nobody delivering here: omit it to see every storefront.
addressNoDelivery address in Israel, free text, e.g. 'מנדלסון 1, תל אביב'. Preferred: some storefronts publish a service area that only a street address can be tested against.
include_unavailableNoAlso return storefronts that do NOT serve this address, each with a reason. Useful for explaining why a well-known chain is missing.
Behavior5/5

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

The annotations already declare readOnly and openWorld hints, but the description adds significant behavioral context beyond that. It explains that the tool does not price a basket, describes the meaning of catalogVisibility and confidence fields, and cautions against recommending based solely on delivery fees. This provides deep transparency about the tool's behavior and limitations, going well beyond the annotations.

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

Conciseness3/5

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

The description is verbose and somewhat redundant. It repeats the pattern for catalogSize, notesRef, and includes the full parameter descriptions again. While each part adds some value, the repetition with the schema and the long-winded explanations (e.g., 'one where we hold a few hundred items cannot fill a normal basket') make it less concise than necessary.

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?

Since there is no output schema, the description compensates by explaining what each returned entry contains (deliveryTerms.confidence, verifiedAt, catalogSize, catalogVisibility) and what those fields mean. It also covers edge cases like missing chains and the use of include_unavailable. The description is complete for understanding the tool's behavior and output without requiring external knowledge.

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?

Schema coverage is 100% and the description repeats the exact same parameter descriptions as in the schema. It does not add any new meaning or examples beyond what's already provided. Since coverage is high, the baseline is 3, and there is no extra semantic enrichment.

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 lists storefronts that deliver to a given address, with delivery terms like fees and minimum orders. It also distinguishes it from the optimize_delivery tool, which is used for pricing baskets. This is a specific verb + resource with clear differentiation from siblings.

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?

The description explicitly says 'Use for who delivers to me?' and contrasts with 'what will my shopping cost delivered?' for optimize_delivery. It also advises to use optimize_delivery before recommending based on fees alone. This gives explicit when-to-use and when-not-to-use guidance, exceeding simple context.

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

optimize_deliveryPrice a shopping list for deliveryA
Read-only
Inspect

Price a whole shopping list at every Israeli online supermarket that delivers to an address, and rank them on what the order actually costs: items + delivery fee + service fee. Call this ONCE with the full list — never price lines separately. This is SuperMCP's shopping-list tool for online supermarket delivery. ASK THE SHOPPER WHERE THEY LIVE BEFORE CALLING, whenever you can get it in the same breath. A city is enough. It is not a detail that sharpens the answer, it usually IS the answer: of the 531 towns whose coverage we hold, 386 are served by exactly one chain. It is also much the cheaper call, comparing the handful of storefronts that reach one town instead of every storefront in the country. Only when you cannot ask, or when showing the range now beats a round trip, call with no destination. It does not fail: it returns status=needs_destination, the same list priced at every storefront in the country, carrying only what an address does not decide — each storefront's shelf prices, its own delivery fee and its minimum order. NOT ONE of them was tested against a service area, so that reply names no cheapest, carries no handoffUrl and is not a recommendation. Quote it as a range, say we do not yet know who delivers to this shopper, ask for their city or street address, then send {continuation, city} to get the storefronts that actually reach them. THE HEADLINE FIGURE IS deliveredTotal, not the item subtotal: a ₪35.90 delivery fee outweighs most price differences between chains. But RANK on deliveredComparableTotal, never on deliveredTotal: totalScope is priced_lines_only, so a storefront that stocks four of your twelve items reports a small deliveredTotal precisely because it cannot fill the basket. Check pricedLines against requestedLines and say when the coverage is partial. A gap has two possible reasons and catalogVisibility says which. 'full_catalogue' means catalogSize is the retailer's complete published price file, so a line it did not price is a line it does not stock. 'partial_index' means WE cannot see the whole shop, because its prices are read off a website that cannot be paged, so the gap may be ours and the shop may well carry the missing items. Say which it is rather than telling a shopper a storefront does not stock something we simply never indexed. Both fields are null when the count has not loaded yet, which is not an empty shop. Read deliveryTerms.confidence before quoting: 'verified' was read from the retailer's own binding terms, 'reported' from a cited secondary source, 'unknown' means no fee is established and the ranking used an assumption (assumedDeliveryFee) that must not be repeated as a price. Anything other than verified or reported withholds the whole quotable tariff page, not just the fee: deliveryFee, freeDeliveryThreshold and nextFeeBreak all come back null together, because all three are read off the page we just declined to stand behind. Never fill one of them in from get_delivery_terms and quote it beside a fee this plan refused to give. minimumOrder is gated differently on purpose, lapsing only once the figure is past its 90-day recheck, so its presence is not evidence the fee beside it can be quoted. deliveryFeeIsFloor=true means the fee is a published lower bound, so quote it as 'from ₪X' and treat deliveredTotal as a minimum. meetsMinimum=false means the order cannot be placed as it stands; report amountToMinimum, the top-up needed. Those plans are still listed, after the orderable ones, so present them as options that need topping up rather than hiding them. Of several branches of one marketplace chain that all sit under their minimum, the one listed is the cheapest that is also nearest to its minimum, so the top-up you report is the smallest on offer there. Rank on cheapestDelivered only if the shopper will happily order twice: it prices missing lines at a market reference. bestSingleOrder is the fullest basket obtainable in one order. Both, and bestVerifiedTerms, carry totals only: find the storefront in plans by serviceSlug for its priced lines. When nextFeeBreak.worthTopUp is true, spending a little more makes the order cheaper overall — say so. A line carrying cheaperAlternative can be met for less AT THE SAME SHOP: it names the product, how many packs, what the line would cost instead, and the saving, promotions included. Every one is cheaper per 100g/ml/piece as well as per line, so it is a genuine saving rather than a smaller pack, and the saving can be quoted as it stands. Offer these unprompted when the shopper cares about price, and never silently swap them in — it is a different product and theirs to choose. Pin one by calling again with its productId. splitOrder, when it is not null, is the same list bought from two shops instead of one, with each leg's items, fees and its own handoffUrl. reason='cheaper' means it saves money after BOTH delivery fees; reason='more_of_the_list' means no one shop stocks everything and the second order fills the gap at extra cost, which saving reports as a negative. Volunteer it unprompted, and say which of the two it is. null means one order is the right answer here. If the shopper says a priced line is wrong, call suggest_similar_products with their Hebrew words and the rejected product_id, then call this tool again with that product_id on the line. Storefronts that cannot serve this basket come back in unavailableStores with a reason. By default only the actionable ones are listed: below_minimum_order, and price_feed_stale for a chain that delivers here but has published no prices for over a fortnight, which is therefore not in plans at all and must not be presented as an option. A plan flagged priceFeedStale is a milder case, over a week old: still worth comparing, but quote it as what the shop last published on priceFeedAsOf. If no storefront inside the fortnight can take the order, the abandoned ones come back in plans rather than leaving the shopper with nothing, and notes says so. unavailableStoresOmitted counts the rest, all ruled out on the address alone. A plan may carry venues: branches of one marketplace chain that priced this basket identically, collapsed into one row. Any slug in it works with get_delivery_terms. venuesOmitted counts further branches of that chain left out because each costs more and fills no line this row is missing. None of their figures are here and this row's are not theirs, so never quote a price for them; list_delivery_options names them all. By default only the recommended storefronts carry a lines breakdown; every other plan reports its totals and pricedLines with lines: []. That is not a gap — re-call with response_detail=standard only if you must compare the same item's price across chains. When the shopper settles on a storefront, give them that plan's handoffUrl: it opens the whole basket as one Hebrew page, every line with its price and its own product link. Hand over that one link rather than the per-line link fields, which leave the shopper opening a tab per item. Say that the page shows the prices this answer was built on.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNoCity name in Hebrew or English. Enough for chains that publish a settlement list, not enough for a storefront whose area is a polygon or a depot radius.
nearNo'lat,lng' string, e.g. '32.078,34.774'. Do not combine with address.
itemsNoThe shopping list. Required unless resuming with a continuation.
intentNoThe shopper's own framing of this shop, in their own words, e.g. 'ברביקיו ל-12 אנשים'. Not a summary of the item list — pass what THEY said the shop was for. Shown on the handoff page next to what was priced. Optional; omit rather than inventing one.
addressNoDelivery address in Israel, free text, e.g. 'מנדלסון 1, תל אביב'. Preferred: some storefronts publish a service area that only a street address can be tested against.
answersNoOne answer per question from the needs_confirmation reply.
slot_typeNoOnly two slots exist here: standard (default) is delivery to the door, pickup is click-and-collect, which is cheaper at the chains that offer it but means the shopper travels. Anything else is rejected.
preferenceNocheapest takes the lowest delivered total outright; balanced (default) prefers a storefront whose delivery terms we verified when the money is close.
membershipsNoMembership or card the shopper holds that unlocks a cheaper rate, e.g. ['credit_card'] for a Rami Levy card. Without it the public rate is quoted.
continuationNoOpaque token from a needs_confirmation, preview or needs_destination reply. The shopping list travels inside it, so send it with answers, or with the city or address that answers needs_destination, and nothing else.
include_clubNoApply loyalty-club item prices. Default true; they are flagged clubOnly.
include_couponNoApply coupon item prices. Default true; they are flagged couponOnly.
resolution_modeNofast (default) makes best-effort product choices and reports them in assumptions, each carrying a kind: generic_default (the line named no particular product, so the everyday one is the answer) needs no warning, substitution (the line named a product and got another) does. strict asks before choosing, but only where WE are unsure, so it prices a confidently-wrong line without stopping. preview stops for YOU: it returns status=preview with items and assumptions and prices nothing, then send its continuation on its own to price the same list without resolving it twice. Worth it on a long or unusual list, where pricing every storefront is the expensive half and a wrong pick otherwise costs a second full call.
response_detailNosummary (default) returns the line-by-line breakdown only for the storefronts the recommendations name; it folds marketplace venues that priced this basket identically into one plan carrying venues, drops the branches of a chain that cost more and fill no line a kept branch fills, counting them in venuesOmitted, and replaces the out-of-area storefronts with a count. standard adds the lines for every storefront, every venue and the full unavailable list: ask for it only when comparing the same item across chains. debug adds resolution internals.
max_split_storesNoHow many storefronts the returned splitOrder may spread the list over. Default 2. A third adds a third delivery fee, so it only wins when it reaches items the other two do not stock.
Behavior5/5

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

Annotations only carry readOnlyHint/openWorldHint/destructiveHint; the description carries the full behavioral burden and exceeds it. It discloses the needs_destination status flow, the open-world semantics of catalogVisibility ('partial_index' means WE cannot see the whole shop), trust tiers for deliveryTerms.confidence that gate the whole quotable tariff page, price_feed_stale 'must not be presented as an option', and the continuation-token sequencing. It also warns against silent substitutions ('never silently swap them in') and against quoting assumedDeliveryFee as a real price. Nothing contradicts the read-only/open-world annotations.

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

Conciseness3/5

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

The description is exceptionally long and front-loaded well — purpose first, usage second, then output semantics, then edge cases. But it repeats content already in the rich schema (e.g., response_detail line-breakdown behavior appears both in the enum description and in the tool body), adding redundancy. It is arguably appropriately sized for a 15-parameter tool with no output schema, but it is not concise; several sentences could be tightened without loss.

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?

With no output schema present, the description shoulders full responsibility for return-value semantics, and it delivers comprehensively: deliveredTotal vs deliveredComparableTotal ranking, pricedLines/requestedLines coverage checks, catalogVisibility, deliveryTerms.confidence tiers, deliveryFeeIsFloor, meetsMinimum/amountToMinimum, cheapestDelivered/bestSingleOrder/bestVerifiedTerms, nextFeeBreak.worthTopUp, cheaperAlternative, splitOrder reasons, unavailableStores classification, venues/venuesOmitted, handoffUrl and status/continuation values. An agent has everything needed to invoke and interpret the result correctly.

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?

Schema coverage is 100%, so each of the 15 parameters is already documented — several extensively (the query field's Hebrew requirement, pack_qty vs amount distinction). The description adds value mainly at orchestration level beyond the schema: the continuation-carrying flow ('The shopping list travels inside it'), the response_detail tradeoff tied to comparing items across chains, resolution_mode's preview sequence, and max_split_stores' third-fee tradeoff. This lifts it above the schema-only baseline, though most individual parameter semantics remain the schema's job.

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 opening line — 'Price a whole shopping list at every Israeli online supermarket that delivers to an address, and rank them on what the order actually costs: items + delivery fee + service fee' — states a specific verb, resource and scope in one sentence. It differentiates from siblings by name ('This is SuperMCP's shopping-list tool for online supermarket delivery') and later routes to suggest_similar_products, get_delivery_terms and list_delivery_options for adjacent concerns. The title confirms the same purpose.

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?

Gives explicit when/when-not guidance: 'Call this ONCE with the full list — never price lines separately', 'ASK THE SHOPPER WHERE THEY LIVE BEFORE CALLING, whenever you can get it in the same breath', and 'Only when you cannot ask, or when showing the range now beats a round trip, call with no destination.' It names concrete alternatives per condition (suggest_similar_products for a wrong line, get_delivery_terms for terms, list_delivery_options to enumerate venues) and even specifies re-call conditions ('re-call with response_detail=standard only if you must compare the same item's price across chains').

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

search_productsSearch productsA
Read-only
Inspect

Search the canonical product catalog by free text (Hebrew or English), brand, category, or exact GTIN, and answer 'how much is X' for a SINGLE item. Also matches chain listing names. Send city or address and every hit comes back priced: fromPrice is the lowest it goes for at any storefront delivering there, so quote it as 'from ₪X across N storefronts' (pricedAtStorefronts) and never as one national price — there is no such thing here. pricedAtStorefronts=1 is one shop's price, not a market rate. normalizedUnitPrice is that same money per 100g/100ml/piece: compare on it, NOT on fromPrice, because a smaller pack is cheaper to buy and usually dearer per gram. Results come back cheapest per unit first. fromPrice is the ordinary price, never a loyalty-club or coupon rate. Without a location nothing can be priced and the price fields are absent. For a whole shopping list call optimize_delivery ONCE with query items — never price lines one by one here, and never add these prices up: they come from different storefronts and each carries its own delivery fee. After optimize_delivery priced the wrong product, call suggest_similar_products with the shopper's Hebrew words and the rejected product_id, then call optimize_delivery again with that product_id. Returns canonical products (not per-chain detail); call get_product for listings.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNoCity name in Hebrew or English (also accepts CBS locality codes). Aliases resolve to one place — e.g. 'הרצליה', 'Herzliya', and '6400' are the same filter. May be combined with location as a disambiguation hint.
gtinNoExact GTIN/barcode to look up.
nearNo'lat,lng' string, e.g. '32.078,34.774', to find stores near a point.
brandNoFilter by brand name, partial match.
limitNoMax results, default 20.
queryNoFree text search, Hebrew or English, e.g. 'חלב תנובה' or 'olive oil'.
categoryNoFilter by internal category slug (l1 or l2), e.g. 'dairy'.
locationNoFree-text neighborhood or address in Israel, e.g. 'נווה עמל, הרצליה'. Resolved to coordinates via cached Nominatim. Do not combine with near.
store_idNoOptional store UUID to prefer locally stocked products.
radius_kmNoSearch radius in km around the resolved point. Defaults to 10km when near or location is set. Ignored without a point.
in_stock_onlyNoWhen location is set, return only products with a local price. Default false.
Behavior5/5

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

Even though annotations indicate read-only and non-destructive behavior, the description adds extensive behavioral context: without location prices are absent, fromPrice is not a national price, pricedAtStorefronts=1 indicates a single store, and prices exclude loyalty discounts. It also explains that results are sorted by cheapest unit price first, going beyond what annotations provide.

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

Conciseness4/5

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

The description is long but information-dense, covering many critical behavioral nuances. It front-loads the main purpose and pricing rule, then packs in workflow guidance. While every sentence earns its place, the length may make it slightly less skimmable, but the structure is logical and no fluff.

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?

Given the tool's complexity (11 parameters, pricing semantics, location dependence, cross-store considerations), the description is remarkably complete. It covers how to quote prices, how to compare unit prices, and when to use alternatives. The absence of an output schema is compensated by describing key output fields (pricedAtStorefronts, normalizedUnitPrice) and their interpretation.

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?

Schema coverage is 100% and descriptions in the schema are quite detailed (e.g., location resolution, aliases, radius_km defaults). The description adds critical meaning to the city/location/price interaction (without location no pricing), and clarifies how fromPrice and normalizedUnitPrice should be used, which enhances parameter understanding beyond 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 clearly states that the tool searches the canonical product catalog by free text, brand, category, or GTIN and answers 'how much is X' for a single item. It distinguishes itself from sibling tools like get_product (which returns listings) and optimize_delivery (for whole lists), and explains its unique pricing behavior.

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?

Provides explicit when-to-use guidance: for single-item price queries, and explicitly says not to use for a whole shopping list (use optimize_delivery instead). It also gives a specific workflow for handling wrong pricing via suggest_similar_products followed by optimize_delivery again, and warns against comparing on fromPrice or summing prices.

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

split_orderSplit one shopping list across two or three shopsA
Read-only
Inspect

Answer 'can I save by ordering from more than one shop?' for a whole list. Returns which items to buy where, each leg's own subtotal, delivery fee and service fee, the combined delivered total, and what it saves against buying everything in one order. Every fee is a published one: a leg whose delivery fee we could not verify is never put in a split, because a split is a recommendation to pay a SECOND fee and it may not rest on a number we would refuse to quote for one order. reason='cheaper' means one order could buy this list and two buy it for materially less. reason='more_of_the_list' means no single storefront stocks everything, so the second order fills the gap: it costs MORE, saving is negative, and that is the honest answer rather than a hidden one. Say which of the two it is. Each leg carries its own handoffUrl, one page per order. Give the shopper both. Every leg meets its own storefront's minimum order, so both legs are placeable as they stand. Returns splitOrder: null when one order is the right answer, which is the usual case — report that plainly and point at the single-order recommendation instead of retrying. optimize_delivery already returns the same splitOrder field, so call this one only when the shopper asks about splitting specifically, or to raise max_stores to 3.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNoCity name in Hebrew or English. Enough for chains that publish a settlement list, not enough for a storefront whose area is a polygon or a depot radius.
nearNo'lat,lng' string, e.g. '32.078,34.774'. Do not combine with address.
itemsYesThe shopping list, same shape as optimize_delivery.
intentNoThe shopper's own framing of this shop, in their own words, e.g. 'ברביקיו ל-12 אנשים'. Not a summary of the item list. Shown on each leg's handoff page next to what was priced. Optional; omit rather than inventing one.
addressNoDelivery address in Israel, free text, e.g. 'מנדלסון 1, תל אביב'. Preferred: some storefronts publish a service area that only a street address can be tested against.
slot_typeNostandard (default) or pickup.
max_storesNoHow many storefronts to spread the list over. Default 2. A third adds a third delivery fee, so it only wins when it reaches items the other two do not stock.
membershipsNoMemberships the shopper holds, e.g. ['credit_card', 'wolt_plus'].
Behavior5/5

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

The description discloses extensive behavioral details: it only splits when delivery fees are verified, reports assumptions for unverifiable counts, handles pack quantities correctly, and clarifies that a null splitOrder means a single order is better. It goes far beyond the annotations (readOnly, openWorld, non-destructive) by explaining side effects and edge cases.

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

Conciseness1/5

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

The description is excessively verbose and repetitive, with phrases like 'Every fee is a published one' and 'Every leg meets its own storefront's minimum order' stated multiple times. It could be condensed to a few sentences without losing meaning, harming readability and maintainability.

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?

Despite verbosity, the description is thorough: it covers purpose, usage conditions, behavioral edge cases, assumptions reporting, return value semantics (splitOrder), and comparisons to the sibling tool. It effectively addresses all relevant contexts for a developer integrating this 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?

While the schema already covers 100% of parameters with detailed descriptions, the tool description adds useful cross-reference context (e.g., items are 'same shape as optimize_delivery') and reinforces the intent parameter's purpose. This supplements the schema without duplicating it.

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

Purpose4/5

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

The description clearly states the tool's core action: splitting a shopping list across multiple stores and evaluating savings vs. a single order. It distinguishes from sibling tools by referencing optimize_delivery, though the added caveats and repetitive phrasing slightly dilute the clarity.

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?

Explicitly instructs when to use this tool: only when the shopper asks about splitting specifically, or to raise max_stores beyond the default. It also states optimize_delivery returns the same splitOrder field, providing a clear alternative and preventing misuse.

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

suggest_similar_productsSuggest similar productsA
Read-only
Inspect

After optimize_delivery priced the wrong product, use this to show other things the shopper might have meant. Send their words in HEBREW (original line or the correction) and the rejected product_id so that SKU is dropped. Example: priced נקניקיות פרגיות, shopper said thigh cuts → query='פרגיות' or 'שוקיים', product_id=. Then call optimize_delivery again with the same list, that line pinned to the chosen product_id. Also answers 'is there a cheaper one?': every suggestion carries fromPrice, the lowest it goes for at any storefront delivering to this address, and normalizedUnitPrice, the same money per 100g/100ml/piece. Compare on normalizedUnitPrice, NOT on fromPrice: a smaller pack is cheaper to buy and usually dearer per gram, so a saving claimed on fromPrice alone is wrong whenever the pack sizes differ. Results come back cheapest per unit first, and rejected carries the same fields so the swap is directly comparable. fromPrice is a floor across storefronts, so quote it as 'from ₪X'; pricedAtStorefronts=1 means it is one shop's price rather than a market rate. Send city or address, or no price can be reported at all. Do not use this for a first-pass shopping list — call optimize_delivery once with every line.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNoCity name in Hebrew or English (also accepts CBS locality codes). Aliases resolve to one place — e.g. 'הרצליה', 'Herzliya', and '6400' are the same filter. May be combined with location as a disambiguation hint.
nearNo'lat,lng' string, e.g. '32.078,34.774', to find stores near a point.
limitNoMax neighbours to return. Default 8.
queryNoWhat they meant, in Hebrew. Prefer the correction ('שוקיים') or the original line ('פרגיות'). A Latin brand name matches nothing. Required unless product_id is set.
locationNoFree-text neighborhood or address in Israel, e.g. 'נווה עמל, הרצליה'. Resolved to coordinates via cached Nominatim. Do not combine with near.
radius_kmNoSearch radius in km around the resolved point. Defaults to 10km when near or location is set. Ignored without a point.
product_idNoThe product_id optimize_delivery priced that the shopper rejected. Excluded from results.
Behavior5/5

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

Annotations (readOnlyHint=true, openWorldHint=true, destructiveHint=false) are consistent. The description adds substantial behavioral context: results sorted by cheapest per unit, 'rejected' field has same fields for comparison, fromPrice is a floor across storefronts, pricedAtStorefronts=1 meaning single shop price, and the requirement to send city/address for price reporting. No contradictions.

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

Conciseness4/5

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

Description is front-loaded with purpose and example, and each sentence adds value. However, it is fairly long (multiple paragraphs) and could be more structured (e.g., bullet points for the pricing rules). Still efficient given the complexity of the tool's behavior.

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?

With 7 parameters, no output schema, and only basic annotations, the description fully covers the tool's context: usage scenario, workflow steps, result interpretation, pricing caveats, and required parameters for price reporting. No significant gaps remain.

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?

Schema coverage is 100% (baseline 3). The description adds critical semantic constraints beyond the schema: the query must be in Hebrew (original line or correction), product_id must be the rejected one from optimize_delivery, and city or address is required for price reporting (conditional requirement not in schema). Also explains the meaning of pricedAtStorefronts. This extra value justifies a 4.

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: to suggest similar products when optimize_delivery priced the wrong product. It specifies the verb ('suggest similar') and the resource ('products'), and distinguishes itself from siblings by explicitly stating it is not for first-pass shopping lists, contrasting with optimize_delivery.

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?

Provides explicit when to use (after optimize_delivery wrong pricing), when not to use (not for first-pass lists), and includes an example workflow with a specific alternative ('Then call optimize_delivery again'). It also gives detailed guidance on interpreting results (compare normalizedUnitPrice, not fromPrice).

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

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Servers

View all MCP Servers

Try in Browser

Your Connectors

Sign in to create a connector for this server.

Resources