Skip to main content
Glama

Radar Volantini - Prezzi in Vista

Cerca offerte nei volantini

search_flyer_offers
Read-onlyIdempotent

Use this when the user wants to know where a product is on offer in Italy this week, at what price, at which chain and until when, and you need filters or sorting: a city or the position of the user, specific chains, a price cap, lowest price, lowest price per kg or nearest store first. Searches the offers currently valid in the flyers (volantini) of Italian supermarkets, discount stores and electronics chains. Flyers are local: with the city or the coordinates of the user the answer keeps the chains with a store near them; without a place it covers the whole country. Product names are in Italian: pass Italian words in query ("caffè", "pasta barilla", "lavatrice"). Returns price, previous price, the conditions printed with it (loyalty card, minimum purchase), brand, pack size, price per kg or litre, department, chain, validity dates, the page of the flyer and the link to the offer on prezzinvista.it; with a city or coordinates, also the distance, address and opening hours of the nearest store of each chain. Covers Italy only: not for other countries, not for online-shop prices. Flyer prices are indicative; the price displayed in store prevails. In hosts that support MCP Apps the results are also shown to the user as cards with photo, price and link.

Input Schema

NameRequiredDescriptionDefault
cityNoItalian municipality (comune) to search around: where the user is, or the place they ask about, e.g. "Milano", "Reggio Emilia", "Sesto San Giovanni". Only flyers valid in stores within radius_km of its centre are returned. Without a place the search covers all of Italy.
pageNoPage of results (default 1).
sortNorelevance (default with a query), price (lowest first), unit_price (lowest price per kg or litre first; only offers that state it), discount (biggest first; default without a query), nearest (closest chain first; needs a city or coordinates).
limitNoOffers per page (default 10).
queryNoProduct to look for, in Italian. Brand and product words are combined ("olio extravergine monini"). Omit to browse the biggest discounts.
storesNoOnly these chains, by name: e.g. ["Lidl", "Esselunga"].
near_meNoWhether to search around the approximate position of the user that some clients share with the call (ChatGPT does). When omitted, that position is used if the call names no city and no coordinates. true: the same, and the answer is an error when no position came with the call. false: all of Italy.
latitudeNoLatitude of the position of the user (WGS84, decimal degrees), together with longitude. Distances are then measured from this point, and only flyers valid in stores within radius_km of it are returned. Takes precedence over city. Used for this answer only, never stored.
longitudeNoLongitude of the position of the user, together with latitude.
radius_kmNoHow far to look around the city centre or the coordinates, in km (default 15).
max_price_eurNoOnly offers at or below this price.
discounted_onlyNoOnly offers whose flyer states a higher previous price.

Output Schema

