Skip to main content
Glama

t00my-mcp 🔨

EN · DE

⚠️ Unofficial. This is an independent community project. It is not made, endorsed, sponsored or supported by toom Baumarkt GmbH or any company behind toom, and it has no access to any internal toom system. "toom" and "toom.de" are names of their respective owners and are used here only to say which website this tool works with. It talks to the same public web pages and endpoints a browser uses on toom.de, which toom may change or block at any time. See Disclaimer.

An MCP server (Python, FastMCP) that lets an AI assistant work with the toom.de DIY online shop: search articles (offers, filters, ratings), keep a basket per market, see which market really has an article in stock, search within a radius around a place, compare articles, check whether something fits into your car or doorway, and plan where to pick up what. It reads and prepares; it does not check out, pay or send inquiries for you.

Why "t00my"? A playful spelling of the name of the shop it talks to. It does not imply any affiliation.

What it does

Tool

What it does

find_markets, set_market

Find a toom market ("Markt") by city, name, postal code or id and select it

search_products

Search for articles, optionally narrowed down: offers_only, sort (relevance, price, offers, rating, best_rated), min_reviews, min_price/max_price, brands, availability (in stock here / orderable / delivery) or toom's own filters. Each hit has on_offer/promotion and the decoded availability

search_filters

Which filters toom offers for a search term (brand, cordless/corded, battery included, ...) with hit counts, to narrow a broad search down

add_to_basket, view_basket, set_quantity, remove_from_basket, clear_basket

A basket per market; pickup (reserve and collect) or delivery

get_article

Details of one article by number: brand, price, EAN, characteristics (dimensions, scope of delivery, ...), categories, images, manufacturer, plus stock in one or more markets

markets_nearby

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

find_article_nearby

Where within a radius can an article (or several) be picked up right now? Real stock per market, nearest first, with phone numbers

market_info

Open now?, opening hours, upcoming closed days (holidays), services (rental van, trailer, wood cutting, ...), where the pickup point is, phone

compare_articles

2–6 articles side by side: price, dimensions in cm/kg, stock, and every characteristic with what differs first

fits_space

Does an article fit into a space (car load area, doorway)? Honest: fits, does not fit or unclear when toom does not state a dimension. A side you leave out is unlimited (a door goes through a narrow opening edge-on), so give all three for a car

delivery_info

Pick up or delivery? Stock, lead time and the shipping cost actually charged side by side (toom's free-shipping limit is for parcels; bulky goods ship as freight and always pay). Uses a throw-away basket, yours is untouched

get_related

toom's own accessory and alternative suggestions: "Häufig dazu gekauft" (from purchases) and "Ähnliche Produkte"

compare_markets

Real stock per article in several markets, no basket needed

export_session

Write a market's session cookies to a local file (mode 0600) so you can look at that basket in your own browser: import it with a cookie manager extension (e.g. Cookie-Editor), then open toom.de/warenkorb. Asks for confirmation first: importing replaces the browser's toom.de cookies

prepare_article_request

For an article that is not in stock in a market ("Auf Anfrage bestellbar"): stock, product link, the market's phone number and a ready-made text for "Artikel anfragen" or a call. Sends nothing

copy_basket

Build a basket anew in another market and report per article what is available there

plan_pickup

Pickup plan: your primary market first, fallback markets only for what it lacks and what is small enough to transport; says when everything is at the primary market

Prices and availability depend on the market, so every basket belongs to one market. A market switch means a new basket there: copy_basket does that for you and the report shows what the other market has, in what quantity, and price changes. compare_markets and plan_pickup only read stock (toom's stock endpoint) and never touch a basket; plan_pickup(apply=True) can also build the planned baskets.

plan_pickup priorities: 1) everything the primary market has is picked up there; 2) only what it lacks comes from a fallback market, and only if it is not in bulky_skus (articles that do not fit your transport are never taken from a fallback); fallbacks are chosen for as few stops as possible. If all_at_primary_market is true, one stop covers everything. Stock is live and can change between planning and pickup, so re-check before you go.

Related MCP server: Toolzy MCP Server

Install

git clone https://github.com/tronicum/t00my-mcp && cd t00my-mcp
claude mcp add t00my-mcp -- uv --directory "$(pwd)" run t00my-mcp

stdio transport, no port. Any MCP client can launch uv run t00my-mcp the same way.

Configuration (optional)

Variable

Meaning

T00MY_DEFAULT_MARKET

Market used when none is selected (name or id), so set_market is not needed

T00MY_HOME_MARKETS

Your markets, separated by ; (e.g. Berlin-Friedrichshain;Berlin-Weißensee): the default for compare_markets and the fallbacks of plan_pickup

With these set, markets_nearby and find_article_nearby also work without near (around the default market).

Examples

  • "Find the toom markets in Berlin." → find_markets("berlin")

  • "Which drills are on offer?" → search_products("bohrmaschine", offers_only=True, sort="price_asc")

  • "Cordless screwdrivers from Bosch or Makita, under 150 €, in stock in Prenzlau." → search_products("akkuschrauber", brands=["Bosch","Makita"], max_price=150, availability="in_market")

  • "Where within 50 km of Cologne can I pick up this article right now?" → find_article_nearby(near="Köln", sku="<article number>", radius_km=50)

  • "What are the dimensions and what is in the box?" → get_article("<article number>")

  • "Search for cordless drills in Prenzlau." → set_market("Prenzlau"), search_products("akkuschrauber")

  • "Which of these has all three articles in stock: Friedrichshain, Weißensee, Prenzlau?" → compare_markets(["Friedrichshain", "Weißensee", "Prenzlau"], items=[{"sku": "1490300", "quantity": 2}, ...])

  • "Copy my basket from Friedrichshain to Weißensee." → copy_basket(from_market="Friedrichshain", to_market="Weißensee")

  • "Pick everything up in market X; only if something is not there and fits my car, use another market." → plan_pickup(primary_market="X", fallback_markets=[...], bulky_skus=["<sku of what does not fit>"], items=[...])

