Skip to main content
Glama

Server Details

Irish grocery prices at Aldi, Tesco, SuperValu, Dunnes and Lidl: compare, baskets, offers, history

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over the last 24 hours
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
–
Claude
BasketWatch

TDQS

A3.8/5.0

Scored across 18 tools

Disambiguation3/5

Most tools are distinguishable (search_products vs find_products vs list_products differ by filter depth, and best_deals vs get_promotions differ by deal-vs-promo scope), but several clusters overlap. compare_prices and compare_price_across_stores sound nearly identical and both compare five stores, and price_movements, recent_price_changes, get_price_history and price_basket_over_time all answer 'how did prices change', forcing an agent to read long descriptions to pick correctly.

Naming Consistency4/5

Names are consistently snake_case and mostly follow verb_noun or clear noun_phrase patterns (search_products, get_product_details, check_credits). The main blemish is the colliding pair compare_prices / compare_price_across_stores, plus a mix of bare noun names (status, best_deals) alongside verb-led ones, but nothing is unreadable.

Tool Count4/5

18 tools is on the heavy side but each maps to a real facet of the domain: catalogue browsing, attribute search, deals, promotions, history, basket pricing, list churn, barcode lookup and account status. A couple of the price-movement tools could be merged, but nothing feels gratuitous.

Completeness4/5

The surface covers the full lifecycle an agent would need: discovery (search/find/list), detail (product details, history), money (deals, promotions, basket, basket over time), volatility (movements, recent changes, new/removed products) and account state (credits, status). Minor gaps remain: no way to enumerate valid stores or category/aisle names (agents must guess strings), and no saved watchlists or price alerts.

Available Tools

18 tools
best_dealsBest real deals todayA
Read-onlyIdempotent
Inspect

Today's real deals at Aldi, Tesco, SuperValu, Dunnes Stores and Lidl: offers at the lowest price on record for that product at that shop, or the first offer it has ever had. Each is measured against the product's own price history, not the shop's was price, so a recurring or long-running price does not count as a deal.

The biggest saving comes first, against the usual price or the price it
typically sold at, whichever is less, so a product that is usually on
offer does not lead. By that saving, the shops take turns among deals
that save alike, so one shop does not fill the top of the list, and no
deal comes ahead of one that saves more than twice as much. Every
promotion on sale is judged, so this covers them all, and offset reaches
every deal. Covers food, drinks, alcohol, household, baby and pet
products unless another aisle is named. Tobacco, infant formula and
medicines are never included.

Args:
    query: words in the product's name or brand, e.g. "heinz" or
        "baileys": a product or a brand, never an aisle (few wines have
        the word wine in their name).
    category: an aisle or shelf, e.g. "frozen", "household" or
        "toiletries". "alcohol" is every drink above 0.5% ABV at the
        five chains, low-alcohol ones included. "alcohol free" is the
        drinks of 0.5% ABV or less: by the strength on record, by a name
        that says alcohol free, non-alcoholic, 0.0 or de-alcoholised, or,
        with no strength on record, by a shelf that says so (a shop's
        shared "low and no" shelf alone does not count); "low and no"
        adds the low-alcohol drinks on those shelves. The drinks aisles
        are "wine", "beer", "cider", "spirits" (liqueurs included),
        "liqueurs" and "premixes" (alcopops and canned cocktails), or a
        list such as "beer and cider". Together they hold all of
        "alcohol" but a drink whose shelf, name, type and strength place
        it in none of them, such as a beer shelved only under a shop's
        whole drinks department with only its brand for a name. "drinks"
        is every drink, alcohol included; "soft drinks" leaves alcohol
        out.
    store: one of "aldi", "tesco", "supervalu", "dunnes", "lidl". Leave it
        out for all five.
    limit: how many deals to return in one page (default 20, max 200).
    offset: how many deals to skip, for the next page (default 0).

Returns {"as_of", "note", "total", "deals"}. total counts every deal for
this search, across all pages. Each deal has name, store, pack,
you_pay, regular_price, saving_eur, saving_pct, card_needed, buy_quantity,
offer_ends, url and category, and the record behind it: kind, lowest_since,
low_before, low_before_date, offer_start, run_start, days_on_offer,
started_today, cut_today, yesterday_price, back_after_days, typical_price,
offer_share and abv. started_today is true only for an offer that began on
the collection day; an offer running for weeks whose price fell that day
has cut_today instead, and offer_start says since when it has been on
offer. One credit per deal returned.

Inputs: limit, query, store, offset, +1 more. Returns: note, as_of, deals, total

check_creditsYour credit balanceA
Read-onlyIdempotent
Inspect

How many BasketWatch credits the signed-in account has left, and when they expire. Free to call. One credit is one record returned.

Inputs: no named parameters. Returns: plan, metered, expiring, next_expiry, +2 more

compare_price_across_storesCompare a product across supermarketsA
Read-onlyIdempotent
Inspect

Raw per-store search results for a product name at all five supermarkets: every matching line at each store, including other pack sizes, without matching the same product across stores. Returns a dict keyed by store, with up to limit_per_store matching products per store.

Args:
    query: product-name substring (e.g. "heinz baked beans 415g").
    limit_per_store: how many matches per store (default 5).

Inputs: query (required), limit_per_store.

compare_pricesWhere is a product cheapestA
Read-onlyIdempotent
Inspect

Find where a product is cheapest right now. Matches the same product at Aldi, Tesco, SuperValu, Dunnes Stores and Lidl and returns each store's current price side by side, with unit prices, offers and member prices (Tesco Clubcard, SuperValu Real Rewards, Lidl Plus). To list the products most stores stock, leave out query and set min_stores, e.g. min_stores=5 for every product matched at all five. Free: no BasketWatch account needed.

Args:
    query: the product, e.g. "heinz ketchup" or "kerrygold butter 454g".
        Optional when min_stores is given.
    limit: how many matched products to return (default 5, max 50).
    min_stores: only products matched at at least this many stores, 2 to
        5, with or without query.

Returns {"as_of", "query", "matches": [{"product", "pack", "prices":
{store: {name, price, unit_price, unit_basis, offer_text, was_price,
offer_ends, clubcard_price, url}}, "cheapest_store"}]}. A store missing from "prices" did not have that product in its online range today and may still sell it in store: say "not found online", not that the store lacks it. offer_ends is the last day an
offer applies (Irish time): say when an offer ends, as online orders are
priced for the delivery or collection day.

Inputs: limit, query, min_stores. Returns: as_of, query, matches

find_productsFind products by ingredients and nutritionA
Read-onlyIdempotent
Inspect

Find products that meet ingredient, nutrition, alcohol or offer conditions, optionally sorted. For questions like "biscuits without palm oil", "nut-free snacks at Tesco", "vegan chocolate", "cereal with the least sugar", "high protein yoghurt", "bread with the fewest ingredients", "alcohol-free beer", "low salt soup" or "cheapest olive oil at Aldi". Every product comes with its nutrition, ingredients, ingredient count, country of origin where stated and today's price. Fibre and saturated fat are not recorded.

Ingredient words. exclude_ingredients are ingredients a product is free
of; include_ingredients ones it contains. These words are expanded to the
label terms they cover: palm oil, nuts (includes peanuts), peanuts, gluten,
milk (dairy), eggs, soya, sesame, mustard, celery, fish, crustaceans,
molluscs, shellfish, sulphites, lupin, gelatine, alcohol, added sugar,
sweeteners, pork, meat, vegetarian (meat, fish, gelatine and other
animal-derived ingredients) and vegan (vegetarian plus milk, eggs, honey and
other animal products). Any other word is matched as written, e.g.
"coconut" or "oats".

