teas.co.uk
Server Details
teas.co.uk is an independent UK shop with more than 600 teas, coffees and hot chocolates from 60 brands. This connector searches the live catalogue in plain words, such as a strong breakfast tea or something caffeine free for bedtime, with filters for type, caffeine, milk, time of day, strength, pack size, price per cup and organic, Fairtrade or vegan labels, and shows live prices and stock. Open any product for tasting notes, a brewing guide and recipe ideas, or compare up to four side by side. Build a basket and get a secure checkout link: payment always happens on teas.co.uk, never in the chat, and the connector cannot place an order. Customers who link their teas.co.uk account (OAuth) can see orders and courier tracking, buy again, manage repeat deliveries, check reward points and start a return. teas.co.uk delivers to the UK, the Channel Islands, the Isle of Man and many European countries; prices are in pounds including VAT.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 18 tools
Every tool has an explicitly distinct purpose, and descriptions actively disambiguate the risky pairs (checkout_link vs checkout_session, find_products vs get_product vs compare_products, add_to_basket vs reorder). Each description names the alternative tool to use in adjacent cases, leaving virtually no room for misselection.
The set largely follows a consistent snake_case verb_noun pattern (add_to_basket, update_basket, view_basket, find_products, get_product, compare_products, track_order, start_return, change_subscription). A few names break the pattern with possessive/noun forms (my_orders, my_subscriptions, rewards_balance) and the lone verb reorder, but these are readable and minor deviations.
18 tools is on the heavier side but each covers a distinct step in a real e-commerce journey (discovery, detail, comparison, basket, checkout, orders, subscriptions, rewards, returns, policy). Nothing feels redundant, though the basket/checkout cluster could arguably be consolidated.
The surface covers the full browse-to-pay lifecycle plus post-purchase order tracking, subscriptions, rewards and returns, with read-only policy coverage. Minor gaps exist (no order cancellation, no subscription detail/frequency edit), but customers can work around these via existing returns and subscription-change flows.
Available Tools
18 toolsadd_to_basketAdd to basketAInspect
Use this when someone asks to add teas.co.uk products to their basket. Adds the products (ids from find_products) to a basket kept on teas.co.uk and returns the basket with the live subtotal and a delivery estimate. Nothing is bought or charged; the customer pays later on teas.co.uk. If the result includes basket_id, pass that basket_id to every later basket tool in this conversation.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Products and quantities to add. | |
| basket_id | No | Only for hosts that do not identify the user: the basket_id returned by an earlier basket tool in this conversation. Leave it out otherwise. |
Output Schema
| Name | Required | Description |
|---|---|---|
| added | No | How many products were added. |
| items | Yes | Number of items in the basket. |
| lines | Yes | |
| delivery | Yes | |
| messages | Yes | Anything that could not be added or changed, in plain words. |
| subtotal | No | Pounds including VAT, before delivery. |
| basket_id | No | Present only when the host did not identify the user: pass it to later basket tools. |
| subtotal_text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, idempotentHint=false, destructiveHint=false), the description discloses the crucial behavioral fact that 'Nothing is bought or charged; the customer pays later on teas.co.uk', and describes what comes back (basket, live subtotal, delivery estimate). It does not cover failure modes or whether repeated adds merge or duplicate quantities, so it is strong but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each carrying distinct information: trigger, action/return, non-purchase guarantee, and state-chaining rule. The most important routing information is front-loaded and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although an output schema exists, the description still gives the agent the essential framing (products are added, not purchased, and a basket_id may need to be threaded through subsequent calls). Combined with 100% schema coverage and full annotations, nothing needed to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine cross-call semantics by explaining that a returned basket_id must be passed to every later basket tool in the conversation. That is meaning the schema cannot express on its own, lifting it above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Adds the products ... to a basket kept on teas.co.uk') and scopes it to teas.co.uk products, which cleanly separates it from siblings like view_basket and update_basket. An agent can identify the operation 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear trigger ('Use this when someone asks to add teas.co.uk products to their basket') and names the prerequisite source of ids ('ids from find_products'), plus the chaining rule for basket_id in later calls. It never states an explicit when-not or names an alternative tool, so it falls 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.
change_subscriptionChange a subscriptionADestructiveInspect
Use this only when a signed in customer clearly asks to pause, resume or cancel one of their teas.co.uk tea subscriptions. Check which subscription and which change with the customer first. Returns the subscription as it is afterwards. To see their subscriptions first use my_subscriptions.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | pause stops deliveries until resumed; resume restarts a paused subscription; cancel ends it, and a cancelled subscription cannot be resumed here. | |
| subscription_id | Yes | The id from my_subscriptions. |
Output Schema
| Name | Required | Description |
|---|---|---|
| done | Yes | |
| subscription | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false and idempotentHint=false, so the safety profile is covered. The description adds genuinely useful context beyond that: the signed-in-customer requirement, the mandatory customer confirmation, and the post-state ('Returns the subscription as it is afterwards'). It does not, however, spell out irreversibility or failure behavior in its own text.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the usage restriction and confirmation requirement before the return note and the sibling pointer. Each sentence carries a distinct piece of information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-value detail is optional, yet the description still notes the post-state. Between the annotations (destructive, non-idempotent), the fully documented schema, and the description's preconditions and alternative-tool routing, an agent has everything needed to invoke this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the enum for 'action' is richly documented, including that a cancelled subscription cannot be resumed. The description's only parameter-related contribution is the instruction to confirm the subscription and action with the customer, which is procedural rather than semantic, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb set (pause/resume/cancel) against a specific resource (teas.co.uk tea subscriptions) and scopes it to signed-in customers. It is clearly distinguishable from my_subscriptions, which it explicitly references as the discovery step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states an explicit precondition ('only when a signed in customer clearly asks'), a required confirmation step ('Check which subscription and which change with the customer first'), and names the alternative tool for seeing subscriptions first. Nothing about when to use it is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
checkout_linkGo to checkoutAInspect
Use this when the customer is ready to buy what is in their teas.co.uk basket. Returns a secure link that opens teas.co.uk with this basket, where the customer signs in or creates an account, chooses delivery and pays. The assistant never sees payment details and no order is placed until the customer pays on teas.co.uk. To buy specific products without using the basket, use checkout_session instead.
| Name | Required | Description | Default |
|---|---|---|---|
| basket_id | No | Only for hosts that do not identify the user: the basket_id returned by an earlier basket tool in this conversation. Leave it out otherwise. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | Number of items in the basket. |
| lines | Yes | |
| delivery | Yes | |
| messages | Yes | Anything that could not be added or changed, in plain words. |
| subtotal | No | Pounds including VAT, before delivery. |
| basket_id | No | Present only when the host did not identify the user: pass it to later basket tools. |
| checkout_url | No | Secure link that opens this basket at teas.co.uk checkout. |
| how_it_works | No | |
| subtotal_text | Yes | |
| link_valid_for | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is not read-only, not destructive, not idempotent, and closed-world. The description adds genuinely new behavioral context: the assistant never sees payment details, no order is placed until the customer pays on teas.co.uk, and the customer must sign in or create an account. It stops short of noting that repeated calls yield different links (consistent with idempotentHint=false) or any expiry behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: trigger, what is returned plus the safety boundary, and the sibling alternative. The action and the constraint are front-loaded with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 detail is unnecessary; the description still flags that the return is a link rather than an order. Combined with explicit safety boundaries and sibling routing, nothing needed to invoke this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single basket_id parameter is fully documented in the schema, including the host-dependent condition for supplying it. The description adds no parameter-level detail, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action (produce a secure checkout link for the current teas.co.uk basket) and the exact resource it operates on. It explicitly distinguishes itself from the sibling checkout_session, so an agent can route without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger condition ('when the customer is ready to buy what is in their basket') and names the alternative with its own condition ('to buy specific products without using the basket, use checkout_session instead'). Both the when and the when-not are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
checkout_sessionCheckoutAInspect
Use this when the customer has picked specific teas.co.uk products and wants to buy them straight away, for example from a product result. Puts exactly these items in a fresh basket at live teas.co.uk prices and returns it with a secure link to pay on teas.co.uk; the basket the customer built earlier is not used. Nothing is charged here and no order is placed until the customer pays on teas.co.uk. To check out the basket they have already built, use checkout_link instead.
| Name | Required | Description | Default |
|---|---|---|---|
| checkout_session | Yes | The products to buy: items lists each product id (from find_products) and quantity, up to 20 products. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | Number of items in the basket. |
| lines | Yes | |
| delivery | Yes | |
| messages | Yes | Anything that could not be added or changed, in plain words. |
| subtotal | No | Pounds including VAT, before delivery. |
| basket_id | No | Present only when the host did not identify the user: pass it to later basket tools. |
| unavailable | No | Items teas.co.uk could not add. |
| checkout_url | No | Secure link that opens this basket at teas.co.uk checkout. |
| how_it_works | No | |
| subtotal_text | Yes | |
| link_valid_for | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses that a fresh basket is created, that live teas.co.uk prices are used, that the earlier basket is ignored, that a secure payment link is returned, and crucially that nothing is charged and no order is placed until payment. Annotations only say it is a non-read-only, non-idempotent, non-destructive write, so this description carries meaningful extra 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the usage trigger, then behavior, then the sibling exclusion. The repeated 'on teas.co.uk' is deliberate scoping emphasis rather than filler; no sentence is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, nested-schema tool with an output schema present, the description covers the trigger, the effects, the money/safety semantics, and the routing to a sibling. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description adds a small amount of value by naming the item source ('product id (from find_products)'), the items-per-order bound (up to 20), and the fact that display fields are not used. It stops short of explaining the nested structure or the checkout_session wrapper, but the schema already documents those.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (put these items in a fresh basket and return a payment link) and explicitly separates itself from checkout_link for the pre-built basket case. An agent can distinguish it from add_to_basket and checkout_link without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('when the customer has picked specific products and wants to buy them straight away, for example from a product result') and an explicit alternative with its selecting condition ('To check out the basket they have already built, use checkout_link instead'). Both when-to-use and when-not are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_productsCompare productsARead-onlyIdempotentInspect
Use this whenever someone wants to compare two to four teas.co.uk products, for example on strength, caffeine, price per cup, pack size or brewing. It shows them side by side in one table. Read only. Pass ids from find_products (search for each product first if you only have names); for everything about one product use get_product.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Two to four product ids from find_products. |
Output Schema
| Name | Required | Description |
|---|---|---|
| products | Yes | |
| not_found | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description's "Read only" largely restates that. What it does add beyond the structured data is the output shape (side-by-side single table) and the input-provenance rule that ids must come from find_products, which is genuine behavioral context for a read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the trigger and sized well for the tool's complexity; every clause about ids, alternatives, and output carries information. Minor redundancy in the standalone "Read only" fragment, which duplicates the annotation, keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 here. For a one-parameter read tool with full annotation coverage, the description supplies everything an agent needs: trigger condition, id provenance, cardinality limits, and sibling alternatives.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single ids parameter is documented there, so the baseline is 3. The description adds real meaning on top: where the ids come from and the workflow "search for each product first if you only have names," which the schema does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (compare) plus resource (two to four teas.co.uk products), with concrete comparison dimensions named (strength, caffeine, price per cup, pack size, brewing). It also distinguishes itself from the two nearest siblings by name, so an agent can route without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit trigger ("whenever someone wants to compare two to four products") plus explicit alternatives: find_products to obtain ids, get_product "for everything about one product." The when-to-use and when-not-to-use are both stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delivery_and_returnsDelivery and returnsARead-onlyIdempotentInspect
Use this when someone asks about teas.co.uk delivery prices, free delivery, dispatch times, which countries it delivers to, or how returns and refunds work. Policy information only and read only: it does not look at any order. To ask for a return on an order use start_return, and to see where an order is use track_order.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| links | Yes | |
| returns | Yes | |
| delivery | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered structurally. The description adds genuinely new context beyond them: it is 'policy information only' and 'does not look at any order', which tells the agent not to expect order-specific data. It stops short of describing the response shape, though an output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: the trigger and topic list first, then the behavioral constraint, then the sibling routing. No filler, and the most decision-relevant content is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only policy tool with an output schema and rich annotations, nothing an agent needs is missing. Scope, safety, and alternative tools are all accounted for.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline is 4. The schema is trivially complete with additionalProperties=false.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (teas.co.uk delivery and returns policy) and enumerates the exact question types it answers: prices, free delivery, dispatch times, destination countries, returns and refunds. An agent can distinguish this from every sibling without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the triggering condition ('when someone asks about...') and explicitly routes to the correct alternatives: start_return for requesting a return on an order and track_order for locating an order. When-to-use and when-not-to-use are both covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_productsSearch teas.co.ukARead-onlyIdempotentInspect
Use this when someone wants to find, browse or choose tea, coffee, hot chocolate or other drinks to buy from teas.co.uk, a UK online tea shop. Searches the live teas.co.uk catalogue by words and filters and returns matching products with live prices in pounds including VAT, stock, price per cup and links. Read only: it changes nothing. When no product matches every filter, the softer filters are relaxed and the result says which in note. For the full details of one product use get_product, to set two to four products side by side use compare_products, and to buy use add_to_basket. Do not use it for general tea knowledge that does not involve choosing a product.
| Name | Required | Description | Default |
|---|---|---|---|
| iced | No | Suits iced tea or cold brew. | |
| kind | No | Type of drink. | |
| sort | No | Order of results: best_match (the default), cheapest_per_cup, price_low_to_high, price_high_to_low or strongest. | |
| limit | No | How many products to return (default 6). | |
| query | No | What the customer wants in their own words, for example "strong breakfast tea", "Yorkshire Gold" or "something for bedtime". Leave out to browse with filters only. | |
| vegan | No | Only products labelled vegan. | |
| format | No | How it comes: tea_bags, loose_leaf, instant, pods_or_capsules, sachets, ground or whole_beans (coffee), powder, coffee_bags or ready_to_drink. | |
| organic | No | Only organic products. | |
| caffeine | No | Caffeine: caffeinated, decaf (caffeine taken out), caffeine_free (none to begin with, such as rooibos and most herbal teas) or low_or_none (decaf or caffeine free). | |
| strength | No | How strong the cup is: light, medium or strong. | |
| fairtrade | No | Only Fairtrade products. | |
| max_price | No | Highest pack price in pounds. | |
| with_milk | No | Only products that suit milk. | |
| time_of_day | No | When it suits best: morning, afternoon, evening or bedtime. | |
| include_out_of_stock | No | Also include products that are out of stock (they are left out by default). | |
| max_price_per_cup_pence | No | Highest price per cup in pence. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | Present when filters were left out: tell the customer, in your own words. |
| total | Yes | How many products matched before the limit. |
| filters | No | The filters that were applied. |
| relaxed | No | Present when no product matched every filter: the filters left out to find these. |
| products | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint, and the description adds genuinely non-obvious behavior beyond them: the softer filters are relaxed when nothing matches and the result flags this in a note, plus the returned fields (live prices incl. VAT, stock, price per cup, links). The read-only sentence largely restates the annotation, so it falls just short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose and source, then return contents, safety, the fallback behavior, and finally routing and the exclusion. Every sentence carries distinct information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 16-parameter filtered search with full schema coverage and an output schema, nothing an agent needs to call it correctly is missing: routing, safety, result shape and the filter-relaxation caveat are all present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with 16 well-documented parameters and six enums, so the schema does the heavy lifting. The description only gestures at 'words and filters' and adds no filter syntax, defaults or interaction semantics beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (find/browse/choose) and resource (drinks to buy from teas.co.uk) with scope (live catalogue, UK shop) and explicitly differentiates from siblings get_product, compare_products and add_to_basket. An agent can route without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternatives and their selecting conditions (details, comparison, purchase), and adds an explicit negative case: 'Do not use it for general tea knowledge that does not involve choosing a product.' Both when-to-use and when-not are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_recipesFind recipesARead-onlyIdempotentInspect
Use this to find drink and food recipes from the teas.co.uk recipe library, such as iced teas, lattes, chai or baking with tea. Drinks made with alcohol are not included. Read only. Optionally pass a product id to find recipes that use that product; to find products to buy use find_products.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many recipes (default 5). | |
| query | No | What kind of recipe, for example "iced peach tea" or "chai latte". | |
| product_id | No | Optional product id from find_products. |
Output Schema
| Name | Required | Description |
|---|---|---|
| recipes | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the description's "Read only" line is redundant with structured data. It does add a genuine result-scope constraint (no alcohol-based drinks) and the product_id linking behavior, but the return format and pagination are not addressed; a 3 is appropriate given annotations carry the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: purpose first, scope exclusion second, parameter/alternative routing last. No filler and the most decision-relevant information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 details are unnecessary here. For a read-only search tool with three fully documented optional parameters, the description covers purpose, scope limits, and sibling routing adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (limit, query, product_id) are already documented in the schema. The description only restates the optional product_id linkage to find_products and adds nothing about limit or query, so it meets the baseline rather than exceeding it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (find) and resource (drink and food recipes) with the source library and concrete examples (iced teas, lattes, chai, baking with tea). It also defines the content boundary (no alcohol) and distinguishes itself from find_products by naming that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit about when to use it (finding recipes), one explicit exclusion (alcohol drinks are not included), and an explicit alternative routing (to find products to buy, use find_products). The optional product_id usage path is also spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_productProduct detailsARead-onlyIdempotentInspect
Use this whenever someone asks how to brew a teas.co.uk product, about its caffeine, taste, ingredients or allergy advice, or wants its full details: summary, taste, brewing guide with a timer, caffeine, what it suits, pack size, price per cup, labels, allergy note and recipes that use it. Read only. Pass an id from find_products or a teas.co.uk product link; if you only have a name, search with find_products first. To set several products side by side use compare_products.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Product id from find_products, or a teas.co.uk product link. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | The product id (SKU) every tool accepts. |
| url | Yes | Product page on teas.co.uk. |
| brew | No | |
| kind | No | Type of drink, for example Black tea. |
| name | Yes | |
| pack | No | Pack size, for example 80 bags, 250 g. |
| brand | No | |
| image | No | |
| price | Yes | Live price in pounds including VAT. |
| taste | No | |
| format | No | Tea bags, loose leaf, pods and so on. |
| labels | No | |
| origin | No | |
| recipes | No | |
| summary | No | |
| caffeine | No | |
| good_for | No | |
| in_stock | Yes | |
| strength | No | |
| with_milk | No | Suits milk. |
| price_text | Yes | |
| pack_detail | No | |
| allergy_note | No | |
| curator_score | No | A teas.co.uk curator score, not a customer review. |
| flavour_notes | No | |
| was_price_text | No | The usual price when the product is on offer. |
| caffeine_detail | No | |
| price_per_cup_pence | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered; the description reinforces 'Read only' without contradicting it. It adds behavioral context beyond the hints: the mandatory provenance of the id, the search-first workflow when only a name exists, and the rich field set returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the trigger condition, then the id requirement, then the disambiguation to compare_products. It is a single dense sentence plus two short ones; the long enumeration of return fields is somewhat redundant given a full output schema exists, which keeps it from a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one required parameter, an output schema, and full annotation coverage, the description supplies everything an agent needs: how to obtain the id, what triggers the call, and which sibling handles comparison. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter is already documented as 'Product id from find_products, or a teas.co.uk product link.' The description restates the same id-source rule and adds no syntax or format detail the schema lacks, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('get product details') and enumerates exactly what is returned: summary, taste, brewing guide, caffeine, price per cup, allergy note, recipes. It explicitly names what it is not (search with find_products; use compare_products for side-by-side), so an agent can route correctly 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit trigger conditions ('whenever someone asks how to brew... caffeine, taste, ingredients or allergy advice'), states the required input origin (an id from find_products or a link), and prescribes the fallback when only a name is known. It also names the sibling to use for comparison, so when-not is covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_profileteas.co.uk accountARead-onlyInspect
Use this to confirm which teas.co.uk account is linked, for example before account tools such as my_orders, my_subscriptions or rewards_balance. Read only. Returns an opaque account id that stays the same across sign ins, with a display name and email for showing to the customer. Needs a linked teas.co.uk account.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Opaque profile identifier, unique within this app and unchanged across token refresh, reconnection and display changes. Never reassigned to another profile. |
| name | No | Display name for the authenticated profile. |
| No | Email address for display; not used as the profile identity. | |
| nickname | No | A useful label that helps users distinguish connected profiles. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description still adds meaningful context beyond that: the account id is opaque and stable across sign-ins, and it returns a display name and email suitable for showing to a customer — plus the linked-account prerequisite, which is a real failure mode.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each carrying distinct information: usage trigger, safety/prerequisite, and return contents. The usage trigger is front-loaded and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero parameters, an output schema present, and full annotation coverage, the description supplies everything an agent needs: when to call it, that it is a safe read, the prerequisite, and the shape of the returned identity. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. The description correctly does not waste words inventing parameter semantics, and schema coverage is 100%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'confirm which teas.co.uk account is linked' — and immediately differentiates itself from sibling account tools (my_orders, my_subscriptions, rewards_balance) by positioning itself as the prerequisite check. An agent can distinguish it from every other tool in the list without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete when-to-use condition ('before account tools such as my_orders, my_subscriptions or rewards_balance') and a prerequisite ('Needs a linked teas.co.uk account'). It stops short of stating when not to call it or what happens on failure, but the sequencing guidance is explicit and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
my_ordersMy ordersARead-onlyIdempotentInspect
Use this when a signed in customer asks about their recent teas.co.uk orders. Returns order numbers, dates, status, totals and items. Read only. To follow one order with its courier tracking use track_order, and to buy an earlier order again use reorder.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many recent orders (default 5). |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| orders | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so 'Read only' is largely redundant. However, the description adds the authentication prerequisite ('signed in customer') and the returned field set, which the annotations do not cover. No rate limits or ordering guarantees are mentioned, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the trigger condition and followed by routing. Every clause earns its place with no repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-param read tool with full annotations and an output schema, the description supplies everything an agent needs: when to call it, the auth precondition, and where to go for tracking or reordering. Return values are covered by the output schema, so they need no elaboration.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'limit' parameter already documents its default and bounds, so the description adds nothing about it. Baseline 3 applies when the schema carries the parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('recent teas.co.uk orders') with a named caller context, and explicitly distinguishes itself from track_order and reorder. An agent can pick this over its siblings without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the triggering condition ('a signed in customer asks about their recent orders') and routes two adjacent needs to the correct alternatives with the condition that selects each. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
my_subscriptionsMy subscriptionsARead-onlyIdempotentInspect
Use this when a signed in customer asks about their teas.co.uk tea subscriptions (repeat deliveries): what each one sends, how often, the next delivery and whether it is active or paused. Read only. To pause, resume or cancel one use change_subscription.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| subscriptions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint, so the safety profile is covered; the description reinforces it with 'Read only' and adds the useful auth precondition (signed-in customer). It also scopes what information is surfaced. It does not mention pagination or limits, but for a zero-arg read this is minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no waste, front-loaded with the trigger condition and followed immediately by the routing alternative. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not document return values, yet it still previews the shape of the data for routing purposes. Auth requirement, scope and the sibling escape hatch are all present, so an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the schema carries no semantic burden and the description needs to add nothing; the baseline is 4. The description correctly focuses on the returned subscription attributes rather than inventing parameter syntax.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('asks about their teas.co.uk tea subscriptions (repeat deliveries)') and enumerates the content returned: what each sends, how often, next delivery, active/paused status. This clearly separates it from the sibling change_subscription 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the triggering condition ('when a signed in customer asks about their subscriptions') and the exclusion plus alternative ('To pause, resume or cancel one use change_subscription'). Both the when and the when-not are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reorderBuy againAInspect
Use this when a signed in customer wants to buy again from an earlier teas.co.uk order. Adds that order's products, or only the ones named, to their basket at today's prices; calling it again adds them again. Nothing is bought or charged until the customer pays on teas.co.uk. To see earlier orders first use my_orders.
| Name | Required | Description | Default |
|---|---|---|---|
| only_ids | No | Optional: only these product ids from that order. | |
| order_number | Yes | The earlier order number. |
Output Schema
| Name | Required | Description |
|---|---|---|
| added | No | |
| items | Yes | Number of items in the basket. |
| lines | Yes | |
| delivery | Yes | |
| messages | Yes | Anything that could not be added or changed, in plain words. |
| subtotal | No | Pounds including VAT, before delivery. |
| basket_id | No | Present only when the host did not identify the user: pass it to later basket tools. |
| from_order | No | |
| subtotal_text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and idempotentHint=false, so mutation and repeatability are partially covered. The description adds real value beyond them: it warns that calling again adds items again, that nothing is bought or charged until payment on teas.co.uk, and that items are priced at today's prices.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the trigger condition first, then behavior, then the alternative tool. No filler or repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the auth prerequisite, the mutation and repeat-call behavior, and the deferred payment model; an output schema exists so return values need not be described. Nothing an agent needs to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description nonetheless explains only_ids semantically ('that order's products, or only the ones named'), which is more useful than the schema's bare 'only these product ids from that order.'
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: adds products from an earlier teas.co.uk order into the customer's basket. It clearly separates itself from add_to_basket (single-item adds) and my_orders (order history lookup) without the agent needing to open either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly scopes usage to a signed-in customer re-buying from a prior order, and names the alternative: 'To see earlier orders first use my_orders.' The only_ids variant is also described as a usage option, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rewards_balanceReward pointsARead-onlyIdempotentInspect
Use this when a signed in customer asks how many teas.co.uk reward points they have or what they are worth. Read only: points are spent at checkout on teas.co.uk, not here.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| url | No | |
| tier | No | |
| points | Yes | |
| how_to_use | No | |
| worth_text | No | |
| spent_lifetime | No | |
| earned_lifetime | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds useful context beyond that: it states the caller must be signed in and that redemption happens at checkout rather than via this tool, which prevents misuse.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the usage trigger and followed by the read-only scope caveat. No filler and every clause carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described, and with zero parameters there are no input details to document. The description covers the trigger, the authentication precondition, and the scope limitation, leaving nothing essential for a correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so there is nothing for the description to disambiguate; baseline for zero-parameter tools applies. Schema and annotations fully cover the (empty) input contract.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific resource (teas.co.uk reward points) and the exact questions it answers (how many points and what they are worth). This is clearly distinguishable from siblings like view_basket, my_orders, or checkout_link, which deal with different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger condition: use when a signed-in customer asks about their points balance or value. It also implies a when-not by clarifying that points are spent at checkout, not through this tool. It does not name sibling alternatives, but the triggering context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_returnStart a returnAIdempotentInspect
Use this only when a signed in customer clearly asks to return items from a teas.co.uk order. Sends a return request to the teas.co.uk team for review; it does not refund or change anything by itself. Check the order, items and reason with the customer first. For the returns policy itself use delivery_and_returns.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | The products to return and how many. | |
| reason | Yes | damaged, faulty, wrong_item, missing_item, change_of_mind (unused and unopened) or other. | |
| details | No | What happened, in the customer's words. | |
| order_number | Yes | The order number the items came from, for example 123456 (from my_orders). |
Output Schema
| Name | Required | Description |
|---|---|---|
| order | Yes | |
| status | No | |
| message | Yes | |
| duplicate | No | True when this exact request was already sent. |
| reference | No | |
| submitted | Yes | |
| returns_url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the write/safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=true, openWorldHint=true), and the description adds genuinely useful context beyond them: the request goes to a human team 'for review' and 'does not refund or change anything by itself', plus the signed-in auth requirement. It does not explain what happens after review or how duplicate submissions are handled (relevant given idempotentHint), which keeps this from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no filler, with the eligibility constraint front-loaded before the side-effect disclaimer and the sibling pointer. Every sentence carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with an output schema and full annotation coverage, the description supplies the missing human-facing context: eligibility, prerequisite confirmation with the customer, that the outcome is a reviewed request rather than an instant refund, and where to send policy questions. Nothing an agent needs before invoking it is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: order_number, reason enum, items and details are all documented in the schema, including cross-references (find_products, my_orders). The description only reinforces the review step ('Check the order, items and reason with the customer first') and adds no format or syntax detail, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('sends a return request to the teas.co.uk team for review') and immediately differentiates itself from the similarly-named sibling delivery_and_returns. An agent can tell what this tool does and what it does not do 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit gating condition ('only when a signed in customer clearly asks to return items from a teas.co.uk order'), a pre-call checklist ('Check the order, items and reason with the customer first'), and a named alternative for the adjacent need ('For the returns policy itself use delivery_and_returns'). When-to-use, preconditions and routing are all covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
track_orderTrack an orderARead-onlyIdempotentInspect
Use this when a signed in customer asks where their teas.co.uk order is. Returns the status, items and any courier tracking numbers and links. Read only. For a list of recent orders use my_orders.
| Name | Required | Description | Default |
|---|---|---|---|
| order_number | Yes | The order number, for example 123456. |
Output Schema
| Name | Required | Description |
|---|---|---|
| date | No | |
| note | No | |
| items | No | |
| number | Yes | |
| status | Yes | |
| ship_to | No | Town and postcode area only. |
| delivery | No | |
| tracking | Yes | |
| view_url | No | |
| can_return | No | A return request can be started for this order. |
| item_count | No | |
| total_text | No | |
| has_tracking | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint and openWorldHint, so the safety profile is covered; the description's 'Read only' is largely redundant. It does add genuinely useful context beyond the annotations by stating the auth prerequisite ('signed in customer') and describing the returned payload (status, items, courier tracking links).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the triggering scenario, then the return value, then the sibling redirect. No filler or restated boilerplate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with an output schema, the description covers the trigger, the auth prerequisite, the sibling boundary, and a brief sense of the result. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter at 100% schema description coverage, with an example value ('123456') already documented in the schema. The description adds no format, sourcing, or edge-case guidance about order_number, so the schema does all the work — the expected baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('track... where their teas.co.uk order is') and enumerates what comes back (status, items, courier tracking numbers and links). It also explicitly distinguishes itself from the sibling 'my_orders', so an agent can route between the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete triggering condition ('when a signed in customer asks where their order is') and names the alternative plus the condition that selects it ('For a list of recent orders use my_orders'). Both when-to-use and when-to-use-something-else are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_basketChange basketADestructiveIdempotentInspect
Use this to change the quantity of a product that is already in the teas.co.uk basket; a quantity of 0 removes it. Returns the updated basket with the live subtotal and a delivery estimate. Nothing is bought or charged. To add a new product use add_to_basket, and to see the basket first use view_basket.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Product id of a line already in the basket (from view_basket or add_to_basket). | |
| quantity | Yes | The new quantity; 0 removes it. | |
| basket_id | No | Only for hosts that do not identify the user: the basket_id returned by an earlier basket tool in this conversation. Leave it out otherwise. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | Number of items in the basket. |
| lines | Yes | |
| delivery | Yes | |
| messages | Yes | Anything that could not be added or changed, in plain words. |
| subtotal | No | Pounds including VAT, before delivery. |
| basket_id | No | Present only when the host did not identify the user: pass it to later basket tools. |
| subtotal_text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and non-readOnly, but the description adds the concrete destructive condition ('a quantity of 0 removes it') and reassures that 'Nothing is bought or charged'. That materially clarifies the mutation semantics beyond the annotation flags; only idempotency is left to the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each load-bearing: purpose and removal semantics first, then the return/charging reassurance, then sibling routing. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the brief return mention suffices, and the description still previews the updated basket with subtotal and delivery estimate. Combined with full schema coverage and destructive annotations, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all three parameters are already documented in the schema, including the 0-removes rule and the basket_id host caveat. The description restates the quantity semantics without adding syntax or constraints the schema does not already provide, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('change the quantity of a product... in the teas.co.uk basket') and adds the scope edge case that 0 removes the line. It is immediately distinguishable from add_to_basket and view_basket, which it names directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: use add_to_basket to add a new product, view_basket to inspect first. The precondition that the product must already be a line in the basket is stated up front.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
view_basketView basketARead-onlyIdempotentInspect
Use this to show what is in the customer's teas.co.uk basket, with the live subtotal and a delivery estimate. Read only: it changes nothing, and an empty basket comes back with no lines. To add products use add_to_basket, to change quantities use update_basket, and to pay use checkout_link.
| Name | Required | Description | Default |
|---|---|---|---|
| basket_id | No | Only for hosts that do not identify the user: the basket_id returned by an earlier basket tool in this conversation. Leave it out otherwise. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | Number of items in the basket. |
| lines | Yes | |
| delivery | Yes | |
| messages | Yes | Anything that could not be added or changed, in plain words. |
| subtotal | No | Pounds including VAT, before delivery. |
| basket_id | No | Present only when the host did not identify the user: pass it to later basket tools. |
| subtotal_text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds useful behavioral context beyond that: an empty basket returns no lines, and the output includes a live subtotal and delivery estimate. It does not discuss auth or rate limits, but the schema covers the basket_id context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the primary purpose, then adds read-only behavior and empty-basket behavior, then routes to the three most relevant sibling tools. Every sentence earns its place and there is no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 need not explain return values. With rich annotations, full schema description coverage, and explicit sibling routing, the definition contains everything an agent needs to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the single parameter basket_id is fully documented in the schema, including when to omit it. The description does not add parameter-level meaning beyond that, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('show what is in') and resource ('customer's teas.co.uk basket'), plus what is returned: live subtotal and delivery estimate. It also names sibling tools for adjacent actions, so an agent can distinguish it from add_to_basket, update_basket, and checkout_link without inspecting their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent when to use this tool and provides direct alternatives for adding products, changing quantities, and paying. The routing guidance is complete enough that an agent can select the correct sibling without inference.
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.
6 tool updates
- Changed
change_subscription1 field changed- added
Input schema / properties / action / descriptionAdded value: +"pause stops deliveries until resumed; resume restarts a paused subscription; cancel ends it, and a cancelled subscription cannot be resumed here."
- Changed
checkout_session8 fields changed- added
Input schema / properties / checkout_session / descriptionAdded value: +"The products to buy: items lists each product id (from find_products) and quantity, up to 20 products." - added
Input schema / properties / checkout_session / properties / items / descriptionAdded value: +"Each product and how many, up to 20 products." - added
Input schema / properties / checkout_session / properties / items / items / properties / description / descriptionAdded value: +"Optional, for display only; not used." - added
Input schema / properties / checkout_session / properties / items / items / properties / images / descriptionAdded value: +"Optional image links, for display only; not used." - added
Input schema / properties / checkout_session / properties / items / items / properties / merchant_name / descriptionAdded value: +"Optional, for display only; not used." - added
Input schema / properties / checkout_session / properties / items / items / properties / name / descriptionAdded value: +"Optional product name for display; teas.co.uk uses its own." - added
Input schema / properties / checkout_session / properties / items / items / properties / quantity / descriptionAdded value: +"How many packs, 1 to 99." - added
Input schema / properties / checkout_session / properties / items / items / properties / url / descriptionAdded value: +"Optional product link, for display only; not used."
- Changed
compare_products1 field changed- changed
Input schema / properties / ids / descriptionPrevious value: -"Two to four product ids."New value: +"Two to four product ids from find_products."
- Changed
find_products9 fields changed- added
Input schema / properties / caffeine / descriptionAdded value: +"Caffeine: caffeinated, decaf (caffeine taken out), caffeine_free (none to begin with, such as rooibos and most herbal teas) or low_or_none (decaf or caffeine free)." - added
Input schema / properties / fairtrade / descriptionAdded value: +"Only Fairtrade products." - added
Input schema / properties / format / descriptionAdded value: +"How it comes: tea_bags, loose_leaf, instant, pods_or_capsules, sachets, ground or whole_beans (coffee), powder, coffee_bags or ready_to_drink." - added
Input schema / properties / include_out_of_stock / descriptionAdded value: +"Also include products that are out of stock (they are left out by default)." - added
Input schema / properties / organic / descriptionAdded value: +"Only organic products." - added
Input schema / properties / sort / descriptionAdded value: +"Order of results: best_match (the default), cheapest_per_cup, price_low_to_high, price_high_to_low or strongest." - added
Input schema / properties / strength / descriptionAdded value: +"How strong the cup is: light, medium or strong." - added
Input schema / properties / time_of_day / descriptionAdded value: +"When it suits best: morning, afternoon, evening or bedtime." - added
Input schema / properties / vegan / descriptionAdded value: +"Only products labelled vegan."
- Changed
start_return1 field changed- added
Input schema / properties / order_number / descriptionAdded value: +"The order number the items came from, for example 123456 (from my_orders)."
- Changed
update_basket1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"Product id of a basket line."New value: +"Product id of a line already in the basket (from view_basket or add_to_basket)."
18 tool updates
- First observed
add_to_basket - First observed
change_subscription - First observed
checkout_link - First observed
checkout_session - First observed
compare_products - First observed
delivery_and_returns - First observed
find_products - First observed
find_recipes - First observed
get_product - First observed
get_profile - First observed
my_orders - First observed
my_subscriptions - First observed
reorder - First observed
rewards_balance - First observed
start_return - First observed
track_order - First observed
update_basket - First observed
view_basket
Publisher details
- Operator
- teas.co.uk · Publisher source
- Operator website
- https://teas.co.uk/
- Vendor relationship
- First-party
- Documentation
- https://teas.co.uk/ai/
- Trust center
- Not available
- Restrictions
- Free to use. Shopping needs no account. Orders, tracking, repeat deliveries, reward points and returns need a teas.co.uk account, linked by signing in on teas.co.uk (OAuth). teas.co.uk delivers to the UK, the Channel Islands, the Isle of Man and many European countries; prices are in pounds including VAT. · Publisher source
Related MCP Connectors
Compare products, prices and current offers across UK retailers to find the best deal.
Search UK companies, land registry prices, charities, OS locations, and traffic data
Shop connected e-commerce stores: search, compare, cart, and checkout with buyer approval.
Shopping search across 100M+ products, with every retailer's offer and live price in one place.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables searching Official Vegan Shop products and managing your shopping cart through natural language, with secure local login.5MIT
- AlicenseNot gradedqualityBmaintenancePersonal UK Tesco grocery account over MCP: search, basket, slots, orders, and on-pack nutrition (search and rank by macros + micros). Catalogue + nutrition tools need no auth; destructive actions require a two-step confirm126 npm12MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to search the catalog, manage a cart and usual orders, find delivery slots, and handle favorites, shopping lists, past orders, and item remarks through the store's API, with login and payment left to the user on the website.MIT
- FlicenseNot gradedqualityBmaintenanceEnables users to compare and get recommendations across multiple supermarket products, combining curated specifications with realtime price and review lookups.-
Glama MCP Gateway
Add one secure layer between your agents and this server.