Radar Volantini - Prezzi in Vista

Italy only: current offers and weekly price trends from the flyers of Italian store chains.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
96%
Naming quality
100%
Poisoning risk
100%
Permission match
90%
Protocol compliance
100%

Findings (1)

  • LOWTool 'fetch' suggests web access but openWorldHint=falsein fetch

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~4,516Tokens (tool definitions)
~8.9 KBTypical response size
Significant attention impact (3.53% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "radar-volantini": {
      "url": "https://www.prezzinvista.it/mcp"
    }
  }
}

Remote endpoints

https://www.prezzinvista.it/mcpstreamable-http

What it can do

Tool inventory

Tools (5)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢search(query)

Use this when you need citable sources for a free-text question about what is on offer in Italian store flyers (volantini) right now, and no filters or sorting are needed. Covers Italy only. Takes one query in Italian that may name a product, a chain and a city ("caffè Lavazza a Milano", "volantino Lidl", "prezzo pasta"). Returns matching documents — current offers, store flyers and weekly product price pages — each with an id, a title stating price, chain and validity, and its URL on prezzinvista.it. The full text of a document is what fetch returns for its id. Sorting by price, a price cap and a choice of chains belong to search_flyer_offers.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "maxLength": 200,
      "description": "What to look for, in Italian: a product, optionally with a chain and \"a <city>\"."
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Pass it to fetch"
          },
          "title": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "description": "The page to cite, on prezzinvista.it"
          }
        },
        "required": [
          "id",
          "title",
          "url"
        ]
      }
    }
  },
  "required": [
    "results"
  ]
}
🟢fetch(id)

Use this to read one of the documents returned by search, given its id. Returns the full text and the URL to cite. For an offer: price, previous price, pack size, price per kg or litre, chain, validity, and the same product in the other chains' current flyers. For a flyer: validity, number of offers and biggest discounts. For a product: this week's typical and lowest flyer price, the trend and each chain. Ids come only from search. Covers Italy only.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "maxLength": 400,
      "description": "The id of a document returned by search."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "text": {
      "type": "string",
      "description": "The document, in Italian"
    },
    "url": {
      "type": "string",
      "description": "The page to cite, on prezzinvista.it"
    },
    "metadata": {
      "type": "object",
      "description": "Type of document and its key facts"
    }
  },
  "required": [
    "id",
    "title",
    "text",
    "url"
  ]
}
🟢search_flyer_offers(query, city, latitude, longitude, radius_km, ...)

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

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "maxLength": 80,
      "description": "Product to look for, in Italian. Brand and product words are combined (\"olio extravergine monini\"). Omit to browse the biggest discounts."
    },
    "city": {
      "type": "string",
      "maxLength": 60,
      "description": "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."
    },
    "latitude": {
      "type": "number",
      "minimum": -90,
      "maximum": 90,
      "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."
    },
    "longitude": {
      "type": "number",
      "minimum": -180,
      "maximum": 180,
      "description": "Longitude of the position of the user, together with latitude."
    },
    "radius_km": {
      "type": "number",
      "minimum": 1,
      "maximum": 50,
      "description": "How far to look around the city centre or the coordinates, in km (default 15)."
    },
    "near_me": {
      "type": "boolean",
      "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."
    },
    "sort": {
      "type": "string",
      "enum": [
        "relevance",
        "price",
        "unit_price",
        "discount",
        "nearest"
      ],
      "description": "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)."
    },
    "discounted_only": {
      "type": "boolean",
      "description": "Only offers whose flyer states a higher previous price."
    },
    "stores": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 10,
      "description": "Only these chains, by name: e.g. [\"Lidl\", \"Esselunga\"]."
    },
    "max_price_eur": {
      "type": "number",
      "minimum": 0,
      "description": "Only offers at or below this price."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 25,
      "description": "Offers per page (default 10)."
    },
    "page": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "description": "Page of results (default 1)."
    }
  },
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string"
    },
    "city": {
      "type": "string",
      "description": "The municipality the search was limited to: the one passed, or the nearest to the coordinates"
    },
    "radius_km": {
      "type": "number",
      "description": "The radius searched around the place, in km"
    },
    "distances_from": {
      "type": "string",
      "enum": [
        "coordinates",
        "client_location",
        "city_centre"
      ],
      "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"
    },
    "place_assumed": {
      "type": "boolean",
      "description": "true when the call named no place and the search was limited to the position shared by the client"
    },
    "total": {
      "type": "integer",
      "description": "Offers matching, across all pages"
    },
    "chains_searched": {
      "type": "integer",
      "description": "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"
    },
    "page": {
      "type": "integer"
    },
    "pages": {
      "type": "integer"
    },
    "offers": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Product name as printed on the flyer"
          },
          "brand": {
            "type": "string",
            "description": "Brand, written the same way across chains; absent when the name does not state one"
          },
          "price_eur": {
            "type": "number"
          },
          "previous_price_eur": {
            "type": "number",
            "description": "Price before the offer, when the flyer states it"
          },
          "discount_percent": {
            "type": "integer"
          },
          "size": {
            "type": "string",
            "description": "Pack size as printed, e.g. \"2x250 g\""
          },
          "quantity": {
            "type": "number",
            "description": "Pack content as a number, in quantity_unit: \"2x250 g\" is 0.5"
          },
          "quantity_unit": {
            "type": "string",
            "description": "kg, l or pieces"
          },
          "unit_price_eur": {
            "type": "number",
            "description": "Price per unit_price_per"
          },
          "unit_price_per": {
            "type": "string",
            "description": "kg, l, or another unit"
          },
          "category": {
            "type": "string",
            "description": "Store department, in Italian: tells pasta from \"Pasta del Capitano\" toothpaste"
          },
          "store": {
            "type": "string",
            "description": "Retail chain"
          },
          "conditions": {
            "type": "string",
            "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"
          },
          "requires_loyalty_card": {
            "type": "boolean",
            "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"
          },
          "price_doubt": {
            "type": "string",
            "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"
          },
          "valid_from": {
            "type": "string",
            "description": "First day of the offer, YYYY-MM-DD"
          },
          "valid_until": {
            "type": "string",
            "description": "Last day of the offer, YYYY-MM-DD"
          },
          "flyer_page": {
            "type": "integer",
            "description": "Page of the flyer where the price is printed"
          },
          "flyer_edition": {
            "type": "string",
            "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"
          },
          "availability": {
            "type": "string",
            "enum": [
              "verified_nearby",
              "nationwide_flyer"
            ],
            "description": "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"
          },
          "distance_km": {
            "type": "number",
            "description": "How far the nearest store of the chain is, from the place in distances_from"
          },
          "url": {
            "type": "string",
            "description": "The offer on its flyer page at prezzinvista.it: the page of the flyer with the price on it"
          },
          "official_flyer_url": {
            "type": "string",
            "description": "The flyer on the website of the chain, where the price can be checked at the source"
          }
        },
        "required": [
          "name",
          "price_eur",
          "store",
          "url"
        ]
      }
    },
    "nearest_stores": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "store": {
            "type": "string",
            "description": "Retail chain"
          },
          "name": {
            "type": "string",
            "description": "Name of the store"
          },
          "address": {
            "type": "string",
            "description": "Street, postcode, town and province"
          },
          "distance_km": {
            "type": "number",
            "description": "From the place in distances_from"
          },
          "latitude": {
            "type": "number",
            "description": "Position of the store (WGS84)"
          },
          "longitude": {
            "type": "number"
          },
          "opening_hours": {
            "type": "string",
            "description": "Weekly hours in Italian day abbreviations, when the chain publishes them: \"lun-sab 8:30–20:00 · dom 9:00–13:00\""
          },
          "open_now": {
            "type": "boolean",
            "description": "Open at the time of the answer (Italian time), when the hours are known"
          }
        },
        "required": [
          "store",
          "address"
        ]
      },
      "description": "With a city or coordinates: for each chain in the offers, its nearest store, closest first"
    },
    "typical_price": {
      "type": "object",
      "description": "For everyday products: the typical (median) price in all Italian flyers this week, to judge the offers against",
      "properties": {
        "product": {
          "type": "string"
        },
        "price_eur": {
          "type": "number"
        },
        "per": {
          "type": "string",
          "description": "kg, l, pack or item"
        },
        "previous_week_eur": {
          "type": "number"
        },
        "change_percent": {
          "type": "number",
          "description": "This week against the week before, only when the change is clear"
        },
        "change_note": {
          "type": "string",
          "description": "When there is no percentage: how this week compares with the week before"
        },
        "url": {
          "type": "string",
          "description": "The price trend page on prezzinvista.it"
        }
      },
      "required": [
        "product",
        "price_eur",
        "per"
      ]
    },
    "search_url": {
      "type": "string",
      "description": "The same search on prezzinvista.it"
    },
    "source": {
      "type": "string",
      "description": "Who to credit for the data"
    },
    "updated_at": {
      "type": "string",
      "description": "When the flyers were last read (ISO 8601). They are read again every three hours"
    },
    "note": {
      "type": "string"
    }
  },
  "required": [
    "total",
    "page",
    "pages",
    "offers",
    "search_url"
  ]
}
🟢list_current_flyers(city, latitude, longitude, radius_km, near_me, ...)

