Printdash
Server Details
Online printing for Australia: products, exact prices, quotes, artwork checks and orders.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 58 tools
Most tools target a clear resource/action, but the set has notable overlaps: confirm and place_order both execute a prepared checkout, and multiple artwork attachment tools (attach_artwork, attach_artwork_from_url, attach_artwork_inline, request_artwork_upload) require careful description-reading to distinguish. Descriptions are detailed enough to resolve most cases, but misselection risk remains across the large surface.
Names overwhelmingly follow snake_case verb_noun patterns (get_order, create_quote, update_cart_line, list_products). A few deviations like confirm, ping, and reorder are natural single-verb commands but break the otherwise strong convention.
58 tools is an extreme expansion for a print-ordering lifecycle, well beyond the typical 3–15 well-scoped range. While the domain is broad, the tool count itself creates a heavy surface that is hard to navigate and maintain.
The surface covers the full lifecycle: product discovery, configuration matching, pricing, cart management, quotes, custom quote requests, orders, artwork workflows, addresses, account/team context, approvals, referrals, and invoices. No obvious dead ends are apparent for the stated print-ordering purpose.
Available Tools
58 toolsadd_to_cartAdd a job to the cartAInspect
Prices one job with Printdash's pricing engine (product id and a configuration of option ids, as price_job takes them) and puts it in the cart exactly as the product page's Add to cart does. If the job cannot be priced, nothing is added and the result says what is missing or the nearest combinations. Nothing is ordered or charged: checkout on printdash.io re-prices, takes artwork and payment. Printdash prints in Australia and delivers within Australia only; prices are in AUD and include GST. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| product_id | Yes | ||
| configuration | Yes | The job, as option ids from get_product. Everything optional: the result says what is missing. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cart | No | |
| next | Yes | |
| added | Yes | |
| price | No | |
| errors | No | |
| priced | No | |
| reason | No | |
| line_id | No | |
| missing | No | |
| nearest | No | |
| product | Yes | |
| currency | Yes | |
| product_id | Yes | |
| turnaround | No | |
| service_area | Yes | |
| prices_include_gst | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: clarifies that nothing is ordered or charged, that checkout re-prices, that a failed pricing attempt adds nothing and returns what is missing or nearest combinations, and that a signed-in account is required (unauthenticated calls prompt sign-in). It also discloses the AU-only print/delivery scope and AUD/GST pricing, which no structured field carries.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the core action before the failure, billing, and auth context. Dense and largely waste-free, though the AU-shipping/currency sentence is scope trivia that could be trimmed without hurting invocation correctness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema and rich annotations already present, the description fills the remaining gaps an agent needs: auth requirement, side-effect boundary (cart only, no charge), failure semantics, and regional/currency constraints. Nothing needed 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 description coverage is 50% and the nested configuration is extensively self-documented in the schema. The description adds the useful pointer that option ids follow price_job's format, but gives no field-level guidance of its own, so it hovers at the baseline for a partially documented 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: prices a job with the pricing engine and puts it in the cart. It distinguishes itself from the sibling price_job by saying the configuration is 'as price_job takes them' and notes it mirrors the product page's Add to cart action, so an agent can tell exactly what this does versus the pure-pricing tool.
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 states the failure path ('if the job cannot be priced, nothing is added') and what is not covered ('checkout on printdash.io re-prices, takes artwork and payment'), which effectively routes artwork/payment work to other tools. It does not name update_cart_line, remove_cart_line or clear_cart as the follow-up alternatives, so the routing picture is slightly incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
approve_orderApprove a Team order (asks first)ADestructiveInspect
For a Team owner: prepares approving one held order (from list_pending_approvals) and returns the summary to show the customer and a confirmation_token. Nothing is decided until confirm is called after they agree. Approving an on-account order sends it to production; approving a card order makes it payable by any member. A member who is not an owner cannot approve. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| order | Yes | The order number (or the order id from its link). |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| action | Yes | |
| details | Yes | |
| summary | Yes | Show this to the customer exactly as written before confirming. |
| expires_at | Yes | |
| confirmation_token | Yes | |
| confirmation_required | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, openWorldHint=true and non-idempotence, and the description adds real context beyond them: role gating, the sign-in requirement with the on-the-spot auth prompt, and the differing downstream effects for on-account vs card orders. However, it does not reconcile the destructiveHint=true annotation with its own claim that 'nothing is decided' at this step, leaving ambiguity about whether this call alone mutates anything.
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 actor and the action ('For a Team owner: prepares approving...'), and every clause carries information. The single dense paragraph mixes audience, mechanics, side effects and auth, which is a lot for one block but nothing is genuinely 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 one-parameter, output-schema-backed preparation step, an agent has everything needed: who may call it, where the order identifier comes from, the auth behavior, and what happens on confirm. Return values are covered by the output schema and briefly previewed in the description.
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% for the single 'order' parameter, so the baseline is 4. The description only adds that the identifier should come from list_pending_approvals, which is a useful pointer but not new 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?
States a specific verb and resource ('prepares approving one held order') plus the two artifacts it returns (summary, confirmation_token). It also names the source sibling (list_pending_approvals) and the completing sibling (confirm), so an agent can distinguish it from reject_order and confirm without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit preconditions and exclusions: Team owner role required, order must come from list_pending_approvals, and 'Nothing is decided until confirm is called after they agree' defines the hand-off to confirm. It also names a when-not case ('A member who is not an owner cannot approve').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
attach_artworkAttach an uploaded file to a lineADestructiveInspect
After the file has been PUT to request_artwork_upload's upload_url: puts it on the line (in the design and side chosen then, replacing a file already in that slot), makes the page 1 and page 2 previews, runs Printdash's file checks, and returns the preview as an image with the checks' notices. The notices are the ones checkout shows; none of them blocks an order. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| upload_id | Yes | The upload_id request_artwork_upload returned. |
Output Schema
| Name | Required | Description |
|---|---|---|
| file | Yes | |
| next | Yes | |
| side | Yes | |
| files | Yes | |
| total | Yes | |
| checks | Yes | |
| design | Yes | |
| target | Yes | |
| designs | Yes | Which file and page is each design's front and back, as the site resolves them. |
| preview | Yes | |
| attached | Yes | |
| complete | Yes | Designs with every face they need. |
| replaced | Yes | |
| uploader_url | Yes | |
| order_item_status | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: it discloses that an existing file in that slot is replaced (matching destructiveHint=true), that page 1 and 2 previews are generated, that Printdash file checks run and their notices are returned but never block an order, and that a signed-in account is required with a specific unauthenticated behavior. That is exactly the kind of side-effect and auth detail 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?
Two sentences, front-loaded with the prerequisite PUT step, then the effects. Dense but every clause carries information; the parenthetical about design/side and replacement is the only slightly packed section.
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 summarizes the return (preview image plus check notices) and clarifies that notices are the same ones checkout shows and are non-blocking. Auth requirements, side effects, and the upstream dependency are all covered, leaving no gap for a destructive single-param mutation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and there is a single parameter whose description already says it is 'the upload_id request_artwork_upload returned.' The prose reinforces the handoff from that tool but adds no new format, constraint, or semantics beyond what the schema states, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('puts it on the line', 'Attach an uploaded file to a line') and anchors it to the request_artwork_upload flow, which cleanly separates it from siblings attach_artwork_from_url and attach_artwork_inline. An agent can tell which of the three attach tools applies without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear precondition ('After the file has been PUT to request_artwork_upload's upload_url'), which tells the agent both when to call it and which tool must run first. It never names the alternative attach tools or states when-not to use it, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
attach_artwork_from_urlAttach artwork from a linkADestructiveInspect
Fetches the file at an https link (a Canva, Figma or design tool export, Dropbox or Drive download link, a signed storage URL) up to 700 MB and attaches it like attach_artwork: target (cart_line, quote_line or order_item with its id, design, side), url, and file_name when the link's own name has no extension. A link that opens a web page instead of the file is refused, and so is a file whose contents do not match its extension. For a Canva export, name it canva-.pdf with the Canva design id: Printdash recognises Canva files by that name (they arrive at finished size by design, so the bleed notice is dropped and the studio checks bleed). Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | An https link that downloads the file itself (not a page showing it). | |
| target | Yes | Where the artwork goes. | |
| file_name | No | The name to store it under, with its extension, when the link's own name has none. For a Canva export: canva-<designId>.pdf. |
Output Schema
| Name | Required | Description |
|---|---|---|
| file | Yes | |
| next | Yes | |
| side | Yes | |
| files | Yes | |
| total | Yes | |
| checks | Yes | |
| design | Yes | |
| target | Yes | |
| designs | Yes | Which file and page is each design's front and back, as the site resolves them. |
| preview | Yes | |
| attached | Yes | |
| complete | Yes | Designs with every face they need. |
| replaced | Yes | |
| uploader_url | Yes | |
| order_item_status | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior the annotations don't carry: a 700 MB limit, refusal of HTML pages and mismatched content/extension, the auth requirement that prompts the customer to sign in on printdash.io, and the Canva-specific bleed handling. These are exactly the traits an agent needs before invoking a destructive, open-world operation.
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 purpose and target semantics, then constraints, then the Canva special case, then auth – a sensible order. It is a single dense paragraph, which costs a little readability, but no sentence is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with an output schema and fully documented nested params, this covers everything an agent needs: source format constraints, size cap, failure modes, auth requirement, and the exception that applies to Canva exports.
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?
With 100% schema coverage the baseline is 3, but the description adds genuine meaning: when file_name is required (link's own name has no extension) and the mandatory canva-<designId>.pdf convention Printdash uses to recognise Canva exports. That naming rule is not derivable from the schema and materially affects correct invocation.
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 ('fetches the file at an https link ... and attaches it') and explicitly differentiates from the sibling attach_artwork by being URL-based. An agent can tell this apart from attach_artwork_inline (local bytes) and attach_artwork 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?
The https-link constraint plus the 'like attach_artwork' reference routes the agent: use this when the artwork lives at a URL. It also explains the rejection cases (page link instead of file, extension mismatch), which is real usage guidance. It stops short of naming attach_artwork_inline explicitly as the alternative for local files, so routing to that sibling relies on inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
attach_artwork_inlineAttach a small file sent inlineADestructiveInspect
For programmatic clients only: attaches a file sent as base64 in data_base64, up to 10 MB, like attach_artwork (target, file_name with its extension). Never paste a file a customer dropped into a chat here; use attach_artwork_from_url or get_artwork_uploader_link. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | Where the artwork goes. | |
| file_name | Yes | The file's name with its extension. | |
| data_base64 | Yes | The file's bytes, base64-encoded, up to 10 MB decoded. |
Output Schema
| Name | Required | Description |
|---|---|---|
| file | Yes | |
| next | Yes | |
| side | Yes | |
| files | Yes | |
| total | Yes | |
| checks | Yes | |
| design | Yes | |
| target | Yes | |
| designs | Yes | Which file and page is each design's front and back, as the site resolves them. |
| preview | Yes | |
| attached | Yes | |
| complete | Yes | Designs with every face they need. |
| replaced | Yes | |
| uploader_url | Yes | |
| order_item_status | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and non-idempotent, and the description adds real operational context the annotations don't: the 10 MB decoded limit and the auth flow (without a signed-in Printdash account the connection prompts sign-in on printdash.io). It does not say whether attaching replaces or removes existing artwork, which is exactly what destructiveHint=true implies – that is the one missing piece.
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 audience restriction, then payload mechanics, then auth, with nothing padded. Slightly dense for two-and-a-half sentences, but each clause carries a distinct constraint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full output schema and 100% input coverage, the description only needs to add the non-schema facts, and it supplies the two critical ones: size limit and auth requirement. The remaining gap is the destructiveness semantics of an artwork attach.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so target/file_name/data_base64 are already fully documented including side, design and kind enums. The description only restates the extension requirement on file_name and the 10 MB ceiling on data_base64, adding little 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?
States a specific verb and resource ('attaches a file sent as base64 in data_base64') and scopes it to programmatic clients, immediately separating it from attach_artwork, attach_artwork_from_url and get_artwork_uploader_link. An agent can route between them 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?
Explicit when-to-use (programmatic clients, inline base64 up to 10 MB, same target/file_name signature as attach_artwork) and explicit when-not ('Never paste a file a customer dropped into a chat here'), with the two named alternatives to use instead. No inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_orderCancel an order (asks first)ADestructiveInspect
Prepares cancelling one order: returns the summary to show the customer and a confirmation_token. Nothing is cancelled until confirm is called with it after the customer agrees. Only an unpaid order that is not in production can be cancelled, as on the order page; otherwise it says so. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| order | Yes | The order number (or the order id from its link). |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| action | Yes | |
| details | Yes | |
| summary | Yes | Show this to the customer exactly as written before confirming. |
| expires_at | Yes | |
| confirmation_token | Yes | |
| confirmation_required | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses the two-phase safety design (no cancellation until confirm), the token handoff, the eligibility preconditions, and the auth requirement (a signed-in Printdash account, with the connection prompting sign-in on printdash.io). The destructiveHint=true annotation is conservative for a preparatory call, but the description explains the flow 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?
Four short sentences, front-loaded with the two-step contract, then eligibility, then auth. Every sentence carries information an agent needs; there is no restatement of the title or 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?
The tool has an output schema, so return values need no prose, and the description covers what remains: preconditions, auth, the confirmation token handoff, and the non-cancelling behavior of this call. 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% for the single 'order' parameter, whose schema description already explains that it accepts an order number or an id from its link. The description adds nothing further about the parameter, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Prepares cancelling one order') and immediately clarifies the two-step contract: it returns a summary plus a confirmation_token, and nothing is cancelled until 'confirm' is called. That distinguishes it cleanly from the 'confirm' sibling and from destructive direct-action tools like reject_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 names the explicit precondition (customer must agree, then call confirm with the token) and the eligibility gate (only an unpaid order not in production, matching the order page). It also states what happens otherwise ('it says so'), so an agent knows the failure mode rather than guessing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_quote_requestCancel a custom quote requestADestructiveIdempotentInspect
Cancels a custom quote request that is still pending review. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | The request number (or the request id from its link). |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| kind | Yes | |
| next | Yes | |
| status | Yes | |
| created | Yes | |
| cancelled | Yes | |
| quantities | Yes | |
| cancellable | Yes | |
| description | Yes | |
| quote_number | Yes | |
| status_label | Yes | |
| request_number | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the risk profile is covered. The description adds genuinely new context: cancellation requires a signed-in Printdash account and triggers a sign-in prompt on printdash.io if absent. It does not say what state the request lands in or whether it is reversible.
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, both earning their place: the scoping constraint is front-loaded and the auth behavior follows. No filler or 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?
An output schema exists, so return values need not be described, and annotations cover safety and idempotency. The auth gating is a useful addition; only the post-cancellation state of the request is left unstated.
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% for the single `request` parameter, including the helpful note that it accepts the request number or the id from its link. The description adds no parameter-level detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Cancels a custom quote request") and narrows scope to those "still pending review", which distinguishes it from delete_quote or cancel_order. It stops short of naming the sibling that handles non-pending requests, so it is clear but not maximally differentiating.
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?
The phrase "still pending review" implies the applicable state, and the auth note tells the agent what happens when unauthenticated. There is no explicit when-not guidance or pointer to delete_quote/reject_order for other cases, leaving the agent to infer which sweep is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_artworkCheck a line's artworkARead-onlyIdempotentInspect
Runs Printdash's file checks on a line's artwork, the same ones the product page and checkout show: page size against the ordered size, pages against sides or booklet pages, ink to the edge for bleed, spot finish and cut line layers found, missing or misnamed, finishes knocked out, template guides left in. Each notice comes with a guide link; anything the check could not measure says nothing. Returns the preview as an image. Never blocks an order. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | Where the artwork goes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| files | Yes | |
| total | Yes | |
| status | Yes | partial: some checks were still running; call again. |
| target | Yes | |
| designs | Yes | Which file and page is each design's front and back, as the site resolves them. |
| notices | Yes | |
| complete | Yes | Designs with every face they need. |
| measured | Yes | |
| spot_scan | Yes | |
| preview_url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the readOnly/idempotent annotations: it discloses the auth requirement and the exact failure mode ("the connection asks the customer to sign in on printdash.io"), states that the check never blocks an order, explains that unmeasurable items surface as silence rather than errors, and notes each notice carries a guide link. That is precisely the kind of context an agent cannot get from structured fields.
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?
A single front-loaded paragraph with zero filler — the long middle list of checks is information-dense rather than redundant. It reads slightly run-on (the layer-items list plus the trailing auth sentence), but every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output is covered by an output schema, and the description fills the remaining gaps an agent needs: auth prerequisite and its failure behavior, non-blocking semantics, silence-means-unmeasured convention, and the image preview return. Nothing material to a correct invocation 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 nested target object (kind/id/side/design) is fully documented, so the description adds nothing about parameters. The phrase "on a line's artwork" loosely maps to the target, but no format or selection guidance is contributed 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?
States a specific verb and resource — "Runs Printdash's file checks on a line's artwork" — and enumerates the exact checks (page size vs ordered size, bleed, spot/cut layers, knocked-out finishes, leftover template guides), so an agent knows precisely what it produces. It never names a sibling such as get_artwork_requirements or attach_artwork, so the differentiation is inferred rather than stated.
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?
Usage is only implied: it says it runs "the same ones the product page and checkout show" and "Never blocks an order", which hints at pre-order validation, but there is no explicit "use this instead of X" or precondition beyond being signed in. Alternatives like get_artwork_requirements or get_artwork_guide are not contrasted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clear_cartEmpty the cartADestructiveIdempotentInspect
Removes every line from the cart in the current buying context. Saved quotes are not affected. Ask the customer before emptying a cart they did not just fill. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| cleared | Yes | |
| removed_lines | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=true, and the description adds real context beyond them: saved quotes are untouched, a confirmation step is required for carts the customer did not fill, and authentication is mandatory with a concrete sign-in fallback on printdash.io. This is exactly the extra behavioral detail 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?
Three tight sentences ordered by importance: action, scope exclusion, then safety and auth requirements. No sentence is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-param destructive mutation, the description covers action, side-effect boundary (quotes preserved), confirmation etiquette, and auth prerequisites, and an output schema exists to explain return values. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the schema or description to disambiguate; the baseline of 4 applies. The description correctly signals that the target cart comes from the ambient 'current buying context' rather than an argument.
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 precise verb and resource ('Removes every line from the cart') and scopes it to 'the current buying context', which implicitly separates it from remove_cart_line's single-line scope. An agent can tell exactly what this deletes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear when-to-use condition plus an explicit caution ('Ask the customer before emptying a cart they did not just fill') and excludes saved quotes. It does not explicitly name remove_cart_line as the narrower alternative, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
confirmConfirm a prepared actionADestructiveIdempotentInspect
Carries out an action prepared by delete_address, delete_quote, email_quote, request_custom_quote, send_invite, prepare_checkout (placing the order), cancel_order, request_reorder, approve_order or reject_order, after the customer has seen its summary and said yes. Pass its confirmation_token and a new UUID as idempotency_key; retrying with the same key returns the first outcome and never acts twice. Never call it without the customer's agreement. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| idempotency_key | Yes | A UUID you generate for this confirmation; reuse it only to retry the same one. | |
| confirmation_token | Yes | The confirmation_token a prepare tool returned. |
Output Schema
| Name | Required | Description |
|---|---|---|
| action | Yes | |
| replayed | Yes | |
| confirmed | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructive/idempotent/openWorld), it explains the idempotency contract concretely: retrying with the same key returns the first outcome and never acts twice. It also discloses that a missing signed-in account triggers an interactive sign-in prompt on printdash.io, which is behavior an agent cannot infer from annotations or 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 precondition and consent constraint are front-loaded ahead of parameter and auth details, and every sentence carries information. The ten-tool enumeration is long but functionally necessary for routing; slight density cost only.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not explain return values, and it still covers preconditions, idempotency, retry semantics, and the auth flow. Nothing an agent needs to invoke this destructive tool safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both field descriptions already explain confirmation_token and idempotency_key. The description echoes the same guidance ('pass its confirmation_token and a new UUID') and adds only the provenance link back to the prepare tool, so it contributes marginal value over 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 opens with a specific verb and scope: it 'carries out an action prepared by' a named set of prepare/approve tools, so the agent immediately understands this is the execution half of a prepare-then-confirm pattern. It distinguishes itself from sibling state-changing tools like place_order and approve_order by being the generic confirmation step for tokens those tools return.
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 explicitly (the customer has seen the summary and said yes), adds a hard exclusion ('Never call it without the customer's agreement'), and enumerates the exact sibling tools whose tokens it consumes. No ambiguity about when to reach for it versus the prepare tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_quote_to_orderPut a quote in the cart to order itADestructiveIdempotentInspect
Puts a saved quote's lines in the cart, as the quote page's Convert to order does, and returns the checkout link. No order is placed: the customer chooses delivery and pays (or orders on account) at checkout on printdash.io. Only the quote's owner can, and every line needs artwork unless Printdash priced it. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| quote | Yes | The quote number (or the quote id from its link). |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| currency | Yes | |
| added_lines | Yes | |
| checkout_url | Yes | |
| quote_number | Yes | |
| service_area | Yes | |
| replaced_lines | Yes | |
| prices_include_gst | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavioral context beyond the annotations: no order is placed, a checkout link is returned, only the quote owner can invoke it, every line needs artwork unless priced, and authentication is required. It does not clarify how existing cart contents are affected despite destructiveHint=true, which is the main remaining 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?
The description is front-loaded with the core action and outcome, then moves through constraints and authentication. Every sentence carries useful information with no wasted wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with annotations and an output schema, this is nearly complete: it covers the action, side effect boundary, return link, permissions, artwork precondition, and auth behavior. The missing piece is clarity about whether existing cart lines are preserved or replaced.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter and schema description coverage is 100%, so the schema already documents that it accepts a quote number or quote id. The prose reinforces that it operates on a saved quote but adds no 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?
States a specific verb and resource: puts a saved quote's lines in the cart and returns the checkout link. It explicitly distinguishes the outcome from placing an order, which separates it from siblings like place_order and prepare_checkout.
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?
Clearly explains when this is appropriate via the quote-page conversion analogy and notes that checkout/payment happens afterward. It also lists key preconditions (owner-only, artwork requirement, signed-in account), though it does not explicitly name alternative tools for related cart or checkout steps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_addressSave a delivery addressAInspect
Saves an Australian delivery address to the address book in the current buying context (names, street, suburb, state code, four-digit postcode, optional company, mobile and type), optionally as the default. Collect it from the customer; never invent one. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes | Suburb or town. | |
| type | No | ||
| state | Yes | NSW, VIC, QLD, SA, WA, TAS, NT or ACT. | |
| mobile | No | ||
| last_name | Yes | ||
| first_name | Yes | ||
| postal_code | Yes | Four-digit Australian postcode. | |
| company_name | No | ||
| address_line1 | Yes | Street address. | |
| address_line2 | No | ||
| set_as_default | No | Make it the default address for this buying context. |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| saved | Yes | |
| address | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), and the description adds real value on top: the auth requirement, what happens without an account, and a hard rule against fabricating addresses. It does not warn that repeat calls create duplicate records despite idempotentHint=false.
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 tight sentences with the core action and field set front-loaded, followed by the sourcing rule and the auth caveat. No filler and no repetition of schema structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and the description covers auth, data provenance, field scope and the default option. It is nearly complete; duplicate-creation behavior and the boundary with update_address remain unaddressed.
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 only 45%, so the description compensates by naming nearly every field in the parenthetical, including format cues ('state code, four-digit postcode'). Minor gaps: address_line2 and the home/business meaning of 'type' are not explained.
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 plus resource ('Saves an Australian delivery address to the address book') and scopes it to 'the current buying context'. It enumerates the captured fields and notes the optional default flag, which distinguishes it from set_default_address and update_address in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear directive on sourcing data ('Collect it from the customer; never invent one') and states the signed-in-account prerequisite, including the fallback sign-in flow. It does not, however, say when to prefer update_address or set_default_address over this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_quoteSave a quoteAInspect
Saves a new quote with a quote number from up to 20 jobs (each a product id and configuration, priced by the engine first), with an optional saved address for delivery, pickup where the account has it, an order reference and notes. Prices are locked for 30 days. It is the customer's saved quote, ready to share with a client (share_quote, email_quote) or convert to an order. If a job cannot be priced, nothing is saved. Printdash prints in Australia and delivers within Australia only; prices are in AUD and include GST. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| lines | Yes | The jobs, each priced by the engine before anything is saved. | |
| notes | No | ||
| reference | No | The customer's order reference or job name. | |
| address_id | No | A saved address id for delivery (list_addresses). Omit to choose at checkout. | |
| fulfilment | No | pickup only where the account has pickup (estimate_delivery says pickup_available). |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | No | |
| next | Yes | |
| lines | No | |
| saved | Yes | |
| errors | No | |
| pickup | No | |
| priced | No | |
| reason | No | |
| status | No | |
| expires | No | |
| missing | No | |
| nearest | No | |
| product | No | |
| currency | Yes | |
| reference | No | |
| share_url | No | |
| line_index | No | |
| product_id | No | |
| quote_number | No | |
| service_area | Yes | |
| status_label | No | |
| total_inc_gst | No | The quote page's Total, inc GST: subtotal_inc_gst (the lines) plus delivery (shipping_ex_gst) and its GST. |
| shipping_ex_gst | No | |
| subtotal_inc_gst | No | |
| prices_include_gst | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read, non-destructive, non-idempotent write, and the description adds genuinely new behaviour: the atomic pricing guarantee ('if a job cannot be priced, nothing is saved'), the 30-day price lock, and the account/auth flow. It also discloses region and currency rules (Australia-only, AUD incl GST), which no annotation covers.
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 capability and the 20-line limit are front-loaded, and the atomicity and pricing-lock facts follow in priority order. The trailing Australia/GST and sign-in sentences are justified but make the block longer than it strictly needs to be for a save operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and the annotations cover the safety profile. Against that, the description still supplies the auth prerequisite, the geographic restriction and the failure mode, which are exactly the gaps an agent would otherwise hit at call time.
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 80%, so the schema already documents almost every field and the description only restates the shape ('each a product id and configuration'). It does add the 20-job cap and the intent of address_id, fulfilment, reference and notes, but that mostly repeats the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ('Saves a new quote') and immediately scopes it: up to 20 job lines, each a product id plus configuration priced by the engine. That is enough to distinguish it from update_quote, duplicate_quote and convert_quote_to_order without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the downstream follow-ons explicitly (share_quote, email_quote, convert to an order) and states the prerequisite that the customer must be signed in, including what happens when they are not. It does not give an explicit 'use update_quote instead when...' exclusion, so it is strong context rather than a full routing decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_addressDelete a saved address (asks first)ADestructiveInspect
Prepares deleting one saved address: returns the summary to show the customer and a confirmation_token. Nothing is deleted until confirm is called with it after the customer agrees. An address an order or quote was made with leaves the address book but stays on those orders and quotes, as on printdash.io. The only saved address cannot be deleted: add the new one with create_address first. When the default is deleted, the newest other address becomes the default. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| address_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| action | Yes | |
| details | Yes | |
| summary | Yes | Show this to the customer exactly as written before confirming. |
| expires_at | Yes | |
| confirmation_token | Yes | |
| confirmation_required | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: discloses that deletion is deferred behind a confirmation token, that referenced addresses leave the address book but persist on orders/quotes, that the last address cannot be removed, that the newest remaining address becomes default, and that a signed-in account is required with a sign-in prompt otherwise. That is exactly the kind of side-effect and auth context annotations cannot 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?
Five tight sentences, front-loaded with the two-phase behavior and the return values, then the edge cases. Dense but no filler; only the printdash.io domain reference is slightly redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists and the description still names what comes back (summary + confirmation_token). Combined with the auth requirement, the last-address guard, and the default reassignment rule, an agent has everything needed to invoke this and follow up with confirm.
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 0% and the description never names address_id or explains its format, only referring to 'one saved address' and 'the only saved address'. The sole parameter's semantics are left entirely to the bare schema, which is a real gap even though the parameter is a simple ID.
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 ('Prepares deleting one saved address') and immediately frames it as a two-phase operation returning a summary and confirmation_token. This is clearly distinguishable from create_address, update_address, and list_addresses in the sibling set.
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?
Explains the required follow-up ('Nothing is deleted until confirm is called with it after the customer agrees'), an explicit exclusion (the only saved address cannot be deleted, use create_address first), and the default-address side effect. When-to-use and when-not-to-use are both covered with a named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_quoteDelete a saved quote (asks first)ADestructiveInspect
Prepares deleting a saved quote for good: returns the summary to show the customer and a confirmation_token. Nothing is deleted until confirm is called with it after the customer agrees. Accepted and ordered quotes cannot be deleted. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| quote | Yes | The quote number (or the quote id from its link). |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| action | Yes | |
| details | Yes | |
| summary | Yes | Show this to the customer exactly as written before confirming. |
| expires_at | Yes | |
| confirmation_token | Yes | |
| confirmation_required | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this destructive and non-idempotent, and the description adds what actually matters beyond them: nothing is destroyed at this step, a confirmation_token is issued, and the destructive action is deferred to confirm. It also discloses the business-rule refusal case and the auth requirement, which annotations cannot express.
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 action and the token-return contract before the constraint and auth notes. No sentence is redundant with the annotations or 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?
Output schema exists, yet the description still names the two return fields the agent must act on (summary, confirmation_token), covers the eligibility restriction and the auth path. Nothing needed to call this correctly or follow up with confirm is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter already documents that it accepts a quote number or the id from its link. The description adds no further syntax or format detail, so it neither compensates nor detracts – baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb plus resource ("Prepares deleting a saved quote") with the two-step intent spelled out, and it clearly separates itself from confirm (which does the actual delete) and from cancel/duplicate siblings. An agent can tell exactly what this call does and produces 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?
States the when (customer agrees, before calling confirm), the when-not (accepted and ordered quotes cannot be deleted), and the prerequisite (signed-in Printdash account, with the sign-in fallback behavior described). The routing to confirm is explicit rather than inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
duplicate_quoteCopy a saved quoteAInspect
Saves a copy of a quote as a new quote with its own number, every line re-priced today (artwork is not copied). The original is unchanged. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| quote | Yes | The quote number (or the quote id from its link). |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | No | |
| next | Yes | |
| lines | No | |
| saved | Yes | |
| errors | No | |
| pickup | No | |
| priced | No | |
| reason | No | |
| status | No | |
| expires | No | |
| missing | No | |
| nearest | No | |
| product | No | |
| currency | Yes | |
| reference | No | |
| share_url | No | |
| line_index | No | |
| product_id | No | |
| copied_from | No | |
| quote_number | No | |
| service_area | Yes | |
| status_label | No | |
| total_inc_gst | No | The quote page's Total, inc GST: subtotal_inc_gst (the lines) plus delivery (shipping_ex_gst) and its GST. |
| shipping_ex_gst | No | |
| subtotal_inc_gst | No | |
| prices_include_gst | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses the authentication requirement and the fallback behavior (the connection prompts sign-in on printdash.io), that the original is unchanged, and that every line is re-priced at today's rates — a material side effect for a non-readOnly tool with destructiveHint=false. It stops short of spelling out that a second call yields a second independent quote (idempotentHint=false), which is the one behavioral consequence an agent could still get wrong.
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, each doing distinct work: what is created, what is not carried over / what happens to the original, and the auth prerequisite. Front-loaded with the core action with no preamble.
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 one-parameter copy operation with an output schema (so return shape needs no explanation) and full annotation coverage, the description supplies everything an agent needs: the identity of the new object, the re-pricing consequence, the artwork exclusion, and the sign-in requirement.
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 schema already explains the single parameter accepts a quote number or the id from its link. The description adds nothing about the identifier beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (saves a copy of a quote as a new quote) and immediately pins down the scope: new quote number, lines re-priced today, artwork excluded, original untouched. This clearly separates it from create_quote (build new), update_quote (mutate existing), and get_quote (read).
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?
Clear context for when this applies — copying an existing quote rather than authoring or editing one — plus an explicit exclusion (artwork is not copied). It does not name a sibling alternative or state when *not* to use it (e.g. use create_quote for a fresh job), so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_quoteEmail a quote to someone (asks first)ADestructiveInspect
Prepares emailing a saved quote's public link to someone (usually the customer's client): returns the summary to show the customer and a confirmation_token. Nothing is sent until confirm is called with it after the customer agrees. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| quote | Yes | The quote number (or the quote id from its link). | |
| recipient_name | No | ||
| recipient_email | Yes | Who to send it to (not the customer's own address). | |
| include_branding | No | Show the customer's own branding on the public page (default true). | |
| recipient_business | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| action | Yes | |
| details | Yes | |
| summary | Yes | Show this to the customer exactly as written before confirming. |
| expires_at | Yes | |
| confirmation_token | Yes | |
| confirmation_required | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (readOnlyHint=false, destructiveHint=true): it discloses the two-step confirmation gate, that the first call sends nothing, the exact return payload (summary + confirmation_token), and the sign-in prerequisite including what happens when unauthenticated. That is exactly the behavioral context an agent needs before calling a destructive 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?
Three tight sentences with zero waste: what it does first, what it returns second, the confirmation gate third, and auth last. The most important constraint (nothing is sent until confirm) is front-loaded in the second sentence.
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 and the description still names the two key return values, auth requirements are spelled out, and the destructive action is explicitly gated by confirm. Nothing an agent needs in order 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?
Schema coverage is 60% and the description only adds meaning for the recipient generally ('someone, usually the customer's client'). recipient_name and recipient_business are undocumented in both schema and description, and include_branding's default is only in the schema. Marginal value over the schema, so the baseline 3 fits.
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: prepares emailing a saved quote's public link to a recipient. The parenthetical '(usually the customer's client)' and the mention of the public link let an agent distinguish it from share_quote or convert_quote_to_order 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?
Clearly explains the two-step flow: this call only prepares and returns a summary plus confirmation_token, and nothing is sent until confirm is called after the customer agrees. It names the sibling confirm and the condition that selects it. It doesn't contrast with share_quote, which is the closest alternative for distributing a quote.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimate_deliveryEstimate delivery within AustraliaARead-onlyIdempotentInspect
Whether Printdash delivers to an Australian postcode (or, signed in, a saved address) and, given the jobs being ordered, the delivery fee and the delivered total, priced the way checkout prices it. Australian postcodes only: anywhere else is refused, because Printdash delivers within Australia only. Prices in AUD; totals include GST.
| Name | Required | Description | Default |
|---|---|---|---|
| jobs | No | The jobs being ordered together; the fee depends on the order's value. | |
| postcode | No | An Australian postcode (four digits) for the delivered price. Printdash delivers within Australia only. | |
| address_id | No | Signed in: a saved address id from list_addresses, instead of a postcode. |
Output Schema
| Name | Required | Description |
|---|---|---|
| gst | No | |
| next | No | |
| lines | No | |
| reason | No | |
| message | No | |
| currency | Yes | |
| deliverable | Yes | |
| destination | No | |
| job_refused | No | |
| service_area | Yes | |
| total_inc_gst | No | |
| shipping_label | No | |
| shipping_ex_gst | No | |
| subtotal_ex_gst | No | |
| pickup_available | No | |
| prices_include_gst | Yes | |
| delivery_unavailable | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive, and the description adds real behavioral facts beyond them: prices are in AUD, totals include GST, non-Australian addresses are refused outright, and quoting matches checkout pricing. It does not discuss fee thresholds or whether unpublished/oversized jobs degrade to manual quotes, which would have made it a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the outcome before the constraint and currency notes. The mid-sentence clause 'because Printdash delivers within Australia only' repeats the preceding restriction and could be trimmed without loss.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and the description covers the two things an agent actually needs to decide and call: geography limits and currency/GST treatment. Minor gap: it does not state that partially specified jobs are tolerated and reported back, though the schema covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented, and the description mostly restates them ('given the jobs being ordered', postcode or saved address). The only added nuance is that the fee depends on the order's value, which is already in the schema's jobs description. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific outcome: eligibility for an Australian postcode or saved address plus the delivery fee and delivered total for a set of jobs. It distinguishes itself in substance from price_job/prepare_checkout by framing the result as 'priced the way checkout prices it', but it never names the sibling it replaces, so an agent must infer the split.
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 clear conditions: Australian postcodes only, anything else is refused, and signed-in callers may pass address_id instead of postcode. It does not explicitly say when to prefer price_job (job pricing without delivery) or where in the checkout flow this belongs, so the alternative selection is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_accountGet the signed-in accountARead-onlyIdempotentInspect
Who the signed-in customer is: name, company, pricing tier and its discount in percent (discount_percent 5 means 5% off, already in every price the pricing tools return), whether they are buying personally or as a Team (and their role), the Teams they can switch to, whether the Team orders on account, and what the account is still missing (a delivery address, a phone number). Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| next | Yes | |
| tier | Yes | |
| Yes | ||
| terms | No | |
| company | Yes | |
| missing | Yes | |
| contexts | Yes | |
| buying_as | Yes | |
| on_account | Yes | |
| po_required | No | |
| active_context | Yes | |
| saved_addresses | Yes | |
| discount_percent | Yes | Percent off the retail price: 5 means 5% off. Prices from the pricing tools already include it. |
| orders_need_owner_approval | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds genuinely new behavior: a signed-in Printdash account is required and, absent one, the connection prompts the customer to sign in on printdash.io. It also disambiguates the discount_percent semantics (already baked into prices returned by the pricing tools), which prevents double-discounting. Minor gap: nothing about what is returned when parts of the account are incomplete.
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 answer ('Who the signed-in customer is'), and the auth prerequisite is placed last as a closing constraint. It is a long single sentence with heavy parenthetical nesting, which costs some scannability, but each clause carries distinct information rather than restating the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-param read tool with an output schema and full annotation coverage, the description supplies more than required: auth gating, failure behavior, and discount interpretation. Some of the return-field enumeration is redundant with the existing output schema, which is why it is not a 5, but nothing an agent needs to call it correctly is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description's field enumeration describes return values rather than inputs and adds no parameter meaning beyond the empty schema, but there is nothing to document.
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 framing ('Who the signed-in customer is') and enumerates exactly what the tool surfaces: name, company, pricing tier, discount, personal vs Team buying, switchable Teams, and missing account fields. This is unmistakably the account-context tool and cannot be confused with siblings like get_order, list_addresses, or get_referral_summary.
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?
Usage is implied rather than stated: the mention that discount_percent is 'already in every price the pricing tools return' hints this should be read before pricing, and the sign-in prerequisite is stated explicitly. However, no alternatives or when-not conditions are given (e.g. use list_addresses to see missing addresses, set_context to switch Teams), so the agent must infer routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_artwork_guideGet a Printdash artwork guideARead-onlyIdempotentInspect
Printdash's artwork setup guides as Markdown (bleed and safe zone, print-ready PDFs, colour, double-sided, cut lines, spot finishes, lamination, stocks, white ink, booklets, folding, wide format, Illustrator and InDesign export). Without a topic, the list. With a product (and its configuration), what that product's page says on the topic, sized for the job.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | No | A guide id (bleed, pdf-export, colour, double-sided, dieline, spot-finishes, lamination, stock-finishes, white-ink, booklets, folding, wide-format, export-illustrator, export-indesign). Omit for the list. | |
| product_id | No | A product, for what its page says on the topic. | |
| configuration | No | The job, to size the product's lead (page size with bleed, pages, plate names). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| url | No | |
| next | Yes | |
| guide | No | |
| title | No | |
| guides | No | |
| product | No | |
| summary | No | |
| product_id | No | |
| studio_note | No | |
| for_this_product | No | |
| on_this_products_card | No | |
| hidden_for_this_product | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Read-only/idempotent safety is already in the annotations, so the description's value is the mode behavior: list vs. product-specific, per-product sizing, and Markdown output format. It never says what happens if a topic is invalid or how large the returned guide is, which keeps it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the resource and output format, then the mode rules. The long parenthetical topic list earns its place for discovery but is slightly padded since the schema's topic description already enumerates ids.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and the description covers output format and both invocation modes. Missing detail on behavior for unknown topics or whether product_id requires a topic keeps it from perfect.
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 all three parameters plus the nested configuration fields are already documented there, including 'Omit for the list.' The description only reinforces the topic/product_id/configuration interplay, adding little beyond structured fields.
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 ('artwork setup guides as Markdown') and enumerates the covered topics, which makes the tool's content immediately graspable. It doesn't name a sibling (e.g. get_artwork_requirements vs. get_artwork_uploader_link) to draw the line, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains both invocation modes clearly: 'Without a topic, the list' and 'With a product (and its configuration), what that product's page says on the topic.' That is real when-to-use guidance, though there is no explicit statement of when to use this instead of get_artwork_requirements or check_artwork.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_artwork_requirementsGet the artwork requirements for a jobBRead-onlyIdempotentInspect
What a print-ready file must be for a product and configuration: finished size, bleed, safe zone, the PDF page size including bleed, pages or sides expected, the spot plate names a spot finish needs, the cut line rule, resolution, accepted file types and the size limit. The same rules the product page's guide card uses.
| Name | Required | Description | Default |
|---|---|---|---|
| product_id | Yes | ||
| configuration | No | The job, as option ids from get_product. Everything optional: the result says what is missing. |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| sides | Yes | |
| colour | Yes | |
| guides | Yes | |
| booklet | Yes | |
| product | Yes | |
| bleed_mm | Yes | |
| cut_style | Yes | |
| product_id | Yes | |
| max_file_mb | Yes | |
| spot_plates | Yes | |
| studio_note | No | |
| cut_to_shape | Yes | |
| dieline_rule | Yes | |
| safe_zone_mm | Yes | |
| pages_expected | Yes | |
| resolution_dpi | Yes | |
| spot_plate_rule | Yes | |
| finished_size_mm | Yes | |
| for_this_product | Yes | |
| pdf_page_size_mm | Yes | |
| for_configuration | Yes | |
| accepted_file_types | Yes | |
| preferred_file_type | Yes | |
| configuration_missing | No | |
| configuration_problems | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the full safety profile (readOnly, idempotent, non-destructive, closed-world), so the description only needs to add behavioural colour. 'The same rules the product page's guide card uses' is a useful consistency guarantee, but much of the rest re-enumerates fields rather than explaining behaviour (e.g. what happens when configuration is omitted, whether results vary by market or time).
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?
It is front-loaded with the scope ('What a print-ready file must be for a product and configuration') and has no filler prose, but the ten-item field inventory is a long tail that duplicates what the output schema already declares. The trailing fragment is fine, yet as a whole the sentence is denser than it needs to be for the value delivered.
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 and the annotations cover safety, so the definition only needs to establish scope and inputs; it does establish scope unambiguously. The remaining gap is purely the missing routing guidance versus check_artwork/get_artwork_guide, not any missing information about what calling the tool does.
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?
At 50% schema description coverage the description needs to compensate, and it partly does: mentioning 'pages or sides', 'the spot plate names a spot finish needs', and 'accepted file types' signals that configuration options such as pages, sides and finishing ids materially change the output. It does not clarify product_id's source or that configuration may be supplied partially/omitted — the schema's nested description carries that instead.
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 precisely what the tool returns: a spec sheet covering finished size, bleed, safe zone, PDF page size, pages/sides, spot plate names, cut rule, resolution, file types and size limit, scoped to a product + configuration. That is far more specific than the title alone. It loses a point because it never names or contrasts with the close siblings get_artwork_guide and check_artwork, so an agent must infer which of the three to call.
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?
There is no when-to-use or when-not-to-use guidance, and no mention of check_artwork (validate an existing file) or get_artwork_guide despite both appearing in the sibling list. The only contextual hook is 'the same rules the product page's guide card uses', which describes provenance rather than the condition for calling this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_artwork_uploader_linkGet the site's uploader for a lineARead-onlyIdempotentInspect
The printdash.io page whose own uploader takes artwork for this line: checkout for a cart line, the quote page for a saved quote's line, the order page for an order job. It opens signed in in the browser the customer connected with. Use it when the customer has the file but the chat cannot send it. Refused when the line's artwork can no longer change. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | Where the artwork goes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| next | Yes | |
| where | Yes | |
| target | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations: it discloses that the page opens already signed in as the customer's connected browser session, that the call requires a signed-in Printdash account, and that an unauthenticated call triggers a sign-in prompt on printdash.io. It also states the state precondition under which the call fails.
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 what the tool returns, then usage, then failure conditions, then auth — a sensible order with no filler sentences. The opening sentence is a verbless fragment, which costs a little immediacy.
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 nested-target tool with an output schema and full annotation coverage, the description supplies everything an agent needs: what is returned, which page per target kind, the auth prerequisite, the refusal condition, and when to prefer it over in-chat upload. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns above that by explaining the semantic mapping behind each `kind` value (cart_line → checkout, quote_line → quote page, order_item → order page), which is more than the schema's parenthetical source hints. It adds nothing on `side` or `design`, but those are already fully documented in 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?
Names a concrete resource: the printdash.io-hosted uploader page for a specific line, and enumerates which page it is per target kind (checkout, quote page, order page). It does so with a sentence fragment rather than an explicit verb like "returns a URL", and it does not explicitly differentiate from the attach_artwork* / request_artwork_upload siblings, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit triggering condition ("Use it when the customer has the file but the chat cannot send it") that directly discriminates against the attach_artwork* siblings, plus an explicit refusal condition ("Refused when the line's artwork can no longer change"). Both the when and the when-not are stated, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cartGet the cartBRead-onlyIdempotentInspect
The cart in the current buying context: each line with its line_id, job summary, price inc GST and whether it has artwork, the total before delivery, and the checkout link. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| lines | Yes | |
| currency | Yes | |
| checkout_url | Yes | |
| service_area | Yes | |
| total_inc_gst | Yes | |
| prices_include_gst | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world scope, so the safety profile is fully covered. The description adds genuine value by disclosing the auth requirement and the concrete failure behavior (the connection prompts the customer to sign in on printdash.io), which annotations cannot express — but nothing is said about empty-cart behavior or how the checkout link relates to prepare_checkout.
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 what the tool returns and followed by the operational precondition. The field enumeration partially duplicates the output schema, which is mild redundancy, but it still reads efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a rich annotation set and an output schema in place, the description only needs to add auth behavior and scope, which it does. The remaining gap — no mention of the empty-cart case or the relationship to prepare_checkout/place_order — is minor for a zero-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?
The tool takes zero parameters, so the baseline is 4; there is nothing for the description to disambiguate. The phrase "current buying context" usefully hints that the target cart is determined by session/context set elsewhere (set_context) rather than by arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource precisely ("the cart in the current buying context") and enumerates the fields returned, so an agent knows exactly what it gets. The retrieval verb is only implied by the title rather than stated, but the operation is unambiguous and clearly distinct from list_orders or get_quote.
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?
There is no explicit guidance on when to call this versus siblings such as prepare_checkout, update_cart_line, or clear_cart — the agent must infer the moment to read the cart. The only contextual signal is the sign-in requirement, which is a precondition rather than usage routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_invoiceGet an order's invoiceARead-onlyIdempotentInspect
The tax invoice for one order as a PDF attached to the result, once the order is invoiced (paid, or on a Team's account once approved). Otherwise it says plainly that there is no invoice yet. The order page link has Download invoice too. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| order | Yes | The order number (or the order id from its link). |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| next | Yes | |
| bytes | No | |
| reason | No | |
| attached | No | |
| file_name | No | |
| order_number | Yes | |
| invoice_available | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, it discloses the return form (PDF attachment), the non-error failure mode when no invoice exists, and a concrete auth behavior — an unauthenticated call triggers a sign-in prompt on printdash.io. These are exactly the operational traits an agent cannot infer from 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 primary output is front-loaded in the first clause, followed by the conditional case and the auth note. Three sentences, all earning their place, though the aside about the order page's Download button is the least essential.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't detail the response body, and it still covers preconditions, auth, and the empty-result case. It leaves open what happens for an invalid or unknown order number (error vs. 'no invoice'), a minor remaining gap for a single-parameter lookup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already explains that the order parameter accepts an order number or the id from its link. The description adds only "for one order," so it neither compensates for nor extends the schema — the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact resource ("The tax invoice for one order as a PDF attached to the result") and its success/failure semantics (invoice exists vs. "no invoice yet"). It also implicitly distinguishes itself from get_order by noting the order page link has a Download invoice button, so an agent knows this tool is the programmatic path to the same artifact.
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 prerequisite condition clearly: the order must be invoiced (paid, or approved on a Team account), and tells what happens when that isn't met. It does not explicitly route the agent to an alternative (e.g., get_order for order details), but the invoicing precondition is a strong usage signal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mockupShow the 3D mockupARead-onlyIdempotentInspect
The 3D mockup of a line's artwork on the product, as an image. An order job is rendered by Printdash's server and cached; if it is still rendering the result says so and you call again in about 20 seconds. A cart or quote line returns the mockup checkout or the quote page stored, or else Printdash's server renders it the same way (rendering, then call again); the flat preview comes back when there is no 3D view to show. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | Where the artwork goes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| status | Yes | |
| target | Yes | |
| mockup_url | Yes | |
| preview_url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, it discloses the async render-and-retry cycle with a concrete ~20 second cadence, the cached-results behavior per target kind, the flat-preview fallback when no 3D view exists, and the auth requirement plus what happens without a session. That is exactly the context annotations cannot 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?
The core return value and the polling instruction are front-loaded in the first two sentences. The auth note is placed last, which is correct priority ordering, though the middle sentence is long and carries several ideas in one clause chain.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, nested-target tool with a full output schema, the description covers everything the schema cannot: latency/retry, fallback output, caching, and authentication. An agent could invoke this correctly on the first try.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning by explaining why the target kind matters — an order job vs. a cart/quote line take different render paths. It does not elaborate on side or design, but the schema already documents those.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (the 3D mockup of a line's artwork on the product) and its delivery form (an image), so the agent knows exactly what it gets back. No sibling tool offers mockups, so there is no ambiguity to resolve, and the three target kinds are distinguished from one another.
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 operational context clearly: call it for an order job or a cart/quote line, and call again in about 20 seconds if the response says it is still rendering. It does not name an alternative tool or an explicit when-not-to-use case, which keeps it just below the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_orderGet one orderARead-onlyIdempotentInspect
One order by its order number: status and payment as the order page shows them, every item with its job status, tracking, dispatch, delivery address, whether it can still be cancelled, whether the invoice is available, which items can be reordered, and the order page link. Read only. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| order | Yes | The order number (or the order id from its link). |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| next | Yes | |
| items | Yes | |
| pickup | Yes | |
| placed | Yes | |
| status | Yes | |
| payment | Yes | |
| currency | Yes | |
| dispatch | Yes | |
| due_date | Yes | |
| order_id | Yes | |
| tracking | Yes | |
| po_number | Yes | |
| reference | Yes | |
| deliver_to | Yes | |
| on_account | Yes | |
| cancellable | Yes | |
| order_number | Yes | |
| status_label | Yes | |
| total_inc_gst | Yes | |
| shipping_ex_gst | Yes | |
| invoice_available | Yes | |
| prices_include_gst | Yes | |
| awaiting_owner_approval | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/no-destruction, so the safety profile is covered; the description adds genuinely new behavior — a signed-in Printdash account is required and the connection prompts sign-in on printdash.io when missing. It also surfaces conditional capabilities (cancellable? invoice available? reorderable items?) that tell the agent what state checks are possible.
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 purpose, then auth caveat at the end where it belongs. The long mid-sentence field enumeration is somewhat redundant against the output schema, but it is a single well-formed sentence 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 exists, so the field list is extra rather than necessary; the key non-schema information an agent needs — the sign-in requirement and what happens without it — is present. Only missing piece is explicit guidance on where this fits relative to cancel_order/reorder workflows.
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 `order` param is fully documented there, including that an order id from a link is accepted. The description's "by its order number" adds no syntax or format detail beyond that, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource with scope: "One order by its order number" — immediately distinct from list_orders, which returns many. The enumeration of returned fields confirms this is a single-record fetch, not a search.
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?
"One order by its order number" implies you need a known order number, which implicitly routes agents away from list_orders/search. But it never explicitly says when to use this versus list_orders, or that it should be called before cancel_order/reorder to check eligibility — even though the description mentions cancellability and reorderable items.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_productGet a product's optionsARead-onlyIdempotentInspect
The whole option form for one Printdash product, as its product page offers it: every field in the order to ask, whether it is required, each option's id and label, defaults, quantity and custom size limits, page counts, what is applied automatically, which stocks a finish is priced on, the product image, the artwork guides that apply, and default_configuration (the page's starting job, ready for price_job). Read this before asking the customer anything. Printdash prints in Australia and delivers within Australia only; prices are in AUD and include GST.
| Name | Required | Description | Default |
|---|---|---|---|
| product_id | Yes | A product id from list_products or search_products. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| next | Yes | |
| fields | Yes | |
| binding | Yes | |
| designs | No | |
| product | Yes | |
| currency | Yes | |
| template | Yes | |
| image_url | Yes | |
| product_id | Yes | |
| description | Yes | |
| service_area | Yes | |
| option_matrix | Yes | |
| artwork_guides | Yes | |
| prices_include_gst | Yes | |
| applied_automatically | Yes | |
| default_configuration | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, closed-world, non-destructive, so the safety profile is covered. The description adds value beyond that: it discloses the breadth of the returned payload, flags that default_configuration is a prefilled job payload consumable by price_job, and states the commercial/regional context (Australian printing and delivery, AUD, GST-inclusive).
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 intent is front-loaded in the opening clause, but the tool has an output schema, so the long mid-sentence enumeration of every returned field largely duplicates structured data and crowds out the two genuinely useful signals (call before asking the customer, and the price_job handoff). The Australia/AUD/GST sentence reads as cross-tool boilerplate rather than needing to be here.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a single required parameter, full schema coverage, and an output schema covering return values, the agent has what it needs; the description's real contribution is the workflow framing (read first, feed price_job) which it supplies clearly. Only the missing sibling routing for product_id discovery keeps it from being fully self-contained.
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 there is a single required product_id whose provenance is documented in the schema (from list_products or search_products). The description adds nothing about the parameter — no format hints, no error behavior for unknown ids — so this sits at the baseline for a fully-schema-documented parameter.
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 is specific about the resource (one Printdash product's complete option form) and enumerates its contents in concrete terms — required flags, option ids/labels, defaults, quantity and custom size limits, page counts, finish stock pricing, image, artwork guides, and default_configuration. It implicitly distinguishes itself from list_products/search_products by describing the per-product option form rather than a listing, though it never names those siblings outright.
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?
"Read this before asking the customer anything" is a clear, actionable usage directive that sequences this call ahead of customer interaction, and "ready for price_job" names the natural downstream tool. It lacks explicit when-not-to-use guidance or a direct pointer to list_products/search_products as the source of product_id (that link lives only in the schema).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_quoteGet one saved quoteARead-onlyIdempotentInspect
One saved quote by its quote number: status, lines with their quoted quantities, the lines' subtotal, delivery and the total with delivery as the quote page shows it, expiry, the public share link if it has one, whether it can be converted to an order, and the quote page link. Read only. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| quote | Yes | The quote number (or the quote id from its link). |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| next | Yes | |
| lines | Yes | |
| pickup | Yes | |
| status | Yes | |
| created | Yes | |
| expires | Yes | |
| currency | Yes | |
| reference | Yes | |
| share_url | Yes | |
| quote_number | Yes | |
| status_label | Yes | |
| total_inc_gst | Yes | The quote page's Total, inc GST: subtotal_inc_gst (the lines) plus delivery (shipping_ex_gst) and its GST. |
| shipping_ex_gst | Yes | Delivery ex GST; 0 for pickup, null when no address has priced it. |
| subtotal_inc_gst | Yes | The lines' total inc GST, before delivery. |
| prices_include_gst | Yes | |
| can_convert_to_order | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/non-destructive, so the description's 'Read only' is redundant, but it adds genuine value by disclosing the auth model: a signed-in Printdash account is required and an unauthenticated call triggers a sign-in prompt on printdash.io. That is behavior an agent cannot infer from the schema and would otherwise be surprised by mid-workflow. It stops short of describing error behavior for invalid or missing quote numbers.
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 purpose, then the field inventory, then the auth constraint — a sensible ordering with no filler. The mid-sentence field enumeration is dense and largely duplicates what the output schema already declares, which costs it a point.
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-record read tool with annotations and an output schema, the essentials are covered, and the auth caveat is the most valuable addition. But the description spends most of its length restating return fields the output schema already owns, while omitting what happens on a bad or unknown quote number — the one failure mode an agent actually needs to plan around.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter already documents that it accepts a quote number or the quote id from its link. The description's 'by its quote number' actually narrows the schema's stated flexibility rather than extending it, so it adds no semantics beyond the structured field — baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and scope — 'One saved quote by its quote number' — which distinguishes it from the bulk list_quotes sibling by cardinality and key. It then enumerates the contents of the payload (status, lines, subtotal, delivery, total, expiry, share link, convertibility, page link), leaving no ambiguity about what a caller gets back.
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?
Usage is implied rather than stated: 'one saved quote by its quote number' signals a single-record fetch that contrasts with list_quotes, and the sign-in requirement is framed as a precondition. However, no alternative is named explicitly (list_quotes, get_quote_request, get_order) and there is no when-not guidance or note about what happens if the quote number is unknown.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_quote_requestGet one custom quote requestARead-onlyIdempotentInspect
One custom quote request by its request number: what was asked for, its status, whether it can still be cancelled, and the quote it became. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | The request number (or the request id from its link). |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| kind | Yes | |
| next | Yes | |
| size | Yes | |
| sides | Yes | |
| stock | Yes | |
| status | Yes | |
| created | Yes | |
| deadline | Yes | |
| finishing | Yes | |
| quantities | Yes | |
| cancellable | Yes | |
| description | Yes | |
| quote_number | Yes | |
| status_label | Yes | |
| request_number | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive, closed-world, so the description's real contribution is the auth behavior: it requires a signed-in Printdash account and the connection triggers a sign-in prompt on printdash.io when absent. That is genuinely useful context an agent cannot get from the structured fields, though error behavior for an unknown request number is unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The returned-field inventory comes first and the prerequisite second, so an agent can decide to call before reading the auth caveat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present the description needn't detail return shape, and it still summarizes the payload while covering the auth prerequisite for a one-parameter read. Only the failure mode for an invalid or unknown request number is left implicit.
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 parameter already documents 'request number (or the request id from its link)'. The description restates 'by its request number' without adding format, resolution, or fallback detail, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('one custom quote request by its request number') and enumerates what it yields: request contents, status, cancellability, and the resulting quote. That single-vs-list framing cleanly separates it from list_quote_requests without needing the sibling's 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?
The 'one ... by its request number' phrasing implies the lookup use case, but no alternative is named (e.g. list_quote_requests for browsing, cancel_quote_request for acting on it) and no when-not condition is given. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_referral_summaryGet the referral summaryARead-onlyIdempotentInspect
The customer's referral code and link, how many customers and orders they have referred, their credit balance and commission. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| code | Yes | |
| link | Yes | |
| next | Yes | |
| currency | Yes | |
| credit_balance | Yes | |
| customers_referred | Yes | |
| commission_all_time | Yes | |
| orders_from_referrals | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds valuable non-obvious behavior: the auth requirement and the exact outcome (a sign-in prompt on printdash.io) when called anonymously — a detail 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?
Two sentences, no filler. The payload contents come first and the precondition comes second, which is the right order for an agent deciding whether it can call this now.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description need not document return structure; it instead summarizes the payload and adds the one behavioral fact an agent needs — the sign-in requirement. Nothing material is missing for a zero-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?
The tool takes zero parameters, so the baseline is 4. The description correctly adds no parameter discussion, and there are no hidden inputs an agent could get wrong.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific resource (referral summary) and enumerates exactly what it returns: referral code and link, counts of referred customers and orders, credit balance, and commission. This is a concrete verb+resource statement that leaves no ambiguity, and no sibling tool overlaps with it.
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 clearly states the precondition (a signed-in Printdash account) and describes the fallback behavior when that condition is unmet, which is real usage guidance. It does not explicitly route to alternatives, but no sibling offers comparable referral data, so there is little to exclude.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_addressesList saved delivery addressesARead-onlyIdempotentInspect
The saved delivery addresses in the current buying context, the default first, with the ids price_job and estimate_delivery take. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| addresses | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, yet the description still adds non-obvious behavior: a signed-in Printdash account is required, and calling it unauthenticated triggers a customer-facing sign-in flow on printdash.io rather than a plain error. It also discloses ordering (default address first), which 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?
Two short sentences with no filler, and the resource plus ordering are front-loaded ahead of the auth caveat. The first sentence is a grammatical fragment ('...with the ids price_job and estimate_delivery take'), which slightly slows parsing but costs no real 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?
For a zero-param read tool with a full annotation set and an output schema, the description supplies exactly the missing pieces: what the list represents, its ordering, how the returned ids are consumed downstream, and the auth precondition. An agent has everything needed to decide to call it and to handle the signed-out case.
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 document and the baseline is 4. The description correctly avoids inventing parameter discussion and instead spends its words on context and auth.
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 noun phrase 'The saved delivery addresses in the current buying context' plus the title make it unambiguous that this returns a list of addresses, and the sibling set (create_address, update_address, delete_address, set_default_address) leaves no confusion about which operation this is. It loses a point only because the description itself omits an explicit verb ('List'), relying on the title to carry that.
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?
The clause 'the ids price_job and estimate_delivery take' implies the workflow position of this tool (call it before pricing/estimating), which is a real usage signal. However, there is no explicit when-to-use statement, no exclusion, and no pointer to a sibling such as create_address when the list is empty — the agent must infer all of that.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_artworkList a line's artworkARead-onlyIdempotentInspect
The files on a cart line, quote line or order job, in order, with which file and page is each design's front and back (as the site resolves them), how many designs are ready, whether the artwork can still change, and the uploader link. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | Where the artwork goes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| files | Yes | |
| sides | Yes | |
| total | Yes | |
| target | Yes | |
| designs | Yes | Which file and page is each design's front and back, as the site resolves them. |
| complete | Yes | Designs with every face they need. |
| uploader_url | Yes | |
| artwork_editable | Yes | |
| order_item_status | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent safety, and the description adds real value beyond them: the auth gate (signed-in Printdash account, otherwise the customer is prompted to sign in), that values reflect how the site resolves them, and that artwork may still be changeable. Return shape is left to the output schema, which is appropriate.
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, contents first then the auth precondition, with no filler. The first sentence is a dense run-on listing five outputs, which costs a little readability but every clause carries 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?
Covers what the tool returns at a summary level, the auth requirement, and the fact that results reflect site-side resolution; an output schema exists so per-field return documentation is not required. Only missing piece is explicit sibling disambiguation for a crowded artwork toolset.
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%, including the kind enum and its provenance (line_id from get_cart/get_quote, item_id from get_order), so the baseline is 3. The description's mention of cart line / quote line / order job maps onto kind but adds no syntax or defaults 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?
States a specific verb (list) and resource (artwork on a cart line, quote line or order job) and enumerates what the listing contains: per-design front/back file and page, ready count, changeability, uploader link. This clearly separates it from siblings like get_artwork_uploader_link (link only) or check_artwork (validation).
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?
Usage is implied by the resource named (a line's artwork), but there is no explicit when-to-use vs check_artwork, get_artwork_requirements, or get_artwork_uploader_link, which are the obvious overlaps. An agent must infer which sibling to call from names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ordersList recent ordersARead-onlyIdempotentInspect
The most recent orders in the current buying context, each with its status as the order page shows it, payment, total, tracking and items. Read only. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many, newest first (default 10). |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| orders | Yes | |
| currency | Yes | |
| prices_include_gst | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
'Read only' duplicates readOnlyHint, but the description goes beyond annotations by disclosing the authentication requirement and the concrete behavior on failure ('the connection asks the customer to sign in on printdash.io'), which is exactly what an agent needs to handle an unauthenticated call. It also enumerates the returned content, though the output schema already covers 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?
Front-loaded with the resource and scope, then the safety profile, then the auth prerequisite — a sensible ordering with little waste. The sentence 'Read only.' contributes nothing beyond readOnlyHint and could be dropped, which keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one optional param, output schema present), so the description need not explain return values or pagination. It covers the one non-obvious complexity — the sign-in requirement — and leaves the rest to structured fields, with only the sibling distinction 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?
With 100% schema coverage and a single parameter, the schema already documents 'limit' including the default of 10 and the 'newest first' ordering. The description's phrase 'most recent orders' corroborates the ordering but adds no new syntax, bounds or defaults beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb+resource (list recent orders) and scopes it to 'the current buying context', which is meaningful information an agent can't get from the name alone. It stops short of differentiating from the nearest sibling, get_order, so an agent must infer that this is the plural/list counterpart of a single-order fetch.
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?
Usage is implied rather than stated: 'the most recent orders in the current buying context' hints at a browsing/summary use case, but there is no explicit when-to-use or when-not-to-use guidance. No alternative is named, despite siblings like get_order, list_pending_approvals and list_quotes overlapping in scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pending_approvalsList orders waiting for my approvalARead-onlyIdempotentInspect
For a Team owner: every held order of each Team they own, oldest first, with who placed it, the total, whether it is on account, its items and its page. An account that owns no Team is told only an owner approves. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| owner | Yes | |
| orders | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive, and the description goes further: exact sort order (oldest first), owner-scoped result set, and the auth behavior (unauthenticated calls prompt a sign-in on printdash.io). That auth precondition is behavioral context annotations cannot express.
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 scope ("For a Team owner") and free of filler. The trailing enumeration of return fields partially duplicates the output schema, which is the one bit of redundancy.
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 and annotations cover safety, and the description still adds the pieces those cannot carry: sort order, ownership scoping, and the sign-in requirement. Nothing needed 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?
The tool takes no parameters, so there is nothing for the schema to document and the 0-param baseline of 4 applies. The description correctly implies no input is needed; only the ownership condition acts as an implicit filter.
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 held orders awaiting approval) and a precise scope: only Teams the caller owns. It also enumerates the returned fields, so an agent can tell it apart from list_orders 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?
"For a Team owner" plus "an account that owns no Team is told only an owner approves" gives a clear use condition and an explicit non-applicable case. It never names alternatives such as list_orders or approve_order, so routing across siblings 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.
list_productsList Printdash productsARead-onlyIdempotentInspect
Every product Printdash sells (business cards, flyers, stickers, labels, booklets, signs, banners and more), with its id, a one-line description, its page and from_price: the starting price the site shows ("From $X inc GST for N", public retail for the product's default job). Start here or with search_products. A from_price is a guide only: price_job gives the exact price of the customer's job. Printdash prints in Australia and delivers within Australia only; prices are in AUD and include GST.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| count | Yes | |
| currency | Yes | |
| delivery | Yes | |
| products | Yes | |
| service_area | Yes | |
| from_price_note | Yes | |
| prices_include_gst | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive, closed-world. Beyond that, the description discloses that from_price is an indicative starting price for the default job only, that prices are AUD and GST-inclusive, and that delivery is Australia-only — useful context an agent would otherwise get wrong.
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 resource and returned fields, then the routing hint, then the pricing caveat and geography. Dense but every sentence carries information; the parenthetical price gloss is slightly verbose.
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, yet the description still frames what they mean (from_price semantics) plus currency, tax, and delivery scope — everything an agent needs to call this correctly and interpret the result.
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. The description instead characterizes the returned fields and the meaning of from_price, which is more than the empty schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb+resource (every product Printdash sells) and enumerates the catalog categories, then states the fields returned (id, description, page, from_price). It distinguishes itself from search_products by positioning as a full-catalog starting point.
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?
"Start here or with search_products" gives an explicit alternative entry point, and "price_job gives the exact price of the customer's job" routes pricing questions elsewhere. It stops short of saying when search is preferred over list (e.g., when the catalog is unknown or large).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_quote_requestsList custom quote requestsARead-onlyIdempotentInspect
The customer's custom quote requests in the current buying context, newest first, each with its status as /quotes shows it and the quote it became, if any. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| requests | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and non-destructive, so the safety profile is covered. The description adds behavior beyond them: newest-first ordering, status rendered as /quotes shows it, inclusion of the resulting quote, and the unauthenticated case where the connection prompts a sign-in on printdash.io.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, with the resource identity and ordering front-loaded and the auth caveat second. Every clause conveys something the agent would otherwise have to discover at call time.
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 needs no explanation, and the description still covers ordering, status semantics and the auth failure mode. It is sufficient to call correctly; only the sibling-selection guidance is thin.
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 schema has zero parameters, so the baseline is 4 and no parameter explanation is owed. The phrase 'current buying context' usefully implies the scope is set elsewhere rather than by this call.
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_quote_requests') scoped to 'the customer's custom quote requests in the current buying context', which separates it from the singular get_quote_request and from list_quotes. It never names those siblings, so the differentiation must be inferred from the resource wording alone.
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?
Mentions the 'current buying context' constraint, implicitly tying usage to set_context, and the sign-in prerequisite is stated clearly. There is no explicit guidance on when to choose this over list_quotes or get_quote_request, so the agent must reason about the distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_quotesList saved quotesARead-onlyIdempotentInspect
The most recent saved quotes in the current buying context, each with its status as the Quotes list shows it, total (with delivery, as the Quotes list shows it), expiry and link. Read only. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many, newest first (default 10). |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| quotes | Yes | |
| currency | Yes | |
| prices_include_gst | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and openWorld=false, so safety is covered. The description still adds real context beyond them: the result set is scoped to the 'current buying context' and the auth failure path is interactive (the customer is asked to sign in on printdash.io), which changes how an agent should sequence the call. It stops short of describing pagination or empty-list 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 payload is front-loaded in the first clause and every sentence carries information the agent needs. It is slightly padded by the repeated qualifier 'as the Quotes list shows it' used twice for status and total, which could have been stated once.
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 one-parameter read tool with an output schema, this covers the important unknowns: auth requirement, context scoping, and the fields returned. It would be complete at 5 if it named set_context as the way to change the buying context or said what an empty list means.
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 limit parameter is fully documented there (1-20, default 10, newest first). The description adds nothing about the single parameter, so the schema does all the work and baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete resource (saved quotes) and enumerates exactly what each row carries: status, total including delivery, expiry and link. It is clearly the list counterpart to get_quote, but it never names a sibling or says explicitly how it differs from get_quote or list_quote_requests, leaving that inference to the agent.
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?
Usage is only implied: 'in the current buying context' hints that results depend on a context set elsewhere (set_context), but that dependency is never stated. The one genuine usage prerequisite is spelled out well — a signed-in Printdash account is required and the connection will prompt the customer to sign in. There are no when-not-to-use cases or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
match_optionsMatch the customer's words to option idsARead-onlyIdempotentInspect
Turns the customer's words ("velvet", "A5", "double sided", "500", "90 x 55mm", "round corners") into option ids for one product, given what is already chosen. Returns matches, the ambiguous phrases with every candidate (never a guess: ask the customer), options not available with what is chosen, the words it could not place, and the configuration so far for price_job.
| Name | Required | Description | Default |
|---|---|---|---|
| chosen | No | What is already chosen, so options are filtered by it (finishes the chosen stock does not offer, combinations the supplier cannot make). | |
| phrases | Yes | The customer's words, one option each: ["velvet", "A5", "double sided", "500"]. | |
| product_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| values | Yes | |
| matches | Yes | |
| missing | Yes | |
| product | Yes | |
| problems | Yes | |
| ambiguous | Yes | |
| unmatched | Yes | |
| product_id | Yes | |
| configuration | Yes | |
| not_available | Yes | |
| ready_to_price | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (read-only, idempotent, closed-world), and the description adds non-obvious behavior beyond them: ambiguous phrases come back with all candidates rather than a best guess, options incompatible with the current selection are surfaced, and unplaceable words are reported. That is exactly the decision-shaping behavior an agent needs and cannot get from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense, front-loaded sentence pair that puts the transformation first and the output inventory second, with zero filler. The parenthetical example list is slightly heavy inside the main clause, but nothing 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?
Covers the full contract an agent needs: input shape (one phrase per option), the mandatory human-in-the-loop behavior on ambiguity, and which downstream tool consumes the resulting configuration. With an output schema present, it doesn't need to enumerate return fields, yet it still summarizes them for routing purposes.
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 67% and the schema already documents that `chosen` filters incompatible options and gives phrase examples for `phrases`. The description restates that relationship ('given what is already chosen', 'options not available with what is chosen') but adds little new syntax or constraint detail, such as the 20-phrase / 120-char limits, which live only in the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource: it turns the customer's free-text phrases into option ids for one product, scoped by what is already chosen. This is clearly distinct from siblings like get_product (catalog lookup) and price_job (pricing), and the parenthetical examples of phrases make the input domain concrete.
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?
Usage context is clear: use it to resolve customer wording before pricing, and its output feeds price_job. It also encodes a routing rule for ambiguity ('never a guess: ask the customer'), which tells the agent to stop rather than assume. It stops short of explicitly naming alternatives or stating when not to use it (e.g., when the customer already supplied ids).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pingCheck the Printdash connectionARead-onlyIdempotentInspect
Checks that Printdash is reachable and says whether you are signed in. Printdash prints in Australia and delivers within Australia only; prices are in AUD and include GST.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| time | Yes | |
| caller | Yes | |
| server | Yes | |
| version | Yes | |
| currency | Yes | |
| delivery | Yes | |
| signed_in | Yes | |
| service_area | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds useful context that the result includes sign-in status and Australian/AUD/GST business constraints, but it does not describe failure modes, error behavior, or response details beyond sign-in status.
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 two compact sentences and front-loads the core purpose in the first sentence. The second sentence is domain context that does not directly help select or invoke ping, so it slightly detracts from strict conciseness, though the overall size is appropriate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter connectivity/status tool with full annotations and an output schema, the description supplies enough context to call it correctly: it says what is checked and what sign-in information is reported. Return-value details can be 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 has zero parameters, so there is no parameter semantics to explain. The baseline for a zero-parameter tool is 4, and the schema carries the empty object shape cleanly.
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: it checks Printdash reachability and reports sign-in status. This clearly distinguishes it from the account, order, and cart siblings, which perform concrete operations rather than connectivity/auth checks.
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?
The intended use is implied: call this to verify connectivity or whether the user is signed in. However, it gives no explicit when-to-use guidance, no when-not-to-use guidance, and no comparison to alternatives such as get_account.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
place_orderPlace the prepared orderADestructiveIdempotentInspect
Places the order prepare_checkout summarised, after the customer has seen that summary and said yes. Pass its confirmation_token and a new UUID as idempotency_key; retrying with the same key returns the same order and never places a second. Printdash re-prices every line and refuses a price that moved since the review (then call prepare_checkout again). Payment never happens here: a card order comes back with payment_url, the order page on printdash.io where the customer pays; an on-account order needs no payment; a held order waits for a Team owner. Never call it without the customer's agreement. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| idempotency_key | Yes | A UUID you generate for this order; reuse it only to retry the same one. | |
| confirmation_token | Yes | The confirmation_token prepare_checkout returned. |
Output Schema
| Name | Required | Description |
|---|---|---|
| action | Yes | |
| replayed | Yes | |
| confirmed | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: idempotency semantics (same key returns same order, never a second), server-side re-pricing and refusal, and payment branching (payment_url for card, none for on-account, held for Team owner). These are non-obvious behaviors an agent must anticipate.
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?
Dense but front-loaded: purpose first, then idempotency, then failure handling, then payment outcomes, then auth. Every sentence carries operational meaning, though the auth sentence could be tightened.
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 destructive, open-world mutation with an output schema, the description covers permissions, idempotency, failure recovery, and payment outcomes. Nothing an agent needs before invoking it 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 parameters are documented; the description still adds value by explaining that confirmation_token comes from prepare_checkout and that idempotency_key must be a newly generated UUID reused only for retries. Slightly redundant with the schema's own descriptions, hence not 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 and resource ('Places the order prepare_checkout summarised') and ties it directly to the sibling that precedes it. An agent can distinguish it from prepare_checkout, approve_order, and convert_quote_to_order from the text alone.
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 preconditions ('after the customer has seen that summary and said yes', 'Never call it without the customer's agreement') and a recovery path ('refuses a price that moved... then call prepare_checkout again'). Also disambiguates payment responsibility by order type.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_checkoutReview the cart before orderingARead-onlyIdempotentInspect
Checkout's review of the whole cart in the current buying context, as printdash.io's checkout shows it: every line with its artwork state and Printdash's file notices, delivery to a saved address (address_id, else the default) or pickup where the account has it, the order reference (required, up to 50 characters), notes, a PO number for a Team on account, is_whitelabel (Remove Printdash Branding), the totals from Printdash's own delivery pricing, expected_total, and what placing it will do: placed unpaid with a pay link on printdash.io, on the Team's account, or held for a Team owner's approval. When it is ready, the summary and a confirmation_token for place_order. Writes nothing; nothing is ordered until place_order is called after the customer agrees. Printdash prints in Australia and delivers within Australia only; prices are in AUD and include GST. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Notes for Printdash's team about this order. | |
| po_number | No | A Team on account: the purchase order number (required when the Team says so). | |
| reference | No | The order reference, required as at checkout: a name for this order. Kept to 50 characters. | |
| address_id | No | A saved address id for delivery (list_addresses). Omit for the context's default address. | |
| fulfilment | No | pickup only where the account has it (pickup_available). | |
| is_whitelabel | No | Remove Printdash Branding, as the checkout switch. Default false. | |
| payment_method | No | A request: a Team with approved terms orders on account unless card is asked for; Printdash decides. |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| lines | Yes | |
| notes | Yes | |
| ready | Yes | |
| action | No | |
| totals | Yes | |
| details | No | |
| payment | Yes | |
| summary | No | Show this to the customer exactly as written before placing the order. |
| blocking | No | |
| currency | Yes | |
| po_number | Yes | |
| reference | Yes | |
| address_id | Yes | |
| deliver_to | Yes | |
| expires_at | No | |
| fulfilment | Yes | |
| checkout_url | Yes | |
| service_area | Yes | |
| is_whitelabel | Yes | |
| expected_total | Yes | The total the customer is shown; place_order is refused if Printdash's own total differs. |
| pickup_available | Yes | |
| confirmation_token | No | |
| prices_include_gst | Yes | |
| confirmation_required | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/non-destructive/idempotent, and the description corroborates rather than contradicts them ('Writes nothing'). Beyond that it discloses non-obvious behavior: default address fallback, delivery pricing coming from Printdash, the resulting order being unpaid with a pay link or held for a Team owner's approval, Australia-only delivery, AUD/GST pricing, and the sign-in gate.
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 purpose is front-loaded, but the core is a single sprawling sentence that packs line states, address logic, references, totals, and order outcomes into one list. Nearly every clause carries information, yet the density hurts parseability and the ordering of information is not tuned for scanning.
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, and the description covers everything else an agent needs: that it is a read-only preparation step, that a confirmation_token feeds place_order, the authentication requirement, and the geographic/currency constraints.
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 still adds meaning: the reference is required at checkout and effectively kept to 50 characters, address_id falls back to the context default, po_number applies to a Team on account, and payment_method is a request that Printdash decides on. The one wrinkle is that it calls the reference 'required' while the schema marks no parameters required and caps it at 200.
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 ('Checkout's review of the whole cart in the current buying context') and enumerates exactly what the review surfaces: line artwork state, file notices, delivery/pickup, reference, notes, PO, whitelabel, totals, expected_total. It also draws the boundary with the sibling that acts on the result by naming place_order and the confirmation_token.
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 frames the when: this is the review step, nothing is ordered 'until place_order is called after the customer agrees', and a signed-in account is required or the connection prompts sign-in. It does not, however, say when to reach for get_cart or price_job instead, so the alternative routing is only partial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
price_jobPrice a print jobARead-onlyIdempotentInspect
Prices one exact job with Printdash's pricing engine: a product id and a configuration of option ids (from get_product or match_options). Returns the price ex GST, GST and total inc GST, turnaround, a config_id and a share_url that opens the job on printdash.io; with an Australian postcode (or, signed in, a saved address id) the delivered price too. Signed in, the price is the customer's own account price. If the job cannot be priced it says what is missing, what is wrong, or the nearest combinations that can be. Relay prices exactly as returned. Printdash prints in Australia and delivers within Australia only; prices are in AUD and include GST.
| Name | Required | Description | Default |
|---|---|---|---|
| postcode | No | An Australian postcode (four digits) for the delivered price. Printdash delivers within Australia only. | |
| address_id | No | Signed in: a saved address id from list_addresses, instead of a postcode. | |
| product_id | Yes | ||
| configuration | Yes | The job, as option ids from get_product. Everything optional: the result says what is missing. |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| price | No | |
| errors | No | |
| priced | Yes | |
| reason | No | |
| designs | No | |
| missing | No | |
| nearest | No | |
| product | Yes | |
| summary | No | |
| currency | Yes | |
| delivery | No | |
| quantity | No | |
| config_id | No | |
| share_url | No | |
| product_id | Yes | |
| turnaround | No | |
| service_area | Yes | |
| prices_include_gst | Yes | |
| configuration_input | No | |
| quantity_per_design | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations by describing the returned fields (ex GST, GST, total inc GST, turnaround, config_id, share_url), the delivered-price branch triggered by postcode or address_id, the signed-in account-price behavior, and the failure mode ('says what is missing, what is wrong, or the nearest combinations'). It also discloses the Australia-only geographic constraint and the instruction to relay prices exactly as returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action and required inputs are front-loaded in the first clause, and every subsequent sentence carries information about returns, delivery pricing, or failure behavior. It is slightly overlong, and 'prices are in AUD and include GST' partially restates the earlier ex-GST/GST/inc-GST breakdown and duplicates the schema's Australia-only note.
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 tool with a nested configuration object and four top-level parameters, the description covers sourcing of ids, the delivery-price branch, account-specific pricing, failure diagnostics, and currency/geography. With an output schema present, no further explanation of return structure is required, and none 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 already 75%, so most parameters are documented structurally. The description adds real value on top by explaining that configuration values are option ids sourced from get_product/match_options and that postcode versus address_id are alternative delivery-price inputs. It does not clarify the relationship among nested fields like designs and quantity beyond what the schema 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 — 'Prices one exact job with Printdash's pricing engine' — and names the required inputs (product id plus a configuration of option ids). It is clear what the tool does, but it never mentions the sibling price_quantities, so an agent must infer the boundary between pricing a single configured job and pricing quantities.
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 concrete entry conditions and upstream dependencies: option ids come 'from get_product or match_options', and a saved address id comes from list_addresses when signed in. It does not state when NOT to use it or name an alternative tool, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
price_quantitiesPrice a job at several quantitiesARead-onlyIdempotentInspect
The same job priced at up to 8 quantities (the price ladder), each from Printdash's pricing engine, with the delivered price when an Australian postcode is given. Relay prices exactly as returned. Printdash prints in Australia and delivers within Australia only; prices are in AUD and include GST.
| Name | Required | Description | Default |
|---|---|---|---|
| postcode | No | An Australian postcode (four digits) for the delivered price. Printdash delivers within Australia only. | |
| address_id | No | Signed in: a saved address id from list_addresses, instead of a postcode. | |
| product_id | Yes | ||
| quantities | Yes | Up to 8 quantities, for example [250, 500, 1000, 2000]. | |
| configuration | Yes | The job without its quantity (any quantity given is replaced). |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| rows | Yes | |
| product | Yes | |
| currency | Yes | |
| priced_for | Yes | |
| product_id | Yes | |
| service_area | Yes | |
| prices_include_gst | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare it as a safe, idempotent read, so the description's real value is the operational constraints it adds: prices must be relayed verbatim, currency is AUD, GST is included, and delivery is Australia-only. The 'relay exactly as returned' instruction is a non-obvious behavioral rule an agent would otherwise get wrong. It stops short of saying whether engine errors or unpriceable combinations come back as partial results.
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 what is priced and at how many quantities, then the delivery and currency constraints in a short follow-up sentence. Four compact sentences with little waste; the AUD/GST sentence and the Australia-only sentence could be merged since they cover the same ground.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not explain return values, and it does supply the key regional and formatting constraints. The one real gap is routing: an agent looking at both price_job and price_quantities gets no signal about which one fits a single-quantity versus ladder request.
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 80%, so the schema already documents postcode format, the 8-quantity cap, and the nested configuration fields. The description reinforces the quantity cap and the postcode-versus-address_id choice but adds no format or constraint detail beyond the schema; the basic baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: prices one job across up to 8 quantities, with an optional delivered price for an Australian postcode. It never distinguishes itself from the sibling price_job, which is the most likely source of confusion for an agent choosing between them.
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?
Usage is implied by the quantity ladder and the postcode/address options, but there is no explicit when-to-use-this-vs-price_job or vs estimate_delivery guidance, and no stated prerequisites such as needing a product_id from get_product and ids from size/stock fields.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reject_orderReject a Team order (asks first)ADestructiveInspect
For a Team owner: prepares rejecting one held order, with an optional reason the member who placed it is told, and returns the summary to show the customer and a confirmation_token. Nothing is decided until confirm is called after they agree. Rejecting cancels the order. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| order | Yes | The order number (or the order id from its link). | |
| reason | No | Why, in the owner's words; the member who placed it is told. |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| action | Yes | |
| details | Yes | |
| summary | Yes | Show this to the customer exactly as written before confirming. |
| expires_at | Yes | |
| confirmation_token | Yes | |
| confirmation_required | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive/openWorld/non-idempotent, but the description adds what those annotations cannot: the prepare-then-confirm flow via confirmation_token, that rejecting cancels the order, that the reason is surfaced to the member, and that a signed-in Printdash account is required with a sign-in prompt otherwise.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the actor and action, then the confirmation contract, then auth. Every sentence carries information, though the auth sentence could be tighter.
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-summary details need not be spelled out, and the description still covers the confirmation semantics, destructive outcome, recipient of the reason, and auth precondition. Nothing needed to invoke 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 both parameters are already documented with their constraints. The description restates that the reason is optional and shown to the member, adding little beyond the schema's own text; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (reject) and resource (a held Team order), plus the acting role (Team owner). Easily distinguished from approve_order and cancel_order 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?
Explains the two-step flow explicitly ('Nothing is decided until confirm is called after they agree') and the owner prerequisite, which routes agents to the confirm sibling. It does not contrast with cancel_order, so it stops short of full when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_artworkRemove artwork from a lineADestructiveIdempotentInspect
Takes artwork off a line: one design's file (design, and side for one face only), or on a one-design job the front, the back, or (no side) every file. The file itself is deleted only if no other line, quote or order uses it. Refused when the line's artwork can no longer change. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | The line, and the design (and side, for one face only) to remove. On a one-design job, no side removes every file. |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| files | Yes | |
| total | Yes | |
| target | Yes | |
| designs | Yes | Which file and page is each design's front and back, as the site resolves them. |
| removed | Yes | |
| complete | Yes | Designs with every face they need. |
| removed_files | Yes | |
| order_item_status | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond destructiveHint=true: it explains that the underlying file is only deleted when no other line, quote or order references it, which is exactly the consequence an agent needs before calling. It also discloses the refusal condition and the auth requirement (connection prompts sign-in on printdash.io when unauthenticated).
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 the action and scope, with no filler. The parenthetical 'side for one face only' is slightly compressed but still parseable; nothing 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 destructive nested-target tool with an output schema, this covers what the description must carry: what gets removed, what gets deleted from storage, when the operation is refused, and what auth state is needed. Nothing essential for a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and already documents kind/id/side/design, so the baseline is 3. The description adds cross-parameter interaction semantics the schema only partially conveys: 'no side' means every file on a one-design job, while side applies only for a single face, and design selects among multiple designs.
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 ('Takes artwork off a line') and immediately scopes what unit is removed: one design's file, a single side, or every file on a one-design job. That distinguishes it cleanly from attach_artwork* tools and from remove_cart_line, which removes the line rather than its artwork.
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-not condition ('Refused when the line's artwork can no longer change') and clarifies the granularity choice between single-file removal and whole-job removal. It never names a sibling alternative (e.g. use remove_cart_line to drop the line itself), so routing is implied rather than prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_cart_lineRemove a job from the cartADestructiveIdempotentInspect
Removes one line from the cart by its line_id. Saved quotes are not affected. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| line_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| cart | Yes | |
| next | Yes | |
| line_id | Yes | |
| removed | Yes | |
| currency | Yes | |
| service_area | Yes | |
| prices_include_gst | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds genuinely new context: the saved-quotes exclusion (blast radius) and the authentication requirement, including that an unauthenticated call triggers a sign-in prompt on printdash.io.
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 target, then scope exclusion, then the auth prerequisite. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and only one parameter, the description covers the destructive scope and auth prerequisite well. The remaining gap is line_id provenance and error behavior on an unknown id, which matters for a destructive call.
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 0%, so the description carries the burden for the single parameter. It identifies line_id as the line identifier but does not say how to obtain it (e.g., from get_cart) or what happens with a stale/invalid id, so compensation is only partial.
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 with scope ('Removes one line from the cart by its line_id'), which distinguishes it from clear_cart (all lines) and update_cart_line (modify rather than remove). The 'Saved quotes are not affected' clause further bounds it.
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?
Usage is implied by 'removes one line' versus clear_cart, and the saved-quote exclusion gives a negative boundary. But it never explicitly names when to pick this over update_cart_line or clear_cart, leaving the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reorderPrice an order's job againARead-onlyIdempotentInspect
Turns one job from a past order (item_id from get_order, where can_reorder is true) back into a configuration and prices it at today's price, optionally at another quantity, exactly as price_job does. Writes nothing: add_to_cart with its product_id and configuration_input puts it in the cart. Jobs priced by Printdash's team (reorder_by_request) go through request_reorder instead. Printdash prints in Australia and delivers within Australia only; prices are in AUD and include GST. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| order | Yes | The order number (or the order id from its link). | |
| item_id | No | The job's item_id from get_order (optional on a one-job order). | |
| quantity | No | Another quantity; omit for the same. |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| price | No | |
| errors | No | |
| priced | Yes | |
| reason | No | |
| designs | No | |
| missing | No | |
| nearest | No | |
| product | Yes | |
| summary | No | |
| currency | Yes | |
| delivery | No | |
| quantity | No | |
| config_id | No | |
| share_url | No | |
| product_id | Yes | |
| reorder_of | Yes | |
| turnaround | No | |
| service_area | Yes | |
| prices_include_gst | Yes | |
| configuration_input | No | |
| quantity_per_design | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint, idempotentHint, and destructiveHint annotations, the description clarifies that it writes nothing, prices at today's price, optionally varies quantity, and behaves exactly like price_job. It adds auth behavior, geographic scope, and currency/GST context that an agent would not infer from 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 purpose is front-loaded in the first sentence, and each subsequent sentence adds a distinct operational fact: side effects, alternatives, geography/pricing, and authentication. There is 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?
Given the output schema exists, the description need not explain return values; it still tells the agent how to use the result via add_to_cart. It covers preconditions, side effects, alternatives, authentication, and pricing context, leaving no important gap 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 baseline is 3, but the description adds useful meaning: item_id must come from get_order and only where can_reorder is true, and quantity means an alternative quantity priced at today's price. It does not add syntax details beyond the schema, which is fine because the schema is already descriptive.
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 precise verb and resource: it turns one job from a past order back into a configuration and prices it at today's price. It explicitly distinguishes itself from price_job, add_to_cart, and request_reorder, so an agent can select it without opening sibling schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit preconditions ('item_id from get_order, where can_reorder is true') and names alternatives with their selecting conditions: add_to_cart for actual cart insertion and request_reorder for jobs priced by Printdash's team. It also states the authentication requirement and what happens when unauthenticated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_artwork_uploadGet an upload link for artworkAInspect
For a client that holds the file (Claude Code, Cursor, a script): returns a signed upload_url to PUT the file's bytes to, and an upload_id for attach_artwork. target says where it goes: a cart line (line_id from get_cart), a saved quote's line (line_id from get_quote) or an order job (item_id from get_order), plus design (1 to N, on a job with several designs) and side (front or back). Give the file name with its extension (pdf is best; ai, eps, psd, jpg, png and tif are accepted) and its size in bytes, up to 700 MB. Refused when the line's artwork can no longer change. A chat client that cannot send a file should use attach_artwork_from_url or get_artwork_uploader_link instead. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | Where the artwork goes. | |
| file_name | Yes | The file's name with its extension: business-card.pdf. PDF is best. | |
| size_bytes | Yes | The file's size in bytes (up to 700 MB). | |
| content_type | No | Optional; the type is decided by the extension, as the site's uploaders do. |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| side | Yes | |
| design | Yes | |
| method | Yes | |
| target | Yes | |
| headers | Yes | |
| file_name | Yes | |
| max_bytes | Yes | |
| upload_id | Yes | Pass to attach_artwork once the PUT succeeded. |
| expires_at | Yes | |
| upload_url | Yes | PUT the file's bytes here, with the Content-Type in headers. |
| content_type | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=false), which only say it is a non-destructive write. The description adds the two-step mechanics (connection returns a link, the file is PUT elsewhere, upload_id is what attach_artwork consumes), a hard 700 MB cap, the refusal condition, and the sign-in handshake behavior 'the connection asks the customer to sign in on printdash.io'.
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 decisive qualifier ('For a client that holds the file') before any mechanics. Dense and largely waste-free, though it is one long paragraph with several parenthetical asides that cost some readability.
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 nested-target tool with an output schema, nothing an agent needs is missing: it knows who should call it, what it returns (upload_url, upload_id), where to send the bytes, the size cap, the refusal case, and the follow-up tool (attach_artwork).
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: it maps each target kind to its source tool (get_cart, get_quote, get_order), explains design and side usage in situ, and supplies the accepted format list (pdf best; ai, eps, psd, jpg, png, tif) that the schema does not.
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 concrete verb+resource: returns a signed upload_url to PUT bytes to plus an upload_id for attach_artwork. It also names the audience ('a client that holds the file'), which separates it from every sibling that attaches artwork by URL or inline.
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 selection rule for the whole family: use this when the client holds the file, use attach_artwork_from_url or get_artwork_uploader_link when a chat client cannot send a file. It also states a precondition/refusal condition ('refused when the line's artwork can no longer change') and the auth requirement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_custom_quoteAsk Printdash for a custom quote (asks first)ADestructiveInspect
Prepares a custom quote request for a job the catalogue does not cover (description, quantities, size, sides, stock, finishing, deadline, similar product, delivery address): returns the summary to show the customer and a confirmation_token. Nothing is filed or emailed until confirm is called after the customer agrees; then Printdash's team prices it by hand. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Finished size, for example 90 x 55mm or A5. | |
| sides | No | ||
| stock | No | ||
| deadline | No | Date needed, YYYY-MM-DD. | |
| finishing | No | ||
| address_id | No | A saved address id for delivery. | |
| quantities | Yes | ||
| description | Yes | The job in the customer's words: what it is, size, material, finish. | |
| similar_product_id | No | The closest catalogue product, if any. |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| action | Yes | |
| details | Yes | |
| summary | Yes | Show this to the customer exactly as written before confirming. |
| expires_at | Yes | |
| confirmation_token | Yes | |
| confirmation_required | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description says the tool only prepares a request and that 'Nothing is filed or emailed until confirm is called', which frames this invocation as non-filing and non-destructive. The annotations declare destructiveHint=true, directly conflicting with that stated behavior. The other rich context about auth and hand pricing does not resolve this annotation contradiction.
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 purpose and then adds the critical two-step workflow and auth prerequisite. It is dense but mostly earns its length, with only a long parenthetical input list making it slightly heavy.
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 nine-parameter tool with an output schema, the description covers the essential agent-facing context: what it returns, that nothing is filed until confirm, the signed-in requirement, and that Printdash prices manually afterward. The only serious issue is the annotation mismatch, not missing workflow information.
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 parenthetical list enumerates all nine inputs, including mapping address_id to delivery address and similar_product_id to a similar catalogue product. This compensates for only 56% schema description coverage, though it adds little detail beyond the parameter names for fields like sides, stock, and quantities.
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 precise verb and resource: it prepares a custom quote request for jobs the catalogue does not cover. It distinguishes this from ordinary catalogue pricing and from the later confirm step, so an agent can recognize the tool without checking siblings.
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 clearly explains when to use the tool: for jobs outside the catalogue, after collecting customer details, and before calling confirm once the customer agrees. It also states the signed-in account prerequisite. It does not explicitly name a sibling alternative such as price_job for catalogue-covered work, so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_reorderAsk Printdash to re-price a past job (asks first)AInspect
For a job on a past order that Printdash's team priced (reorder_by_request in get_order): prepares the order page's reorder request, at the same or another quantity with optional notes, and returns the summary to show the customer and a confirmation_token. Nothing is filed until confirm is called after the customer agrees; then the team confirms today's price and sends a quote or pay link. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Any change to the specs, in the customer's words. | |
| order | Yes | The order number (or the order id from its link). | |
| item_id | No | The job's item_id from get_order (optional on a one-job order). | |
| quantity | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| action | Yes | |
| details | Yes | |
| summary | Yes | Show this to the customer exactly as written before confirming. |
| expires_at | Yes | |
| confirmation_token | Yes | |
| confirmation_required | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond annotations: nothing is filed until confirm is called, the team confirms today's price and sends a quote or pay link, and a signed-in Printdash account is required, with the sign-in fallback described. The return payload (summary to show customer plus confirmation_token) is disclosed. This is exactly the kind of context annotations alone 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-loads the eligibility condition, then the action, then the confirm requirement and auth note. Dense but every clause carries information. Slightly long single sentence with chained clauses, but no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the description still names the key return value (confirmation_token) to signal the two-step flow. Auth requirements, the confirm gate, and the human-in-the-loop pricing step are all covered for what is a non-idempotent, open-world mutation.
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 75%, and the description adds meaning beyond the schema: 'at the same or another quantity' implies the default of keeping the original quantity, and 'optional notes' clarifies intent. It doesn't address item_id, which the schema documents anyway.
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: 'prepares the order page's reorder request' for a job on a past order that Printdash's team priced, with optional quantity change and notes. The eligibility condition ('reorder_by_request in get_order') is precise. It never explicitly contrasts with the sibling `reorder` tool, so the differentiation is incomplete.
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?
Clearly says when this applies (team-priced job on a past order) and what the follow-up step is (confirm after the customer agrees). It gives a clear context but omits an explicit 'use X instead for self-serve reorders' pointing at the `reorder` sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_productsSearch Printdash productsARead-onlyIdempotentInspect
Finds the Printdash products that match the customer's words ("A5 flyers", "round stickers", "pull up banner"), best first. Returns ids for get_product, each with the site's from_price (a starting price; price_job gives the exact one). Printdash prints in Australia and delivers within Australia only; prices are in AUD and include GST.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The customer's words for what they want printed. |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| count | Yes | |
| query | Yes | |
| currency | Yes | |
| products | Yes | |
| service_area | Yes | |
| from_price_note | Yes | |
| prices_include_gst | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, closed-world. The description adds real value beyond them: results are relevance-ranked, from_price is a 'starting price' rather than the final one, and the service is Australia-only with AUD prices including GST. It omits what happens on no matches or any result cap, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with the primary action and ranking front-loaded, followed by the id/price chain and then regional/currency caveats. No sentence repeats the name or 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?
For a single-parameter search tool with full schema coverage, annotations for safety, and an output schema for return shape, the description covers everything else an agent needs: relevance ordering, the meaning of from_price versus price_job, and geographic/currency constraints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already defines query as 'the customer's words', so baseline is 3. The description earns one more by reinforcing that the input should be natural customer phrasing and giving concrete examples ('A5 flyers', 'round stickers', 'pull up banner') that demonstrate acceptable granularity.
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 ('Finds the Printdash products'), scopes the input to customer language, and shows the ranking behavior ('best first'). The example queries and the note that it returns ids for get_product separate it clearly from list_products and get_product.
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?
Implies the trigger condition well: use it when the customer describes what they want in their own words, then feed the returned id to get_product and use price_job for exact pricing. It never explicitly excludes browsing all products via list_products, so the alternative case is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_inviteInvite someone to Printdash (asks first)ADestructiveInspect
Prepares emailing someone an invitation with the customer's referral link: returns the summary to show the customer and a confirmation_token. Nothing is sent until confirm is called after the customer agrees. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Who to invite (not the customer's own address). |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| action | Yes | |
| details | Yes | |
| summary | Yes | Show this to the customer exactly as written before confirming. |
| expires_at | Yes | |
| confirmation_token | Yes | |
| confirmation_required | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond annotations: nothing is sent until confirm, it returns a summary plus a confirmation_token, and it requires a signed-in Printdash account with a described sign-in fallback on printdash.io. This is exactly the auth and side-effect information annotations cannot convey (destructiveHint=true alone wouldn't tell the agent the effect is deferred).
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 action and the deferred-effect guarantee, then the auth prerequisite. No redundant restatement of the title or name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the two-phase flow, the return artifact needed to drive confirm, and the auth requirement, and an output schema exists so return-shape detail is unnecessary. Minor gap: no note on failure cases (invalid email, duplicate invite), but the essentials for correct invocation are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter and schema description coverage is 100%, so the schema already defines 'email' including the 'not the customer's own address' caveat. The description adds no parameter-level detail; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Prepares emailing someone an invitation with the customer's referral link') and immediately clarifies what it does NOT do (send), naming the sibling 'confirm' that actually sends. An agent can distinguish it from confirm and get_referral_summary without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear sequencing rule: call this to prepare, then call confirm after the customer agrees. Missing an explicit statement of when not to use it (e.g., if the customer hasn't signed in, or if they want a plain referral link via get_referral_summary), but the main workflow condition is explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_contextSwitch between personal and a TeamADestructiveIdempotentInspect
Switches the account between buying personally and buying as one of its Teams, as the account menu's Viewing as does on printdash.io. Prices, quotes, orders and addresses follow the context. Pass team_id null for personal. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | Yes | A team_id from get_account's contexts, or null for personal. |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| tier | Yes | |
| terms | No | |
| switched | Yes | |
| buying_as | Yes | |
| on_account | Yes | |
| po_required | No | |
| active_context | Yes | |
| orders_need_owner_approval | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, idempotent, destructive operation. The description adds useful behavioral context beyond that: the active context determines which prices, quotes, orders, and addresses apply, and unauthenticated calls trigger a sign-in prompt on printdash.io. It does not explain the destructiveHint specifically, but it does not contradict 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?
The description is front-loaded and appropriately sized for a one-parameter context-switching tool. The account-menu analogy is helpful, and the auth note is placed at the end without burying the main action.
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 annotations and output schema, the description is largely complete: it explains the action, the affected domain data, the personal-vs-Team parameter meaning, and the authentication behavior. The main remaining gap is that it does not elaborate on the destructiveHint, but that is already flagged in annotations.
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 schema already has 100% parameter description coverage and explains that team_id comes from get_account's contexts or null for personal. The description repeats the null-for-personal semantics but adds no further format or selection guidance 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 states a specific verb and resource: switching the account's buying context between personal and a Team. It also ties that to concrete affected data (prices, quotes, orders, addresses), so an agent can immediately distinguish this from sibling tools such as get_account or update_address.
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 clear usage context: use it to switch the account's buying context, pass null for personal, and a team_id for a Team. It also states the signed-in prerequisite, though it does not explicitly name when not to use the tool or a direct alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_default_addressMake an address the defaultADestructiveIdempotentInspect
Makes one saved address the default for the current buying context; checkout and new quotes start from it. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| address_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| default_address | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the bar is lower; the description still adds the real consequence (checkout and new quotes are seeded from the address) and the authentication behavior when no session exists. It does not state what happens to the previously-default address or error behavior for a bad address_id.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short clauses: the effect is front-loaded, the consequence follows, and the auth caveat is last. Nothing is redundant with the title or annotations.
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 and annotations carry the safety profile, so the description only needs the effect and preconditions, which it provides. Minor gap: no note on invalid or non-owned address_id, which matters for a destructive, idempotent setter.
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 0% for the single required address_id, so the schema supplies no meaning. The description only implies the value must reference an existing saved address; it gives no format, provenance (e.g. from list_addresses) or failure semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Makes ... the default') and resource ('one saved address') together with the scope ('current buying context'). An agent can distinguish it from create_address, update_address and list_addresses without inspecting any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for use ('checkout and new quotes start from it') and a prerequisite (signed-in Printdash account). It does not explicitly route to alternatives such as update_address for non-default changes, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_addressChange a saved addressADestructiveIdempotentInspect
Changes the fields given on one saved address (from list_addresses); the rest stay. If an order or quote was made with it, the change is saved as a new address with a new id (the result's address.id) and the orders and quotes keep the old one. Australian state codes and four-digit postcodes only. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | Suburb or town. | |
| type | No | ||
| state | No | NSW, VIC, QLD, SA, WA, TAS, NT or ACT. | |
| mobile | No | ||
| last_name | No | ||
| address_id | Yes | An address id from list_addresses. | |
| first_name | No | ||
| postal_code | No | Four-digit Australian postcode. | |
| company_name | No | ||
| address_line1 | No | Street address. | |
| address_line2 | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | Yes | |
| address | Yes | |
| outcome | Yes | replaced: an order or quote used the address, so the edit was saved as a new address (address.id is new) and the old one kept for those records (#669). |
| updated | Yes | |
| replaced_address_id | No | The old id, when replaced. It no longer works. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing the non-obvious copy-on-write rule: if an order or quote used the address, the edit is persisted as a new address with a new id and the orders/quotes keep the old one, and it tells the agent where to read the new id (result's address.id). It also discloses the auth requirement (signed-in Printdash account, otherwise the connection prompts sign-in on printdash.io) and the validation constraints (AU state codes, four-digit postcodes).
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 the core mutation behavior before the copy-on-write edge case, then the constraints and auth. Dense but every clause carries information; the auth sentence is the only one that could be compressed.
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 spelled out, yet the description still points at result's address.id where it matters. Auth, validation, and the copy-on-write side effect are all covered; what remains unaddressed is failure behavior (e.g. what an invalid state code or unknown address_id produces).
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 only 45% across 11 parameters, so the description carries weight, and it does contribute the crucial partial-update rule (only supplied fields change) plus the address_id provenance. However, the state/postcode constraints it states are already documented in the schema, and the eight other fields (company_name, mobile, address_line2, type enum, etc.) get no treatment in either place.
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 ('Changes the fields given on one saved address') and immediately pins down the partial-update semantics ('the rest stay'), which distinguishes it from create_address and delete_address in the sibling list. The parenthetical source (list_addresses) also tells the agent where the target id comes from.
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?
Usage is implied rather than stated: the agent can infer this is the tool for editing an existing address versus create_address/delete_address, and the 'from list_addresses' clause supplies a prerequisite. But there is no explicit when-to-use/when-not or named alternative, so the routing decision 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.
update_cart_lineChange a job in the cartADestructiveIdempotentInspect
Changes one cart line's options (only what is given: a new quantity, stock, finish or size) and re-prices it with the pricing engine. A line from a quote Printdash priced cannot be changed. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| line_id | Yes | A line_id from get_cart. | |
| configuration | Yes | Only the options that change, as option ids: a new quantity, stock, finishing ids or size. Finishing ids replace the line's finishing. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cart | No | |
| next | Yes | |
| added | No | |
| price | No | |
| errors | No | |
| priced | No | |
| reason | No | |
| line_id | No | |
| missing | No | |
| nearest | No | |
| product | Yes | |
| updated | No | |
| currency | Yes | |
| product_id | Yes | |
| turnaround | No | |
| service_area | Yes | |
| prices_include_gst | Yes | |
| configuration_input | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the mutation profile is known. The description adds value annotations cannot: the re-pricing side effect, the provenance constraint on quote-priced lines, and the interactive sign-in fallback of the connection. It does not explain what re-pricing means operationally or whether omitted options are preserved or reset.
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 purpose, then the constraint, then the auth behavior. No filler and nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and annotations cover safety. For a destructive nested-configuration mutation the description supplies the key constraints, but leaves open how to clear an existing option (e.g., reset finishing) — a real gap given finishingIds 'replace' semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every nested option field is already documented in the schema, including the 'only the options that change' note. The description's partial-update summary ('only what is given: a new quantity, stock, finish or size') largely restates that, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific verb and resource ('Changes one cart line's options') and states the side effect ('re-prices it with the pricing engine'), which cleanly separates it from add_to_cart, remove_cart_line and price_job. An agent can identify the operation without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete exclusion ('A line from a quote Printdash priced cannot be changed') and states the prerequisite ('Needs a signed-in Printdash account'), plus what happens when it is missing. It does not name a sibling alternative for the excluded case, so not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_quoteChange a saved quoteADestructiveIdempotentInspect
Changes a saved quote in place: lines to change (line_id plus only the options that change) or add (product_id and configuration), lines to remove, the reference, notes or delivery address. Changed and added lines are re-priced by the engine; untouched lines keep their prices. Accepted, ordered, expired and team-priced quotes cannot be changed. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.
| Name | Required | Description | Default |
|---|---|---|---|
| lines | No | ||
| notes | No | ||
| quote | Yes | The quote number (or the quote id from its link). | |
| reference | No | ||
| address_id | No | A saved address id, or null to clear it. | |
| remove_line_ids | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | No | |
| next | Yes | |
| lines | No | |
| errors | No | |
| pickup | No | |
| priced | No | |
| reason | No | |
| status | No | |
| expires | No | |
| missing | No | |
| nearest | No | |
| product | No | |
| updated | Yes | |
| currency | Yes | |
| reference | No | |
| share_url | No | |
| line_index | No | |
| product_id | No | |
| quote_number | No | |
| service_area | Yes | |
| status_label | No | |
| total_inc_gst | No | The quote page's Total, inc GST: subtotal_inc_gst (the lines) plus delivery (shipping_ex_gst) and its GST. |
| added_line_ids | No | |
| shipping_ex_gst | No | |
| changed_line_ids | No | |
| removed_line_ids | No | |
| subtotal_inc_gst | No | |
| prices_include_gst | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so safety profile is covered. The description adds genuinely new behavioral context: changed/added lines are re-priced by the engine while untouched lines keep prices, and it discloses the auth requirement (signed-in Printdash account, sign-in prompt otherwise). This goes beyond structured fields.
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 the editable fields, then layered with pricing behavior, constraints, and auth. Dense but every sentence carries information; no wasted preamble. Slightly long single paragraph but coherent.
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 destructive, in-place mutation of a complex nested configuration, the description covers what changes, pricing consequences, blocking states, and auth—everything an agent needs to call it safely. Output schema and annotations handle return shape and safety hints.
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 low (33%), so the description must compensate, and it does: it explains the change-vs-add semantics of 'lines' (line_id with only changed options vs product_id plus full configuration), and names removal, reference, notes, and address. It meaningfully clarifies the two-mode 'lines' parameter that the schema alone leaves subtle.
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 (changes a saved quote in place) and enumerates exactly what can be modified: lines to change/add/remove, reference, notes, delivery address. This clearly distinguishes it from create_quote, duplicate_quote, and delete_quote siblings.
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 when NOT to use it: 'Accepted, ordered, expired and team-priced quotes cannot be changed.' This is strong exclusion guidance. It doesn't name a specific alternative tool (e.g. duplicate_quote for those cases), which keeps it from a 5.
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.
2 tool updates
- Changed
list_products1 field changed- changed
Output schema / properties / products / items / properties / from_price / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "priced_at": { - "description": "When Printdash's pricing service priced it for the site.", - "type": [ - "string", - "null" - ] - }, - "quantity": { - "description": "How many the starting price is for.", - "type": "number" - }, - "total_inc_gst": { - "description": "AUD including GST, public retail, for the product's default_configuration at quantity.", - "type": "number" - } - }, - "required": [ - "total_inc_gst", - "quantity", - "priced_at" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "priced_at": { + "description": "When Printdash's pricing service priced it for the site.", + "type": [ + "string", + "null" + ] + }, + "quantity": { + "description": "How many the starting price is for.", + "type": "number" + }, + "source": { + "description": "site: the figure printdash.io publishes now; bundled: the same figure as of Printdash's last server update.", + "enum": [ + "site", + "bundled" + ], + "type": "string" + }, + "total_inc_gst": { + "description": "AUD including GST, public retail, for the product's default_configuration at quantity.", + "type": "number" + } + }, + "required": [ + "total_inc_gst", + "quantity", + "priced_at", + "source" + ], + "type": "object" + }, + { + "type": "null" + } +]
- Changed
search_products1 field changed- changed
Output schema / properties / products / items / properties / from_price / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "priced_at": { - "description": "When Printdash's pricing service priced it for the site.", - "type": [ - "string", - "null" - ] - }, - "quantity": { - "description": "How many the starting price is for.", - "type": "number" - }, - "total_inc_gst": { - "description": "AUD including GST, public retail, for the product's default_configuration at quantity.", - "type": "number" - } - }, - "required": [ - "total_inc_gst", - "quantity", - "priced_at" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "priced_at": { + "description": "When Printdash's pricing service priced it for the site.", + "type": [ + "string", + "null" + ] + }, + "quantity": { + "description": "How many the starting price is for.", + "type": "number" + }, + "source": { + "description": "site: the figure printdash.io publishes now; bundled: the same figure as of Printdash's last server update.", + "enum": [ + "site", + "bundled" + ], + "type": "string" + }, + "total_inc_gst": { + "description": "AUD including GST, public retail, for the product's default_configuration at quantity.", + "type": "number" + } + }, + "required": [ + "total_inc_gst", + "quantity", + "priced_at", + "source" + ], + "type": "object" + }, + { + "type": "null" + } +]
58 tool updates
- First observed
add_to_cart - First observed
approve_order - First observed
attach_artwork - First observed
attach_artwork_from_url - First observed
attach_artwork_inline - First observed
cancel_order - First observed
cancel_quote_request - First observed
check_artwork - First observed
clear_cart - First observed
confirm - First observed
convert_quote_to_order - First observed
create_address - First observed
create_quote - First observed
delete_address - First observed
delete_quote - First observed
duplicate_quote - First observed
email_quote - First observed
estimate_delivery - First observed
get_account - First observed
get_artwork_guide - First observed
get_artwork_requirements - First observed
get_artwork_uploader_link - First observed
get_cart - First observed
get_invoice - First observed
get_mockup - First observed
get_order - First observed
get_product - First observed
get_quote - First observed
get_quote_request - First observed
get_referral_summary - First observed
list_addresses - First observed
list_artwork - First observed
list_orders - First observed
list_pending_approvals - First observed
list_products - First observed
list_quote_requests - First observed
list_quotes - First observed
match_options - First observed
ping - First observed
place_order - First observed
prepare_checkout - First observed
price_job - First observed
price_quantities - First observed
reject_order - First observed
remove_artwork - First observed
remove_cart_line - First observed
reorder - First observed
request_artwork_upload - First observed
request_custom_quote - First observed
request_reorder - First observed
search_products - First observed
send_invite - First observed
set_context - First observed
set_default_address - First observed
share_quote - First observed
update_address - First observed
update_cart_line - First observed
update_quote
Related MCP Connectors
Print shop in Spain: products, exact prices, quote requests and order status for AI assistants
Italian online print shop: search the catalog, read product options, get exact configuration prices.
Print-on-demand: browse products, create campaigns with your designs, quote, order and track.
Live prices in USD, options and shipping quotes for custom-printed promotional products.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables agents to inspect print artwork and check it against product presets, identifying issues like low resolution, missing bleed, unsafe margins, wrong colour mode, and unwanted transparency, then suggesting fixes without modifying the files.4MIT
- AlicenseAqualityAmaintenanceEnables an AI agent to design, lay out, proof and print badges, business cards, flyers, photos and sublimation transfers on real paper printers with millimetre-accurate output, packing mixed items onto shared sheets with crop marks. It also remembers named print profiles, including printer, paper, tray, media type, quality and calibration settings.10MIT

OpenPrints MCPofficial
AlicenseNot gradedqualityDmaintenanceEnables AI agents to browse products, upload designs, place print orders, track shipments, and manage account balance via natural language.2 npmMIT- AlicenseNot gradedqualityBmaintenanceProvides comprehensive print production and color management tools (Pantone lookup, CMYK/RGB conversion, ink estimation, preflight checks, etc.) that work 100% offline without API keys.34 PyPI20MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.