Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
T00MY_HOME_MARKETSNoYour markets, separated by `;` (e.g. `Berlin-Friedrichshain;Berlin-Weißensee`): the default for `compare_markets` and the fallbacks of `plan_pickup`
T00MY_DEFAULT_MARKETNoMarket used when none is selected (name or id), so `set_market` is not needed

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}
logging
{}
prompts
{
  "listChanged": true
}
resources
{
  "subscribe": false,
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
find_marketsB

Find toom markets by city, name, street, postal code (prefix) or market id.

set_marketC

Select the market ("Markt") used by default for search and basket. Accepts id, name or city.

search_productsA

Search toom.de, optionally narrowed down. First result page only (max ~72 hits, shown up to limit).

Examples: "a drill that is on offer" -> query="bohrmaschine", offers_only=True. "cheapest cordless screwdriver in stock here" -> query="akkuschrauber", availability="in_market", sort="price_asc". "Bosch or Makita under 150 EUR" -> brands=["Bosch","Makita"], max_price=150.

offers_only: toom's "Nur Angebote anzeigen". sort: relevance | price_asc | price_desc | offers | rating (toom's own, raw rating) | best_rated (re-ranks the hits of this page by a score that discounts articles with few reviews: a 5.0 from one review does not beat a 4.8 from 200). min_reviews drops hits with fewer reviews (unrated ones too). availability: in_market (in stock in the selected market) | orderable (not in stock, the market can order it) | home_delivery. filters takes toom's own filter params and values as listed by search_filters (e.g. {"attr.mca_akkuinklusive": ["Ja"]}); different filters are combined with AND, values of one filter with OR.