With no store, results alternate across the stores (each store's best
match, then each store's next), and matched_by_store gives each store's
full count.

A product whose ingredient list or nutrition is not on record, or whose
ingredient list on record is incomplete, is left out, never assumed to
pass: left_out_unknown counts them, left_out_by_reason gives the reasons,
and caveats lists known gaps (Aldi's own ingredient lists are often cut
short, so an Aldi product is offered as free from something only when its
full list comes from the same barcode at Tesco, SuperValu or Dunnes). Claims printed in
a product's NAME, such as "gluten free", "lactose free", "alcohol free" or
"vegan", are matched through query; exclude_ingredients also checks the
ingredients. Alcohol strength is recorded for most SuperValu, Dunnes and
Tesco drinks but few at Aldi or Lidl; "alcohol free" and "0.0" in query
match drinks named that way.

Answers come from the ingredient lists and nutrition the retailers publish.
Where a retailer gives no list, it may come from the same barcode at another
retailer or from Open Food Facts (ingredients_source); an Open Food Facts
list is never used to show a product is free from something.
"Free from" means none of the listed ingredients names it; not every
"may contain" warning is covered. Results carry a note that this is information
only. Each product returned costs one credit.

Args:
    query: product words, e.g. "biscuits", "crisps", "dark chocolate".
        Needed unless category is given.
    store: aldi, tesco, supervalu, dunnes or lidl. Leave out to search all five.
    category: an aisle or shelf to narrow by, e.g. "Breakfast Cereals"
        or "Kefir". A store with no aisle or shelf of that name is searched
        by product name instead, and caveats say so.
    exclude_ingredients: ingredients a product has to be free of, e.g.
        ["palm oil"], ["nuts", "sesame"], ["vegan"]. A product whose
        allergy advice says it contains or may contain one is left out
        too, and counted in left_out_may_contain.
    include_ingredients: e.g. ["oats"].
    max_sugar_g, max_salt_g, max_fat_g, max_carbs_g, min_protein_g:
        grams per 100g or 100ml, e.g. max_sugar_g=5.
    max_kcal: kilocalories per 100g or 100ml.
    max_abv, min_abv: alcohol by volume, percent.
    max_ingredients: at most this many listed ingredients, e.g. 5. A
        compound ingredient's own bracketed list counts as one.
    max_additives: at most this many additives in the product's whole
        ingredient list, e.g. 0 for none: each E-number or additive by name
        once (preservatives, emulsifiers, raising agents, acidity regulators,
        thickeners, colours and the like); flavourings, vitamins, minerals and
        colouring foods are not additives. A list that is cut short or comes
        from Open Food Facts is left out as unknown, unless what it shows is
        already too many.
    on_offer: only products on promotion or with a member price
        (Tesco Clubcard, SuperValu Real Rewards, Lidl Plus).
    origin: country of origin, e.g. "Ireland" (or "Irish"); several may be
        given comma-separated. A product matches only when every country its
        label states is one asked for: "Made in Ireland" with "EU chicken" is
        not Irish chicken, and is counted in left_out_partly_from_origin.
        Northern Ireland answers for Ireland (one island, one Bord Bia
        scheme), not the other way round. Products with no stated origin are
        counted in left_out_unknown, not returned. A provenance word in the
        query works too: "Irish honey" searches honey from Ireland.
    sort_by: price, unit_price (per kg or litre), sugar, salt, fat, carbs,
        protein, kcal, abv, ingredients or additives (fewest first). Products that
        are the kind of thing searched for rank ahead of name-only matches
        (name_match_only), so "chocolate" sorted by price does not lead
        with chocolate-flavour popcorn.
    descending: true for highest first, e.g. most protein.
    limit: most products to return (default 10, max 50). When a search excludes an allergen, every product carries allergy_check. Show that line with every product you mention, word for word.

Inputs: limit, query, store, origin, +16 more. Returns: note, as_of, caveats, matched, +11 more

get_price_historyPrice historyA
Read-onlyIdempotent
Inspect

A product's recorded daily prices over a date range. BasketWatch has kept every night's price at Aldi, Tesco, SuperValu and Dunnes Stores since May 2026 and at Lidl since 17 October 2026, and, with with_nutrition_and_ingredients, each day's nutrition per 100g or 100ml and ingredients list as the retailer's own data stated them, kept since 16 October 2026: for questions like "has the sugar in Frosties changed".

Takes product ids (as returned in product results; an Aldi id has no store
prefix, and "aldi:" in front of one is accepted) or a query; with a query,
the closest matching products are looked up first. A range returns one row
per product per day, and each row costs one credit; with from_date equal
to to_date, one day's price is returned.

Every product gets the same days. When products x days would pass the row
limit, the range is shortened to its most recent days for all of them and
note says so; ids with no price in the range are listed in not_found.

Args:
    product_ids: e.g. ["tesco:300793546", "dunnes:100873410",
        "000000000000387044"], up to 50; each id's store is taken from it.
    query: product name words, used when no product_ids are given.
    store: aldi, tesco, supervalu, dunnes or lidl, to narrow a query.
        Leave it out to look in all five.
    from_date: first day, YYYY-MM-DD. Defaults to 30 days before to_date.
    to_date: last day, YYYY-MM-DD. Defaults to today.
    limit: most rows to return in total (default and maximum 200).
    with_nutrition_and_ingredients: true adds nutrition_per_100 to every
        row and the ingredients list on each product's first day and on
        any day it changed. Days before 16 October 2026 have none.

Returns rows (id, name, store, scrape_date, price, unit_price, unit_basis,
clubcard_price, offer_text, was_price), the days covered, not_found, note.

Inputs: limit, query, store, to_date, +3 more. Returns: note, rows, to_date, products, +2 more

get_product_detailsNutrition, ingredients and product detailsA
Read-onlyIdempotent
Inspect

Nutrition per 100g or 100ml (energy, fat, carbohydrate, sugars, protein, salt), the ingredients list as printed (allergens included), how many ingredients it lists, country of origin, alcohol strength, pack size, description and today's price, for particular products.

Products are looked up by product id (store-prefixed, as returned in
product results), by the retailer's own item numbers (skus with store, as
printed on its receipts), or by name (query). ingredients_incomplete marks
an ingredient list on record that is cut short, which cannot show that an
ingredient is absent. Results carry a note that nutrition and ingredients
are for information only. Each product returned costs one credit.