Use this when the user asks which store flyers (volantini) are valid right now in Italy, whether a chain has a flyer this week, or until when a flyer is valid, optionally only for chains with a store near a city or near the position of the user. Returns chain, validity dates, number of offers, distance and address of the nearest store and the link to the flyer on prezzinvista.it. Covers Italy only. Products inside the flyers are what search_flyer_offers looks up. In hosts that support MCP Apps the results are also shown to the user as cards with logo, validity and link.

Input Schema

{
  "type": "object",
  "properties": {
    "city": {
      "type": "string",
      "maxLength": 60,
      "description": "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."
    },
    "latitude": {
      "type": "number",
      "minimum": -90,
      "maximum": 90,
      "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."
    },
    "longitude": {
      "type": "number",
      "minimum": -180,
      "maximum": 180,
      "description": "Longitude of the position of the user, together with latitude."
    },
    "radius_km": {
      "type": "number",
      "minimum": 1,
      "maximum": 50,
      "description": "How far to look around the city centre or the coordinates, in km (default 15)."
    },
    "near_me": {
      "type": "boolean",
      "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."
    },
    "store": {
      "type": "string",
      "maxLength": 40,
      "description": "Only the flyers of this chain, by name: e.g. \"Lidl\"."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "description": "Flyers to return (default 30). Nearest first with a city or coordinates, largest first otherwise."
    }
  },
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "city": {
      "type": "string",
      "description": "The municipality passed, or the nearest to the coordinates"
    },
    "radius_km": {
      "type": "number",
      "description": "The radius searched around the place, in km"
    },
    "distances_from": {
      "type": "string",
      "enum": [
        "coordinates",
        "client_location",
        "city_centre"
      ],
      "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"
    },
    "place_assumed": {
      "type": "boolean",
      "description": "true when the call named no place and the search was limited to the position shared by the client"
    },
    "note": {
      "type": "string"
    },
    "source": {
      "type": "string",
      "description": "Who to credit for the data"
    },
    "source_url": {
      "type": "string",
      "description": "The page on prezzinvista.it with these flyers and their offers: the URL to cite"
    },
    "updated_at": {
      "type": "string",
      "description": "When the flyers were last read (ISO 8601). They are read again every three hours"
    },
    "total_flyers": {
      "type": "integer"
    },
    "total_offers": {
      "type": "integer"
    },
    "flyers": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "store": {
            "type": "string"
          },
          "valid_from": {
            "type": "string",
            "description": "YYYY-MM-DD"
          },
          "valid_until": {
            "type": "string",
            "description": "YYYY-MM-DD"
          },
          "offers": {
            "type": "integer"
          },
          "stores_nearby": {
            "type": "integer",
            "description": "Stores of the chain within radius_km"
          },
          "distance_km": {
            "type": "number"
          },
          "nearest_store": {
            "type": "object",
            "properties": {
              "store": {
                "type": "string",
                "description": "Retail chain"
              },
              "name": {
                "type": "string",
                "description": "Name of the store"
              },
              "address": {
                "type": "string",
                "description": "Street, postcode, town and province"
              },
              "distance_km": {
                "type": "number",
                "description": "From the place in distances_from"
              },
              "latitude": {
                "type": "number",
                "description": "Position of the store (WGS84)"
              },
              "longitude": {
                "type": "number"
              },
              "opening_hours": {
                "type": "string",
                "description": "Weekly hours in Italian day abbreviations, when the chain publishes them: \"lun-sab 8:30–20:00 · dom 9:00–13:00\""
              },
              "open_now": {
                "type": "boolean",
                "description": "Open at the time of the answer (Italian time), when the hours are known"
              }
            },
            "required": [
              "store",
              "address"
            ],
            "description": "With a city or coordinates: the nearest store of the chain"
          },
          "url": {
            "type": "string",
            "description": "The flyer on prezzinvista.it"
          }
        },
        "required": [
          "store",
          "offers",
          "url"
        ]
      }
    }
  },
  "required": [
    "total_flyers",
    "total_offers",
    "flyers"
  ]
}
🟢get_price_trend(product)