NameRequiredDescriptionDefault
cityNoThe municipality the search was limited to: the one passed, or the nearest to the coordinates
noteNo
pageYes
pagesYes
queryNo
totalYesOffers matching, across all pages
offersYes
sourceNoWho to credit for the data
radius_kmNoThe radius searched around the place, in km
search_urlYesThe same search on prezzinvista.it
updated_atNoWhen the flyers were last read (ISO 8601). They are read again every three hours
place_assumedNotrue when the call named no place and the search was limited to the position shared by the client
typical_priceNoFor everyday products: the typical (median) price in all Italian flyers this week, to judge the offers against
distances_fromNoWhat distance_km is measured from: the coordinates passed, the approximate position shared by the client (near_me), or the centre of the city
nearest_storesNoWith a city or coordinates: for each chain in the offers, its nearest store, closest first
chains_searchedNoHow many chains have a current flyer that was searched: with a city or coordinates, those valid there. No offer among 3 chains and no offer among 50 are different answers

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed17 schema fields changed
    • changedInput schema / properties / city / description
      Previous value: -"Italian municipality (comune) to search around, e.g. \"Milano\", \"Reggio Emilia\", \"Sesto San Giovanni\". Only flyers valid in stores within 15 km are returned. Omit for all of Italy."New value: +"Italian municipality (comune) to search around: where the user is, or the place they ask about, e.g. \"Milano\", \"Reggio Emilia\", \"Sesto San Giovanni\". Only flyers valid in stores within radius_km of its centre are returned. Without a place the search covers all of Italy."
    • addedInput schema / properties / latitude
      Added value: +{
      +  "description": "Latitude of the position of the user (WGS84, decimal degrees), together with longitude. Distances are then measured from this point, and only flyers valid in stores within radius_km of it are returned. Takes precedence over city. Used for this answer only, never stored.",
      +  "maximum": 90,
      +  "minimum": -90,
      +  "type": "number"
      +}
    • addedInput schema / properties / longitude
      Added value: +{
      +  "description": "Longitude of the position of the user, together with latitude.",
      +  "maximum": 180,
      +  "minimum": -180,
      +  "type": "number"
      +}
    • addedInput schema / properties / near_me
      Added value: +{
      +  "description": "Whether to search around the approximate position of the user that some clients share with the call (ChatGPT does). When omitted, that position is used if the call names no city and no coordinates. true: the same, and the answer is an error when no position came with the call. false: all of Italy.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / radius_km
      Added value: +{
      +  "description": "How far to look around the city centre or the coordinates, in km (default 15).",
      +  "maximum": 50,
      +  "minimum": 1,
      +  "type": "number"
      +}
    • changedInput schema / properties / sort / description
      Previous value: -"relevance (default with a query), price (lowest first), unit_price (lowest price per kg or litre first; only offers that state it), discount (biggest first; default without a query), nearest (closest chain first; needs city)."New value: +"relevance (default with a query), price (lowest first), unit_price (lowest price per kg or litre first; only offers that state it), discount (biggest first; default without a query), nearest (closest chain first; needs a city or coordinates)."
    • changedOutput schema / properties / chains_searched / description
      Previous value: -"How many chains have a current flyer that was searched: with a city, those valid there. No offer among 3 chains and no offer among 50 are different answers"New value: +"How many chains have a current flyer that was searched: with a city or coordinates, those valid there. No offer among 3 chains and no offer among 50 are different answers"
    • changedOutput schema / properties / city / description
      Previous value: -"The municipality the search was limited to"New value: +"The municipality the search was limited to: the one passed, or the nearest to the coordinates"
    • addedOutput schema / properties / distances_from
      Added value: +{
      +  "description": "What distance_km is measured from: the coordinates passed, the approximate position shared by the client (near_me), or the centre of the city",
      +  "enum": [
      +    "coordinates",
      +    "client_location",
      +    "city_centre"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / properties / nearest_stores / description
      Previous value: -"With a city: for each chain in the offers, its nearest store, closest first"New value: +"With a city or coordinates: for each chain in the offers, its nearest store, closest first"
    • changedOutput schema / properties / nearest_stores / items / properties / distance_km / description
      Previous value: -"From the centre of the city"New value: +"From the place in distances_from"
    • addedOutput schema / properties / nearest_stores / items / properties / latitude
      Added value: +{
      +  "description": "Position of the store (WGS84)",
      +  "type": "number"
      +}
    • addedOutput schema / properties / nearest_stores / items / properties / longitude
      Added value: +{
      +  "type": "number"
      +}
    • changedOutput schema / properties / offers / items / properties / availability / description
      Previous value: -"With a city: verified_nearby = the chain lists a store within 15 km of it; nationwide_flyer = the flyer is valid in the whole country, a store nearby is not verified"New value: +"With a city or coordinates: verified_nearby = the chain lists a store within radius_km; nationwide_flyer = the flyer is valid in the whole country, a store nearby is not verified"
    • changedOutput schema / properties / offers / items / properties / distance_km / description
      Previous value: -"Distance of the nearest store of the chain from the centre of the city"New value: +"How far the nearest store of the chain is, from the place in distances_from"
    • addedOutput schema / properties / place_assumed
      Added value: +{
      +  "description": "true when the call named no place and the search was limited to the position shared by the client",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / radius_km
      Added value: +{
      +  "description": "The radius searched around the place, in km",
      +  "type": "number"
      +}
  2. Changed10 schema fields changed
    • addedOutput schema / properties / chains_searched
      Added value: +{
      +  "description": "How many chains have a current flyer that was searched: with a city, those valid there. No offer among 3 chains and no offer among 50 are different answers",
      +  "type": "integer"
      +}
    • addedOutput schema / properties / offers / items / properties / availability
      Added value: +{
      +  "description": "With a city: verified_nearby = the chain lists a store within 15 km of it; nationwide_flyer = the flyer is valid in the whole country, a store nearby is not verified",
      +  "enum": [
      +    "verified_nearby",
      +    "nationwide_flyer"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / offers / items / properties / conditions
      Added value: +{
      +  "description": "What the flyer prints next to the price, in Italian: loyalty card required, minimum purchase, price for several pieces. The price holds under these conditions",
      +  "type": "string"
      +}
    • addedOutput schema / properties / offers / items / properties / flyer_edition
      Added value: +{
      +  "description": "For a regional or single-store edition of the flyer: the territory it is valid in. Absent when the flyer is the same for the whole country",
      +  "type": "string"
      +}
    • addedOutput schema / properties / offers / items / properties / flyer_page
      Added value: +{
      +  "description": "Page of the flyer where the price is printed",
      +  "type": "integer"
      +}
    • addedOutput schema / properties / offers / items / properties / official_flyer_url
      Added value: +{
      +  "description": "The flyer on the website of the chain, where the price can be checked at the source",
      +  "type": "string"
      +}
    • addedOutput schema / properties / offers / items / properties / price_doubt
      Added value: +{
      +  "description": "Present only when something makes this price, or its discount, doubtful: what and why. It is a reason to check the flyer page before relying on the number, not a correction",
      +  "type": "string"
      +}
    • addedOutput schema / properties / offers / items / properties / requires_loyalty_card
      Added value: +{
      +  "description": "true when the conditions say the price needs the loyalty card, app or coupon of the chain. Absent otherwise: the flyer may not say",
      +  "type": "boolean"
      +}
    • changedOutput schema / properties / offers / items / properties / url / description
      Previous value: -"The offer on its flyer page at prezzinvista.it"New value: +"The offer on its flyer page at prezzinvista.it: the page of the flyer with the price on it"
    • addedOutput schema / properties / offers / items / properties / valid_from
      Added value: +{
      +  "description": "First day of the offer, YYYY-MM-DD",
      +  "type": "string"
      +}
  3. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive and openWorld=false, yet the description still adds real behavioural context: flyer data is local so results narrow to chains with a nearby store, prices are indicative and the in-store price prevails, the corpus is Italian-only, and results render as cards in MCP Apps hosts. These are non-obvious traits an agent could not derive from 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.

Conciseness4/5

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

The trigger, scope and exclusions are front-loaded and each sentence is dense with operative detail. Some padding exists: the location behaviour (city/coordinates vs. whole country) is restated three times and the return-value inventory duplicates the output 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 12-parameter, all-optional, highly geographic search tool, the description covers placement rules, language of the query, sort/filter semantics, exclusions and the local nature of flyers. With an output schema present it need not explain return values, and its do so is only redundant, not a gap.

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 the baseline is 3, but the description goes further by grouping the filters into user intents (place, chains, price cap, lowest price / price-per-kg / nearest-first sorting) and by stressing that `query` must carry Italian product and brand words. That reinforces how combinations are meant to be used, though most individual field meaning still lives in 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 names a specific verb+resource (searching currently valid flyer offers from Italian supermarkets, discount and electronics chains) and immediately scopes it to 'this week' and Italy. It is clearly distinguishable from siblings like get_price_trend or list_current_flyers, which do different jobs.

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?

It opens with an explicit trigger ('Use this when the user wants to know where a product is on offer in Italy this week...') and states exclusions ('not for other countries, not for online-shop prices'). It never names a sibling tool as the alternative to use instead, so routing between near-neighbours such as list_current_flyers or get_price_trend is left to inference.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources