Koskamo

Dealio MCP

An official read-only MCP server by dealio.be that allows AI assistants to query current promotions from over 50 Belgian retailers, search for deals, retrieve buying guides, and access consumer news. It provides direct links to the source site for each discount.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Dealio MCP logo, by dealio.beVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by dealio.be
MCP endpoint (Streamable HTTP)
https://dealio.be/mcp
Vendor documentation

What you can do with it

  • Search for current promotions by product, store, or category
  • Retrieve detailed information for a specific deal
  • Get meal ideas based on current supermarket discounts
  • Access consumer news and product recall alerts

Source and maintenance

Vendor evidenceRegistry 1.0.0

Protocol and capabilities

Server
dealio 1.0.0
MCP protocol
2025-06-18
Tools
10 advertised
Resources
1 advertised
Resource templates
0 advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "resources": {
    "subscribe": false,
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Promotions from 50+ Belgian retailers (supermarkets, drugstores, DIY, electronics, toys, pets, fashion), every discount worked out per item. Queries in Dutch work best (e.g. 'wasmiddel', 'airfryer', 'hondenvoer'). Every result has a `link` on dealio.be that opens the promotion: always give the user that link, it is the only way to the promotion (the tools give no links to the stores, except publish_card). To publish or share one promotion elsewhere (a social post, a message), call publish_card with its id: it returns the promotion as a square picture, a short link dealio.be/l/<code> that counts clicks and sends the reader to the store, the store's own page and a caption. Prices are what the stores showed when the data was refreshed (see `updated`); the store has the last word. Every store is fetched once a day, in the morning (the first from 05:00 Belgian time), and the data is updated as each store finishes; when a fetch fails, the store's previous promotions stay: list_stores says per store when it was last fetched. Quote prices as given: price per item, with the regular price when known. When you present several promotions, also give the link that opens them together on one page (dealio.be/lijst/…): search_deals and get_meal_ideas end with one for the promotions they list; list_link makes one for your own pick across searches, with a title. For 'which one should I buy' questions about a kind of appliance, call get_buying_guide first (researched buying guides: models compared, what each feature does and when you need it, tests and buyer ratings, every statement with its source), then get_model for one model. Name the sources the guide gives and link the guide's page. For 'what can I cook with this week's promotions' questions, call get_meal_ideas: dishes whose main ingredients are in promotion at the food stores the user shops at, on the day they shop, with the promotions and their links (ideas for a shopping list, not recipes). For 'what is the news about <store>' or 'any recalls / price news' questions, call get_news: Belgian consumer news of the last days (prices, promotions, stores, recalls, tests) summarised by dealio with the source and its article; filter by store or theme. For 'which actions run at <store>', 'is there 1+1 / cashback / geen btw / gratis levering / a voucher somewhere' questions, call get_campaigns: the store-wide campaigns (winkelacties) read from the stores' own sites, a percentage on a whole range or brand, multi-buy, cashback, free delivery, vouchers, loyalty-card deals, sales and announced ones, each with its terms and the promotions on dealio that fall under it. search_deals is for one product's price; get_campaigns for an action over a range, a brand, the basket or the whole store.

Tools

10 advertised

search_deals
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search the current promotions at Belgian retailers by product, brand or store, with optional filters. Returns the best matches (biggest per-item discount first unless sorted otherwise), each with price, discount, validity and a link to open it.

search_deals input schema
{
  "type": "object",
  "properties": {
    "sort": {
      "enum": [
        "relevance",
        "discount",
        "price",
        "ends"
      ],
      "type": "string",
      "description": "Default: relevance when there is a query, else discount."
    },
    "limit": {
      "type": "integer",
      "maximum": 25,
      "minimum": 1,
      "description": "Results to return (default 10)."
    },
    "query": {
      "type": "string",
      "description": "Words from the product, brand or kind of promotion, e.g. 'koffiecapsules', 'Philips', '1+1 gratis'. Optional."
    },
    "store": {
      "type": "string",
      "description": "Store name or slug, e.g. 'bol', 'Colruyt', 'albertheijn'. See list_stores. Optional."
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "description": "Skip this many results (for the next page)."
    },
    "category": {
      "type": "string",
      "description": "Category slug or name: voeding, drank, verzorging, huishouden, baby, dier, elektronica, huis-tuin, mode, speelgoed, sport."
    },
    "max_price": {
      "type": "number",
      "description": "Maximum price per item in euro."
    },
    "min_discount": {
      "type": "integer",
      "maximum": 99,
      "minimum": 1,
      "description": "Minimum discount per item, in percent."
    },
    "ends_within_days": {
      "type": "integer",
      "maximum": 60,
      "minimum": 0,
      "description": "Only promotions that end within this many days."
    }
  }
}
search_deals annotations
{
  "title": "Search Belgian deals",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_deal
Advertised by the server during the last successful anonymous check.
Advertised read-only

One promotion in full, by the id a search result gave.

get_deal input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "The `id` of a search result."
    }
  }
}
get_deal annotations
{
  "title": "Get one deal",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_buying_guide
Advertised by the server during the last successful anonymous check.
Advertised read-only

A researched buying guide (koopwijzer) for a kind of product, e.g. 'airfryer': the models compared (key specs, today's lowest promotion), what each feature does, when you need it and when not, and general facts, every statement with its source. Use it for 'best <product>' and 'which <product> should I buy' questions ('beste airfryer', 'welke wasmachine kopen'): it does not crown a winner, it gives the cited test and buyer scores with their sources. Without a type: the list of guides.

get_buying_guide input schema
{
  "type": "object",
  "properties": {
    "type": {
      "type": "string",
      "description": "Kind of product, Dutch or English, e.g. 'airfryer', 'heteluchtfriteuse'. Optional."
    }
  }
}
get_buying_guide annotations
{
  "title": "Get a buying guide",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_model
Advertised by the server during the last successful anonymous check.
Advertised read-only

One model from a buying guide in full: the maker's specs, what tests and buyers say (score, summary, pros, cons, source), facts, and today's promotions for it with their links.

get_model input schema
{
  "type": "object",
  "required": [
    "model"
  ],
  "properties": {
    "model": {
      "type": "string",
      "description": "Model code or name, e.g. 'NA352', 'Philips NA555/00', 'MAF462B1', or the id get_buying_guide gave."
    }
  }
}
get_model annotations
{
  "title": "Get one model",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_stores
Advertised by the server during the last successful anonymous check.
Advertised read-only

The stores in the data: slug, name, number of current promotions, the median discount per item where known, when the store was last fetched, and the pages of the store and its weekly overview. Also lists the category slugs.

list_stores input schema
{
  "type": "object",
  "properties": {}
}
list_stores annotations
{
  "title": "List stores",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
publish_card — Publish a promotion
Advertised by the server during the last successful anonymous check.
Advertised read-only

One promotion ready to publish elsewhere: the card as a picture (PNG, the same card the site's share button makes: store, photo, title, what you pay, regular price, label, end date; square by default, or 4:5 feed, 9:16 story, 1200x630 link preview; four designs: a shelf tag, b till receipt, d large photo, f 'Vandaag €x goedkoper' with the price large), a short link dealio.be/l/<code> that counts the click and sends the reader straight to the store's page, the store's page itself, the dealio link and a caption. Use the id from search_deals or get_deal.

publish_card input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "the promotion id (search_deals / get_deal)"
    },
    "size": {
      "enum": [
        "1080x1080",
        "1080x1350",
        "1080x1920",
        "1200x630"
      ],
      "type": "string",
      "description": "1080x1080 square (default), 1080x1350 feed, 1080x1920 story, 1200x630 link preview"
    },
    "style": {
      "enum": [
        "a",
        "b",
        "d",
        "f"
      ],
      "type": "string",
      "description": "a shelf tag, b till receipt, d large photo, f 'how much do you save today' (only with a saving). Default: the promotion's own."
    }
  }
}
publish_card annotations
{
  "title": "One promotion as a card to share",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_link
Advertised by the server during the last successful anonymous check.
Advertised read-only

One link that opens several promotions together on one page of dealio.be (dealio.be/lijst/…), in the order given, with an optional title: for the promotions you propose to the user after one or more searches, so they need not open them one by one. Use the ids from search_deals, get_deal or get_meal_ideas (2 to 30). Unknown ids are reported and left out.

list_link input schema
{
  "type": "object",
  "required": [
    "ids"
  ],
  "properties": {
    "ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 30,
      "minItems": 1,
      "description": "The promotion ids, in the order to show them."
    },
    "title": {
      "type": "string",
      "maxLength": 60,
      "description": "A short title for the page, e.g. 'Coca-Cola per liter' or 'Boodschappen voor zaterdag'. Optional."
    }
  }
}
list_link annotations
{
  "title": "One link for several promotions",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_meal_ideas
Advertised by the server during the last successful anonymous check.
Advertised read-only

Meal ideas from the promotions (kookinspiratie): the dishes whose main ingredients are all in promotion at the given Belgian food store(s) on the day the user shops, with those promotions (price, deal, until when, link), the side ingredients that are in promotion too, and what else is needed that is not. Dish ideas for a shopping list, not recipes. Without stores: per food store how many dishes its promotions make today.

get_meal_ideas input schema
{
  "type": "object",
  "properties": {
    "day": {
      "type": "string",
      "description": "The shopping day: an ISO date (YYYY-MM-DD), 'today', 'tomorrow' or a weekday ('zaterdag', 'saturday'). Within the next 7 days. Default: today."
    },
    "limit": {
      "type": "integer",
      "maximum": 25,
      "minimum": 1,
      "description": "Dishes to return (default 10)."
    },
    "moment": {
      "enum": [
        "hoofdgerecht",
        "soep",
        "lunch",
        "ontbijt",
        "dessert",
        "aperitief"
      ],
      "type": "string",
      "description": "Kind of dish. Default: hoofdgerecht (main course)."
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "description": "Skip this many dishes (for the next page)."
    },
    "stores": {
      "type": "string",
      "description": "One or more food stores, comma separated, by name or slug, e.g. 'Aldi', 'aldi, lidl', 'Delhaize'. Optional."
    },
    "vegetarian": {
      "type": "boolean",
      "description": "Only vegetarian dishes, and only promotions without meat or fish. Default false."
    }
  }
}
get_meal_ideas annotations
{
  "title": "Meal ideas from the promotions",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_news
Advertised by the server during the last successful anonymous check.
Advertised read-only

Belgian consumer news for people who want to save (dealio.be/nieuws/): prices, promotions, store openings and incidents, product recalls (FAVV), tests (Test-Aankoop), taxes and energy, summarised by dealio in two or three sentences with our own headline, the source and the link to its article, newest first. Filter by store (name or slug) or theme. Each item has dealio's link (the item on the news page) and the store pages it names.

get_news input schema
{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "description": "Words to find in the headline or summary (Dutch). Optional."
    },
    "limit": {
      "type": "integer",
      "maximum": 25,
      "minimum": 1,
      "description": "Items to return (default 10)."
    },
    "store": {
      "type": "string",
      "description": "Only news that names this store, by name or slug, e.g. 'Delhaize', 'aldi'. Optional."
    },
    "theme": {
      "enum": [
        "prijzen",
        "promoties",
        "winkels",
        "terugroeping",
        "test",
        "belasting-energie",
        "besparen",
        "koopjes",
        "andere"
      ],
      "type": "string",
      "description": "Only this theme. Optional."
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "description": "Skip this many items (for the next page)."
    }
  }
}
get_news annotations
{
  "title": "Consumer news",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_campaigns
Advertised by the server during the last successful anonymous check.
Advertised read-only

The store campaigns (winkelacties) running at Belgian retailers, as read from the stores' own sites (dealio.be/acties/): a percentage on a whole range, brand or store, multi-buy (1+1, 2e halve prijs), cashback from the maker, a voucher, a gift, free delivery, loyalty-card deals, sales, no VAT, and announced ones. Not one product's price (that is search_deals). Each with store, kind, the advantage in a few words, what it applies to, condition, code, validity, whether it works on products or on the whole basket, dealio's link, and the promotions on dealio that fall under it (with their links). Filter by store, kind or words.

get_campaigns input schema
{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "description": "Words to find in the campaign's title, what it applies to, its condition or code (Dutch), e.g. 'verf', 'Nivea', 'speelgoed'. Optional."
    },
    "kind": {
      "enum": [
        "btw",
        "procent",
        "meerkoop",
        "kortingsbon",
        "cadeau",
        "cashback",
        "levering",
        "klantenkaart",
        "solden",
        "inruil",
        "aangekondigd",
        "andere"
      ],
      "type": "string",
      "description": "Only this kind: btw (no VAT), procent (a percentage on a range), meerkoop (1+1, 2e halve prijs), kortingsbon (voucher), cadeau (gift), cashback, levering (delivery), klantenkaart (loyalty card), solden (sales), inruil (trade-in), aangekondigd (announced, not yet running), andere. Optional."
    },
    "limit": {
      "type": "integer",
      "maximum": 25,
      "minimum": 1,
      "description": "Campaigns to return (default 10)."
    },
    "reach": {
      "enum": [
        "product",
        "mandje"
      ],
      "type": "string",
      "description": "product: the advantage is on certain products (a brand, a range, a category); mandje: on the basket, the order or the whole store. Optional."
    },
    "store": {
      "type": "string",
      "description": "Store name or slug, e.g. 'Kruidvat', 'gamma'. See list_stores. Optional."
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "description": "Skip this many campaigns (for the next page)."
    }
  }
}
get_campaigns annotations
{
  "title": "Store campaigns",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

1 advertised

dealio-cards — Dealio: promotions as cards

Advertised by the server during the last successful anonymous check.

The promotions of search_deals, list_link and get_meal_ideas as cards with tick-off boxes; every link opens dealio.be.

dealio-cards URI
ui://dealio/cards

MIME type: text/html;profile=mcp-app

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1030 ms
95th percentile latency
1030 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1030 ms · metadata changed · 10 tool(s), 1 resource(s), 0 resource template(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http dealio-mcp https://dealio.be/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add dealio-mcp --url https://dealio.be/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable dealio-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "dealio-mcp": {
      "url": "https://dealio.be/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "dealio-mcp": {
      "type": "streamableHttp",
      "url": "https://dealio.be/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start dealio-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "dealio-mcp": {
      "type": "http",
      "url": "https://dealio.be/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http dealio-mcp https://dealio.be/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "dealio-mcp": {
      "url": "https://dealio.be/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "dealio-mcp": {
      "serverUrl": "https://dealio.be/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Dealio MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Dealio MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing