agentee-mcp
An MCP server for allover.art that lets an agent browse cotton tees, manage a cart, prepare a pre-filled checkout for human payment, track orders, and create custom prints in Studio.
Search products by text, theme, section, color, style, and max price; get product details and curated collections.
View the cart, add products, update quantities/size/fabric, and remove lines.
Apply or remove promo codes with server-side validation.
Read and save shopper size/fit preferences and retrieve past shipping addresses.
Set a shipping address, list shipping options, select a method, and preview the fully priced order.
Prepare a draft checkout and return a pre-filled URL for the human to review and pay; the agent cannot pay.
Look up recent orders or a specific order by number and see fulfillment status.
Use Studio tools to view custom-print options and credit balance, generate AI prints or preserve the user's own image, poll generation status, and add finished custom prints to the cart.
AgenTee — allover.art MCP server

The first print-on-demand store your AI agent can run for you.
Give your agent a personal token and it can search 30,000+ all-over-print 100% cotton tees, build and edit your cart, apply promo codes, fill in shipping and prepare a ready-to-pay checkout. Payment always stays with the human — there are no payment tools, by design.
Website & tokens: https://allover.art/agentee
Endpoint:
https://allover.art/mcp(remote, Streamable HTTP, JSON-RPC 2.0)Auth:
Authorization: Bearer <your token>— free personal tokens, issued in one click
Quick start
Claude Code
claude mcp add --transport http agentee https://allover.art/mcp --header "Authorization: Bearer YOUR_TOKEN"Any MCP client (JSON config)
{"agentee": {"type": "http", "url": "https://allover.art/mcp", "headers": {"Authorization": "Bearer YOUR_TOKEN"}}}Local stdio server — the same tools for clients that only run local servers (Node 18+):
{"agentee": {"command": "npx", "args": ["-y", "github:alloverart/agentee-mcp"], "env": {"AGENTEE_TOKEN": "YOUR_TOKEN"}}}It lists the tools without a token; calling them needs AGENTEE_TOKEN.
Then ask your agent something like: "find me a loud cotton tee with a cat under $40 and get it ready to buy".
Related MCP server: Color Me Shop
What the agent can do
Search the catalog by vibe, theme or budget; browse collections
Build and edit the cart, apply promo codes
Fill shipping address, pick delivery method
Prepare a fully pre-filled checkout — the human reviews and pays in the browser
Track orders after purchase
Create a brand-new print in Studio from a one-line prompt (or print the human's own image as-is) and put it on a tee
Tools
Browse and buy
search_products (filters: theme, section, color, style, price) · get_product · list_collections · view_cart · add_to_cart · update_cart_item · apply_promo · remove_promo
Shipping and checkout
get_saved_addresses · set_shipping_address · get_shipping_options · set_shipping_method · get_order_preview · prepare_order · get_order_status
Design in Studio
get_studio_options · generate_custom_print · get_studio_status · get_studio_credits · add_custom_to_cart
Preferences
get_user_prefs · set_user_prefs
For designers selling on allover.art — listed only when the token has the designer key
designer_stats · designer_designs · designer_upload_slot · submit_design · designer_uploads · designer_submissions · colorway sets
Names from 1.0 (cart_update, order_status, studio_*, set_cart_quantity, cart_remove, checkout_link) still work, so agents with a cached tool list keep running.
Safety model
No payment tools; checkout is completed by the human in the browser
Tokens are scoped to the owner's cart/orders only, rate-limited, revocable in one click
Every agent action is logged
About allover.art
We print bold all-over designs on real 100% cotton at our own factory (reactive printing — the dye bonds inside the fiber, so prints survive 60°C washes without cracking or fading). Made to order, shipped worldwide. Designers earn a flat 10% of every sale, for life: https://allover.art/become-a-designer
License
MIT — see LICENSE. The allover.art name, logo and the artwork shown in media/ are not covered by it.
Available Tools
22 toolsadd_custom_to_cartAdd custom print to cartA
Put a finished custom print (from generate_custom_print) into the cart as a garment and return the updated cart. Call it once get_studio_status reports done and the human has chosen product and size; for catalog designs use add_to_cart instead. product is the garment the human picked in get_studio_options (default mens_oversize_tshirt); size must exist for it — an error lists the sizes. Adding the same print on the same product and size again grows that line (max 99). An unfinished print returns 'print is not ready' and nothing is added. Then checkout goes as usual: set_shipping_address → get_order_preview → prepare_order.
| Name | Required | Description | Default |
|---|---|---|---|
| qty | No | Quantity (default 1, max 99). | |
| size | Yes | Size label; must be available for the chosen product. | |
| product | No | Studio garment base, as chosen in get_studio_options (default mens_oversize_tshirt). | |
| print_id | Yes | Finished print id — get_studio_status must report status=done. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present instead of a cart when the call failed (bad index, unavailable size, ...). |
| items | No | Cart lines in index order — this index is what update_cart_item takes. |
| currency | No | |
| subtotal | No | Sum of price x qty over all lines, USD. |
| checkout_url | No | Cart page URL for the human. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly=false, idempotent=false, destructive=false), and the description adds genuinely new behavior: re-adding the same print/product/size grows the existing line up to 99, an unfinished print yields 'print is not ready' and adds nothing, and the tool returns the updated cart. These are non-obvious semantics an agent could not infer from the annotations.
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 precondition and the sibling exclusion are front-loaded, and every subsequent sentence adds a distinct fact (default product, size error, duplicate-line behavior, readiness failure, downstream chain). Dense but zero 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 4-parameter mutation tool with an output schema present, the description covers preconditions, failure modes, duplicate handling, and the follow-on workflow. Nothing an agent needs in order to call it correctly and interpret the result 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 real value: the product default and its origin in get_studio_options, and the fact that an invalid size produces an error listing valid sizes. Qty semantics are conveyed indirectly via the line-growth/99 cap rather than stated as a parameter, which keeps it short of a 5.
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 opens with a specific verb and resource ('Put a finished custom print ... into the cart as a garment') and immediately names the boundary against its closest sibling ('for catalog designs use add_to_cart instead'). An agent can distinguish this from add_to_cart and generate_custom_print 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?
It states the exact precondition ('once get_studio_status reports done and the human has chosen product and size') and explicitly routes the alternative case to add_to_cart. It also names where the product value comes from (get_studio_options) and gives the downstream workflow chain (set_shipping_address → get_order_preview → prepare_order).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_to_cartAdd to cartA
Add a catalog product to the user's cart and return the updated cart. good_id comes from a search_products or get_product result; size must be one of get_product's sizes — omit it to use the shopper's saved default from get_user_prefs. Omit fabric to take the first one offered in that size. qty (default 1) is added: if the same product, size and fabric is already in the cart, that line grows (capped at 99) instead of a new line appearing. An unknown good_id or unavailable size returns an error listing the available sizes, and the cart stays unchanged. For an AI-generated print use add_custom_to_cart; to change a line already in the cart, update_cart_item.
| Name | Required | Description | Default |
|---|---|---|---|
| qty | No | Quantity to add (default 1, max 99). | |
| size | No | Size label; must be one of the product's available sizes. Optional when a default size is saved. | |
| fabric | No | Fabric label from get_product, if the product offers a choice. | |
| good_id | Yes | Numeric product id from search_products/get_product. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present instead of a cart when the call failed (bad index, unavailable size, ...). |
| items | No | Cart lines in index order — this index is what update_cart_item takes. |
| currency | No | |
| subtotal | No | Sum of price x qty over all lines, USD. |
| checkout_url | No | Cart page URL for the human. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnly=false, idempotent=false, destructive=false; the description adds real behavioral detail beyond that: merge semantics (same product/size/fabric grows the existing line, capped at 99), default resolution from saved prefs, and failure behavior (unknown good_id or unavailable size errors with the available sizes list and leaves the cart unchanged). This is exactly the context annotations can't carry.
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 core action and return, then sources for each field, then the merge rule, then error behavior, then exclusions. Dense but every sentence carries actionable 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?
Output schema and annotations cover return shape and safety; the description fills in the remaining operational gaps (default resolution, merge/cap behavior, error outcomes, sibling routing). 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?
Schema coverage is 100%, so baseline is 3. The description adds meaning the schema lacks: size omitted resolves to the shopper's saved default from get_user_prefs, and fabric omitted takes the first option offered in the chosen size, plus the qty merge/cap interaction.
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 ('add a catalog product to the user's cart') plus the return effect ('return the updated cart'). It explicitly distinguishes itself from add_custom_to_cart and update_cart_item, so the agent can route correctly without opening 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?
Gives explicit prerequisites for each value (good_id from search_products/get_product, size from get_product's sizes) and names the two alternatives by the condition that selects them: add_custom_to_cart for AI-generated prints, update_cart_item for changing an existing line.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_promoApply promo codeAIdempotent
Validate a promo code the human gave you and attach it to the cart. Returns applied=true with the new subtotal, discount, shipping and total, or applied=false with a reason — an invalid or expired code, or a bundle price in the cart that beats it (codes don't stack with bundle pricing). Codes are case-insensitive and a cart holds one: a valid new code replaces the current one, a rejected one leaves it in place; remove_promo just drops it. Needs at least one item in the cart. Never guess or try codes the human didn't give. The code is re-checked in get_order_preview and prepare_order.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Promo code exactly as the human gave it (case-insensitive). |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | Normalized promo code (when applied). |
| error | No | Present when the cart is empty or code is missing. |
| total | No | |
| bundle | No | Bundle price that beats the code (when applied=false for that reason). |
| reason | No | Why the code was rejected (when applied=false). |
| applied | No | |
| currency | No | |
| discount | No | |
| shipping | No | |
| subtotal | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, idempotent, non-destructive closed-world operation. The description adds substantial behavioral context beyond that: applied=true/false outcomes, new totals, rejection reasons including bundle pricing conflicts, case-insensitivity, one-code-per-cart replacement semantics, and re-validation in later steps. There is no contradiction with the annotations.
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 action and return behavior, and every sentence provides useful operational context. It is dense with semicolon-separated clauses, but the density is justified by the number of behaviors an agent needs to know for correct use.
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 and the description need not explain return values, it still covers the meaningful result states and failure reasons. It also includes preconditions, replacement behavior, alternatives, and downstream re-validation, making the definition complete for 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?
Schema description coverage is 100%, and the single parameter is already documented as the promo code exactly as provided by the human, case-insensitive. The description reinforces that the code must come from the human and should not be guessed, but it does not add new syntax or format details beyond the schema.
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 gives a specific verb and resource: validate a promo code and attach it to the cart. It also distinguishes the tool from remove_promo and clarifies that the code is re-checked later in get_order_preview and prepare_order.
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 precondition (at least one item in the cart), the source constraint (only codes the human gave, never guess), and the alternative for removal (remove_promo). It also explains when a code will be rejected versus when a valid code replaces the existing one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_custom_printGenerate custom printA
Generate a CUSTOM t-shirt print from a text prompt (AI, takes 2-10 min). SPENDS THE ACCOUNT OWNER'S STUDIO CREDITS: tell them the cost and their balance and get a yes BEFORE calling this — never spend silently, and never spend to 'try something' on your own initiative. Credits are earned (20 free on signup, 20 with every tee bought), so a wasted one is a real loss to them. Free exception: preserve=true prints their own image as-is and costs nothing. IMPORTANT: first call get_studio_options and ask the human to pick placement + product (and optionally background); do NOT silently use defaults. Args: prompt (design description), product? (one of ['kids_basic_tshirt_boy', 'kids_basic_tshirt_girl', 'kids_oversize_tshirt_boy', 'kids_oversize_tshirt_girl', 'mens_basic_tshirt', 'mens_oversize_tshirt', 'womens_basic_tshirt', 'womens_oversize_tshirt']), background? (t-shirt background, one of ['washed-beige', 'washed-black', 'washed-blue', 'washed-brown', 'washed-gray', 'washed-green', 'washed-orange', 'washed-pink', 'washed-red', 'washed-yellow', 'watercolor-beige', 'watercolor-blue', 'watercolor-sky']), placement? (print size/position, one of ['portrait_extended', 'square_center', 'chest_small']), model? (nb2 default | gpt-image-2 — both 1 credit, different styles), image_url? (https link to the user's OWN image — used as style/subject reference), preserve? (true = print the user's image exactly as-is, no AI redraw — kids' drawings, own art; FREE, no credits; requires image_url). Returns print_id — poll get_studio_status until done.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Generation engine: nb2 (default) or gpt-image-2 — both 1 credit. | |
| prompt | Yes | Text description of the design to generate. | |
| product | No | Studio product base from get_studio_options (default mens_oversize_tshirt). | |
| preserve | No | true = print the image exactly as-is, no AI redraw (free); requires image_url. | |
| image_url | No | https link to the user's OWN image, used as style/subject reference. | |
| placement | No | Print size/position: portrait_extended (default), square_center or chest_small. | |
| background | No | T-shirt background choice (see get_studio_options backgrounds). |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| error | No | e.g. not enough Studio credits, daily limit reached, invalid product. |
| detail | No | |
| status | No | |
| print_id | No | Generation id — poll get_studio_status with it. |
| tell_user | No | Say this to the account owner — what was spent from their balance and what is left. |
| topup_url | No | Where the user can buy credits (present on 'not enough credits'). |
| cost_credits | No | Credits spent on this generation. |
| signup_bonus | No | |
| balance_after | No | Credits left after this generation. |
| balance_before | No | |
| studio_account_created | No | Present when a Studio account was auto-created for the user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say non-readonly/openWorld/non-idempotent; the description goes far beyond by disclosing the credit cost model, how credits are earned (20 on signup, 20 per tee), the requirement to report balance and get a yes, and the free preserve=true exception. It also gives expected duration and the async follow-up (poll get_studio_status). No contradiction with annotations.
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 the two highest-stakes facts (cost and consent) before mechanics, and the args block is scannable. It is long, and the inline enum lists are verbose, but nearly every sentence carries decision-relevant content, so little is wasted.
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 costly, slow, non-idempotent generation tool, the description covers prerequisites, consent, cost, duration, parameter choices, and the return/polling loop (print_id -> get_studio_status). With an output schema present, nothing an agent needs to call 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?
Although schema coverage is 100%, the schema provides no enum values (0 enums) yet the description enumerates all product, background, and placement values, states the model trade-off (both 1 credit, different styles), and clarifies the image_url/preserve dependency. This is meaningful information the schema does not carry.
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 — 'Generate a CUSTOM t-shirt print from a text prompt' — and immediately flags the AI engine and 2-10 min latency. It is clearly distinct from siblings like add_custom_to_cart or get_studio_options, which are referenced as downstream/preparatory steps rather than competitors.
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 prerequisite sequence ('first call get_studio_options and ask the human to pick placement + product... do NOT silently use defaults') plus a mandatory consent gate before spending credits. It also names the alternative path (preserve=true, free) and when that applies — kids' drawings, own art.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_order_previewPreview orderARead-onlyIdempotent
Show the full order before checkout: re-priced lines, promo or bundle discount (they don't stack — the better one applies), shipping, the address from set_shipping_address, and the grand total in the order currency (local for some destinations, e.g. UZS for Uzbekistan). Call it once the address is set and show the result to the human for confirmation before prepare_order. Read-only and safe to repeat; prices come from the live catalog, not from the cart. ready_to_prepare stays false while the address is missing or a line is unavailable — fix what issues lists (update_cart_item, set_shipping_address) first. An empty cart returns an error.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| error | No | Present when the cart is empty. |
| items | No | Re-priced order lines. |
| total | No | |
| bundle | No | Bundle price applied instead of the promo code, if any. |
| issues | No | Lines that became unavailable, if any. |
| currency | No | |
| discount | No | |
| shipping | No | |
| subtotal | No | |
| promo_code | No | |
| ready_to_prepare | No | True when an address is set and all lines are orderable. |
| shipping_address | No | Address set via set_shipping_address (null if not set). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is structured data. The description still earns credit for non-obvious behavior: prices come from the live catalog rather than the cart, promo and bundle discounts don't stack, ready_to_prepare stays false on missing address or unavailable lines, and an empty cart errors out. Those additions are real value beyond the annotations, though return shape and pagination 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core 'what you get' is front-loaded, then invocation timing, then failure conditions — a sensible order. Nearly every clause carries distinct information (non-stacking discounts, catalog pricing, gate flag, empty-cart error), but it is a dense run-on paragraph that could be broken into shorter units for scanability.
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 not be enumerated, yet the description still highlights the fields that matter for the agent's decision (total currency, ready_to_prepare). Both the happy path and the two blocking conditions plus the error case are covered, so the 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 baseline is 4; there is nothing for the schema to document. The description goes slightly beyond by explaining that the grand total is expressed in the order currency, which can be destination-local (e.g. UZS for Uzbekistan).
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?
Starts with a specific verb+resource ('Show the full order before checkout') and enumerates exactly what the preview contains: re-priced lines, discount resolution, shipping, address, grand total. It is clearly distinguishable from siblings view_cart (raw cart) and prepare_order (the committing 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?
Explicit sequencing: call once the address is set, show the human, then prepare_order. It also names remedies for the blocked state (update_cart_item, set_shipping_address) rather than leaving the agent to guess. Usage boundaries relative to siblings are fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_order_statusCheck order statusARead-onlyIdempotent
Look up orders placed with the signed-in account's email — the latest ones, or one by its number — with status, total and a tracking page url. Use it for 'where is my order'; for an order not placed yet use get_order_preview. status is e.g. draft (unpaid, from prepare_order), pending_payment, paid, in_production, shipped, delivered or cancelled. number is the full order number such as AO-261023-1234; without it you get the newest orders first (limit default 5, max 20). Read-only: it can't cancel or change an order. An account with no email returns an empty list and a note.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max orders to return (default 5, max 20). | |
| number | No | Exact order number to look up, e.g. AO-261023-1234; omit for the most recent orders. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | Present when the account has no email on file. |
| orders | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations it discloses read-only intent in user terms ('can't cancel or change an order'), default ordering (newest first), the limit default of 5 and max of 20, the enumerated status lifecycle, and the edge case of an account with no email returning an empty list with a note. That is substantive behavior an agent can't derive from readOnlyHint/idempotentHint alone.
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 key routing information (what it does, the alternative, read-only) is front-loaded and every sentence carries content. The opening sentence is long and comma-heavy, costing some skimmability, but nothing is 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 values needn't be explained in depth, but the description still names the core fields and covers status lifecycle, empty-result behavior, and scoping to the signed-in account. Complete for a two-parameter read tool.
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 both parameters are already documented. The description restates the number format and limit default/max and adds that omitting number returns newest-first, which is already in the schema's own wording — marginal added value.
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 (look up) and resource (orders for the signed-in account), plus what it returns (status, total, tracking url). It explicitly contrasts with get_order_preview, so an agent can distinguish it from the nearest sibling without reading 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?
Gives an explicit trigger phrase ('where is my order') and names the alternative (get_order_preview) with the condition that selects it ('for an order not placed yet'). 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.
get_productGet product detailsARead-onlyIdempotent
Get one product by its code: available sizes, fabrics, the price of each size+fabric variant, and the design's 'about' text. Call it before add_to_cart when the human hasn't picked a size yet or may want another fabric — a search card doesn't list them. code is the code field of a search_products card (the end of its /p/ url); add_to_cart then takes the numeric good_id, which this result also returns. Read-only; an unknown code returns error 'product not found'.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Product code from search_products results. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | No | |
| code | No | |
| about | No | Design description text (may be null). |
| error | No | Present when the product was not found. |
| image | No | |
| price | No | |
| sizes | No | |
| theme | No | |
| title | No | |
| fabrics | No | |
| good_id | No | |
| product | No | |
| currency | No | |
| variants | No | Price per size+fabric combination. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the description correctly reinforces 'Read-only' without needing to restate safety. It adds meaningful behavior beyond the annotations by disclosing the unknown-code failure mode ('product not found') and by noting that the result returns the numeric good_id needed for add_to_cart.
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 what the tool returns, followed by when to use it and how the code maps to other tools. Every sentence carries actionable information 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 single-parameter read tool with an output schema and full annotation coverage, the description supplies everything an agent needs: what is returned, when to call it, where the code comes from, how the result feeds add_to_cart, and the error case. Little 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 real meaning: the code is the `code` field of a search_products card and specifically the end of its /p/<code> URL. It also clarifies the distinction from the numeric good_id consumed by add_to_cart, which the schema alone does not explain.
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, then enumerates exactly what the result contains: sizes, fabrics, per-variant prices, and the design's 'about' text. It is clearly distinguishable from search_products, which returns only cards, and from add_to_cart, which is the downstream action.
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 says to call it before add_to_cart when the human hasn't picked a size yet or may want another fabric, and explains why a search card is insufficient. It also names search_products as the source of the code and explains how add_to_cart uses the returned good_id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_saved_addressesGet saved addressesARead-onlyIdempotent
Return up to 5 distinct shipping addresses from the user's past orders (matched by the account email), newest first. For a returning buyer, call it before asking for an address, show the options, and pass the one they pick to set_shipping_address — this tool only reads and selects nothing. An empty list means no past orders: ask the human for the address.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| addresses | No | Up to 5 distinct addresses from past orders, newest first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description still adds real context beyond that: the hard cap of 5, deduplication, newest-first ordering, the empty-list meaning, and the explicit warning that it selects nothing. It does not cover auth/permission nuances, but nothing suggests those are in play.
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, front-loaded with what is returned and in what order, followed by usage and the failure case. Every sentence carries information; nothing is redundant with the schema.
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-shape details are unnecessary, yet the description still supplies the ordering and cap that shape agent expectations. For a zero-param read tool with strong annotations, nothing an agent needs before calling 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 are zero parameters, so there is nothing to mis-specify, and the baseline is 4. The description adds useful semantics by explaining that matching happens implicitly via the account email, which tells the agent no identifier argument is needed.
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 plus precise scope: up to 5 distinct shipping addresses from past orders, matched by account email, newest first. This clearly separates it from get_shipping_options (available methods) and set_shipping_address (the write counterpart).
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 when: for a returning buyer, call before asking for an address. It also names the downstream step (pass the pick to set_shipping_address) and the when-not/alternative path for an empty list (ask the human).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_shipping_optionsGet shipping optionsARead-onlyIdempotent
List the shipping methods for the current cart with price, ETA and the free-shipping threshold. Today there is one: worldwide tracked shipping, 7–14 business days, free once the cart subtotal reaches free_shipping_from. Use it to answer 'how much / how long is shipping' or to tell the human how much more gets free shipping. Read-only and works on an empty cart too. Prices here are USD for the cart as it is; the final shipping amount, in the destination's currency, is in get_order_preview.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| options | No | |
| free_shipping_from | No | Subtotal (USD) at which shipping becomes free. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real value beyond the annotations: results are cart-scoped, prices are USD for the cart as-is, the final destination-currency amount lives in get_order_preview, and the call is safe on an empty cart. It stops short of clarifying whether results shift after set_shipping_address, despite set_shipping_address and set_shipping_method being siblings — a meaningful gap for a shipping-quote 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 purpose, then usage conditions, then the sibling hand-off — good ordering with no filler. The embedded snapshot of the single current method ("worldwide tracked shipping, 7–14 business days") is illustrative but will go stale and is the one sentence that does not earn unconditional space.
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-shape explanation is unnecessary and the description rightly focuses on semantics instead: currency, cart scope, empty-cart behavior, and where the billed amount appears. Only the address-dependency question is left unaddressed for a tool sitting next to set_shipping_address.
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 the baseline is 4. The description correctly implies the cart context is implicit rather than passed in.
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 ("List the shipping methods for the current cart") along with the exact data returned: price, ETA, free-shipping threshold. It is clearly distinguished from get_order_preview, which the description names as the source of the authoritative converted amount.
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 user questions this answers ("how much / how long is shipping", "how much more gets free shipping") and routes the agent elsewhere for the final charged amount (get_order_preview). It also states a boundary condition — works on an empty cart — that would otherwise cause an agent to skip the call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_studio_creditsCheck Studio creditsARead-onlyIdempotent
Return the account owner's Studio credit balance; reading it spends nothing. Check it before generate_custom_print so you can tell the human the cost (1 credit per generation with either engine; preserve=true is free) and what will be left. No Studio account yet → balance 0 and studio_account=false; the first generation creates the account with 20 welcome credits. Every bought tee adds 20 credits, and more can be bought at allover.art/studio.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| error | No | |
| detail | No | |
| balance | No | Current Studio credit balance. |
| studio_account | No | False if the user has no Studio account yet (first generate auto-creates one). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses that reading spends nothing, that a missing Studio account returns balance 0 with studio_account=false, that first generation creates the account with 20 welcome credits, and how credits accrue from tee purchases. These are rich behavioral details not inferable from the annotations alone.
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 core balance-check purpose and the fact that reading is free. It remains efficient overall, though the final sentence about buying more credits at allover.art/studio is slightly more promotional than strictly necessary for invoking the tool.
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 not be explained in detail. The annotations cover the safety profile, and the description adds the key account-state and cost context an agent needs to call the 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?
This tool has zero parameters, so there are no parameter semantics to document. The baseline score for a zero-parameter tool is 4, and there is nothing in the description that needs to compensate for an input-schema gap.
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: return the account owner's Studio credit balance. It also clearly distinguishes this read-only balance check from the generation action it supports, so an agent can identify the tool's job immediately.
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 says to check this before generate_custom_print so the human can be told the cost and remaining balance. It also explains the no-account case and the free preserve=true case, giving clear conditions for when and how to use the result.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_studio_optionsCustom print optionsARead-onlyIdempotent
START HERE for any custom-print request: the menu of generation choices (print placements with plain-language descriptions, products, backgrounds, engines+costs). Present these to the human — at minimum ask which PLACEMENT and which PRODUCT they want — before calling generate_custom_print.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| models | No | Generation engines with cost notes. |
| products | No | |
| placements | No | Print size/position choices. |
| backgrounds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld=false, so the safety profile is covered. The description adds behavior not in the annotations: output must be surfaced to a human and a choice collected before proceeding — a workflow constraint an agent would otherwise miss. It stops short of describing the return shape, but an output schema exists to cover that.
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, front-loaded with the highest-value token ('START HERE'), then the content inventory, then the required next action. Every clause carries operational information; nothing is padding.
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?
Zero params, full annotation coverage, and an output schema that carries the return structure — so the description only needs routing and workflow guidance, which it delivers. Nothing an agent needs to call 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?
The tool takes zero parameters, so there is no parameter semantics to explain; baseline 4 applies. The description correctly implies no inputs are needed before fetching the menu.
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 resource (the menu of generation choices) and enumerates its contents — placements, products, backgrounds, engines+costs — plus its role as the entry point. The contrast with generate_custom_print makes it distinguishable from the sibling that actually produces the print.
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 'START HERE' trigger, an explicit next step (present to the human, ask at minimum for PLACEMENT and PRODUCT), and an explicit named successor tool (generate_custom_print). Nothing about when to call this versus alternatives 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.
get_studio_statusCheck print generationARead-onlyIdempotent
Poll a custom print started by generate_custom_print. status 'done' and 'failed' are final; anything else means still working — poll about every 30 seconds (generation takes 2–10 min) and don't start another generation meanwhile, since an account runs one at a time. When done it returns preview_url (the raw image: embed or attach it so the human sees the print) and design_url (the page to share); then offer add_custom_to_cart with the same print_id. 'failed' carries the reason, and its credits are refunded automatically. Read-only — polling costs nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| print_id | Yes | Generation id returned by generate_custom_print; the same id goes to add_custom_to_cart. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| error | No | Generation failure reason (credits are refunded). |
| detail | No | |
| status | No | Generation state; 'done' and 'failed' are terminal. |
| print_id | No | |
| design_url | No | Shareable Studio design page (when done) — the link to SHARE with the human. |
| preview_url | No | Raw print image (when done) — embed/attach it so the human sees the print in chat. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover safety (readOnly, idempotent, non-destructive), and the description adds substantial context beyond them: expected generation duration (2–10 min), the one-generation-per-account constraint, automatic credit refund on failure, and the fact that polling is free. This is exactly the kind of operational context annotations can't convey.
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 core action and status semantics, and every sentence carries real value (cadence, constraint, return handling, refund behavior). It is dense and somewhat run-on — a couple of clauses could be split for scannability — so not quite 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?
Given a single required param, full annotation coverage, and an output schema, the description still goes beyond necessity by explaining preview_url vs design_url handling and the failed-state refund. Nothing an agent needs to poll correctly or act on the result 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?
Only one parameter, and the schema documents it at 100% coverage including that the same id goes to add_custom_to_cart. The description reinforces the print_id linkage but adds no syntax, format, or lookup semantics beyond the schema, so the baseline 3 for full coverage 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?
States a specific verb and resource ('Poll a custom print started by generate_custom_print') and explicitly ties itself to the sibling that creates the resource. An agent immediately understands it is the check-status counterpart to generation.
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 when-to-use and next-step guidance: poll roughly every 30s, don't start another generation while one is running (account runs one at a time), and once done offer add_custom_to_cart with the same print_id. Terminal vs non-terminal statuses are enumerated, so no inference is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_prefsGet saved size/fitARead-onlyIdempotent
Return the shopper's saved default size and fit. Call this BEFORE asking the user for a size — if a default is set, apply it automatically (add_to_cart uses it when size is omitted), and search in their fit: search_products style='oversized' for oversized, style='tee' for basic.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| fit | No | Saved fit preference: basic | oversized, or null. |
| size | No | Saved default size, or null. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this as a safe read-only, idempotent lookup, and the description adds meaningful behavioral context beyond that. It discloses how the saved preference is applied automatically, how add_to_cart uses it when size is omitted, and how fit affects product search 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?
The description is compact and front-loads the core action and the key instruction to call it before asking for size. The second sentence is dense and combines automatic application, add_to_cart behavior, and search style mappings, but every element is useful and there is little waste.
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?
Given a zero-parameter read-only tool with rich annotations and an output schema, the description provides everything needed to call it correctly. It covers purpose, timing, fallback behavior when a default exists, and how the result feeds into sibling tools.
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 has zero input parameters, so there is no parameter semantics to explain in the description. A baseline of 4 is appropriate because the schema requires no compensation and the description correctly avoids inventing parameter details.
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: return the shopper's saved default size and fit. It clearly distinguishes this read-only preference lookup from related mutation tools such as set_user_prefs through the get/set naming and saved-data framing.
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 explicit timing: call this before asking the user for a size, and apply the default automatically if one exists. It also names concrete downstream alternatives, explaining how add_to_cart can consume the saved size and how search_products should use the saved fit with specific style values.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_collectionsList collectionsARead-onlyIdempotent
List active curated collections — themed landing pages on allover.art, trending first — with title, slug and url. Use it when the human wants ideas or a themed page to browse; send them the url. Collections are not a search filter: to find products in a theme, call search_products with theme or query. limit caps the list (default 50, max 100). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max collections to return (default 50, max 100). |
Output Schema
| Name | Required | Description |
|---|---|---|
| collections | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered; the description nonetheless adds the ordering guarantee ("trending first") and the fact that only "active" collections appear, which the annotations do not convey. The trailing "Read-only" largely restates the annotation rather than adding new behavior, and pagination/truncation behavior beyond the cap is not described.
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 compact sentences, front-loaded with the resource definition, then intended use, then the exclusion routing, then the parameter note. No padding; even the short tail sentences carry routing or constraint 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?
Output schema exists so return values need not be explained, yet the description still names the key fields. With one optional parameter fully documented and annotations covering safety, 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 description coverage is 100% and the single `limit` parameter is already documented as "default 50, max 100" in the schema; the description repeats that verbatim without adding format or semantics beyond it. With the schema doing the work, this sits at the 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?
States a specific verb and resource ("List active curated collections") and immediately defines what a collection is ("themed landing pages on allover.art") plus the ordering ("trending first") and returned fields (title, slug, url). An agent can distinguish this from search_products or get_product 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 ("when the human wants ideas or a themed page to browse; send them the url") and an explicit negative case naming the alternative tool ("Collections are not a search filter: to find products in a theme, call search_products with theme or query"). Both when-to-use and when-not-to-use are covered with the sibling named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_orderPrepare checkoutA
Turn the cart, address and promo into a draft order and return {checkout_url, draft_id, expires_at}. Send checkout_url to the human: checkout opens pre-filled and they review and pay themselves — the agent never pays. Call it only after showing get_order_preview and getting the human's OK. Each call creates a NEW draft with its own number, so call it once per purchase; the cart itself is not emptied. The draft expires after 48 hours. Prices are re-checked; an empty cart, a missing address or no orderable items return an error (with issues) and create nothing.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| error | No | Empty cart, missing address or no orderable items. |
| total | No | |
| issues | No | |
| currency | No | |
| draft_id | No | Draft order number. |
| expires_at | No | ISO 8601 time when the draft expires (48 h). |
| checkout_url | No | Pre-filled checkout link — send it to the human to review and pay. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: each call creates a new non-idempotent draft, the cart is not emptied, drafts expire in 48 hours, prices are re-checked, and empty cart / missing address / no orderable items produce an error with issues and create nothing. The new-draft-each-call note reinforces the non-idempotent hint rather than contradicting it.
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 action and return shape, then the human-handoff, then preconditions, then side effects and failure modes. Every clause carries distinct operational information with no repetition.
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?
Even though an output schema exists, the description still names the key return fields and adds the failure and expiry semantics an agent needs. For a zero-parameter, state-driven checkout step, 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?
Zero parameters, so there is nothing for the schema to document; the description compensates by explaining that the inputs come from cart, address and promo state already established by sibling tools. It stops short of naming which setters feed it, but no parameter-level guidance is needed.
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?
Opens with a specific verb and resource ("Turn the cart, address and promo into a draft order") and immediately enumerates the returned fields. It is clearly distinguished from get_order_preview, which it names as the prior step rather than an alternative.
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 sequencing: "Call it only after showing get_order_preview and getting the human's OK" gives both the prerequisite and the alternative. It also states the correct call frequency ("once per purchase") and that the human, not the agent, completes payment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_promoRemove promo codeAIdempotent
Drop the promo code from the cart, so totals go back to full price (a bundle price, if any, still applies). Use it when the human no longer wants the code; it isn't needed before apply_promo, which replaces the code anyway. Safe to repeat: with no code applied or an empty cart it does nothing and still returns applied=false.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| applied | No | Always false after removal. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations: it explains the resulting pricing state, the bundle-price exception, repeat-call behavior on an empty cart or no applied code, and the applied=false return signal. Annotation idempotentHint=true is corroborated rather than merely restated, and the no-op specifics add real 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?
Three short sentences, front-loaded with the action and its price effect, then usage, then edge-case safety. Every clause carries information an agent would otherwise have to guess.
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 no-parameter idempotent cart mutation with an output schema available, the description covers effect, routing, and no-op behavior. Nothing needed to invoke it correctly is absent, and return-format detail is left to the output schema.
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; baseline is 4. Nothing is missing, but no extra semantic value is possible here.
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+resource ('Drop the promo code from the cart') plus the effect on totals ('totals go back to full price'), with a useful caveat that a bundle price still applies. It is clearly distinguishable from apply_promo, 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?
States when to use it ('when the human no longer wants the code') and when it is unnecessary ('isn't needed before apply_promo, which replaces the code anyway'), naming the sibling that covers the alternative case. An agent can route between remove_promo and apply_promo with no inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_productsSearch catalogARead-onlyIdempotent
Search the allover.art catalog; returns one card per design (good_id, code, price, url) plus the total match count. Use it for any 'find me a …' request — list_collections is for curated themed pages, get_product for one card's sizes and fabrics. Filters combine: query is free text ('cat', 'neon koi'); theme is a canonical theme (Cats, Anime, Skulls; comma-separate several); style should follow the shopper's saved fit from get_user_prefs (basic → tee, oversized → oversized); max_price is USD. Ranked by relevance with a query, by best-sellers without. No paging: you get the top limit (default 24, max 48), so narrow the filters to reach the rest. Adult-only designs are excluded; an unknown color or style returns an error listing the valid values.
| Name | Required | Description | Default |
|---|---|---|---|
| color | No | Main color of the print. | |
| limit | No | Max cards to return (default 24, max 48). | |
| query | No | Free-text search, e.g. 'cat' or 'neon koi'. | |
| style | No | Garment cut: tee, oversized, long_sleeve or oversized_long_sleeve. | |
| theme | No | Canonical theme filter (Cats, Anime, Skulls, ...); comma-separate several. | |
| section | No | Catalog section. | |
| max_price | No | Only items priced at or below this amount, USD. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Unknown color or style, with the valid values. |
| items | No | Product cards. |
| total | No | Total catalog matches for the filters. |
| showing | No | Number of cards returned. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this as a read-only, idempotent, non-destructive search, but the description adds meaningful behavior beyond them: relevance ranking with a query versus best-sellers without, no paging, top-limit behavior with default 24 and max 48, adult-design exclusion, and error behavior for unknown colors or styles. These details materially help an agent predict results and failure modes.
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 dense but front-loaded: purpose and return shape come first, followed by sibling differentiation, filter behavior, ranking, paging constraints, and error handling. Every sentence carries operational information, and there is no redundant restatement of structured fields.
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 7-parameter search tool with an output schema and rich annotations, the description covers what an agent needs: return fields, ranking logic, limit behavior, filter combination, style selection from user preferences, and error cases. It is complete enough to invoke correctly without additional documentation.
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 useful semantics: query is free text with examples, theme is canonical and comma-separatable, style should be derived from the shopper's saved fit, and max_price is USD. It also clarifies that limit caps results at 48 and that narrowing filters is the only way to reach additional matches. Color semantics are left mostly to the schema, which keeps it from a full 5.
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 ('Search the allover.art catalog') and clarifies the return shape: one card per design with good_id, code, price, and url plus total match count. It explicitly distinguishes this tool from list_collections and get_product, so an agent can select it 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 explicit usage conditions ('find me a …' requests) and names alternatives: list_collections for curated themed pages and get_product for a single card's sizes/fabrics. It also explains how filters combine, how to choose style based on get_user_prefs, and how to work around the lack of paging by narrowing filters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_shipping_addressSet shipping addressAIdempotent
Set the delivery address for the current cart's checkout; get_order_preview and prepare_order use it. Needs at least one item in the cart and replaces any address set before. For a returning buyer, offer get_saved_addresses first and pass the chosen one here. The phone is normalized to international form; if that fails the result carries a warning — ask the human for the number with its country code, since the courier calls it. Only the required fields and the phone are checked; the street itself is not verified. Missing fields or an empty cart return an error and save nothing. The country can switch the order to local currency (UZS for Uzbekistan).
| Name | Required | Description | Default |
|---|---|---|---|
| zip | No | Postal / ZIP code; omit where the country has none. | |
| city | Yes | Destination city. | |
| name | Yes | Recipient full name. | |
| phone | Yes | Recipient phone, ideally with country code, e.g. +61 412 462 423. | |
| address | Yes | Street, house and apartment in one line. | |
| country | Yes | Destination country: name or 2-letter code, e.g. 'Australia' or 'AU'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| error | No | Missing fields or empty cart. |
| warning | No | Phone could not be put in international form — ask the human for it with the country code. |
| shipping | No | Saved address snapshot. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, the description discloses phone normalization to international form, a warning result when normalization fails, that only required fields and phone are checked while the street is not verified, and that country can switch the order to local currency. These are meaningful behavioral details for a mutating checkout 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?
The description is dense but front-loaded: purpose and consumers first, then prerequisites, alternatives, validation behavior, and side effects. Every sentence carries operational meaning 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?
Given the mutation, prerequisites, validation rules, warning behavior, currency side effect, and output schema presence, the description is complete enough for an agent to call this tool correctly. Annotations cover safety and idempotency, and the description covers what they do not.
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 already 100%, so the baseline is 3. The description still adds semantic value beyond the schema by explaining phone normalization and country-code fallback, country-driven currency switching, and the fact that street text is not verified.
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: setting the delivery address for the current cart's checkout. It also names downstream tools (get_order_preview, prepare_order) that consume the address, clearly distinguishing it from siblings like get_saved_addresses or set_shipping_method.
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 explicit when-to-use guidance, including the prerequisite of having at least one cart item, the behavior of replacing a prior address, and the recommendation to offer get_saved_addresses first for returning buyers. It also states failure conditions: missing fields or an empty cart return an error and save nothing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_shipping_methodSet shipping methodAIdempotent
Select the shipping method for the current cart's checkout by an id from get_shipping_options. Only 'worldwide' exists today and it is already the default, so this call is optional — use it when the human explicitly picks a method, or once more methods appear. Needs at least one item in the cart; an unknown option_id returns an error and changes nothing. Repeating it is harmless.
| Name | Required | Description | Default |
|---|---|---|---|
| option_id | No | Shipping option id from get_shipping_options (currently 'worldwide'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| error | No | Unknown option_id or empty cart. |
| shipping_method | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description adds meaningful operational context: an unknown option_id returns an error and changes nothing, and at least one item must be in the cart. It does slightly repeat the idempotentHint with 'Repeating it is harmless,' but it still contributes substantial precondition and failure semantics not present in annotations.
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 are front-loaded with purpose, then optionality, then preconditions and error behavior. Every sentence adds practical value for an agent deciding whether to call it.
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 simple one-parameter setter with an output schema, the description covers optionality, preconditions, error handling, and idempotency. Nothing material is missing for 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?
Schema coverage is 100%, so the schema already documents option_id as coming from get_shipping_options and currently being 'worldwide.' The description mostly reinforces this and adds error behavior, which is behavioral rather than parameter syntax or format detail.
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 ('Select the shipping method for the current cart's checkout') and ties the parameter to a named sibling ('get_shipping_options'). This clearly distinguishes it from the sibling that lists shipping options.
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 says the call is optional because only 'worldwide' exists today and is already default, and it names the condition for use: when the human explicitly picks a method or once more methods appear. That is explicit when-to-use guidance with a clear alternative context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_user_prefsSave size/fitAIdempotent
Save the shopper's default size and/or fit on their allover.art account, so later chats can skip asking. Call it only when the human states a size or fit or asks you to remember one; read it back with get_user_prefs. Pass only what they stated: an omitted field keeps its saved value, an empty string clears it. size is XS, S, M, L, XL or 2XL–5XL (case-insensitive); fit is basic or oversized. The saved size fills in add_to_cart when size is omitted, and the fit maps to search_products style (basic → tee, oversized → oversized). Any other value returns an error and saves nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| fit | No | Fit preference: basic or oversized; empty string clears it. | |
| size | No | Default size: XS, S, M, L, XL, 2XL…5XL; empty string clears it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| fit | No | |
| size | No | |
| error | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the mutation profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), yet the description still adds real value: omitted fields retain their saved value, empty strings clear them, and invalid input is atomic ('returns an error and saves nothing'). It also discloses cross-tool propagation (size feeds add_to_cart, fit maps to search_products style). It does not mention account/auth preconditions, which is the only 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Leads with what gets saved and why, then the call condition, then field semantics, then side effects and error behavior — a natural decision order. Roughly 100 words with no filler; each 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?
An output schema exists, so return values need not be explained. The description covers selection criteria, partial-update semantics, valid values, error behavior, and effects on downstream tools — everything an agent needs 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 the baseline is 3; the description earns above that by adding case-insensitive matching, the omitted-vs-empty-string distinction for partial updates, and the downstream meaning of each field. The accepted value sets largely restate the schema, which keeps it from a 5.
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 (save) and resource (the shopper's default size/fit on their account), plus the practical goal (later chats skip asking). It is instantly separable from the sibling get_user_prefs, which it names as the read counterpart.
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 invocation condition — 'only when the human states a size or fit or asks you to remember one' — which also implies when not to call it. It names the alternative (get_user_prefs) for reading and warns that any unlisted value errors out and saves nothing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_cart_itemUpdate cart lineADestructive
Change one line already in the cart, addressed by its zero-based index from view_cart: set qty (0 removes the line; max 99) and/or switch size or fabric, which re-prices the line. Pass only what changes. After a removal the lines below move up one index, so re-read view_cart before the next edit. A bad index or an unavailable size/fabric returns an error (with the sizes on offer) and changes nothing. Returns the updated cart. To add a different product use add_to_cart.
| Name | Required | Description | Default |
|---|---|---|---|
| qty | No | New quantity; 0 removes the line. | |
| size | No | New size for this line (must be available for the product). | |
| index | Yes | Zero-based cart line index from view_cart. | |
| fabric | No | New fabric for this line (must be available for the product). |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present instead of a cart when the call failed (bad index, unavailable size, ...). |
| items | No | Cart lines in index order — this index is what update_cart_item takes. |
| currency | No | |
| subtotal | No | Sum of price x qty over all lines, USD. |
| checkout_url | No | Cart page URL for the human. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations by disclosing that qty=0 deletes the line, the 99 cap, that size/fabric changes re-price the line, that a failed index or unavailable variant is atomic ('changes nothing'), and what is returned. It also warns about index shifting after deletion — a real behavioral trap the annotations cannot convey.
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 core action, then semantics, then edge-case behavior, then the sibling routing hint. No filler sentences; every clause carries a fact the 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?
For a 4-parameter mutation with an output schema and full annotation coverage, the description covers sourcing the index, partial updates, destructive semantics, error atomicity, and the follow-up re-read. 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 meaning on top by tying qty=0 to removal, giving the max of 99, and explaining that size/fabric edits trigger re-pricing and must be available for the product. It doesn't add much on the index parameter beyond what the schema already says.
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 one line already in the cart') plus the addressing scheme ('zero-based index from view_cart'). It also explicitly contrasts with add_to_cart, so an agent can distinguish it from the create-path siblings 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 explicit when/when-not guidance: 'Pass only what changes', 'To add a different product use add_to_cart', and the re-read-view_cart-before-next-edit rule after a removal. The alternative tool is named with the condition that selects it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
view_cartView cartARead-onlyIdempotent
Show the lines in the user's cart with qty, size, fabric and subtotal. It is the same server-side cart the human sees at allover.art/cart when signed in, so items they added in the browser appear here too. Use it to get the zero-based line index that update_cart_item takes — re-read after removing a line, since later indexes shift. Prices are as added; for the payable total with fresh prices, promo and shipping use get_order_preview. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present instead of a cart when the call failed (bad index, unavailable size, ...). |
| items | No | Cart lines in index order — this index is what update_cart_item takes. |
| currency | No | |
| subtotal | No | Sum of price x qty over all lines, USD. |
| checkout_url | No | Cart page URL for the human. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Well beyond the readOnlyHint annotation, it discloses that this is the same server-side cart the human sees in the browser (so browser-added items appear), that prices are as-added rather than fresh, and that line indexes shift after removal. These are exactly the behavioral traits that would cause a mis-call if omitted.
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 return shape, then the shared-cart context, then the index guidance, then the pricing alternative. Every sentence carries distinct information with no restatement 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?
For a no-param read with an output schema already documenting return values, the description covers everything an agent needs: what comes back, how it relates to browser state, staleness of prices, and the downstream index contract.
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 the baseline is 4 and there is nothing for the description to disambiguate. It correctly spends no words on a non-existent schema.
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 ('Show the lines in the user's cart') and enumerates the returned fields (qty, size, fabric, subtotal), distinguishing it from get_order_preview which returns payable totals. An agent can tell exactly what this returns without opening the output 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 when-to-use ('to get the zero-based line index that update_cart_item takes'), a stateful caveat (re-read after removing a line, since later indexes shift), and names the alternative for pricing (get_order_preview). Nothing about selection 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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v1.2.0- Changed
add_custom_to_cart2 fields changed- changed
Input schema / properties / product / descriptionPrevious value: -"Studio product base, same set as generate_custom_print (default mens_oversize_tshirt)."New value: +"Studio garment base, as chosen in get_studio_options (default mens_oversize_tshirt)." - added
Input schema / properties / product / enumAdded value: +[ + "kids_basic_tshirt_boy", + "kids_basic_tshirt_girl", + "kids_oversize_tshirt_boy", + "kids_oversize_tshirt_girl", + "mens_basic_tshirt", + "mens_oversize_tshirt", + "womens_basic_tshirt", + "womens_oversize_tshirt" +]
- Changed
add_to_cart2 fields changed- changed
Input schema / properties / size / descriptionPrevious value: -"Size label; must be one of the product's available sizes."New value: +"Size label; must be one of the product's available sizes. Optional when a default size is saved." - changed
Input schema / requiredPrevious value: -[ - "good_id", - "size" -]New value: +[ + "good_id" +]
- Changed
apply_promo2 fields changed- changed
Input schema / properties / code / descriptionPrevious value: -"Promo code to validate and apply."New value: +"Promo code exactly as the human gave it (case-insensitive)." - added
Output schema / properties / bundleAdded value: +{ + "description": "Bundle price that beats the code (when applied=false for that reason).", + "type": "string" +}
- Changed
get_order_preview1 field changed- added
Output schema / properties / bundleAdded value: +{ + "description": "Bundle price applied instead of the promo code, if any.", + "type": "string" +}
- Changed
get_order_status1 field changed- changed
Input schema / properties / number / descriptionPrevious value: -"Exact order number to look up; omit for the most recent orders."New value: +"Exact order number to look up, e.g. AO-261023-1234; omit for the most recent orders."
- Changed
get_studio_status1 field changed- changed
Input schema / properties / print_id / descriptionPrevious value: -"Generation id returned by generate_custom_print."New value: +"Generation id returned by generate_custom_print; the same id goes to add_custom_to_cart."
- Changed
search_products3 fields changed- changed
Input schema / properties / section / descriptionPrevious value: -"Catalog section: mens, womens or kids."New value: +"Catalog section." - added
Input schema / properties / section / enumAdded value: +[ + "mens", + "womens", + "kids" +] - added
Output schema / properties / errorAdded value: +{ + "description": "Unknown color or style, with the valid values.", + "type": "string" +}
- Changed
set_shipping_address5 fields changed- changed
Input schema / properties / address / descriptionPrevious value: -"Street address line."New value: +"Street, house and apartment in one line." - changed
Input schema / properties / country / descriptionPrevious value: -"Destination country."New value: +"Destination country: name or 2-letter code, e.g. 'Australia' or 'AU'." - changed
Input schema / properties / phone / descriptionPrevious value: -"Contact phone number for delivery."New value: +"Recipient phone, ideally with country code, e.g. +61 412 462 423." - changed
Input schema / properties / zip / descriptionPrevious value: -"Postal / ZIP code (optional where not used)."New value: +"Postal / ZIP code; omit where the country has none." - added
Output schema / properties / warningAdded value: +{ + "description": "Phone could not be put in international form — ask the human for it with the country code.", + "type": "string" +}
- Changed
set_user_prefs2 fields changed- changed
Input schema / properties / fit / descriptionPrevious value: -"Fit preference: basic or oversized."New value: +"Fit preference: basic or oversized; empty string clears it." - changed
Input schema / properties / size / descriptionPrevious value: -"Default size: XS, S, M, L, XL, 2XL…5XL."New value: +"Default size: XS, S, M, L, XL, 2XL…5XL; empty string clears it."
30 tool updates
v1.1.0- Changed
add_custom_to_cart3 fields changed- changed
Input schema / properties / print_id / descriptionPrevious value: -"Finished print id — studio_status must report status=done."New value: +"Finished print id — get_studio_status must report status=done." - changed
Input schema / properties / product / descriptionPrevious value: -"Studio product base, same set as studio_generate (default mens_oversize_tshirt)."New value: +"Studio product base, same set as generate_custom_print (default mens_oversize_tshirt)." - changed
Output schema / properties / items / descriptionPrevious value: -"Cart lines in index order — this index is what set_cart_quantity/cart_update/cart_remove take."New value: +"Cart lines in index order — this index is what update_cart_item takes."
- Changed
add_to_cart1 field changed- changed
Output schema / properties / items / descriptionPrevious value: -"Cart lines in index order — this index is what set_cart_quantity/cart_update/cart_remove take."New value: +"Cart lines in index order — this index is what update_cart_item takes."
- Removed
cart_remove - Removed
cart_update - Removed
checkout_link - Removed
create_colorway - Removed
designer_add_to_colorway - Removed
designer_colorways - Removed
designer_designs - Removed
designer_remove_from_colorway - Removed
designer_stats - Removed
designer_submissions - Removed
designer_upload_slot - Removed
designer_uploads - Added
generate_custom_print - Added
get_order_status - Added
get_studio_credits - Added
get_studio_options - Added
get_studio_status - Removed
order_status - Changed
search_products2 fields changed- added
Input schema / properties / colorAdded value: +{ + "description": "Main color of the print.", + "enum": [ + "Black", + "Grey", + "White", + "Navy", + "Beige", + "Turquoise", + "Pink", + "Brown", + "Red", + "Purple", + "Olive", + "Blue", + "Green", + "Yellow", + "Orange", + "Burgundy", + "Multicolor" + ], + "type": "string" +} - added
Input schema / properties / styleAdded value: +{ + "description": "Garment cut: tee, oversized, long_sleeve or oversized_long_sleeve.", + "enum": [ + "tee", + "oversized", + "long_sleeve", + "oversized_long_sleeve" + ], + "type": "string" +}
- Removed
set_cart_quantity - Removed
set_colorway_primary - Removed
studio_credits - Removed
studio_generate - Removed
studio_options - Removed
studio_status - Removed
submit_design - Added
update_cart_item - Changed
view_cart1 field changed- changed
Output schema / properties / items / descriptionPrevious value: -"Cart lines in index order — this index is what set_cart_quantity/cart_update/cart_remove take."New value: +"Cart lines in index order — this index is what update_cart_item takes."
36 tool updates
- First observed
add_custom_to_cart - First observed
add_to_cart - First observed
apply_promo - First observed
cart_remove - First observed
cart_update - First observed
checkout_link - First observed
create_colorway - First observed
designer_add_to_colorway - First observed
designer_colorways - First observed
designer_designs - First observed
designer_remove_from_colorway - First observed
designer_stats - First observed
designer_submissions - First observed
designer_upload_slot - First observed
designer_uploads - First observed
get_order_preview - First observed
get_product - First observed
get_saved_addresses - First observed
get_shipping_options - First observed
get_user_prefs - First observed
list_collections - First observed
order_status - First observed
prepare_order - First observed
remove_promo - First observed
search_products - First observed
set_cart_quantity - First observed
set_colorway_primary - First observed
set_shipping_address - First observed
set_shipping_method - First observed
set_user_prefs - First observed
studio_credits - First observed
studio_generate - First observed
studio_options - First observed
studio_status - First observed
submit_design - First observed
view_cart
TDQS
Scored across 22 tools
Most tools target a distinct resource+action, and the descriptions actively resolve the risky pairs: add_to_cart vs add_custom_to_cart (catalog vs AI print), get_order_preview vs get_order_status (pre-purchase vs placed orders), and view_cart vs get_order_preview. Minor residual overlap remains between get_shipping_options and the shipping line in get_order_preview, and between get_product and search_products for size/fabric lookup, but guidance is explicit enough that misselection is unlikely.
Nearly everything follows a snake_case verb_noun pattern with grouped prefixes (get_studio_*, *_cart_item, set_shipping_*, get_/set_user_prefs). Small deviations: 'view_cart' instead of get_cart, and 'prepare_order' / 'generate_custom_print' use less standard verbs. Still highly predictable.
22 tools is on the heavier end, but this is a full commerce flow (identity/prefs, catalog discovery, cart, address, shipping, checkout preview, order status, and an AI print studio) so nearly every tool covers a distinct step. A couple could theoretically be folded (e.g. get_studio_options into generate_custom_print), pushing it slightly over the ideal range.
The surface covers the entire shopper lifecycle: discovery (search_products, list_collections, get_product), personalization (get/set_user_prefs, saved addresses), cart CRUD plus promo handling, shipping method selection, a validated order preview, draft creation, and post-purchase tracking. Custom print generation, polling, credit checks, and adding finished prints to the cart close what would otherwise be a major gap; the absence of order cancellation is consistent with the stated design that the agent never pays or modifies placed orders.
Maintenance
Related MCP Connectors
MCP server for Probo print-on-demand — search products, configure orders, track shipments.
Official remote MCP server for Color Me Shop.
Official remote MCP server for SUZURI.
Unified MCP server for 70+ eCommerce platforms: products, orders, customers, and more.
Related MCP Servers
- AlicenseAqualityDmaintenanceConnects Printful's print-on-demand API to AI assistants like Claude and Cursor to automate business operations. It enables users to browse catalogs, manage orders, generate mockups, and calculate shipping rates through natural language.241932MIT

Color Me Shopofficial
AlicenseAqualityCmaintenanceOfficial remote MCP server for Color Me Shop (GMO Pepabo). Manage orders, products, customers, coupons, and inventory of your online store through natural language.491MIT- FlicenseNot gradedqualityBmaintenanceEnables AI clients to manage SlimWeb/Webless e-commerce backend operations such as products, orders, categories, promotions, and settings through a secure Remote MCP server.-
- AlicenseAqualityCmaintenanceOfficial MCP server for NanoCart, enabling AI agents to manage products, orders, coupons, categories, subscribers, settings, and pull sales reports from your store.3129 npmMIT