Supermarket prices from 20+ European countries, matched by barcode, with source and daily proof.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Bearer <API key> from https://oferoo.eu/pricing (500 free trial credits). Alternative: pay per call with x402.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
The supermarket chains per country (id, name, group). The ids are the ones used by the "chain" filter of get_product and proof. Costs 1 credit (0.002 USDC with x402).
ISO-2 country code in lower case (al, at, ba, be, bg, ch, cy, cz, de, dk, ee, es, fi, fr, gb, gr, hr, hu, ie, is, it, lt, lu, lv, mt, nl, pl, pt, ro, rs, se, si, sk, tr)
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http supermarket-prices https://oferoo.eu/mcp
Headers
Authorization (optional, not in the config above): Bearer <API key> from https://oferoo.eu/pricing (500 free trial credits). Alternative: pay per call with x402.The supermarket chains per country (id, name, group). The ids are the ones used by the "chain" filter of get_product and proof. Costs 1 credit (0.002 USDC with x402).
| Argument | Type | Description |
|---|---|---|
| country | string | ISO-2 country code in lower case (al, at, ba, be, bg, ch, cy, cz, de, dk, ee, es, fi, fr, gb, gr, hr, hu, ie, is, it, lt, lu, lv, mt, nl, pl, pt, ro, rs, se, si, sk, tr) |
{
"type": "object",
"properties": {
"country": {
"type": "string",
"description": "ISO-2 country code in lower case (al, at, ba, be, bg, ch, cy, cz, de, dk, ee, es, fi, fr, gb, gr, hr, hu, ie, is, it, lt, lu, lv, mt, nl, pl, pt, ro, rs, se, si, sk, tr)"
}
},
"additionalProperties": false
}A shopping basket (up to 25 products) compared across countries: per country and product the lowest EUR price and the median over chains, the basket totals, and a ranking of the countries that have every product. Product ids come from search_products. Costs 3 credits (0.006 USDC with x402).
| Argument | Type | Description |
|---|---|---|
| country | array | Limit to these countries (ISO-2 country code in lower case (al, at, ba, be, bg, ch, cy, cz, de, dk, ee, es, fi, fr, gb, gr, hr, hu, ie, is, it, lt, lu, lv, mt, nl, pl, pt, ro, rs, se, si, sk, tr)); default all. |
| products* | array | Registry ids, "ean:<code>" or barcodes, up to 25. |
{
"type": "object",
"required": [
"products"
],
"properties": {
"country": {
"type": "array",
"items": {
"enum": [
"al",
"at",
"ba",
"be",
"bg",
"ch",
"cy",
"cz",
"de",
"dk",
"ee",
"es",
"fi",
"fr",
"gb",
"gr",
"hr",
"hu",
"ie",
"is",
"it",
"lt",
"lu",
"lv",
"mt",
"nl",
"pl",
"pt",
"ro",
"rs",
"se",
"si",
"sk",
"tr"
],
"type": "string"
},
"description": "Limit to these countries (ISO-2 country code in lower case (al, at, ba, be, bg, ch, cy, cz, de, dk, ee, es, fi, fr, gb, gr, hr, hu, ie, is, it, lt, lu, lv, mt, nl, pl, pt, ro, rs, se, si, sk, tr)); default all."
},
"products": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 25,
"minItems": 1,
"description": "Registry ids, \"ean:<code>\" or barcodes, up to 25."
}
},
"additionalProperties": false
}The countries oferoo.eu has prices for: code, name, currency, languages and coverage ("full" = chains and sources of the country; "lidl_only" = only Lidl prices). Costs 1 credit (0.002 USDC with x402).
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}The daily receipt of the price data: the Merkle root of every price row of the day, the qualified timestamp (InfoCert) and the Sui / Base anchors, and the rows per country. Default: the latest day. Costs 1 credit (0.002 USDC with x402).
| Argument | Type | Description |
|---|---|---|
| day | string | Day, YYYY-MM-DD (default: the latest receipt). |
{
"type": "object",
"properties": {
"day": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Day, YYYY-MM-DD (default: the latest receipt)."
}
},
"additionalProperties": false
}One product of the registry with its current prices by country, chain and store, in local currency and EUR, each with the day it was seen, its source and its evidence; per country the lowest price and the median over chains. Use "proof" to prove one of these prices against the published daily receipt. Costs 1 credit (0.002 USDC with x402).
| Argument | Type | Description |
|---|---|---|
| chain | string | Only this chain id (see the chains tool). |
| limit | integer | Offers per country (default 10). |
| status | string | "current" = seen in the latest run of its source; "last_seen" = the last price seen, older than the latest run. |
| country | array | Limit to these countries (ISO-2 country code in lower case (al, at, ba, be, bg, ch, cy, cz, de, dk, ee, es, fi, fr, gb, gr, hr, hu, ie, is, it, lt, lu, lv, mt, nl, pl, pt, ro, rs, se, si, sk, tr)); default all. |
| product* | string | Registry id (e.g. "1779"), "ean:<code>", "ian:<code>", or a barcode of 8–14 digits. |
{
"type": "object",
"required": [
"product"
],
"properties": {
"chain": {
"type": "string",
"maxLength": 40,
"description": "Only this chain id (see the chains tool)."
},
"limit": {
"type": "integer",
"default": 10,
"maximum": 100,
"minimum": 1,
"description": "Offers per country (default 10)."
},
"status": {
"enum": [
"all",
"current",
"last_seen"
],
"type": "string",
"default": "all",
"description": "\"current\" = seen in the latest run of its source; \"last_seen\" = the last price seen, older than the latest run."
},
"country": {
"type": "array",
"items": {
"enum": [
"al",
"at",
"ba",
"be",
"bg",
"ch",
"cy",
"cz",
"de",
"dk",
"ee",
"es",
"fi",
"fr",
"gb",
"gr",
"hr",
"hu",
"ie",
"is",
"it",
"lt",
"lu",
"lv",
"mt",
"nl",
"pl",
"pt",
"ro",
"rs",
"se",
"si",
"sk",
"tr"
],
"type": "string"
},
"description": "Limit to these countries (ISO-2 country code in lower case (al, at, ba, be, bg, ch, cy, cz, de, dk, ee, es, fi, fr, gb, gr, hr, hu, ie, is, it, lt, lu, lv, mt, nl, pl, pt, ro, rs, se, si, sk, tr)); default all."
},
"product": {
"type": "string",
"description": "Registry id (e.g. \"1779\"), \"ean:<code>\", \"ian:<code>\", or a barcode of 8–14 digits."
}
},
"additionalProperties": false
}The daily price index per country and category (median EUR price of products and the 7-day change), computed once a day from current prices. Without from/to: the latest day of each country. category "all" = the whole country. Costs 1 credit (0.002 USDC with x402).
| Argument | Type | Description |
|---|---|---|
| to | string | Last day, YYYY-MM-DD. |
| from | string | First day, YYYY-MM-DD. |
| country | array | Limit to these countries (ISO-2 country code in lower case (al, at, ba, be, bg, ch, cy, cz, de, dk, ee, es, fi, fr, gb, gr, hr, hu, ie, is, it, lt, lu, lv, mt, nl, pl, pt, ro, rs, se, si, sk, tr)); default all. |
| category | string | Category key such as "dairy-eggs", or "all". |
{
"type": "object",
"properties": {
"to": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Last day, YYYY-MM-DD."
},
"from": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "First day, YYYY-MM-DD."
},
"country": {
"type": "array",
"items": {
"enum": [
"al",
"at",
"ba",
"be",
"bg",
"ch",
"cy",
"cz",
"de",
"dk",
"ee",
"es",
"fi",
"fr",
"gb",
"gr",
"hr",
"hu",
"ie",
"is",
"it",
"lt",
"lu",
"lv",
"mt",
"nl",
"pl",
"pt",
"ro",
"rs",
"se",
"si",
"sk",
"tr"
],
"type": "string"
},
"description": "Limit to these countries (ISO-2 country code in lower case (al, at, ba, be, bg, ch, cy, cz, de, dk, ee, es, fi, fr, gb, gr, hr, hu, ie, is, it, lt, lu, lv, mt, nl, pl, pt, ro, rs, se, si, sk, tr)); default all."
},
"category": {
"type": "string",
"pattern": "^[a-z-]{1,40}$",
"description": "Category key such as \"dairy-eggs\", or \"all\"."
}
},
"additionalProperties": false
}Proof that oferoo.eu recorded a price on a day and did not change it since: for each price of the product in the country, the exact line of the published daily file, its Merkle path to the root of the day, the timestamp and the Sui / Base transactions of that root. Verify it yourself with the steps at /dovezi/<day>. Costs 1 credit (0.002 USDC with x402).
| Argument | Type | Description |
|---|---|---|
| day | string | Day, YYYY-MM-DD (default: the latest receipt). |
| chain | string | |
| limit | integer | Prices (proofs) returned. |
| country* | string | ISO-2 country code in lower case (al, at, ba, be, bg, ch, cy, cz, de, dk, ee, es, fi, fr, gb, gr, hr, hu, ie, is, it, lt, lu, lv, mt, nl, pl, pt, ro, rs, se, si, sk, tr) |
| product* | string | Registry id, "ean:<code>", "ian:<code>" or a barcode. |
{
"type": "object",
"required": [
"country",
"product"
],
"properties": {
"day": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Day, YYYY-MM-DD (default: the latest receipt)."
},
"chain": {
"type": "string",
"maxLength": 40
},
"limit": {
"type": "integer",
"default": 10,
"maximum": 50,
"minimum": 1,
"description": "Prices (proofs) returned."
},
"country": {
"type": "string",
"description": "ISO-2 country code in lower case (al, at, ba, be, bg, ch, cy, cz, de, dk, ee, es, fi, fr, gb, gr, hr, hu, ie, is, it, lt, lu, lv, mt, nl, pl, pt, ro, rs, se, si, sk, tr)"
},
"product": {
"type": "string",
"description": "Registry id, \"ean:<code>\", \"ian:<code>\" or a barcode."
}
},
"additionalProperties": false
}Find supermarket products in the European price registry by name (any language), brand or barcode. One typing mistake is forgiven. Returns product ids to use with get_product, compare_basket and proof. Optionally limited to one country and one category. Costs 1 credit (0.002 USDC with x402).
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| query* | string | A product name in any language, a brand, or a barcode (8–14 digits), e.g. "kiselo mlyako 3.6%" or "5998200464959". |
| offset | integer | |
| country | string | ISO-2 country code in lower case (al, at, ba, be, bg, ch, cy, cz, de, dk, ee, es, fi, fr, gb, gr, hr, hu, ie, is, it, lt, lu, lv, mt, nl, pl, pt, ro, rs, se, si, sk, tr) |
| category | string | Category key such as "dairy-eggs" (see price_index for the keys in use). |
{
"type": "object",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1
},
"query": {
"type": "string",
"maxLength": 120,
"description": "A product name in any language, a brand, or a barcode (8–14 digits), e.g. \"kiselo mlyako 3.6%\" or \"5998200464959\"."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 10000,
"minimum": 0
},
"country": {
"type": "string",
"description": "ISO-2 country code in lower case (al, at, ba, be, bg, ch, cy, cz, de, dk, ee, es, fi, fr, gb, gr, hr, hu, ie, is, it, lt, lu, lv, mt, nl, pl, pt, ro, rs, se, si, sk, tr)"
},
"category": {
"type": "string",
"pattern": "^[a-z-]{1,40}$",
"description": "Category key such as \"dairy-eggs\" (see price_index for the keys in use)."
}
},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 15, 2026.