Args:
    query: product name words, e.g. "kellogg's corn flakes".
    product_ids: e.g. ["tesco:300793546", "dunnes:100873410"], up to 50.
    skus: the store's own item numbers, e.g. ["100873410"], up to 50;
        needs store. An Aldi article number can return several variants.
    store: aldi, tesco, supervalu, dunnes or lidl: required with skus,
        narrows a query; leave out for all five.
    limit: most products to return for a query (default 5, max 50).

Inputs: skus, limit, query, store, +1 more. Returns: note, products

get_promotionsCurrent promotions at a supermarketA
Read-onlyIdempotent
Inspect

List products currently on promotion at a given supermarket, the biggest saving the shop states first. Every promotion can be reached: each call returns one page, and offset moves through the whole list.

Returns offer label (e.g. "3 for €5", "SAVE €0.75"), was-price,
validity window, offer_ends (the last day the offer applies, Irish
time), and where applicable Tesco Clubcard prices,
SuperValu Real Rewards prices, Dunnes member offers or Lidl Plus prices
(scan the Lidl Plus app at the till).

Args:
    store: one of "tesco", "supervalu", "dunnes", "lidl". (Aldi doesn't
        publish multibuy promos so isn't supported here.)
    limit: how many promotional rows to return in one page (default 25,
        max 200).
    offset: how many rows to skip, for the next page (default 0). A page
        shorter than limit is the last one.

Inputs: store (required), limit, offset. Returns: result

list_productsBrowse the catalogueA
Read-onlyIdempotent
Inspect

Page through a supermarket's full catalogue, with no search terms or filters.

Args:
    store: "aldi" | "tesco" | "supervalu" | "dunnes" | "lidl".
    limit: page size (default 100, max 200).
    offset: pagination offset.

Inputs: store (required), limit, offset. Returns: result

lookup_barcodeLook up products by barcodeA
Read-onlyIdempotent
Inspect

Find the products carrying one or more barcodes (GTIN, EAN or UPC) at Aldi, Tesco, SuperValu, Dunnes Stores and Lidl in one call.

Codes are accepted exactly as printed: leading zeros, spaces and hyphens
are ignored. Needs a signed-in BasketWatch account.

Args:
    codes: one barcode, or up to 100 separated by commas
        (e.g. "5000127014084" or "5000127014084,5000157024671").
    store: optionally restrict to one of "aldi", "tesco", "supervalu",
        "dunnes" or "lidl".
    include_copy: also return ingredients and per-100g nutrition where
        the retailer publishes them.

Returns {"products": [...], "not_found": [...], "invalid": [...]}. Each
product row carries store, matched_barcodes, name, brand, pack_size,
price and its full barcodes list. One credit per barcode found, however
many retailers stock it; codes with no match cost nothing.

Inputs: codes (required), store, include_copy.

newly_added_productsNewly stocked productsB
Read-onlyIdempotent
Inspect

Products newly listed at a supermarket within a configurable lookback window: range additions and new launches.

Args:
    store: "aldi" | "tesco" | "supervalu" | "dunnes" | "lidl".
    days_back: how many days back to look (default 7 = since last scrape).
    limit: how many new products to return.

Inputs: store (required), limit, days_back. Returns: result

price_basketPrice a shopping list or receiptA
Read-onlyIdempotent
Inspect

Price a whole shopping list, or every line of a grocery receipt (up to 100 lines in one call), at Aldi, Tesco, SuperValu, Dunnes Stores and Lidl: each item matched to the same product at every store, the cheapest store for each item, each store's basket total, and a cheaper product of the same kind (often own-label) where one exists.

Each line takes name (plain words with brand and size, e.g. "avonmore fresh
milk 2l"; receipt abbreviations such as "AVNMR FRSH MLK 2L" match poorly)
and optionally sku (the retailer's item number as printed on its receipts;
the name is used when the number is not found), barcode, store, quantity,
and paid (the line total, which gives the saving against what was paid).
Irish product names say "low fat milk" for what the UK calls "semi
skimmed". Bags, deposits, discounts and totals are not products.

Returns, per line, the match and matched_by (sku, barcode or name), the
cheapest store and price, a cheaper alternative with its pack size and, for
a receipt, price_at_store_bought; then each store's total with its
items_missing, cheapest_complete_store, mix_and_match_total and not_found.
Prices are each retailer's online shelf price from the overnight
collection; in-store prices can differ. Member prices (Tesco Clubcard,
Lidl Plus) are reported separately. Each matched item costs one credit;
items not found are free.

Args:
    items: e.g. [{"sku": "100685955", "name": "dunnes baked beans",
        "quantity": 2, "paid": 1.30}, {"name": "brennans wholemeal bread"}].
    store: the receipt's supermarket (aldi, tesco, supervalu, dunnes or
        lidl), used for any line that does not name its own.

Inputs: items (required), store. Returns: note, as_of, items, not_found, +10 more

price_basket_over_timeWhat a basket cost on an earlier dateA
Read-onlyIdempotent
Inspect

How the cost of the same basket changed between two dates, at the store it was bought from: each product's price on both dates, whether it was on promotion, the basket total on each date, and the products that moved it. BasketWatch has recorded every product's price every night since May 2026 (Lidl's since 17 October 2026). Up to 100 lines per call; each line takes name, sku (the retailer's printed item number, with the line's words in name), barcode, store and quantity.

change_pct is the change in what the basket cost (promotions included);
shelf_change_pct is regular prices only, so the gap between the two is
promotions starting or ending, not price rises. biggest_rises and
biggest_falls list the lines that moved most; pack_changed marks a product
whose pack size changed, confirmed over three days of records (a smaller
pack at the same price is a hidden rise). Lines in not_compared were not
found, or not sold on one of the dates.

Each product compared costs one credit.

Args:
    items: e.g. [{"sku": "100858349", "quantity": 2}, {"name": "brennans wholemeal bread"}].
    from_date: the earlier date, YYYY-MM-DD, e.g. "2026-08-06".
    to_date: the later date, YYYY-MM-DD; defaults to today.
    store: the receipt's supermarket (aldi, tesco, supervalu, dunnes or lidl).

Inputs: items (required), from_date (required), store, to_date. Returns: note, items, change, to_date, +11 more

price_movementsPrice movements in a categoryA
Read-onlyIdempotent
Inspect

How a whole category's prices moved between two dates, in one call: the biggest regular-price rises and falls, promotions starting and ending, member price changes (Tesco Clubcard, SuperValu Real Rewards, Lidl Plus) and pack-size changes, kept apart, with a summary over every product compared (average and median shelf change, counts of rises and falls) overall and per store.

shelf_rise and shelf_fall are changes to the regular price;
promotion_started and promotion_ended are changes in what was paid while
the regular price stayed the same (a product at 18 euro on promotion and 23
euro after is a promotion ending, not a 27.8% price rise); loyalty_change
is a member price moving; pack_change is the same product in a different
pack size, confirmed over three days of records (a smaller pack at the same
price is a hidden rise); was_price_change is an offer running at both
dates while only its "was" price moved, kept out of the shelf figures
because nobody paid it. Averages are geometric, so a half-price offer
starting and ending cancel out; average_member_paid_change_pct uses member
prices where they apply.

Each mover returned costs one credit; the summaries are free.

Args:
    from_date: the earlier date, YYYY-MM-DD (prices recorded since May 2026).
    to_date: the later date, YYYY-MM-DD; defaults to today.
    group: a kind of product: beer, cider, wine, spirits, alcohol, or any
        product type such as breakfast cereal, butter, coffee, crisps,
        nappies. Narrower words work too ("vodka", "red wine").
    query: product or brand words, with or without group
        (e.g. "guinness").
    category: an aisle name to narrow by.
    store: aldi, tesco, supervalu, dunnes or lidl; leave out for all five.
    kinds: which lists to return (default all seven).
    rank_by: "pct" (default) or "eur".
    limit: most products per list (default 10, max 50).

Inputs: from_date (required), group, kinds, limit, +5 more. Returns: note, movers, summary, to_date, +2 more

recent_price_changesRecent price changesA
Read-onlyIdempotent
Inspect

Price movements at one supermarket between the latest nightly snapshot and the previous one: shelf price rises and falls with old price, new price and % change, and promotions starting or ending listed separately (an offer ending is not a price rise).

Args:
    store: "aldi" | "tesco" | "supervalu" | "dunnes" | "lidl".
    limit: how many movers to return (default 25).

Inputs: store (required), limit. Returns: The /changes payload. Shelf moves, promotions and loyalty-card changes are deli…

removed_productsDelisted productsB
Read-onlyIdempotent
Inspect

Products that have disappeared from a supermarket's catalogue in the given lookback window: delistings and range cuts.

Args:
    store: "aldi" | "tesco" | "supervalu" | "dunnes" | "lidl".
    days_back: how many days back to consider (default 7).
    limit: how many removed products to return.

Inputs: store (required), limit, days_back. Returns: result

search_productsSearch Irish supermarket productsA
Read-onlyIdempotent
Inspect

Search products by name across one or all Irish supermarkets.

Args:
    query: words to match in product names, case-insensitive
        (e.g. "heinz baked beans", "kerrygold butter", "pringles").
    store: optionally filter to one of "aldi", "tesco", "supervalu",
        "dunnes", "lidl". Leave it out to search all five.
    limit: how many results to return in total (default 10).

Returns the matching product rows: store, SKU id, name, brand, price,
unit_price (€/kg or €/L), pack_size, category_path, url. Matches on the
name only: no ingredient, nutrition or offer filters, and no price sorting.

Inputs: query (required), limit, store. Returns: result

statusData freshness and coverageB
Read-onlyIdempotent
Inspect

A freshness snapshot per supermarket: products tracked, products on promotion, the last collection date and the status of the most recent run.

Inputs: no named parameters. Returns: as_of, status, stores

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      B
      maintenance
      MCP server for Danish grocery stores with home delivery: nemlig.com, BilkaToGo and REMA 1000. It searches offers, compares a whole basket across stores and fills the cheapest cart, but never orders or pays.
      103
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables users to compare prices, track budgets, and find promotional deals across major Dutch supermarkets and drugstores. It supports automated shopping list optimization, meal planning, and price history alerts for stores like Albert Heijn, Jumbo, and Kruidvat.
      21
      MIT
    • F
      license
      Not graded
      quality
      C
      maintenance
      Enables users to compare and get recommendations across multiple supermarket products, combining curated specifications with realtime price and review lookups.
      -
    • A
      license
      B
      quality
      B
      maintenance
      Enables searching products, browsing weekly offers and recipes, and comparing a shopping list across nemlig.com and BilkaToGo, including fees and delivery slots. It can fill the online basket in the cheaper store, but cannot place orders or make payments.
      9
      MIT
    Try in Browser

    Glama MCP Gateway

    Add one secure layer between your agents and this server.

    Resources