Each hit has on_offer (toom's offer flag or a promotion such as "Gratis Beigabe", see promotion) and availability for the market: market_reservable, market_orderable ("Auf Anfrage bestellbar": the inquiry is done by the user on the product page) and home_delivery. For stock quantities use compare_markets. Search by words: an exact article number is redirected by toom to a product page.

search_filtersA

Which filters toom offers for a search term, with the number of hits per value.

Use it to narrow a broad search down (brand, cordless or corded, battery included, ...). The result lists each filter's param and its values; pass them on in search_products(filters={param: [value, ...]}). Range filters (price, voltage, weight, ...) show their min and max; price has its own arguments min_price/max_price. The category tree is not included.

view_basketC

The basket of a market: lines with price and pickup/delivery availability, plus the total.

add_to_basketB

Add an article (sku from search_products) to the basket of a market.

delivery: "pickup" (reserve and collect in the market, default) or "delivery" (parcel to your door). Adding an article that is already in the basket increases its quantity.

set_quantityC

Change the quantity of a basket line (line_id from view_basket).

remove_from_basketC

Remove one basket line (line_id from view_basket).

clear_basketC

Remove everything from the basket of a market.

export_sessionA

Write the session cookies of a market's basket to a local file, to look at that basket in your own browser.

The basket lives in an anonymous toom.de session held by this server. Importing the file into your browser (cookie manager extension, e.g. Cookie-Editor: Import) REPLACES the toom.de cookies of that browser, including any basket or market choice it had there. The cookies are an anonymous session token (no login), but still a token: keep the file private and do not share it.

Ask the user first. Without confirm=True nothing is written and you get the notice to show them; call again with confirm=True only after the user explicitly agreed.

prepare_article_requestA

Prepare asking a market to order an article that is not in stock there. Sends nothing.

toom shows "Auf Anfrage bestellbar" / "Artikel anfragen" on the product page for such articles and the market orders them for you (possibly plus transport costs). The request form is protected by a captcha and carries your contact data, so it is done by the user on toom.de. This tool gathers everything needed: the stock in the market, the product page link, the market's phone number and a ready-made text for the form or a phone call. needed_by (free text, e.g. "Freitag, 16.10.") and note are added to that text. No personal data is read or sent.

get_articleA

Details of one article by its toom article number, plus stock in the market(s).

Gives title, brand, price, EAN, selling points, characteristics (dimensions, technical details, scope of delivery, ...), categories, images, documents and manufacturer contact, all as toom's product page shows them. stock is the available quantity (capped at quantity) in the selected market and in each market of also_check; availability decodes toom's code for the selected market ("Auf Anfrage bestellbar" = market_orderable). Nothing is added to a basket.

markets_nearbyA

toom markets within a radius (straight-line distance, nearest first).

near can be a market name or id, a postal code (a prefix works), words in a market's name or city ("Köln"), or coordinates "50.94,6.96". No geocoder is used: a place without a toom market is given as a postal code of a nearby market or as coordinates.

find_article_nearbyA

Where in the radius around a place can an article (or several) be picked up right now?

Checks the real stock of every toom market within radius_km (straight-line, nearest first; at most max_markets markets, one request each) and returns them nearest first with the stock per article. Give one article via sku + quantity, or several via items=[{"sku": "...", "quantity": 2}]. near is understood as in markets_nearby. Markets that have everything are marked complete; nearest_complete is the one to drive to. Stock is live and can change, so call the market before a long drive (the phone number is included). Nothing is reserved or put in a basket.

market_infoA

Everything useful for a visit: open now?, opening hours, upcoming closed days, services, pickup details.

Hours come from toom's market list, including its "special days" (a 00:00-00:00 entry is a closed day, e.g. a holiday). A holiday toom did not enter is not known here. has flags services that matter for transport: rental van (Miettransporter), trailer rental (Anhängerverleih), wood cutting (Holzzuschnitt), tool rental, delivery and pickup service.

compare_articlesA

Compare 2 to 6 articles side by side: price, brand, dimensions (cm/kg), stock and every characteristic.

characteristics lists each label with the value per article and whether they differ, so what distinguishes the articles is visible at a glance. Dimensions are numbers taken from what toom states; a missing one is simply absent. Stock is for the selected market and for each market in also_check.

fits_spaceA

Does an article fit into a space (a car's load area, a doorway, a shelf)? Uses the dimensions toom states.

Give the free space in cm. Without max_depth_cm that axis is treated as unlimited. The answer is fits true only if it fits however unknown dimensions turn out, false only if it cannot fit whatever they are, otherwise null ("unklar"): a dimension toom does not state is never guessed. Dimensions are those of the article as listed (for a door: the leaf, not the wall opening, and without frame or packaging); leave margin. The weight is returned for your own judgement.

delivery_infoB

Pick up or have it delivered? Costs, lead times and stock for both, side by side.

toom shows shipping costs only in a basket, so this uses a short-lived throw-away basket (a separate anonymous session): your real baskets are not touched. Free shipping starts at the threshold toom reports. Nothing is ordered or reserved.

get_relatedA

Accessories and alternatives as toom itself shows them on the product page.

kind="also_bought": "Häufig dazu gekauft" (real purchase data: screws, foam, fittings, batteries, ...). kind="similar": "Ähnliche Produkte" (same kind of article: other sizes, brands). It is not a curated accessory list, so also_bought can contain other sizes of the same article; same_category marks them, and only_other_categories=True drops them. selling_points often says what an accessory fits ("passend für ..."). Nothing is added to a basket.

copy_basketA

Copy the basket of one market into a new basket in another market.

A market switch means building a new basket there; the per-article report shows whether the target market has each article (and in what quantity), plus price changes. The source basket is untouched. replace=True (default) empties the target basket first, so repeating the call does not double quantities; replace=False adds to what is already there.

compare_marketsA

Check articles against several markets without touching any basket.

markets defaults to the markets in T00MY_HOME_MARKETS.

Articles come from items ([{"sku": "...", "quantity": 2}]) or, if omitted, from the basket of from_market / the current market.

Uses toom's stock endpoint: per article and market the available quantity (capped at the quantity you want). Markets are listed best first (complete before partial).

plan_pickupA

Plan where to pick up a list of articles (or the current basket): primary market first, fallbacks second.

Priority: 1) everything the primary market has is picked up there. 2) Only what the primary market does not have comes from a fallback market, and only if it is small enough to transport without the special vehicle at the primary market. Pass such articles that do NOT fit (doors, long boards, ...) as bulky_skus: they are never taken from a fallback market. Decide that from the article's size in its title/description. Fallbacks are picked for as few stops as possible. Uses real stock per market.

all_at_primary_market in the result is true when one stop at the primary market covers everything, i.e. no trip to a fallback market and no own transport are needed. With apply=True the planned pickups are built as (replaced) baskets in each stop's market, ready to be reserved on toom.de.

Defaults: the primary market is the selected one (set_market / T00MY_DEFAULT_MARKET) and the fallbacks are T00MY_HOME_MARKETS without it.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.4/5.0

Scored across 22 tools

Disambiguation4/5

Most tools have distinct verbs and resources, but market/stock discovery overlaps: find_markets vs markets_nearby, and compare_markets vs find_article_nearby vs plan_pickup all answer related 'where can I get this?' questions. Detailed descriptions reduce the risk, but an agent must read them carefully to choose correctly.

Naming Consistency4/5

All names are snake_case and mostly follow a verb_noun pattern (find_markets, add_to_basket, compare_articles), with only minor deviations like market_info, delivery_info, and markets_nearby. There is no case mixing or chaotic style.

Tool Count3/5

22 tools is heavy for a single retail-assistant domain, and some tools overlap in stock/market lookup and pickup planning. The domain is broad, but the set sits in the borderline 16-25 range.

Completeness4/5

The surface covers market discovery, product search/details/comparison, basket CRUD, delivery info, pickup planning, and article-request preparation. The main gap is no direct reservation/checkout tool; plan_pickup can build ready baskets but the user must complete reservation on toom.de.

Maintenance

ActivityMaintained
ResponsivenessNo issues