Limits (please read)

  • No checkout. The basket is an anonymous session held by the server process, not your toom account, so it does not show up in your browser. Reserving and paying happens on toom.de; the tools give you the article numbers, quantities and product links to do that.

  • Article inquiries are yours to send. For articles that are only "Auf Anfrage bestellbar" in a market, toom.de offers "Artikel anfragen" on the product page. The form carries your contact data and sits behind a captcha, so t00my-mcp prepares everything (prepare_article_request) but does not send it and does not try to get past the captcha.

  • Distances are straight-line, not driving distances, and no geocoder is used: near is a market name or id, a postal code, words in a market's name or city, or coordinates lat,lon. Stock is live and can change; the phone number of each market is included so you can call before a long drive.

  • Prices: price_eur is what you pay. For struck-through prices toom shows, was_price_eur and saving give the old price and the saving. Offers (Aktion) carry no old price; their offer period is in get_related.

  • Accessories are toom's suggestions, not a catalogue: "Häufig dazu gekauft" comes from purchase data, so it can contain other sizes of the same article (marked same_category) and unrelated things.

  • Unofficial and undocumented. toom.de can change its endpoints any time; the live contract tests (T00MY_LIVE=1 uv run pytest -m live) are there to notice that.

  • Polite by design: requests are throttled (0.5 s apart), search reads only the first result page (toom's robots.txt disallows ?page=; filters and sorting narrow a search down instead, and no + is ever put in a URL), and the client identifies itself. Personal use, please.

  • Search results decode toom's availability_code the way the product page does: market_reservable (reserve for pickup), market_orderable ("Bestellbar in ": not in stock, but on the product page toom offers "Artikel anfragen" and the market orders it for you, possibly plus transport costs; this server does not send that inquiry, do it on toom.de) and home_delivery. For real stock quantities use compare_markets (capped at the quantity you ask for). Search by words: toom redirects an exact article number to its product page.

Planned tools and decisions are in TODOs.md.

Development

uv run pytest                           # mocked tests against recorded real response shapes, no network
T00MY_LIVE=1 uv run pytest -m live      # contract tests against toom.de (anonymous session, orders nothing)

The recorded responses in tests/fixtures/ are short snapshots of public toom.de pages with contact data replaced by placeholders (see tests/fixtures/README.md); toom's content stays with its owners.

tests/conftest.py is a fake toom.de (httpx.MockTransport) with per-market baskets and stock; its fixtures are recorded from the real site. Behaviour that was not verified against the real site is marked ASSUMPTION there.

Disclaimer

  • Unofficial and independent. No affiliation with, or approval by, toom Baumarkt GmbH or its parent companies. Names and marks belong to their owners.

  • Use at your own risk, no warranty (see LICENSE). Prices, offers and stock are what toom's pages show at that moment and can be wrong or outdated; check with the market before a long drive or a purchase.

  • You are responsible for how you use it. Please respect toom's terms of use and applicable law. The tool is built to be a polite guest (throttled requests, first result page only, honest user agent) and does not try to get around captchas or other protections, and neither should you. It is meant for personal use, not for bulk collection or monitoring at scale.

  • It reads and prepares. It does not log in, check out, pay or send contact forms for you. Baskets exist only in an anonymous session held by the running server process.

  • Privacy. The project collects nothing and sends nothing anywhere except to toom.de. It writes to disk only when you ask for a session export (export_session, after confirmation; the file is readable only by you).

License

AGPL-3.0-or-later, see LICENSE. Not affiliated with toom Baumarkt GmbH.


Deutsch

⚠️ Inoffiziell. Dies ist ein unabhängiges Community-Projekt. Es wird nicht von der toom Baumarkt GmbH oder einem Unternehmen hinter toom hergestellt, unterstützt, gefördert oder betreut und hat keinen Zugriff auf interne toom-Systeme. „toom“ und „toom.de“ sind Namen ihrer jeweiligen Inhaber und werden hier nur genannt, um zu sagen, mit welcher Website das Werkzeug arbeitet. Es nutzt dieselben öffentlichen Seiten und Endpunkte wie ein Browser auf toom.de, die toom jederzeit ändern oder sperren kann. Siehe Haftungsausschluss.

Ein MCP-Server (Python, FastMCP) für den toom.de-Onlineshop: Artikel suchen, pro Markt einen Warenkorb füllen, sehen, welcher Markt was wirklich auf Lager hat, und einen Warenkorb von einem Markt in einen anderen kopieren, im Umkreis suchen, Artikel vergleichen, prüfen ob etwas ins Auto passt und die Abholung planen. Er liest und bereitet vor; bestellen, bezahlen und Anfragen abschicken tut er nicht.

Tools

Tool

Funktion

find_markets, set_market

Markt per Stadt, Name, PLZ oder ID finden und auswählen

search_products

Artikel suchen, optional eingegrenzt: offers_only, sort (Relevanz, Preis, Angebote, Bewertung, best_rated), min_reviews, min_price/max_price, brands, availability (hier vorrätig / bestellbar / Lieferung) oder toom's eigene filters. Jeder Treffer hat on_offer/promotion und die dekodierte Verfügbarkeit

search_filters

Welche Filter toom für einen Suchbegriff anbietet (Marke, Akku/Netz, Akku inklusive, ...) mit Trefferzahlen, um eine breite Suche einzugrenzen

add_to_basket, view_basket, set_quantity, remove_from_basket, clear_basket

Ein Warenkorb pro Markt; Abholung (reservieren) oder Lieferung

get_article

Details zu einem Artikel per Nummer: Marke, Preis, EAN, Merkmale (Maße, Lieferumfang, ...), Kategorien, Bilder, Hersteller, dazu der Bestand in einem oder mehreren Märkten

markets_nearby

toom-Märkte im Umkreis eines Ortes (Luftlinie, nächster zuerst)

find_article_nearby

Wo im Umkreis gibt es einen Artikel (oder mehrere) jetzt zum Abholen? Echter Bestand je Markt, nächster zuerst, mit Telefonnummer

market_info

Jetzt geöffnet?, Öffnungszeiten, kommende Schließtage (Feiertage), Services (Miettransporter, Anhänger, Holzzuschnitt, ...), wo die Abholstation ist, Telefon

compare_articles

2–6 Artikel nebeneinander: Preis, Maße in cm/kg, Bestand und alle Merkmale, Unterschiede zuerst

fits_space

Passt ein Artikel in einen Raum (Laderaum, Durchgang)? Ehrlich: passt, passt nicht oder unklar, wenn toom ein Maß nicht nennt. Eine weggelassene Seite gilt als unbegrenzt (eine Tür geht hochkant durch eine schmale Öffnung), für ein Auto also alle drei angeben

delivery_info

Abholen oder liefern lassen? Bestand, Lieferzeit und die tatsächlich berechneten Versandkosten nebeneinander (die Freigrenze von toom gilt für Pakete; Sperrgut geht per Spedition und zahlt immer). Wegwerf-Warenkorb, deiner bleibt unberührt

get_related

toom's eigene Zubehör- und Alternativvorschläge: „Häufig dazu gekauft“ (aus Käufen) und „Ähnliche Produkte“

compare_markets

Echter Bestand pro Artikel in mehreren Märkten, ohne Warenkorb

export_session

Schreibt die Session-Cookies eines Marktes in eine lokale Datei (Rechte 0600), damit du den Warenkorb im eigenen Browser ansehen kannst: mit einer Cookie-Erweiterung (z. B. Cookie-Editor) importieren, dann toom.de/warenkorb öffnen. Fragt vorher nach: der Import ersetzt die toom.de-Cookies des Browsers

prepare_article_request

Für Artikel, die im Markt nicht vorrätig sind („Auf Anfrage bestellbar“): Bestand, Produktlink, Telefonnummer des Marktes und ein fertiger Text für „Artikel anfragen“ oder einen Anruf. Sendet nichts

copy_basket

Warenkorb in einem anderen Markt neu aufbauen und pro Artikel berichten, was dort verfügbar ist

plan_pickup

Abholplan: zuerst der Hauptmarkt, Ausweichmärkte nur für Fehlendes, das klein genug zum Transport ist; meldet, wenn alles im Hauptmarkt liegt

Preise und Verfügbarkeit hängen vom Markt ab, deshalb gehört jeder Warenkorb zu genau einem Markt. Ein Marktwechsel heißt: neuer Warenkorb dort. copy_basket macht das und zeigt, was der andere Markt hat, in welcher Menge, und Preisänderungen. compare_markets und plan_pickup lesen nur den Bestand und fassen keinen Warenkorb an; plan_pickup(apply=True) kann die geplanten Warenkörbe auch aufbauen.

Prioritäten von plan_pickup: 1) Alles, was der Hauptmarkt hat, wird dort abgeholt; 2) nur Fehlendes kommt aus einem Ausweichmarkt, und nur wenn es nicht in bulky_skus steht (Artikel, die nicht ins Transportmittel passen, werden nie aus einem Ausweichmarkt genommen); Ausweichmärkte werden mit möglichst wenigen Stopps gewählt. Ist all_at_primary_market wahr, deckt ein Stopp alles ab. Der Bestand ist live und kann sich zwischen Planung und Abholung ändern, bitte vor der Fahrt noch einmal prüfen.

Installation

git clone https://github.com/tronicum/t00my-mcp && cd t00my-mcp
claude mcp add t00my-mcp -- uv --directory "$(pwd)" run t00my-mcp

stdio, kein Port. Andere MCP-Clients starten einfach uv run t00my-mcp.

Konfiguration (optional)

Variable

Bedeutung

T00MY_DEFAULT_MARKET

Markt, der gilt, wenn keiner gewählt ist (Name oder ID); set_market ist dann nicht nötig

T00MY_HOME_MARKETS

Deine Märkte, getrennt mit ; (z. B. Berlin-Friedrichshain;Berlin-Weißensee): Standard für compare_markets und die Ausweichmärkte von plan_pickup

Mit beiden gesetzt funktionieren markets_nearby und find_article_nearby auch ohne near (um den Standardmarkt).

Grenzen (bitte lesen)

  • Kein Checkout. Der Warenkorb ist eine anonyme Session im Serverprozess, nicht dein toom-Konto, und taucht daher nicht in deinem Browser auf. Reservieren und Bezahlen passiert auf toom.de; die Tools liefern dir Artikelnummern, Mengen und Produktlinks dafür.

  • Artikelanfragen schickst du selbst ab. Für Artikel, die in einem Markt nur „Auf Anfrage bestellbar“ sind, bietet toom.de auf der Produktseite „Artikel anfragen“ an. Das Formular enthält deine Kontaktdaten und liegt hinter einem Captcha; t00my-mcp bereitet alles vor (prepare_article_request), schickt es aber nicht ab und umgeht das Captcha nicht.

  • Entfernungen sind Luftlinie, keine Fahrstrecke, und es wird kein Geocoder benutzt: near ist ein Marktname oder eine ID, eine PLZ, Wörter aus Name oder Stadt eines Marktes oder Koordinaten lat,lon. Der Bestand ist live und kann sich ändern; die Telefonnummer jedes Marktes steht dabei, damit du vor einer langen Fahrt anrufen kannst.

  • Preise: price_eur ist, was du zahlst. Bei durchgestrichenen Preisen stehen was_price_eur und saving für den alten Preis und die Ersparnis. Angebote (Aktion) haben keinen alten Preis; ihr Zeitraum steht in get_related.

  • Zubehör sind Vorschläge von toom, kein Katalog: „Häufig dazu gekauft“ stammt aus Kaufdaten und kann andere Größen desselben Artikels (same_category) oder Unzusammenhängendes enthalten.

  • Inoffiziell und undokumentiert. toom.de kann die Endpunkte jederzeit ändern; die Live-Tests (T00MY_LIVE=1 uv run pytest -m live) sind dafür da, das zu bemerken.

  • Höflich gebaut: gedrosselte Requests (0,5 s Abstand), die Suche liest nur die erste Ergebnisseite (die robots.txt von toom sperrt ?page=), und der Client gibt sich zu erkennen. Bitte nur persönliche Nutzung.

  • Suchergebnisse entschlüsseln toom's availability_code wie die Produktseite: market_reservable (zur Abholung reservierbar), market_orderable („Bestellbar in “: nicht vorrätig, aber toom bietet auf der Produktseite „Artikel anfragen“ an und der Markt bestellt es für dich, ggf. zzgl. Transportkosten; diese Anfrage sendet der Server nicht, bitte auf toom.de machen) und home_delivery. Echte Bestandsmengen liefert compare_markets (gedeckelt auf die angefragte Menge). Mit Wörtern suchen: toom leitet eine exakte Artikelnummer auf die Produktseite um.

Entwicklung

uv run pytest                           # Mock-Tests gegen aufgezeichnete echte Antwortformate, ohne Netzwerk
T00MY_LIVE=1 uv run pytest -m live      # Contract-Tests gegen toom.de (anonyme Session, bestellt nichts)

Haftungsausschluss

  • Inoffiziell und unabhängig. Keine Verbindung zur toom Baumarkt GmbH oder deren Muttergesellschaften und keine Billigung durch sie. Namen und Marken gehören ihren Inhabern.

  • Nutzung auf eigene Gefahr, keine Gewähr (siehe LICENSE). Preise, Angebote und Bestände sind das, was die toom-Seiten in dem Moment zeigen, und können falsch oder veraltet sein; vor einer langen Fahrt oder einem Kauf im Markt nachfragen.

  • Du verantwortest, wie du es benutzt. Bitte die Nutzungsbedingungen von toom und geltendes Recht beachten. Das Werkzeug ist ein höflicher Gast (gedrosselte Anfragen, nur die erste Ergebnisseite, ehrlicher User-Agent) und versucht nicht, Captchas oder andere Schutzmaßnahmen zu umgehen, und du solltest das auch nicht tun. Gedacht ist es für den persönlichen Gebrauch, nicht für Massenabfragen oder Dauerüberwachung.

  • Es liest und bereitet vor. Es meldet sich nicht an, bestellt nicht, bezahlt nicht und schickt keine Kontaktformulare für dich ab. Warenkörbe gibt es nur in einer anonymen Sitzung im laufenden Serverprozess.

  • Datenschutz. Das Projekt sammelt nichts und sendet nichts außer an toom.de. Auf die Platte schreibt es nur, wenn du einen Sitzungsexport verlangst (export_session, nach Rückfrage; die Datei ist nur für dich lesbar).

Lizenz

AGPL-3.0-or-later, siehe LICENSE. Nicht mit der toom Baumarkt GmbH verbunden.

Available Tools

22 tools
add_to_basketAdd 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
skuYes
marketNo
deliveryNopickup
quantityNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose one important non-obvious behavior: adding a duplicate article increments quantity rather than erroring. That is genuinely valuable. It still omits permission/auth needs, what happens when no market is supplied (schema shows market is nullable/default null), and what the call returns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with no filler; the core action and its target lead, with the delivery and duplicate-quantity details following. Slightly fragmented formatting (the delivery line dangles without a lead-in) but efficient overall.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the quantity accumulation note covers the main side effect. But for a mutation tool with zero annotations and 0% schema coverage, the missing market-parameter semantics and any auth/prerequisite context leave a real gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 4 parameters, so the description must compensate. It does explain the 'delivery' enum values and the sku's origin, but says nothing about the 'market' parameter (nullable, default null) and only implies quantity's accumulation behavior. Two of four parameters remain effectively undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb+resource (add an article to the basket of a market) and even names the upstream tool that supplies the sku, so the agent knows the precondition. It doesn't explicitly contrast with siblings like set_quantity or remove_from_basket, but the write-direction is unambiguous from the verb.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The delivery sentence implies when each mode applies ('pickup' reserve-and-collect vs 'delivery' parcel), which is useful selection guidance. However there is no explicit routing against siblings such as set_quantity (for changing an existing line) or view_basket, and no stated prerequisites beyond the sku source.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

clear_basketClear BasketC

Remove everything from the basket of a market.

ParametersJSON Schema
NameRequiredDescriptionDefault
marketNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It never says whether clearing is reversible/undoable, what happens if the basket is empty, or whether this affects a shared or per-market basket — all essential for a destructive bulk mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short, front-loaded sentence with no filler. It earns its place, though the trailing 'of a market' adds ambiguity rather than precision.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be described, but for a destructive bulk-clear operation with zero annotations and an undocumented optional parameter, the description leaves major gaps an agent needs to invoke it safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single 'market' parameter has 0% schema description coverage and defaults to null, but the description never explains what the parameter means or what the null default does (e.g. current/default market). The only hint is the vague phrase 'of a market'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb+resource: removing everything from the basket. The word 'everything' implicitly distinguishes it from remove_from_basket, though the sibling is never named and the awkward phrasing 'basket of a market' slightly muddies the object.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance at all. With siblings like view_basket, remove_from_basket, and add_to_basket, the agent has to infer that clearing an entire basket is the destructive bulk alternative to removing single items.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_articlesCompare 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
skusYes
marketNo
also_checkNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does add real context: dimensions are numbers 'taken from what toom states', a missing dimension is absent (not zero), and stock reflects the selected market plus every market in `also_check`. It doesn't cover permissions or error behavior, but for a read-only comparison it is substantively informative.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Leads with the action and scope, then explains the `characteristics` output and the dimension/stock rules. Every sentence carries information, though the middle clause about `characteristics` is slightly dense and could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be fully spelled out, yet the description still usefully frames how dimensions and stock are derived. Combined with the coverage of the two optional params, an agent has enough to invoke correctly, missing only SKU format detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It clarifies `market` (the selected market governing stock) and `also_check` (additional markets whose stock is returned), and stresses the 2-6 article range for `skus`, but gives no format or syntax for the SKU strings themselves. Partial compensation only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb (compare) and resource (articles) with explicit scope ('2 to 6 articles side by side') and enumerates the comparison axes (price, brand, dimensions, stock, characteristics). This clearly distinguishes it from the sibling compare_markets and from single-article tools like get_article.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The '2 to 6' constraint implicitly tells the agent the required cardinality, and the emphasis on 'side by side' implies use when a comparative view is needed. However, it never explicitly states when to pick this over get_article or compare_markets, leaving selection to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_marketsCompare 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).

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsNo
marketsNo
from_marketNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does reasonably well: it discloses non-mutation ('without touching any basket'), that the underlying toom stock endpoint is queried, that quantities are capped at the requested amount, and that markets are ordered complete-before-partial and best-first.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose sentence followed by tight, scannable paragraphs for defaults, article source, and result ordering. Some lines are telegraphic and fragmentary (code-formatted terms in prose), slightly reducing readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be spelled out, yet the description usefully adds the result ordering rule. Together with the documented input defaults, an agent has enough to invoke it correctly; only sibling differentiation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate and largely does: it documents the `items` shape with a literal example ({"sku": "...", "quantity": 2}), the `markets` default source, and the `from_market` fallback semantics. Left without any type/format note for `markets` entries themselves.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('check articles against several markets') plus a key scope constraint ('without touching any basket'). However, it never differentiates itself from the sibling compare_articles, so an agent has to guess which of the two comparison tools fits a given request.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete operational context: markets defaults to T00MY_HOME_MARKETS, and articles fall back to the from_market/current-market basket when `items` is omitted. It does not name an alternative tool or state when-not-to-use, so it stops short of explicit routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

copy_basketCopy 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
replaceNo
to_marketNo
from_marketNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does real work: it states the source basket is untouched, that the target is emptied when replace=True (making the call idempotent and avoiding double quantities), and that a per-article report is produced with availability, quantities, and price changes. The only gap is that it does not explain the meaning of a null from_market or an empty to_market.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then behavior, then the replace caveat. Every sentence adds information and none is redundant padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be spelled out, and the description covers mutation semantics and side effects well. It is slightly incomplete on the two market parameters' defaults, which matters given 0% schema coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It fully explains replace (True empties, False adds) but leaves to_market and from_market semantics – including their defaults and what a null from_market implies – to inference, so only one of three parameters is meaningfully documented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence gives a specific verb+resource+scope: copying one market's basket into a new basket in a different market. This distinguishes it cleanly from siblings like add_to_basket, clear_basket, and view_basket without needing to open any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It frames the use case ('a market switch means building a new basket there') and clarifies the replace behavior, so an agent knows when this is appropriate. It does not explicitly name alternative tools or state when NOT to use it, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delivery_infoDelivery 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
skuYes
marketNo
quantityNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does so well: it discloses that a throwaway anonymous basket is created, that real baskets are untouched, and that nothing is ordered or reserved — the critical side-effect profile for a tool that touches a basket-like resource. It stops short of stating whether this is safe to call repeatedly, any rate limits, or how 'short-lived' the session is.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The rhetorical opener is front-loaded and the second sentence delivers the key safety disclosure immediately, so the important points come first. The prose is slightly chatty but each sentence carries either scope or behavior, so it earns most of its length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and the behavioral side effects are covered. The gap is parameter documentation: an agent knows what the tool returns but not what to pass for sku/market/quantity, leaving it under-specified for invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across three parameters (sku, market, quantity), so the description must compensate and does not: none of the three are explained, nor is the sku format or whether market defaults to a stored market (set_market exists as a sibling). The only indirect hint is that quantity affects the free-shipping threshold, which is not made explicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific comparison output ('costs, lead times and stock for both, side by side') for the pickup-vs-delivery decision, which is more precise than the bare name 'delivery_info'. It does not, however, name or exclude the nearby siblings that look like they could overlap (plan_pickup, compare_markets, market_info), so an agent still has to infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied by the opening question ('Pick up or have it delivered?'), so the agent can infer this is for a delivery-vs-pickup cost decision. There is no explicit when-to-use, when-not-to-use, or routing to an alternative sibling such as plan_pickup, which leaves the selection ambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_sessionExport 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
marketNo
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully carries the burden and does so well: it discloses the destructive side effect on the user's browser (importing REPLACES existing toom.de cookies, including basket/market choice), the security profile (anonymous token, no login, keep private), and the no-op-without-confirm behavior. This is exactly the behavioral context annotations would otherwise provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first sentence, followed by security and confirmation guidance. It is slightly verbose with parenthetical asides (cookie-manager example, 'no login, but still a token'), but every sentence carries actionable information rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values need no explanation. The description covers the mutation's side effects, privacy constraints, and the confirmation gate, which is everything an agent needs to invoke this safely. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It explains 'confirm' thoroughly (default false = nothing written; must be true after user agreement), but 'market' is only implied by 'a market's basket' and never explicitly described as selecting which market's session. Strong on one parameter, partial on the other.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (write/export) applied to a specific resource (the session cookies of a market's basket) and gives the intent ('to look at that basket in your own browser'), which implicitly separates it from view_basket. An agent can tell what this does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit precondition ('Ask the user first') and a precise two-step workflow: without confirm=True nothing is written, call again with confirm=True only after explicit agreement. It does not name alternative siblings (e.g. view_basket) for in-server inspection, so it stops short of a full when/when-not routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_article_nearbyFind 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
skuNo
nearNo
itemsNo
quantityNo
radius_kmNo
max_marketsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses that stock is live and can change, that markets are queried one request each, that results are returned nearest first, and that nothing is reserved or added to a basket. It stops short of covering auth or rate-limit details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is front-loaded with the core question before the operational details, and each sentence carries useful content (scope, input formats, completeness flags, live-stock caveat). It is somewhat wordy but well structured and without filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter tool with no annotations, the description covers inputs, nearest-first ordering, completeness flags, and live-stock caveats, and an output schema exists so return format need not be explained. Only auth/rate-limit context is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 0% schema description coverage, the description actually documents all six parameters: `sku`+`quantity` or `items` (with an inline example format), `near`, `radius_km`, and `max_markets`. This adds substantial meaning beyond the bare schema, though units/semantics for radius_km rely on the parameter name.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening question states a specific verb (find/pick up) and resource (an article) with clear scope (markets within a radius right now). It is readily distinguishable from siblings like find_markets or search_products, since the purpose is checking live stock of a specific article at nearby markets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context (checking where an article can be picked up right now) and notes `near` is understood as in markets_nearby, but it never states when to use this tool versus alternatives like find_markets or search_products. Usage is implied rather than explicitly routed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_marketsFind MarketsB

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

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry behavioral context. 'Find' strongly implies a read-only search, but it does not disclose pagination behavior, permission requirements, or how limit/multiple-match results are handled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted words. The lookup fields are introduced immediately after the verb and resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema handles return values, and the description covers the core query semantics for a simple lookup tool. However, it omits limit semantics and does not help the agent differentiate this tool from nearby-market or market-info siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It usefully documents the meaning of the required query parameter by listing searchable fields, but it says nothing about the limit parameter beyond the schema default.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (find) and resource (markets), and enumerates the accepted lookup keys. It does not explicitly distinguish itself from siblings such as markets_nearby or market_info, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It lists possible query inputs but gives no when-to-use guidance, no conditions for choosing it over markets_nearby or market_info, and no exclusions. Usage is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fits_spaceFits 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
skuYes
marketNo
max_depth_cmNo
max_width_cmYes
max_height_cmYes
allow_rotationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does so well: it discloses the trivalent return semantics (true only if it fits under every possible unknown, false only if it can never fit, otherwise null/'unklar'), states that unstated dimensions are never guessed, and specifies which dimensions are measured (door leaf, excluding frame/packaging). The main omission is any note on required authorization or market scoping.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first clause, followed by the interpretive rules an agent actually needs. Sentences are dense but each carries a distinct rule (axis treatment, trivalent logic, dimension convention, margin/weight). Framing headers like 'Give the free space in cm' add slight verbosity without much cost.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, yet the description still explains the return semantics (fits tri-state plus weight), which is genuinely helpful rather than redundant. Together with the dimension conventions and depth-axis rule, the definition is nearly complete for invocation; only allow_rotation and market scoping remain unexplained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 6 parameters, so the description must compensate and only partially does: it establishes the cm unit for all dimension inputs, explains that omitting max_depth_cm treats that axis as unlimited, and clarifies which physical dimensions of the article are meant. However, allow_rotation (which materially changes fit results and defaults to true) and market are never addressed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource combination — determining whether an article (identified by SKU) fits a given space — and illustrates the resource with concrete contexts (car load area, doorway, shelf). No sibling tool (search_products, compare_articles, find_article_nearby, delivery_info) overlaps this purpose, so an agent can route unambiguously.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The opening parenthetical supplies clear usage contexts (car's load area, doorway, shelf), and the instruction to 'leave margin' plus the note that weight is returned 'for your own judgement' tells the agent how to act on the result. There is no explicit when-not guidance or named alternative, but for a single-purpose geometric check this is adequate context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_articleGet 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
skuYes
marketNo
quantityNo
also_checkNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden. It explains that `stock` is the available quantity capped at `quantity`, how `also_check` extends the stock check across markets, and how `availability` decodes toom's code. It also states 'Nothing is added to a basket', signaling no side effects. It does not cover authentication requirements or rate limits, but for a read-oriented tool this is substantial disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the tool's purpose and proceeds logically through returned fields, stock semantics, and the no-basket disclaimer. Every sentence contributes, though the dense middle section could be slightly more scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter read tool with an output schema and no annotations, the description is fairly complete: it explains purpose, return content, stock behavior, and the absence of basket side effects. It lacks error-handling context and format hints for `market`/`also_check`, but nothing critical for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It gives meaning to all four parameters: `sku` as the 'toom article number', `market` as the 'selected market', `quantity` as a cap on returned stock, and `also_check` as a list of additional markets. While it does not specify the exact format for market identifiers, it adds meaningful semantics beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Details of one article by its toom article number, plus stock in the market(s).' The scope is clear and an agent can tell it fetches a single product's details. However, it does not explicitly distinguish itself from siblings like search_products or compare_articles, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by requiring a specific article number, and clarifies 'Nothing is added to a basket', which helps an agent avoid mistaking it for a basket mutation. But there is no explicit when-to-use guidance, no mention of alternatives, and no prerequisites (e.g., how to obtain a valid sku or market).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

market_infoMarket 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
marketNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does add real behavioral context: hours originate from toom's market list, a 00:00-00:00 entry means closed, holidays not entered by toom are simply unknown, and the `has` flags map to specific transport-relevant services. It does not say what happens when the market parameter is omitted, but the data-provenance and edge-case semantics disclosed are substantial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first sentence front-loads the returned fields and the following sentences explain the hours semantics and service flags. It is tight and every sentence adds information, though the parenthetical German service names make it slightly dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the description is not obligated to describe return shape, and it still explains the notable quirks of that data (closed-day encoding, unknown-holiday caveat). The one substantive gap is the undocumented `market` parameter, which an agent must resolve before calling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single `market` parameter has 0% schema description coverage and the description never mentions it at all — no indication of accepted form (name, slug, ID), and no explanation of the null default. With low coverage the description is expected to compensate, and here it does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly enumerates what the tool returns for a market visit (open-now status, hours, closed days, services, pickup details), which is specific enough for an agent to know what it does. It does not, however, differentiate itself from siblings whose names suggest overlapping territory, notably delivery_info, plan_pickup and compare_markets, so the boundary is left to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Everything useful for a visit" implies the usage context (pre-visit lookup of a single market's status and services), but there is no explicit when-to-use/when-not statement and no routing to alternatives such as markets_nearby or plan_pickup. Usage is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

markets_nearbyMarkets 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nearNo
limitNo
radius_kmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does reasonably well: it discloses that distance is straight-line (not routing), that results are nearest-first, that no geocoder is used, and what happens when the place has no toom market (falls back to a nearby market's postal code or coordinates). Return format and pagination behavior are left to the output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Compact and front-loaded: scope and ordering come first, then the `near` format contract, then the no-geocoder caveat. Only the missing opening verb slightly hurts readability; there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, location-based search whose output schema documents the return shape, the description covers scope, ordering rule, accepted input formats, and the fallback case well. The remaining gap is minimal guidance on how this differs from find_markets.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It does a thorough job on `near` (accepts id, name, postal code prefix, name/city words, or "lat,lon" coordinates) and implies the radius semantics of `radius_km`. However, `limit` and the units/behavior of `radius_km` are never addressed, leaving one of three parameters entirely undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Effectively states the resource and its scope: markets within a given radius, ordered nearest-first by straight-line distance. The opening fragment lacks a verb ("toom markets within a radius"), but the intent is unambiguous. It does not explicitly contrast itself with siblings like find_markets or compare_markets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description never says when to pick this over find_markets, nor does it give prerequisites or exclusions. The closest thing to guidance is the explanation of accepted `near` formats, which is input semantics rather than usage routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plan_pickupPlan 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
applyNo
itemsNo
bulky_skusNo
from_marketNo
primary_marketNo
fallback_marketsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present the description carries the full burden and does so well: it discloses that apply=True builds (replaces) baskets in each stop's market ready for reservation, what all_at_primary_market means in the result, that stock is real per market, and how primary/fallback defaults are derived (selected market vs T00MY_HOME_MARKETS). The replace semantics are the key mutation risk and they are stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Core purpose is front-loaded in the first sentence, then the algorithm and defaults follow in a logical order. It is dense and somewhat long, but nearly every sentence carries operational information; only the bulky-examples parenthetical is expendable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter, zero-coverage, no-annotation tool with a mutation path, the description covers the workflow, defaults and result flag in enough depth to invoke correctly. Gaps remain around from_market and the items element format, which an agent must guess from the schema alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate and it only partly does: apply, bulky_skus, primary_market and fallback_markets are explained or have their defaults described. However items is only gestured at ("a list of articles") with no object shape, and from_market is never explained at all, leaving two of six parameters opaque.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (plan where to pick up a list of articles / the current basket) and immediately frames the strategy (primary market first, fallbacks second), which cleanly separates it from siblings like find_markets, compare_markets and markets_nearby. An agent can tell what this does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operational context: priority rules (1/2), when a fallback is eligible (only if small enough to transport without the special vehicle), how to flag bulky items, and how defaults are resolved. It never names an alternative tool or says when NOT to use this, so it falls short of explicit routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

prepare_article_requestPrepare 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
skuYes
noteNo
marketNo
quantityNo
needed_byNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden and does so well: it discloses that nothing is sent, that the real form is captcha-protected and user-executed, and that no personal data is read or sent. It also enumerates what the tool returns (market stock, product link, phone number, ready-made text), which is unusually rich behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the single most important fact ('Sends nothing') and organized logically. It is slightly long, with the German product-page label ('Auf Anfrage bestellbar') being marginal, but almost every sentence carries operational meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return structure need not be spelled out, and the safety/execution model is fully covered. The remaining gap is undocumented semantics for sku, market, and quantity, which the 0%-coverage schema does not compensate for.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 5 parameters. The description explains two of them meaningfully — needed_by as free text with a concrete example ('Freitag, 16.10.') and note as added to the generated text — but says nothing about sku, market, or quantity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('prepare') plus the resource and scenario ('asking a market to order an article that is not in stock there'). This cleanly separates it from siblings like add_to_basket (in-stock ordering) or search_products, so an agent can route without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear trigger condition (article not in stock at that market) and explicitly says the tool 'sends nothing' and that the actual request is completed by the user on toom.de. It does not name a sibling alternative explicitly (e.g., add_to_basket when in stock), so it falls just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_from_basketRemove From BasketC

Remove one basket line (line_id from view_basket).

ParametersJSON Schema
NameRequiredDescriptionDefault
marketNo
line_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description carries full burden. It says 'remove' implying mutation and irreversibility, but doesn't state whether removal is permanent, whether it requires confirmation, what happens to the basket total, or whether it fails if the line_id doesn't exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single terse sentence with zero waste. The key identifier and its source are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation tool with no annotations and 0% schema coverage, the description is too thin. It doesn't cover the undocumented 'market' parameter, failure modes, or the mutation's irreversibility, leaving an agent under-informed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description should compensate. It partially does by linking line_id to view_basket, but leaves 'market' (the optional parameter with anyOf string/null) completely undocumented in both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (remove) and resource (basket line), and clarifies the identifier source (line_id from view_basket). Distinguishes adequately from siblings like add_to_basket, set_quantity, and clear_basket, though it doesn't explicitly contrast with clear_basket which also removes items.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Only gives a hint about where the line_id comes from. No explicit when-to-use guidance, no mention of alternatives like clear_basket, add_to_basket to reverse, or set_quantity to modify instead of remove.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_filtersSearch 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
marketNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden; it discloses the return shape (each filter's param and values, range filters expose min/max, price uses min_price/max_price) and explicitly flags that the category tree is not included. It omits auth/permission needs, pagination, or result-size limits, but for a read-only discovery call the coverage is solid.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads what the tool returns, then the workflow. Efficient overall, though the second paragraph drifts into search_products' filter syntax and price arguments, which is useful routing but not strictly this tool's own description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be spelled out, yet the description still adds the filter-to-search_products handoff and the category-tree exclusion, which the schema cannot express. The main gap is the unexplained 'market' input and lack of any scope/market-variant caveat for a tool with a market parameter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for 2 parameters, so the description must compensate. It conveys that 'query' is the search term but never explains 'market' (or its null default), and the param/value and min_price/max_price references describe outputs and a sibling's arguments rather than this tool's inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb+resource: it returns the filters available for a search term along with hit counts per value. This is clearly distinct from sibling search_products (which consumes filters) and from find_markets/get_related, so an agent can disambiguate it without opening another schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to use it to narrow a broad search down and gives the follow-up workflow (pass results into search_products(filters={param: [value, ...]})). It gives clear context but does not state when NOT to use it or note alternatives such as the category tree, which is excluded.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_productsSearch 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNorelevance
limitNo
queryYes
brandsNo
marketNo
filtersNo
max_priceNo
min_priceNo
min_reviewsNo
offers_onlyNo
availabilityNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so richly: page-size/hit ceiling, exact-article-number redirect behavior, the meaning of each `availability` value (including the 'Auf Anfrage bestellbar' inquiry flow), AND/OR combination semantics for `filters`, and how `best_rated` discounts low-review items. This is far beyond restating the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core scope statement and examples before the per-parameter detail, and most sentences carry concrete information. It is dense and long, with some parenthetical asides that could be trimmed, but little is truly wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation is not required, and the description still describes key hit fields (`on_offer`, `promotion`, `availability`). Given 11 parameters and 0% schema coverage, a few parameters (market, min_price) remain under-specified, keeping it from a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate across 11 parameters. It explains sort (with enum values), offers_only, availability, filters, and min_reviews well, and implies query/brands/max_price via examples, but leaves `market`, `limit` details, and `min_price` largely undefined. Strong but incomplete compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (search toom.de products) and scopes it precisely: first result page only, max ~72 hits, capped by `limit`. It is clearly distinguishable from siblings like compare_markets (stock quantities) and search_filters (filter vocabulary), which it explicitly cross-references.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Three worked natural-language examples map intent to parameter combinations, which is excellent guidance for a search tool. It also routes two related needs to siblings (compare_markets for stock quantities, search_filters for filter params/values). It stops short of any explicit when-not-to-use statement, so a 4 rather than 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_marketSet MarketC

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

ParametersJSON Schema
NameRequiredDescriptionDefault
marketYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It usefully discloses that the selection is a persistent default affecting search and basket, but says nothing about session scoping, what happens to an existing basket, or what occurs if the identifier is invalid or ambiguous.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the purpose front-loaded and the accepted input forms second; nothing is wasted. It could still be marginally tighter given how little it covers.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained. For a single-parameter mutation with no annotations, however, the description should say more about persistence, error behavior, and prerequisite lookup tools to be fully actionable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% – the single 'market' string parameter is completely undocumented in the schema. The description compensates partially by stating that an id, name, or city is accepted, which is real value beyond the schema, but gives no format examples or disambiguation rules for the three accepted forms.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Select the market') and clarifies the effect: it becomes the default for search and basket. That is enough to distinguish it from a lookup tool like find_markets, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description never says when to reach for this tool versus find_markets or market_info, nor does it state prerequisites such as resolving a market first. The intended use is only implied by the word 'default'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_quantitySet QuantityC

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

ParametersJSON Schema
NameRequiredDescriptionDefault
marketNo
line_idYes
quantityYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, and it discloses very little. It does not say whether a mutation is reversible, what happens when quantity is 0 (does it remove the line?), what permissions are required, or whether the change is idempotent. For a mutation tool with zero annotation coverage this is a notable gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler; the verb and target are stated first. It is efficient, though its brevity borders on under-specification rather than true conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, but the tool is a mutation with no annotations, 0% parameter coverage, and only a hint about line_id sourcing. For a basket-mutating operation the description leaves too much of the calling contract unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds meaning for line_id (sourced from view_basket) but says nothing about the semantics of quantity (bounds, zero behavior) and never mentions the 'market' parameter at all. One of three parameters is entirely undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Change') and resource ('quantity of a basket line'), which cleanly separates it from add_to_basket and remove_from_basket. It does not explicitly name a sibling or state scope boundaries, but the operation is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical '(line_id from view_basket)' implies the agent should call view_basket first to obtain a line_id, which is useful workflow context. However, there is no explicit when-to-use vs. when-not guidance (e.g., that this only adjusts an existing line rather than adding one).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

view_basketView BasketC

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

ParametersJSON Schema
NameRequiredDescriptionDefault
marketNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It does describe the shape of the response, but that duplicates the output schema, and it says nothing about whether the operation is read-only, what happens with an empty basket, or whether the market must be selected first.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the resource comes first and the returned fields follow. It is efficient, though so terse that it omits needed context rather than being optimally structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema covers the return-value question, and the description confirms the basket-content scope, so the core need is met for a simple read tool. However, with no annotations and no parameter documentation, the agent still lacks the behavioral and scoping details required to call it confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single 'market' parameter, which defaults to null. The phrase 'of a market' loosely ties the parameter to the basket's scope but does not explain the expected identifier form or what a null/omitted market means (e.g. current session market).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names the resource (the basket of a market) and its contents (lines with price, pickup/delivery availability, total), which is enough to separate it from the mutating siblings like add_to_basket, set_quantity, remove_from_basket and clear_basket. The read verb itself is only implied by the tool name rather than stated, so it stops short of a fully explicit verb+resource statement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no stated prerequisites, and no reference to alternatives such as copy_basket or clear_basket. The agent must infer from the name alone that this is the read/inspect counterpart to the basket-mutation tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

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

  1. 22 tool updatesv0.1.0
    • First observedadd_to_basket
    • First observedclear_basket
    • First observedcompare_articles
    • First observedcompare_markets
    • First observedcopy_basket
    • First observeddelivery_info
    • First observedexport_session
    • First observedfind_article_nearby
    • First observedfind_markets
    • First observedfits_space
    • First observedget_article
    • First observedget_related
    • First observedmarket_info
    • First observedmarkets_nearby
    • First observedplan_pickup
    • First observedprepare_article_request
    • First observedremove_from_basket
    • First observedsearch_filters
    • First observedsearch_products
    • First observedset_market
    • First observedset_quantity
    • First observedview_basket

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI assistants to interact with Picnic online supermarket for grocery shopping, meal planning, cart management, delivery tracking, and budget-conscious shopping in Netherlands and Germany.
    103 npm
    113
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to search, view details, and check availability of tool rental listings from Toolzy's peer-to-peer marketplace.
    MIT