Use this when the user asks how much a common grocery or household product costs in Italy this week, whether it is getting cheaper or more expensive, or which chain has it cheapest: e.g. "how much does pasta cost this week", "is coffee more expensive than last week". Returns the typical (median) and lowest flyer price this week, the previous weeks and each chain this week, with the link to the product page on prezzinvista.it. Covers Italy only, and about two hundred staple products (pasta, caffè, olio di oliva, latte, detersivo, pannolini, …), named in Italian; specific brands and models are what search_flyer_offers looks up. In hosts that support MCP Apps the results are also shown to the user as a card with the weekly trend.

Input Schema

{
  "type": "object",
  "properties": {
    "product": {
      "type": "string",
      "maxLength": 60,
      "description": "The product, in Italian: e.g. \"pasta\", \"caffè\", \"olio di oliva\", \"detersivo lavatrice\"."
    }
  },
  "required": [
    "product"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "product": {
      "type": "string"
    },
    "prices_are": {
      "type": "string",
      "description": "per kg, per l, per pack (groceries) or per item (appliances)"
    },
    "typical_price_eur": {
      "type": "number",
      "description": "Median flyer price this week"
    },
    "offers": {
      "type": "integer",
      "description": "Offers this week"
    },
    "previous_typical_price_eur": {
      "type": "number",
      "description": "Median the week before, when comparable"
    },
    "change_percent": {
      "type": "number",
      "description": "This week against the week before, only when the change is clear"
    },
    "change_note": {
      "type": "string",
      "description": "When there is no percentage: how this week compares with the week before"
    },
    "weeks": {
      "type": "array",
      "description": "Most recent last",
      "items": {
        "type": "object",
        "properties": {
          "week_start": {
            "type": "string",
            "description": "Monday, YYYY-MM-DD"
          },
          "typical_price_eur": {
            "type": "number"
          },
          "lowest_price_eur": {
            "type": "number"
          },
          "offers": {
            "type": "integer"
          }
        },
        "required": [
          "week_start"
        ]
      }
    },
    "stores_this_week": {
      "type": "array",
      "description": "Lowest first",
      "items": {
        "type": "object",
        "properties": {
          "store": {
            "type": "string"
          },
          "lowest_price_eur": {
            "type": "number"
          },
          "typical_price_eur": {
            "type": "number"
          },
          "offers": {
            "type": "integer"
          }
        },
        "required": [
          "store",
          "lowest_price_eur",
          "offers"
        ]
      }
    },
    "url": {
      "type": "string",
      "description": "The product page on prezzinvista.it"
    },
    "source": {
      "type": "string",
      "description": "Who to credit for the data"
    },
    "updated_at": {
      "type": "string",
      "description": "When the flyers were last read (ISO 8601). They are read again every three hours"
    }
  },
  "required": [
    "product",
    "prices_are",
    "weeks",
    "stores_this_week",
    "url"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded5 tools
verifiedversion not recorded5 tools