Skip to main content
Glama

Surfing Dog Inbox

Server Details

Message, ask for a quote or book a call with Surfing Dog, through its open-source inbox.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 36 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
surfingdogai/inbox
GitHub Stars
0

TDQS

A3.6/5.0

Scored across 19 tools

Disambiguation4/5

The set broadly separates discovery, negotiation, creation, and post-order actions, but there is real overlap in the offer cluster (make_offer, suggest_time, accept_offer, decline_offer) and among cancellation-like actions (cancel_item, withdraw_from_contract, request_return). The detailed descriptions resolve most cases, so confusion is limited rather than systemic.

Naming Consistency5/5

All tools use snake_case and begin with a clear action verb such as get_, list_, create_, request_, accept_, or decline_. The naming pattern is predictable throughout the set.

Tool Count4/5

Nineteen tools is above the usual 3-15 comfort range, but the server covers several related workflows: bookings, orders, quotes, returns/withdrawals, receipts, messaging, and verification. Each tool appears to map to a distinct operation, though the overall surface is heavy.

Completeness4/5

Core lifecycles are well covered: discovery, availability, creation, negotiation, cancellation/return/withdrawal, status, messaging, and receipt acknowledgment. The main gap is the absence of a list/get-my-items tool for enumerating existing bookings, orders, quotes, or returns without already knowing an item_id.

Available Tools

19 tools
accept_offerAccept what the business proposedA
Idempotent
Inspect

Accept another time the business proposed for a booking, its quote, its changes to an order, or a change it asks for to a confirmed booking or an accepted order (offer.kind change: the promise moves). This binds your person, so send terms_sha — offer.terms_sha from get_item_status — only after they said yes to offer.human, and offer_id (offer.id) so an answer to an offer since replaced does nothing. Without terms_sha nothing is booked: you get the terms to show them. An accepted quote becomes a confirmed booking or order (linked). A yes to a change that can no longer be made online goes to a person there instead (passed_on), and what was agreed stands.

NameRequiredDescriptionDefault
keyNoThe person's key (sdkey1_…), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes — keep the pass and send it next time instead. Never stored.
passNoThe person's passes (sdpass1_…), space-separated, at most 8: presented to the network that issued each, so the business recognises the customer. Or send them in the Sdi-Pass header. Never stored.
item_idYes
offer_idNoThe offer you answer: offer.id from get_item_status. If the business has replaced it since, nothing is done (409 offer_changed, with the current one).
terms_shaNoThe fingerprint of the terms your person said yes to: offer.terms_sha from get_item_status. Leave it out to be told the terms first; nothing is booked without it.
access_tokenNoCapability secret returned when the item was created without an account.
idempotency_keyNoSame key + same request = same answer. Required for agents. Make it a fresh random UUID per request: a retry of a create with a random key gets its access token again.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare non-destructive and idempotent, so the description focuses on what those hints cannot convey: this is a binding commitment on the person, a stale offer_id returns 409 offer_changed with the current offer, and an unfulfillable change is routed to a human (passed_on) with the agreed terms standing. That is meaningful consequence disclosure beyond the structured fields, though the retry/idempotency nuance is left to the schema.

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

Conciseness4/5

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

Front-loaded with the core action and the four accepted offer types before any preconditions, which is the right ordering. The second sentence is heavily nested (consent, terms_sha source, offer_id, stale-offer behavior) and takes real effort to unpack, costing a point, but every clause carries information.

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

Completeness4/5

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

With no output schema and a binding mutation over 7 parameters, the description covers the outcomes an agent most needs: nothing booked without terms_sha, 409 on a replaced offer, passed_on for unfulfillable changes, and the linked confirmed booking/order result. It does not describe what the returned terms look like or the shape of a successful response, a minor gap.

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

Parameters4/5

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

Schema coverage is 86%, so the baseline is 3, but the description adds real sequencing semantics the schema does not: terms_sha must come from get_item_status and must only be sent after explicit consent to offer.human, and offer_id ties the answer to a specific offer version. It also names what happens without terms_sha, which is behavior the parameter docs alone do not state.

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

Purpose5/5

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

States a specific verb (accept) and enumerates exactly what kind of offer is being accepted: a proposed time, a quote, changes to an order, or a change to a confirmed booking/order. It also flags the special case (offer.kind change) so the agent knows the promise is being moved, not a new promise created. Clearly distinct from decline_offer and make_offer 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.

Usage Guidelines4/5

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

Gives a strong conditional: send terms_sha only after the person said yes to offer.human, and states that sending nothing returns the terms to show them. It also explains the fallback path when a change can no longer be made online (passed_on). It never explicitly names decline_offer or cancel_item as the alternative action, so guidance is clear but not exhaustive.

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

acknowledge_receiptAcknowledge a receiptA
Idempotent
Inspect

Counter-sign a receipt this item earned, so both sides hold it: a promise, a change both sides agreed to it (kind amended), how it ended, or a refund's. Read the item to find its receipts; then send a compact JWS signed with your own Ed25519 key — header {alg:'EdDSA', typ:'sdi-receipt-ack+jws', jwk:}, payload {rcp:, sha:<base64url(SHA-256(receipt jws))>, iat:}. The instance verifies it against the key you carry and keeps it. Acknowledging twice is harmless.

NameRequiredDescriptionDefault
keyNoThe person's key (sdkey1_…), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes — keep the pass and send it next time instead. Never stored.
passNoThe person's passes (sdpass1_…), space-separated, at most 8: presented to the network that issued each, so the business recognises the customer. Or send them in the Sdi-Pass header. Never stored.
item_idYes
receiptNoThe receipt JWS being acknowledged, if you want the instance to check it is the one it holds.
receipt_idNoThe receipt to acknowledge, for an agent that signs this request (sdi-agent/1) with a key delegated to the pass reference it sends: the inbox forwards the signature to the network (ADR-017 §3.4). Send this or counter_signature.
access_tokenNoCapability secret returned when the item was created without an account.
counter_signatureNoA compact JWS by the customer's agent, EdDSA, header carrying its Ed25519 public `jwk`, payload `{"rcp": "<receipt id>", "sha": "<base64url(SHA-256(receipt JWS))>", "iat": <unix seconds>}`. Or, for an agent that signs its requests instead (sdi-agent/1) and carries a pass reference, `receipt_id` alone.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true and destructiveHint=false, and the description reinforces this with 'Acknowledging twice is harmless.' Beyond that it discloses non-obvious behavior: the instance verifies the counter-signature against the carried key and persists it, and the cryptographic contract (header/payload shape, SHA-256 of the receipt JWS). It does not describe failure modes or what verification rejection looks like.

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

Conciseness4/5

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

The key action and effect are front-loaded in the first clause, followed by the eligible receipt kinds and then the protocol mechanics. It is dense and packed into essentially one long sentence chain, but every clause carries information; little is wasted.

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

Completeness4/5

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

For a crypto-heavy, 7-parameter, no-output-schema tool, the description supplies the signing recipe, the verification/storage behavior, and an idempotency guarantee. Missing only error/failure handling and guidance on which credential parameter to prefer, which is a minor gap given the rich schema descriptions.

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

Parameters3/5

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

Schema coverage is 86%, so the 7 parameters are largely self-documenting, and the description restates the counter_signature contract rather than extending it. It adds minimal semantic detail beyond the schema (no guidance on choosing key vs. pass vs. access_token), so baseline 3 applies.

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

Purpose4/5

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

The description opens with a specific verb and resource: 'Counter-sign a receipt this item earned,' and enumerates the four kinds of receipt (promise, amended agreement, ending, refund) so the scope is unambiguous. It is not a tautology of the name/title, though it does not explicitly name a sibling tool it replaces.

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

Usage Guidelines4/5

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

It gives a clear operational sequence ('Read the item to find its receipts; then send a compact JWS...') plus a prerequisite (the instance verifies it against the key you carry), and reassures that 'Acknowledging twice is harmless.' It stops short of stating when to withhold acknowledgement or naming an alternative tool.

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

cancel_itemCancelA
DestructiveIdempotent
Inspect

Cancel an item you created. After the business's cancellation window, a confirmed booking is cancelled late where the business records late cancellations (it may count against the customer), and refused where it does not. A confirmed stay answers first with the fee under its policy and what is owed back (confirm): send its fee_sha once your person said yes.

NameRequiredDescriptionDefault
keyNoThe person's key (sdkey1_…), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes — keep the pass and send it next time instead. Never stored.
passNoThe person's passes (sdpass1_…), space-separated, at most 8: presented to the network that issued each, so the business recognises the customer. Or send them in the Sdi-Pass header. Never stored.
reasonNo
fee_shaNoA confirmed stay: the fingerprint of the cancellation fee your person saw (details.fee_sha of the 409 confirm_terms a cancel without it gets).
item_idYes
access_tokenNoCapability secret returned when the item was created without an account.
idempotency_keyNoSame key + same request = same answer. Required for agents. Make it a fresh random UUID per request: a retry of a create with a random key gets its access token again.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations declare the destructive/idempotent profile, and the description adds real value beyond them: late cancellations may count against the customer, refusal where the business doesn't record them, refund of 'what is owed back', and a 409-confirm handshake before sending fee_sha. The wording is dense but the substantive behavior is disclosed; no contradiction with destructiveHint=true.

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

Conciseness3/5

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

Purpose is front-loaded in the first sentence, but the second sentence is convoluted ('answers first with the fee under its policy and what is owed back') and reads awkwardly, forcing the agent to re-parse. Content earns its place; the phrasing does not.

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

Completeness4/5

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

For a destructive 7-param mutation with no output schema, the description covers the important hidden behavior: consequences of late cancellation, refund reporting, and the fee-confirmation handshake. It relies on the schema for credential handling, which is reasonable, so only minor gaps remain.

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

Parameters3/5

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

Schema coverage is 71%, so most parameters self-document. The description usefully explains that fee_sha belongs to the 409 confirm_terms response and should only be sent after the user agrees — context beyond the schema — but it leaves key/pass/access_token/idempotency_key entirely to the schema. Baseline 3 fits.

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

Purpose4/5

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

States a specific verb+resource ('Cancel an item you created') and describes the post-cancellation outcomes, so the core operation is clear. It does not explicitly distinguish itself from adjacent siblings such as request_return or decline_offer, and 'item' is never defined (booking/order/stay), leaving some ambiguity.

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

Usage Guidelines3/5

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

The embedded prerequisite 'you created' and the late-vs-refused branch imply when the tool applies, and the confirm flow is described. But there is no explicit when-to-use / when-not guidance and no named alternative for related flows (e.g. returns), so usage must be inferred.

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

check_availabilityCheck availabilityB
Read-onlyIdempotent
Inspect

Free start times for a service between two instants (at most 14 days). A time that has started, or that starts within the business's minimum notice, is not offered.

NameRequiredDescriptionDefault
toYesEnd of the window, at most 14 days after from.
fromYesStart of the window to search, ISO 8601.
party_sizeNo
service_idYes

TDQS

B3.2/5.0
Behavior4/5

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

The description adds behavioral details beyond the readOnlyHint and idempotentHint annotations: it specifies the 14-day maximum window and that times already started or within the business's minimum notice are excluded. This gives useful context about how the tool operates, though it does not describe the return format.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core purpose and constraints. It contains no redundant information and every sentence earns its place, making it highly concise and well-structured.

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

Completeness2/5

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

The description lacks details on the output format (e.g., whether it returns a list of timestamps, objects, or an empty result) and does not explain how party_size affects availability. Since there is no output schema, this information is necessary for the agent to interpret the tool's results correctly, leaving a significant gap.

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

Parameters2/5

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

The description clarifies the meaning of the time range (from/to) as 'between two instants' and the 14-day limit, but it does not explain party_size or service_id. With schema coverage at only 50%, the description does not adequately compensate for the undocumented parameters, leaving their semantics unclear.

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

Purpose4/5

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

The description clearly states the tool lists free start times for a service within a time window, with specific constraints like the 14-day limit and exclusion of started times. It is specific and understandable, but it does not explicitly differentiate from sibling tools like suggest_time, which also deals with time proposals.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives such as suggest_time or create_booking. It implies usage for checking availability but does not offer exclusions or routing advice, leaving the agent to infer the appropriate context.

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

create_bookingRequest a bookingA
Idempotent
Inspect

Request a service at a time. Check availability first. endTime and reservationFor.name may be left out: they follow from the service (its length, its name). A fixed-price service costs the business's price from list_services; a different totalPrice you send is only noted for the business. A priced booking binds your person only once they confirmed it: without terms_sha nothing is sent, and you get the summary to show them (confirm.summary, confirm.terms_sha); call again with that terms_sha on their clear yes. Returns the item and, if you have no account, an access_token.

NameRequiredDescriptionDefault
keyNoThe person's key (sdkey1_…), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes — keep the pass and send it next time instead. Never stored.
passNoThe person's passes (sdpass1_…), space-separated, at most 8: presented to the network that issued each, so the business recognises the customer. Or send them in the Sdi-Pass header. Never stored.
contactNo
messageNo
payloadYes
terms_shaNoThe fingerprint of the terms your person confirmed (details.terms_sha of the 409 confirm_terms a priced request without it gets). Nothing is sent to the business without it when the request carries a price.
visit_forNoBook this as the site visit for a request for a price you made: its item_id (and access_token).
attachmentsNoPhotos or plans of the job: JPEG, PNG, WebP or PDF, at most six of 10 MB each. Inline up to 4 MB each (8 MB a call), else by https address or upload_id. HEIC photos: send them as JPEG. Images are cleaned of where they were taken; a PDF is kept as sent.
idempotency_keyNoSame key + same request = same answer. Required for agents. Make it a fresh random UUID per request: a retry of a create with a random key gets its access token again.

TDQS

A4.2/5.0
Behavior5/5

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

Beyond the annotations (writable, non-destructive, idempotent), the description discloses the pricing rule (a fixed-price service costs the business's listed price and any differing totalPrice is merely noted), the gating behavior that a priced request sends nothing to the business without terms_sha, and that an access_token is returned for account-less callers. These are the non-obvious behaviors an agent cannot infer from schema or hints.

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

Conciseness4/5

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

Five tight sentences, roughly ordered from action to the pre-call check to the confirmation loop to the return value, with no filler. The telegraphic, clause-chained style ('a different totalPrice you send is only noted for the business') costs some readability but nothing is wasted.

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

Completeness4/5

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

For a 9-parameter tool with nested policy/deposit/attachment objects and no output schema, the description covers the decisive parts: availability pre-check, terms_sha confirmation gate, price semantics, and the item/access_token return. It does not mention idempotency_key behavior or the visit_for linkage, both of which are left entirely to the schema.

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

Parameters4/5

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

At 67% schema coverage the description adds genuine meaning to the highest-stakes fields: endTime and reservationFor.name may be omitted because they derive from the service's durationMin and name, and totalPrice is informational rather than binding for fixed-price services. It leaves key/pass/attachments to their already-detailed schema descriptions, which is reasonable but leaves partial reliance on the schema.

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

Purpose4/5

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

The opening names a concrete action and resource ('Request a service at a time'), and the closing states what comes back ('the item' and an access_token), so an agent knows this creates a booking record rather than a read. It does not explicitly contrast itself with nearby siblings like create_order, request_quote or suggest_time, so differentiation is only implied via 'Check availability first'.

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

Usage Guidelines4/5

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

It gives real sequencing guidance ('Check availability first') and spells out the two-phase flow: without terms_sha nothing is sent, you receive confirm.summary/confirm.terms_sha to show the person, then call again on their clear yes. It stops short of naming when to prefer create_order, request_quote or suggest_time instead, so no full alternative map.

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

create_orderPlace an orderA
Idempotent
Inspect

Order products. Prices are in minor units. A line naming a product (productId or sku) costs the business's price from list_products, and the total follows; a different price you send is only noted for the business. A line naming no product waits for the business to price it. A priced order binds your person only once they confirmed it: without terms_sha nothing is sent, and you get the summary to show them (confirm.summary, confirm.terms_sha); call again with that terms_sha on their clear yes.

NameRequiredDescriptionDefault
keyNoThe person's key (sdkey1_…), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes — keep the pass and send it next time instead. Never stored.
passNoThe person's passes (sdpass1_…), space-separated, at most 8: presented to the network that issued each, so the business recognises the customer. Or send them in the Sdi-Pass header. Never stored.
contactNo
messageNo
payloadYes
terms_shaNoThe fingerprint of the terms your person confirmed (details.terms_sha of the 409 confirm_terms a priced request without it gets). Nothing is sent to the business without it when the request carries a price.
attachmentsNoPhotos or plans of the job: JPEG, PNG, WebP or PDF, at most six of 10 MB each. Inline up to 4 MB each (8 MB a call), else by https address or upload_id. HEIC photos: send them as JPEG. Images are cleaned of where they were taken; a PDF is kept as sent.
idempotency_keyNoSame key + same request = same answer. Required for agents. Make it a fresh random UUID per request: a retry of a create with a random key gets its access token again.

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the annotations, the description discloses that product lines use the business’s list price, unpriced lines wait for business pricing, and a priced order is not sent or bound without terms_sha. It also explains the confirmation summary returned for the user, which is meaningful behavioral context for a write tool.

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

Conciseness4/5

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

The description is compact and front-loads purpose and pricing rules, with no obvious filler. The pricing sentence is dense but earns its place given the complexity of the order-pricing and confirmation semantics.

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

Completeness3/5

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

For a complex write tool with no output schema, the description explains the confirmation summary but not the successful order response or broader return shape. Other nested parameters rely on the schema, leaving a clear output-side gap even though the critical confirmation flow is covered.

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

Parameters4/5

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

The description adds significant meaning beyond the schema for orderedItem: productId/sku pricing, total-price derivation, and the effect of sending a different price. It also explains the terms_sha confirmation gate, while the schema already documents key, pass, attachments, and idempotency_key.

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

Purpose5/5

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

“Order products” names a specific action and resource, and the pricing explanation distinguishes the tool from list_products by making list_products the price source rather than the order path. An agent can identify this as the product-ordering write operation.

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

Usage Guidelines4/5

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

The two-step confirmation flow is explicit: call without terms_sha to get confirm.summary and confirm.terms_sha, then call again only after a clear yes. It does not explicitly route against sibling alternatives such as request_quote or make_offer, so it is clear context without full when/when-not guidance.

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

decline_offerDecline what the business proposedA
DestructiveIdempotent
Inspect

Say no to another time or to changes the business proposed (the booking request or the order is closed) or to its quote. To a change it asks for to a confirmed booking or an accepted order, no keeps what was agreed; on a change your person asked for (requested_change), it takes that back. Add reason (and reason_code) for anything your person wants the business to know.

NameRequiredDescriptionDefault
keyNoThe person's key (sdkey1_…), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes — keep the pass and send it next time instead. Never stored.
passNoThe person's passes (sdpass1_…), space-separated, at most 8: presented to the network that issued each, so the business recognises the customer. Or send them in the Sdi-Pass header. Never stored.
reasonNoAnything your person wants the business to know.
item_idYes
offer_idNoThe offer you answer: offer.id from get_item_status. If the business has replaced it since, nothing is done (409 offer_changed, with the current one).
reason_codeNoWhy: price_sensitivity, timing_deferred, quantity, delivery, returns_policy or other.
access_tokenNoCapability secret returned when the item was created without an account.
idempotency_keyNoSame key + same request = same answer. Required for agents. Make it a fresh random UUID per request: a retry of a create with a random key gets its access token again.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, and the description adds semantic consequences: the booking request or order is closed, an agreed change is kept, or a requested change is taken back. It does not elaborate on irreversibility or auth flows, but the schema covers identity and idempotency.

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

Conciseness4/5

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

The description is front-loaded with the core action and stays relatively compact. The middle sentence is dense and awkwardly phrased ('To a change it asks for...'), but it carries important semantic distinctions rather than waste.

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

Completeness4/5

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

For an 8-parameter mutation tool with rich schema coverage and annotations, the description covers the key business scenarios and the optional reason fields. Auth, idempotency, and parameter details are handled by the schema, so no major gap remains.

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

Parameters3/5

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

Schema description coverage is 88%, so the schema already explains most parameters in detail. The description only calls out reason and reason_code, adding little beyond the schema's own documentation, so baseline 3 is appropriate.

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

Purpose4/5

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

The description uses a clear verb phrase ('Say no to...') and names the resources involved: proposed times, proposed changes, quotes, and requested changes. It is understandable and distinct from accept_offer, though it could more directly label the operation as declining an offer.

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

Usage Guidelines4/5

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

It gives concrete usage contexts: declining another time, business-proposed changes, quotes, or taking back a requested_change. It does not explicitly name alternatives such as accept_offer or withdraw_from_contract, so it stops short of full when/when-not guidance.

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

get_business_profileBusiness profileB
Read-onlyIdempotent
Inspect

Name, time zone, currency, languages and the item types this business accepts, and where it takes any other kind instead (doors_elsewhere: each with its URL, and the platform it is on when there is one).

NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds value by naming the fields and explaining that doors_elsewhere entries carry a URL and optional platform. However, with no output schema, it does not fully describe the return structure or whether fields can be absent.

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

Conciseness3/5

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

It is a single dense sentence with no filler, but the phrase 'where it takes any other kind instead' is grammatically awkward and forces the reader to reparse it. The field list is front-loaded, but the doors_elsewhere clause could be clearer.

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

Completeness3/5

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

For a zero-parameter read with no output schema, the description does list the main return categories and partly explains doors_elsewhere. It still leaves the response shape and the meaning of 'other kind' ambiguous, and gives no usage context. It is minimum viable rather than complete.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to clarify about inputs. The baseline for a no-parameter tool is 4.

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

Purpose4/5

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

The description enumerates the profile fields returned (name, time zone, currency, languages, accepted item types, doors_elsewhere), which makes the resource clear. It never uses an explicit verb like 'returns' or 'retrieves', but the field list leaves little doubt it is a business-profile read. It is distinguishable from all transactional siblings.

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

Usage Guidelines2/5

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

There is no statement of when to use this tool versus siblings, and no prerequisites or exclusions. The only implied usage is that an agent needs business configuration, which is left entirely to inference.

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

get_item_statusItem statusA
Read-onlyIdempotent
Inspect

The current state of an item you created, in the business's words: what it proposed and waits for your person to answer (offer, with its terms_sha), who it waits on, what they can do next, and the conversation so far (thread: the business's replies and your person's messages).

NameRequiredDescriptionDefault
keyNoThe person's key (sdkey1_…), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes — keep the pass and send it next time instead. Never stored.
passNoThe person's passes (sdpass1_…), space-separated, at most 8: presented to the network that issued each, so the business recognises the customer. Or send them in the Sdi-Pass header. Never stored.
item_idYesThe item's id, from the answer that created it (view.item.id): not its six-character reference.
access_tokenNoCapability secret returned when the item was created without an account.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, and the description usefully adds what the returned status contains: proposed terms, who is waited on, possible next actions, and thread contents. It does not cover error behavior or freshness, but it adds meaningful behavioral context beyond the annotations.

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

Conciseness4/5

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

The description is a single dense sentence that front-loads the core purpose and then elaborates on returned content. It is information-rich and mostly earns its length, though the nested parentheticals make it slightly harder to scan.

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

Completeness4/5

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

With no output schema, the description needs to explain return content, and it does so by naming the offer terms, waiting party, next actions, and thread. Authentication and item identity details are handled by the schema, so the remaining description is largely complete for this read-only status tool.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters are already documented in the schema. The description adds no additional parameter meaning, making the baseline score of 3 appropriate.

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

Purpose4/5

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

The description clearly identifies the resource as an item's current state and specifies the kind of information returned: offer terms, waiting party, next actions, and thread. It does not explicitly name sibling alternatives, so it is clear but lacks direct differentiation.

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

Usage Guidelines3/5

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

Usage is implied by 'an item you created' and the status-oriented description, but there is no explicit when-to-use guidance or comparison to action-oriented siblings like accept_offer or decline_offer. The agent must infer that this is the read-only status-checking option.

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

list_productsProductsB
Read-onlyIdempotent
Inspect

Orderable products with prices in minor units, each with its barcode (gtin, 14 digits) where it has one and whether it is in stock. ids: read the live price of products a network showed you, before your person agrees; gtin: the products with that barcode, in any of its lengths. The price here is the one that counts.

NameRequiredDescriptionDefault
qNo
idsNoOnly these products, by id (at most 50): read the live price of what a network showed you.
gtinNoOnly products with this barcode (GTIN, EAN, UPC or ISBN), in any of its lengths. One that does not read as a barcode is refused.
limitNo
cursorNo

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already declare readOnly and idempotent, so the description adds genuinely useful context: prices are in minor units, the gtin is 14 digits where present, stock status is included, and 'the price here is the one that counts' establishes this as the authoritative price. It says nothing about pagination behavior despite a cursor parameter.

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

Conciseness4/5

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

Two dense sentences with the returned content front-loaded and the filter semantics following. The telegraphic 'ids: ...; gtin: ...' style is efficient, though it sacrifices a little readability.

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

Completeness3/5

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

With no output schema, the description does well to describe the returned product shape and price units. However, for a 5-parameter, 40%-coverage list tool it leaves q, limit, and cursor unexplained and gives no pagination guidance, which an agent needs to call it correctly at scale.

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

Parameters2/5

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

Schema coverage is only 40%: q, limit, and cursor have no schema descriptions, and the description does not compensate for any of them. It adds some meaning to gtin (accepts any length, 14-digit canonical form) and ids (live price for previously-seen products), but those are the two parameters that already had schema text.

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

Purpose4/5

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

The description states the resource and its content precisely: orderable products with prices in minor units, barcode, and stock status. It never states the verb 'list' or the filtering/pagination nature of the operation, and it does not distinguish itself from the sibling list_services.

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

Usage Guidelines3/5

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

The ids and gtin clauses give workflow context ('read the live price of products a network showed you, before your person agrees') and differentiate the two filters. But there is no guidance on when to use this tool versus check_availability or get_item_status, and the q parameter's purpose is left entirely implicit.

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

list_servicesServicesC
Read-onlyIdempotent
Inspect

Bookable services with duration and price. A price per person (price.per = person) is for each person in the booking: send partySize, and the total is the price times it.

NameRequiredDescriptionDefault
limitNo
cursorNo

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, lowering the burden on the description. The description adds useful pricing semantics (price.per=person and total = price times partySize), which is context beyond annotations. However, it does not clarify pagination behavior or that the response is a list with a cursor, and the 'send partySize' wording could be mistaken as a parameter of this endpoint.

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

Conciseness4/5

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

The description is short and front-loads the core meaning: bookable services with duration and price. The second sentence adds a specific pricing nuance, which is useful but not essential for invoking a list endpoint, so it slightly distracts. Overall, there is no filler.

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

Completeness3/5

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

Without an output schema, the description partially explains the returned data (duration, price) and price semantics, but it does not describe the pagination shape or how cursor works. For a simple read-only list endpoint, this is adequate but has clear gaps.

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

Parameters1/5

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

Schema description coverage is 0%, so the description must compensate for the undocumented parameters. It does not explain limit or cursor at all, and the only parameter-like detail mentioned, partySize, is not part of this tool's input schema. Thus the description adds no useful meaning for the actual parameters an agent must use.

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

Purpose4/5

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

The description identifies the resource as 'bookable services' and notes their key attributes (duration, price), so an agent can infer this is a service catalog listing. It does not explicitly state the 'list' action, but the tool name and title make that reasonably clear. It does not differentiate from siblings like list_products or check_availability.

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

Usage Guidelines2/5

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

There is no guidance about when to use this tool instead of alternatives such as check_availability or list_products. The price-per-person note hints at downstream booking behavior but provides no exclusion criteria or context for selecting this endpoint.

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

make_offerSuggest a changeA
Idempotent
Inspect

Answer what the business proposed with only what your person would change: another start_time (a booking: one of the free times check_availability lists; a quote request: the time it is for), other quantities for the lines of changes it suggested to an order (by index in offer.terms.lines; 0 drops one), another delivery_when, or how many (quantity) for a quote request. It goes back to the business as their request. On a confirmed booking or an accepted order it asks for a change to what was agreed (lines by index in the order's orderedItem), which stands until the business says yes. A price of their own is their answer only where get_business_profile says price_negotiable: total_price for a time it proposed (start_time optional), unit_price on lines of changes to an order; it goes back to the business, which takes it or answers. Otherwise — a price where the business sets its prices, on a quote, on something it does not haggle, or asked too often — it goes to a person there as their message, as do a note alone and a suggestion after a few rounds (passed_on): never refused, and what the business proposed, or what was agreed, still stands.

NameRequiredDescriptionDefault
keyNoThe person's key (sdkey1_…), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes — keep the pass and send it next time instead. Never stored.
noteNoAnything your person wants the business to know.
passNoThe person's passes (sdpass1_…), space-separated, at most 8: presented to the network that issued each, so the business recognises the customer. Or send them in the Sdi-Pass header. Never stored.
termsYesOnly what your person would change.
item_idYes
offer_idNoThe offer you answer: offer.id from get_item_status. If the business has replaced it since, nothing is done (409 offer_changed, with the current one).
reason_codeNoWhy: price_sensitivity, timing_deferred, quantity, delivery, returns_policy or other.
access_tokenNoCapability secret returned when the item was created without an account.
idempotency_keyNoSame key + same request = same answer. Required for agents. Make it a fresh random UUID per request: a retry of a create with a random key gets its access token again.

TDQS

A3.8/5.0
Behavior5/5

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

Beyond the annotations (readOnly=false, idempotent=true, destructive=false), the description discloses substantial behavior: changes go back to the business as their request, price negotiation only applies where get_business_profile says price_negotiable, otherwise the input routes as a person's message, is never refused, passed_on after a few rounds, and what was proposed or agreed still stands.

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

Conciseness2/5

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

The description is a single dense paragraph with em dashes and nested conditionals that is difficult to parse. Most clauses carry relevant information, but the structure is not cleanly front-loaded and could be tightened substantially.

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

Completeness4/5

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

For a complex 9-parameter negotiation tool with no output schema, the description covers negotiation paths, fallback-to-message behavior, and outcome persistence ('what the business proposed, or what was agreed, still stands'). The schema handles identity, pass, and idempotency details; exact response and error shapes are not described but are less critical here.

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

Parameters4/5

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

With 89% schema description coverage, the baseline is 3, but the description adds scenario-specific meaning: start_time is a free check_availability slot for bookings versus the requested time for quotes; lines index into offer.terms.lines for order-change offers but the order's orderedItem on confirmed/accepted items; total_price and unit_price apply only where the business profile says price_negotiable.

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

Purpose4/5

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

The opening phrase 'Answer what the business proposed with only what your person would change' names a counter-offer action, and subsequent clauses enumerate start_time, lines, delivery_when, quantity, and price changes. It distinguishes offer responses from changes on confirmed bookings or accepted orders, though the run-on phrasing prevents a crisp verb+resource statement.

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

Usage Guidelines3/5

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

It establishes the context of responding to a business proposal with changes and details what conditions route a price into negotiation versus a message. However, it never explicitly contrasts make_offer with accept_offer or decline_offer, nor states when not to use this tool.

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

provide_detailsSend the detailsA
Idempotent
Inspect

Answer what the business asked about an item (get_item_status says it needs a detail). The item moves on; on any other item your details are kept as a message for the business.

NameRequiredDescriptionDefault
keyNoThe person's key (sdkey1_…), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes — keep the pass and send it next time instead. Never stored.
passNoThe person's passes (sdpass1_…), space-separated, at most 8: presented to the network that issued each, so the business recognises the customer. Or send them in the Sdi-Pass header. Never stored.
detailsYesThe answer to what the business asked.
item_idYes
access_tokenNoCapability secret returned when the item was created without an account.
idempotency_keyNoSame key + same request = same answer. Required for agents. Make it a fresh random UUID per request: a retry of a create with a random key gets its access token again.

TDQS

A3.8/5.0
Behavior4/5

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

Beyond the annotations, the description discloses that the item moves on and that details on other items are kept as a message for the business. These are meaningful behavioral side effects, though 'the item moves on' remains vague about the resulting state.

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

Conciseness4/5

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

The description is short and front-loads the main purpose and trigger. The second sentence is somewhat ambiguous but still compact and relevant.

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

Completeness3/5

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

It explains the triggering situation and main side effect, and annotations cover idempotency and safety. However, with no output schema, the description does not explain what the caller gets back or what 'the item moves on' means for subsequent calls.

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

Parameters3/5

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

Schema description coverage is high at 83%, so the schema already explains most parameters, including key, pass, access_token, and idempotency_key. The description only implicitly reinforces the 'details' parameter as the answer to the business question and adds no further parameter semantics.

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

Purpose4/5

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

The description states a specific action: answering what the business asked about an item, and explicitly ties the trigger to get_item_status needing a detail. It does not clearly differentiate from the sibling send_message, especially since it says details on other items are kept as a message.

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

Usage Guidelines4/5

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

It gives a clear trigger: use when get_item_status says a detail is needed. It also describes what happens if invoked on any other item, though it does not explicitly name send_message as the alternative for generic messaging.

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

request_quoteRequest a quoteC
Idempotent
Inspect

Ask for a price on something custom. Creates a quote_request item.

NameRequiredDescriptionDefault
keyNoThe person's key (sdkey1_…), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes — keep the pass and send it next time instead. Never stored.
passNoThe person's passes (sdpass1_…), space-separated, at most 8: presented to the network that issued each, so the business recognises the customer. Or send them in the Sdi-Pass header. Never stored.
contactNo
messageNo
payloadYes
attachmentsNoPhotos or plans of the job: JPEG, PNG, WebP or PDF, at most six of 10 MB each. Inline up to 4 MB each (8 MB a call), else by https address or upload_id. HEIC photos: send them as JPEG. Images are cleaned of where they were taken; a PDF is kept as sent.
idempotency_keyNoSame key + same request = same answer. Required for agents. Make it a fresh random UUID per request: a retry of a create with a random key gets its access token again.

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description adds only 'Creates a quote_request item', which is nearly tautological and provides no extra behavioral context (e.g., side effects, notifications).

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

Conciseness4/5

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

Two short sentences with no wasted words and the key action front-loaded. However, it is arguably under-specified for a tool with seven parameters and nested structures.

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

Completeness2/5

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

For a complex mutation tool with nested objects and no output schema, the description is far too sparse. It omits essential context such as the payload structure, budget vs. budgetMax, urgency, and attachment handling.

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

Parameters2/5

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

Schema description coverage is 57%, so the description carries some burden. It mentions no parameters, leaving the agent to rely entirely on the schema for semantics—especially for the complex nested 'payload' object.

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

Purpose4/5

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

The description states a specific verb ('Ask for a price') and resource ('something custom'), and clarifies that it creates a 'quote_request item'. It does not explicitly differentiate from siblings like make_offer or create_order, but the action is unambiguous.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives such as make_offer or create_order. The implied usage ('for something custom') is vague and lacks explicit context or exclusions.

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

request_returnSend goods backA
Idempotent
Inspect

Once an order's goods reached your person: ask to send them back. reason faulty, not_as_described or wrong_item (the legal guarantee: it costs them nothing), or changed_mind (a withdrawal while the period runs, agreed at once; after it, a return the business answers under its own policy). lines: which, by index in orderedItem, and how many; all when left out. The return comes back as linked; get_item_status lists it under refunds.

NameRequiredDescriptionDefault
keyNoThe person's key (sdkey1_…), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes — keep the pass and send it next time instead. Never stored.
noteNo
passNoThe person's passes (sdpass1_…), space-separated, at most 8: presented to the network that issued each, so the business recognises the customer. Or send them in the Sdi-Pass header. Never stored.
linesNoWhich lines of the order (by index in orderedItem), and how many of each; all of them when left out.
wantsNoWhat your person would like: a refund, an exchange, or credit.
reasonYesWhy: changed_mind, faulty, wrong_item, not_as_described or other.
item_idYes
access_tokenNoCapability secret returned when the item was created without an account.
idempotency_keyNoSame key + same request = same answer. Required for agents. Make it a fresh random UUID per request: a retry of a create with a random key gets its access token again.

TDQS

A4.4/5.0
Behavior4/5

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

Beyond the annotations (which already say idempotent, non-destructive, mutating), the description explains the consequence of each reason: faulty/not_as_described/wrong_item fall under a legal guarantee at no cost to the customer, while changed_mind is a withdrawal within the period or a business-policy return after it. It also states the return is created as a linked object visible under refunds in get_item_status, filling in for the missing output schema.

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

Conciseness5/5

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

Front-loads the precondition, then reason semantics, then lines, then outcome; each clause carries information and there is no redundancy. The telegraphic style is dense but readable.

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

Completeness4/5

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

For a 9-parameter mutation with no output schema, the description covers trigger, reason consequences, line selection, and the observable result (a linked return listed under refunds). It omits what happens next in the lifecycle (approval, who accepts) but is sufficient to invoke correctly.

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

Parameters4/5

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

Schema coverage is 78% and already documents key, pass, idempotency_key, and lines. The description adds real meaning for reason by explaining the legal and cost implications of each enum value, and clarifies lines semantics (indices into orderedItem, omitted means all), which is more than a restatement.

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

Purpose5/5

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

States a specific verb (ask to send goods back) and resource (goods from an order), with a clear precondition: it applies once the goods reached the person. An agent can distinguish it from cancel_item or withdraw_from_contract by that precondition alone.

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

Usage Guidelines4/5

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

Gives a concrete activation condition ('once an order's goods reached your person') and explains which reason values are available and their legal consequences, which guides selection. It does not explicitly exclude or name alternatives for cases like unshipped orders, leaving a small gap.

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

send_messageSend a messageC
Idempotent
Inspect

Start a conversation, or reply on an item you own.

NameRequiredDescriptionDefault
keyNoThe person's key (sdkey1_…), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes — keep the pass and send it next time instead. Never stored.
bodyYes
passNoThe person's passes (sdpass1_…), space-separated, at most 8: presented to the network that issued each, so the business recognises the customer. Or send them in the Sdi-Pass header. Never stored.
contactNo
item_idNoReply on an existing item; omit to start a new conversation.
subjectNo
message_idNo
access_tokenNoCapability secret returned when the item was created without an account.
idempotency_keyNoSame key + same request = same answer. Required for agents. Make it a fresh random UUID per request: a retry of a create with a random key gets its access token again.

TDQS

C2.6/5.0
Behavior2/5

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

Annotations already declare non-read-only, idempotent, non-destructive; the description adds only the ownership constraint "an item you own." It is silent on the fact that messages are dispatched to an external issuing network via passes, on the required idempotency key for agents, and on whether the send is reversible or delivered asynchronously.

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

Conciseness3/5

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

A single nine-word sentence with no filler, but the brevity crosses into under-specification rather than efficiency. The new-vs-reply distinction is at least front-loaded.

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

Completeness2/5

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

This is a 9-parameter mutation tool with a nested contact object and no output schema, so the description carries a lot of explanatory burden. Key questions an agent needs answered — how the recipient is identified, what the access_token grants, what a successful send returns — are left entirely to the schema.

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

Parameters2/5

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

Schema coverage is 56% and the description contributes nothing to close that gap. The rich schema notes on key, pass, item_id, access_token and idempotency_key do the work, while undocumented parameters like body, subject, message_id and the nested contact object get no help from the description.

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

Purpose3/5

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

"Start a conversation, or reply on an item you own" conveys two modes of a send operation, but never states plainly that it sends a message, to whom, or over what channel. No sibling tool overlaps in function, so differentiation is not an issue, but the purpose remains only loosely specified.

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

Usage Guidelines3/5

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

The new-vs-reply branching is implied (start a conversation vs reply on an item), which is usable guidance. However there are no prerequisites, no mention of when a pass/key/contact is required versus an access_token, and no exclusions or alternatives.

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

suggest_timeAsk for another timeA
Idempotent
Inspect

Instead of the time the business proposed, ask for another: start_time must be one of the free times check_availability lists (the end follows the service's length). The business confirms it or proposes again. On a confirmed booking it asks the business to move it (the end keeps the booking's length), and the booking stays as agreed until the business says yes. After a few rounds, or past the changes a booking may have, a person there answers it instead (passed_on).

NameRequiredDescriptionDefault
keyNoThe person's key (sdkey1_…), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes — keep the pass and send it next time instead. Never stored.
noteNo
passNoThe person's passes (sdpass1_…), space-separated, at most 8: presented to the network that issued each, so the business recognises the customer. Or send them in the Sdi-Pass header. Never stored.
item_idYes
start_timeYesThe start your person would like instead: one of the free times check_availability lists. The end follows the service's length.
access_tokenNoCapability secret returned when the item was created without an account.
idempotency_keyNoSame key + same request = same answer. Required for agents. Make it a fresh random UUID per request: a retry of a create with a random key gets its access token again.

TDQS

A4.3/5.0
Behavior5/5

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

Beyond the annotations, the description discloses the full interaction contract: the business confirms or counter-proposes, a confirmed booking stays as agreed until the business accepts the move, and repeated rounds or exceeded change limits hand the request to a human, returned as passed_on. That is exactly the kind of outcome and escalation context an agent cannot get from readOnlyHint/idempotentHint alone.

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

Conciseness5/5

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

Four tight sentences with the counter-proposal condition front-loaded and no filler. The middle sentence is dense but every clause carries behavioral information (confirmation loop, move semantics, escalation), so nothing could be cut without losing meaning.

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

Completeness4/5

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

With 7 parameters, no output schema, and a mutation-style flow, the description covers the outcome states and even names the passed_on escalation field. What it leaves implicit is the identity/credential parameters (key/pass/access_token) and idempotency expectations, though the schema does document those.

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

Parameters4/5

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

Schema coverage is 71%, and the description adds real meaning for the critical parameter: start_time must come from check_availability output and the end time is derived from service length, not supplied. It also explains that on a confirmed booking the end keeps the existing booking's length. item_id and note carry no added explanation, which keeps it below a 5.

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

Purpose4/5

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

The opening clause gives a specific verb and object: propose a different time than the one the business proposed, with start_time constrained to slots returned by check_availability. That distinguishes it from check_availability itself, but the relationship to the sibling make_offer (also a proposal-style tool) is never clarified, leaving one plausible source of confusion unresolved.

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

Usage Guidelines4/5

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

It states a concrete precondition for use — start_time must be one of the free times check_availability lists — which effectively routes the agent through that sibling first. It also separates the two operating modes (pending proposal vs. already-confirmed booking) and notes escalation after several rounds. It stops short of any explicit 'do not use this when…' exclusion.

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

verify_customerProve a known customerAInspect

When a result says identity.recognised is weak, the person gave the email of a customer the business knows. Call this with item_id and access_token to email them six digits; ask the person for the code and call it again with code. Then the business recognises them.

NameRequiredDescriptionDefault
codeNoThe six digits the customer received. Omit to have them sent.
item_idYes
access_tokenNoCapability secret returned when the item was created without an account.

TDQS

A4.2/5.0
Behavior4/5

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

The description discloses the key side effect of the first call (emailing six digits) and the second-call verification behavior, going beyond the annotations' simple readOnly/idempotent/destructive flags. It does not cover code expiry or failure modes, but the important behavioral traits are present.

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

Conciseness4/5

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

The description is compact and front-loaded with the trigger condition, then walks through the two-step flow without wasted words. It could be slightly cleaner, but every sentence contributes to correct usage.

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

Completeness3/5

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

The description covers the essential two-phase flow and parameter roles, but there is ambiguity around access_token: the description implies it is needed for the first call while the schema marks only item_id as required. It also omits return behavior and error handling, which matters for a multi-step verification tool with no output schema.

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

Parameters4/5

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

The description maps item_id to the target item, access_token to the first call that sends the code, and code to the second verification call. This adds meaning to item_id, which lacks a schema description, and clarifies how the code and access_token relate to the workflow.

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

Purpose5/5

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

The description clearly states the tool's purpose: verify a known customer by emailing a six-digit code and then confirming the code. It gives a specific trigger ('identity.recognised is weak') and explains the two-phase flow, which distinguishes it from siblings like acknowledge_receipt or send_message.

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

Usage Guidelines4/5

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

The description gives an explicit when-to-use condition: when identity.recognised is weak and the person supplied an email of a known customer. It also spells out the exact call sequence, including the code round-trip, but it does not mention alternatives or exclusions.

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

withdraw_from_contractWithdraw from contract hereA
DestructiveIdempotent
Inspect

Your person withdraws from their booking (one they paid for) or order, within the period the business states (withdrawal on get_item_status). Two steps: without confirm_withdrawal nothing is sent and you get the statement to show them (confirm.statement); send confirm_withdrawal: true on their yes. Before the goods went out the order ends and what was paid is refunded; once they reached your person, the goods come back (lines: only some of them) and are refunded. The business emails a copy. Never refused: past the period, or for something that cannot be returned, it goes to a person there instead (passed_on), or becomes a return under the business's own policy.

NameRequiredDescriptionDefault
keyNoThe person's key (sdkey1_…), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes — keep the pass and send it next time instead. Never stored.
noteNoAnything your person wants to tell the business.
passNoThe person's passes (sdpass1_…), space-separated, at most 8: presented to the network that issued each, so the business recognises the customer. Or send them in the Sdi-Pass header. Never stored.
linesNoOnce the goods reached them: only these lines (by index in the order's orderedItem), and how many of each.
item_idYes
access_tokenNoCapability secret returned when the item was created without an account.
idempotency_keyNoSame key + same request = same answer. Required for agents. Make it a fresh random UUID per request: a retry of a create with a random key gets its access token again.
confirm_withdrawalNotrue once your person confirmed the statement you were shown. Left out, nothing is sent: you get the statement.

TDQS

A4.4/5.0
Behavior5/5

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

The description adds substantial behavior beyond the annotations: no request is sent without confirm_withdrawal, the first call returns a statement to show the person, refunds happen before shipment, goods must come back after receipt, and partial lines are supported. This matches the destructive and idempotent hints without contradicting them.

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

Conciseness4/5

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

The description is front-loaded with the core action and two-step flow, and every sentence carries operational meaning. It is somewhat dense and can be hard to parse in one pass, but it is appropriately sized for a destructive multi-step workflow.

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

Completeness4/5

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

For a complex destructive tool with no output schema, it covers the critical flow, confirmation requirement, refund behavior, partial-line handling, and fallback outcomes. It does not fully document the response shape, but it gives enough context for an agent to call the tool correctly.

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

Parameters4/5

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

Schema description coverage is high at 88%, so most parameter meaning is already documented. The description still adds useful semantics for confirm_withdrawal and lines, explaining the confirmation gate and that line quantities apply only after goods reached the person.

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

Purpose4/5

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

The description states a specific action and resource: a person withdraws from a paid booking or order. It distinguishes the process from a business-policy return by mentioning that some cases become a return or are passed on, though it does not name sibling tools like request_return explicitly.

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

Usage Guidelines5/5

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

It clearly explains when to use the tool: within the business-stated withdrawal period, after checking get_item_status, and with a two-step confirmation flow. It also states when-not cases past the period or non-returnable items and describes the alternative outcomes passed_on or business-policy return.

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

Tool Schema Changelog

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

  1. 13 tool updates
    • Changedaccept_offer1 field changed
      • changedInput schema / properties / idempotency_key / description
        Previous value: -"Same key + same request = same answer. Required for agents."New value: +"Same key + same request = same answer. Required for agents. Make it a fresh random UUID per request: a retry of a create with a random key gets its access token again."
    • Changedcancel_item1 field changed
      • changedInput schema / properties / idempotency_key / description
        Previous value: -"Same key + same request = same answer. Required for agents."New value: +"Same key + same request = same answer. Required for agents. Make it a fresh random UUID per request: a retry of a create with a random key gets its access token again."
    • Changedcreate_booking5 fields changed
      • changedInput schema / properties / idempotency_key / description
        Previous value: -"Same key + same request = same answer. Required for agents."New value: +"Same key + same request = same answer. Required for agents. Make it a fresh random UUID per request: a retry of a create with a random key gets its access token again."
      • addedInput schema / properties / payload / properties / endTime / description
        Added value: +"When it ends, ISO 8601. Left out, it is startTime plus the service's length (durationMin)."
      • addedInput schema / properties / payload / properties / reservationFor / properties / name / description
        Added value: +"The service's name. Left out, it is the service's own."
      • changedInput schema / properties / payload / properties / reservationFor / required
        Previous value: -[
        -  "serviceId",
        -  "name"
        -]New value: +[
        +  "serviceId"
        +]
      • changedInput schema / properties / payload / required
        Previous value: -[
        -  "reservationFor",
        -  "startTime",
        -  "endTime"
        -]New value: +[
        +  "reservationFor",
        +  "startTime"
        +]
    • Changedcreate_order1 field changed
      • changedInput schema / properties / idempotency_key / description
        Previous value: -"Same key + same request = same answer. Required for agents."New value: +"Same key + same request = same answer. Required for agents. Make it a fresh random UUID per request: a retry of a create with a random key gets its access token again."
    • Changeddecline_offer1 field changed
      • changedInput schema / properties / idempotency_key / description
        Previous value: -"Same key + same request = same answer. Required for agents."New value: +"Same key + same request = same answer. Required for agents. Make it a fresh random UUID per request: a retry of a create with a random key gets its access token again."
    • Changedget_item_status1 field changed
      • addedInput schema / properties / item_id / description
        Added value: +"The item's id, from the answer that created it (view.item.id): not its six-character reference."
    • Changedmake_offer1 field changed
      • changedInput schema / properties / idempotency_key / description
        Previous value: -"Same key + same request = same answer. Required for agents."New value: +"Same key + same request = same answer. Required for agents. Make it a fresh random UUID per request: a retry of a create with a random key gets its access token again."
    • Changedprovide_details1 field changed
      • changedInput schema / properties / idempotency_key / description
        Previous value: -"Same key + same request = same answer. Required for agents."New value: +"Same key + same request = same answer. Required for agents. Make it a fresh random UUID per request: a retry of a create with a random key gets its access token again."
    • Changedrequest_quote1 field changed
      • changedInput schema / properties / idempotency_key / description
        Previous value: -"Same key + same request = same answer. Required for agents."New value: +"Same key + same request = same answer. Required for agents. Make it a fresh random UUID per request: a retry of a create with a random key gets its access token again."
    • Changedrequest_return1 field changed
      • changedInput schema / properties / idempotency_key / description
        Previous value: -"Same key + same request = same answer. Required for agents."New value: +"Same key + same request = same answer. Required for agents. Make it a fresh random UUID per request: a retry of a create with a random key gets its access token again."
    • Changedsend_message1 field changed
      • changedInput schema / properties / idempotency_key / description
        Previous value: -"Same key + same request = same answer. Required for agents."New value: +"Same key + same request = same answer. Required for agents. Make it a fresh random UUID per request: a retry of a create with a random key gets its access token again."
    • Changedsuggest_time1 field changed
      • changedInput schema / properties / idempotency_key / description
        Previous value: -"Same key + same request = same answer. Required for agents."New value: +"Same key + same request = same answer. Required for agents. Make it a fresh random UUID per request: a retry of a create with a random key gets its access token again."
    • Changedwithdraw_from_contract1 field changed
      • changedInput schema / properties / idempotency_key / description
        Previous value: -"Same key + same request = same answer. Required for agents."New value: +"Same key + same request = same answer. Required for agents. Make it a fresh random UUID per request: a retry of a create with a random key gets its access token again."
  2. 4 tool updates
    • Changedcancel_item1 field changed
      • addedInput schema / properties / fee_sha
        Added value: +{
        +  "description": "A confirmed stay: the fingerprint of the cancellation fee your person saw (details.fee_sha of the 409 confirm_terms a cancel without it gets).",
        +  "pattern": "^[A-Za-z0-9_-]{43}$",
        +  "type": "string"
        +}
    • Changedcreate_booking4 fields changed
      • addedInput schema / properties / attachments
        Added value: +{
        +  "description": "Photos or plans of the job: JPEG, PNG, WebP or PDF, at most six of 10 MB each. Inline up to 4 MB each (8 MB a call), else by https address or upload_id. HEIC photos: send them as JPEG. Images are cleaned of where they were taken; a PDF is kept as sent.",
        +  "items": {
        +    "anyOf": [
        +      {
        +        "properties": {
        +          "upload_id": {
        +            "description": "What POST /v1/uploads answered, within its hour.",
        +            "pattern": "^upl_[A-Za-z0-9_-]{16,48}$",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "upload_id"
        +        ],
        +        "type": "object"
        +      },
        +      {
        +        "properties": {
        +          "data_base64": {
        +            "description": "The file's bytes in base64: JPEG, PNG, WebP or PDF, up to 4 MB (8 MB in one call).",
        +            "maxLength": 5592412,
        +            "minLength": 4,
        +            "type": "string"
        +          },
        +          "name": {
        +            "description": "The file's name, for the business to recognise it.",
        +            "maxLength": 200,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "data_base64"
        +        ],
        +        "type": "object"
        +      },
        +      {
        +        "properties": {
        +          "name": {
        +            "maxLength": 200,
        +            "type": "string"
        +          },
        +          "url": {
        +            "description": "An https address the file can be fetched from, up to 10 MB.",
        +            "format": "uri",
        +            "maxLength": 2048,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "url"
        +        ],
        +        "type": "object"
        +      }
        +    ]
        +  },
        +  "maxItems": 6,
        +  "type": "array"
        +}
      • addedInput schema / properties / payload / properties / deposit
        Added value: +{
        +  "properties": {
        +    "amount": {
        +      "properties": {
        +        "currency": {
        +          "maxLength": 3,
        +          "minLength": 3,
        +          "type": "string"
        +        },
        +        "value": {
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "value",
        +        "currency"
        +      ],
        +      "type": "object"
        +    },
        +    "dueBy": {
        +      "format": "date-time",
        +      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
        +      "type": "string"
        +    },
        +    "refundable": {
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "amount",
        +    "refundable"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / payload / properties / policy
        Added value: +{
        +  "properties": {
        +    "after": {
        +      "description": "The fee after the last step, until the start.",
        +      "properties": {
        +        "currency": {
        +          "maxLength": 3,
        +          "minLength": 3,
        +          "type": "string"
        +        },
        +        "value": {
        +          "description": "Minor units of the currency's own ISO 4217 exponent (minorUnits): 4500 is CA$45.00 or ₹45.00, ¥4,500 in JPY, 4.500 in KWD.",
        +          "maximum": 9007199254740991,
        +          "minimum": -9007199254740991,
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "value",
        +        "currency"
        +      ],
        +      "type": "object"
        +    },
        +    "noShow": {
        +      "properties": {
        +        "currency": {
        +          "maxLength": 3,
        +          "minLength": 3,
        +          "type": "string"
        +        },
        +        "value": {
        +          "description": "Minor units of the currency's own ISO 4217 exponent (minorUnits): 4500 is CA$45.00 or ₹45.00, ¥4,500 in JPY, 4.500 in KWD.",
        +          "maximum": 9007199254740991,
        +          "minimum": -9007199254740991,
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "value",
        +        "currency"
        +      ],
        +      "type": "object"
        +    },
        +    "steps": {
        +      "description": "Cancelling before `until` costs `fee`; the steps are in order.",
        +      "items": {
        +        "properties": {
        +          "fee": {
        +            "properties": {
        +              "currency": {
        +                "maxLength": 3,
        +                "minLength": 3,
        +                "type": "string"
        +              },
        +              "value": {
        +                "description": "Minor units of the currency's own ISO 4217 exponent (minorUnits): 4500 is CA$45.00 or ₹45.00, ¥4,500 in JPY, 4.500 in KWD.",
        +                "maximum": 9007199254740991,
        +                "minimum": -9007199254740991,
        +                "type": "integer"
        +              }
        +            },
        +            "required": [
        +              "value",
        +              "currency"
        +            ],
        +            "type": "object"
        +          },
        +          "until": {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "until",
        +          "fee"
        +        ],
        +        "type": "object"
        +      },
        +      "maxItems": 6,
        +      "type": "array"
        +    },
        +    "zone": {
        +      "description": "The IANA zone the steps were dated in: the business's.",
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "steps",
        +    "after",
        +    "noShow",
        +    "zone"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / visit_for
        Added value: +{
        +  "description": "Book this as the site visit for a request for a price you made: its item_id (and access_token).",
        +  "properties": {
        +    "access_token": {
        +      "description": "Capability secret returned when the item was created without an account.",
        +      "maxLength": 200,
        +      "minLength": 16,
        +      "type": "string"
        +    },
        +    "item_id": {
        +      "maxLength": 64,
        +      "minLength": 1,
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "item_id"
        +  ],
        +  "type": "object"
        +}
    • Changedcreate_order8 fields changed
      • addedInput schema / properties / attachments
        Added value: +{
        +  "description": "Photos or plans of the job: JPEG, PNG, WebP or PDF, at most six of 10 MB each. Inline up to 4 MB each (8 MB a call), else by https address or upload_id. HEIC photos: send them as JPEG. Images are cleaned of where they were taken; a PDF is kept as sent.",
        +  "items": {
        +    "anyOf": [
        +      {
        +        "properties": {
        +          "upload_id": {
        +            "description": "What POST /v1/uploads answered, within its hour.",
        +            "pattern": "^upl_[A-Za-z0-9_-]{16,48}$",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "upload_id"
        +        ],
        +        "type": "object"
        +      },
        +      {
        +        "properties": {
        +          "data_base64": {
        +            "description": "The file's bytes in base64: JPEG, PNG, WebP or PDF, up to 4 MB (8 MB in one call).",
        +            "maxLength": 5592412,
        +            "minLength": 4,
        +            "type": "string"
        +          },
        +          "name": {
        +            "description": "The file's name, for the business to recognise it.",
        +            "maxLength": 200,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "data_base64"
        +        ],
        +        "type": "object"
        +      },
        +      {
        +        "properties": {
        +          "name": {
        +            "maxLength": 200,
        +            "type": "string"
        +          },
        +          "url": {
        +            "description": "An https address the file can be fetched from, up to 10 MB.",
        +            "format": "uri",
        +            "maxLength": 2048,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "url"
        +        ],
        +        "type": "object"
        +      }
        +    ]
        +  },
        +  "maxItems": 6,
        +  "type": "array"
        +}
      • addedInput schema / properties / payload / properties / fulfil
        Added value: +{
        +  "properties": {
        +    "etaMin": {
        +      "maximum": 1440,
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    "fee": {
        +      "properties": {
        +        "currency": {
        +          "maxLength": 3,
        +          "minLength": 3,
        +          "type": "string"
        +        },
        +        "value": {
        +          "description": "Minor units of the currency's own ISO 4217 exponent (minorUnits): 4500 is CA$45.00 or ₹45.00, ¥4,500 in JPY, 4.500 in KWD.",
        +          "maximum": 9007199254740991,
        +          "minimum": -9007199254740991,
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "value",
        +        "currency"
        +      ],
        +      "type": "object"
        +    },
        +    "geo": {
        +      "description": "The delivery address's point, when you have it: a ring zone is checked against it.",
        +      "properties": {
        +        "latitude": {
        +          "maximum": 90,
        +          "minimum": -90,
        +          "type": "number"
        +        },
        +        "longitude": {
        +          "maximum": 180,
        +          "minimum": -180,
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "latitude",
        +        "longitude"
        +      ],
        +      "type": "object"
        +    },
        +    "method": {
        +      "enum": [
        +        "pickup",
        +        "delivery",
        +        "dine_in"
        +      ],
        +      "type": "string"
        +    },
        +    "slot": {
        +      "properties": {
        +        "end": {
        +          "format": "date-time",
        +          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
        +          "type": "string"
        +        },
        +        "start": {
        +          "format": "date-time",
        +          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "start"
        +      ],
        +      "type": "object"
        +    },
        +    "zone": {
        +      "properties": {
        +        "name": {
        +          "maxLength": 60,
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "name"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "method"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / payload / properties / kitchen
        Added value: +{
        +  "properties": {
        +    "hold": {
        +      "items": {
        +        "enum": [
        +          "allergens_unconfirmed",
        +          "over_cap",
        +          "made_to_order",
        +          "owner_accepts"
        +        ],
        +        "type": "string"
        +      },
        +      "maxItems": 4,
        +      "type": "array"
        +    },
        +    "instant": {
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "instant",
        +    "hold"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / payload / properties / orderedItem / items / properties / brief
        Added value: +{
        +  "properties": {
        +    "flavour": {
        +      "maxLength": 80,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "message": {
        +      "description": "The writing on it, within the length the business allows.",
        +      "maxLength": 200,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "servings": {
        +      "maximum": 500,
        +      "minimum": 1,
        +      "type": "integer"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / payload / properties / orderedItem / items / properties / note
        Added value: +{
        +  "maxLength": 140,
        +  "type": "string"
        +}
      • addedInput schema / properties / payload / properties / orderedItem / items / properties / options
        Added value: +{
        +  "items": {
        +    "properties": {
        +      "choiceId": {
        +        "maxLength": 64,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "groupId": {
        +        "maxLength": 64,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "name": {
        +        "maxLength": 120,
        +        "type": "string"
        +      },
        +      "portion": {
        +        "description": "On an item made in halves: whole, left or right.",
        +        "enum": [
        +          "whole",
        +          "left",
        +          "right"
        +        ],
        +        "type": "string"
        +      },
        +      "priceDelta": {
        +        "properties": {
        +          "currency": {
        +            "maxLength": 3,
        +            "minLength": 3,
        +            "type": "string"
        +          },
        +          "value": {
        +            "description": "Minor units of the currency's own ISO 4217 exponent (minorUnits): 4500 is CA$45.00 or ₹45.00, ¥4,500 in JPY, 4.500 in KWD.",
        +            "maximum": 9007199254740991,
        +            "minimum": -9007199254740991,
        +            "type": "integer"
        +          }
        +        },
        +        "required": [
        +          "value",
        +          "currency"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "groupId",
        +      "choiceId"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 40,
        +  "type": "array"
        +}
      • addedInput schema / properties / payload / properties / progress
        Added value: +{
        +  "properties": {
        +    "at": {
        +      "format": "date-time",
        +      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
        +      "type": "string"
        +    },
        +    "etaAt": {
        +      "description": "When it expects it ready, or at the door.",
        +      "format": "date-time",
        +      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
        +      "type": "string"
        +    },
        +    "stage": {
        +      "enum": [
        +        "preparing",
        +        "ready",
        +        "out_for_delivery"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "stage",
        +    "at"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / payload / properties / tip
        Added value: +{
        +  "properties": {
        +    "amount": {
        +      "properties": {
        +        "currency": {
        +          "maxLength": 3,
        +          "minLength": 3,
        +          "type": "string"
        +        },
        +        "value": {
        +          "description": "Minor units of the currency's own ISO 4217 exponent (minorUnits): 4500 is CA$45.00 or ₹45.00, ¥4,500 in JPY, 4.500 in KWD.",
        +          "maximum": 9007199254740991,
        +          "minimum": -9007199254740991,
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "value",
        +        "currency"
        +      ],
        +      "type": "object"
        +    },
        +    "percent": {
        +      "maximum": 50,
        +      "minimum": 0,
        +      "type": "integer"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedrequest_quote2 fields changed
      • addedInput schema / properties / attachments
        Added value: +{
        +  "description": "Photos or plans of the job: JPEG, PNG, WebP or PDF, at most six of 10 MB each. Inline up to 4 MB each (8 MB a call), else by https address or upload_id. HEIC photos: send them as JPEG. Images are cleaned of where they were taken; a PDF is kept as sent.",
        +  "items": {
        +    "anyOf": [
        +      {
        +        "properties": {
        +          "upload_id": {
        +            "description": "What POST /v1/uploads answered, within its hour.",
        +            "pattern": "^upl_[A-Za-z0-9_-]{16,48}$",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "upload_id"
        +        ],
        +        "type": "object"
        +      },
        +      {
        +        "properties": {
        +          "data_base64": {
        +            "description": "The file's bytes in base64: JPEG, PNG, WebP or PDF, up to 4 MB (8 MB in one call).",
        +            "maxLength": 5592412,
        +            "minLength": 4,
        +            "type": "string"
        +          },
        +          "name": {
        +            "description": "The file's name, for the business to recognise it.",
        +            "maxLength": 200,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "data_base64"
        +        ],
        +        "type": "object"
        +      },
        +      {
        +        "properties": {
        +          "name": {
        +            "maxLength": 200,
        +            "type": "string"
        +          },
        +          "url": {
        +            "description": "An https address the file can be fetched from, up to 10 MB.",
        +            "format": "uri",
        +            "maxLength": 2048,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "url"
        +        ],
        +        "type": "object"
        +      }
        +    ]
        +  },
        +  "maxItems": 6,
        +  "type": "array"
        +}
      • addedInput schema / properties / payload / properties / job
        Added value: +{
        +  "description": "The job: urgency (emergency, within_24h, this_week, flexible), whether a visit comes first, the site (address, how to find the way, home or business), up to three windows that suit, and budgetMax for a range.",
        +  "properties": {
        +    "budgetMax": {
        +      "properties": {
        +        "currency": {
        +          "maxLength": 3,
        +          "minLength": 3,
        +          "type": "string"
        +        },
        +        "value": {
        +          "description": "Minor units of the currency's own ISO 4217 exponent (minorUnits): 4500 is CA$45.00 or ₹45.00, ¥4,500 in JPY, 4.500 in KWD.",
        +          "maximum": 9007199254740991,
        +          "minimum": -9007199254740991,
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "value",
        +        "currency"
        +      ],
        +      "type": "object"
        +    },
        +    "site": {
        +      "properties": {
        +        "accessNotes": {
        +          "description": "Gate codes are never asked for: only how to find the way.",
        +          "maxLength": 500,
        +          "type": "string"
        +        },
        +        "address": {
        +          "properties": {
        +            "addressCountry": {
        +              "pattern": "^[A-Za-z]{2}$",
        +              "type": "string"
        +            },
        +            "addressLocality": {
        +              "maxLength": 100,
        +              "type": "string"
        +            },
        +            "addressRegion": {
        +              "maxLength": 100,
        +              "type": "string"
        +            },
        +            "postalCode": {
        +              "maxLength": 20,
        +              "type": "string"
        +            },
        +            "streetAddress": {
        +              "maxLength": 200,
        +              "type": "string"
        +            }
        +          },
        +          "type": "object"
        +        },
        +        "geo": {
        +          "description": "The site's point, when you have it: a radius is checked against it.",
        +          "properties": {
        +            "latitude": {
        +              "maximum": 90,
        +              "minimum": -90,
        +              "type": "number"
        +            },
        +            "longitude": {
        +              "maximum": 180,
        +              "minimum": -180,
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "latitude",
        +            "longitude"
        +          ],
        +          "type": "object"
        +        },
        +        "propertyType": {
        +          "enum": [
        +            "home",
        +            "business",
        +            "other"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "urgency": {
        +      "default": "flexible",
        +      "enum": [
        +        "emergency",
        +        "within_24h",
        +        "this_week",
        +        "flexible"
        +      ],
        +      "type": "string"
        +    },
        +    "visit": {
        +      "default": "unsure",
        +      "enum": [
        +        "needed",
        +        "not_needed",
        +        "unsure"
        +      ],
        +      "type": "string"
        +    },
        +    "windows": {
        +      "items": {
        +        "properties": {
        +          "from": {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
        +            "type": "string"
        +          },
        +          "to": {
        +            "format": "date-time",
        +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "from",
        +          "to"
        +        ],
        +        "type": "object"
        +      },
        +      "maxItems": 3,
        +      "minItems": 1,
        +      "type": "array"
        +    }
        +  },
        +  "type": "object"
        +}
  3. 1 tool update
    • Changedlist_products2 fields changed
      • addedInput schema / properties / gtin
        Added value: +{
        +  "description": "Only products with this barcode (GTIN, EAN, UPC or ISBN), in any of its lengths. One that does not read as a barcode is refused.",
        +  "maxLength": 32,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / ids
        Added value: +{
        +  "description": "Only these products, by id (at most 50): read the live price of what a network showed you.",
        +  "items": {
        +    "maxLength": 64,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "maxItems": 50,
        +  "minItems": 1,
        +  "type": "array"
        +}
  4. 7 tool updates
    • Changedaccept_offer1 field changed
      • addedInput schema / properties / offer_id
        Added value: +{
        +  "description": "The offer you answer: offer.id from get_item_status. If the business has replaced it since, nothing is done (409 offer_changed, with the current one).",
        +  "maxLength": 64,
        +  "minLength": 1,
        +  "type": "string"
        +}
    • Changedcreate_booking2 fields changed
      • addedInput schema / properties / payload / properties / personalised
        Added value: +{
        +  "properties": {
        +    "listPrice": {
        +      "properties": {
        +        "currency": {
        +          "maxLength": 3,
        +          "minLength": 3,
        +          "type": "string"
        +        },
        +        "value": {
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "value",
        +        "currency"
        +      ],
        +      "type": "object"
        +    },
        +    "says": {
        +      "maxLength": 200,
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "listPrice"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / terms_sha
        Added value: +{
        +  "description": "The fingerprint of the terms your person confirmed (details.terms_sha of the 409 confirm_terms a priced request without it gets). Nothing is sent to the business without it when the request carries a price.",
        +  "pattern": "^[A-Za-z0-9_-]{43}$",
        +  "type": "string"
        +}
    • Changedcreate_order3 fields changed
      • addedInput schema / properties / payload / properties / orderedItem / items / properties / listPrice
        Added value: +{
        +  "properties": {
        +    "currency": {
        +      "maxLength": 3,
        +      "minLength": 3,
        +      "type": "string"
        +    },
        +    "value": {
        +      "maximum": 9007199254740991,
        +      "minimum": 0,
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "value",
        +    "currency"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / payload / properties / personalised
        Added value: +{
        +  "properties": {
        +    "listPrice": {
        +      "properties": {
        +        "currency": {
        +          "maxLength": 3,
        +          "minLength": 3,
        +          "type": "string"
        +        },
        +        "value": {
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "value",
        +        "currency"
        +      ],
        +      "type": "object"
        +    },
        +    "says": {
        +      "maxLength": 200,
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "listPrice"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / terms_sha
        Added value: +{
        +  "description": "The fingerprint of the terms your person confirmed (details.terms_sha of the 409 confirm_terms a priced request without it gets). Nothing is sent to the business without it when the request carries a price.",
        +  "pattern": "^[A-Za-z0-9_-]{43}$",
        +  "type": "string"
        +}
    • Changeddecline_offer2 fields changed
      • addedInput schema / properties / offer_id
        Added value: +{
        +  "description": "The offer you answer: offer.id from get_item_status. If the business has replaced it since, nothing is done (409 offer_changed, with the current one).",
        +  "maxLength": 64,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / reason_code
        Added value: +{
        +  "description": "Why: price_sensitivity, timing_deferred, quantity, delivery, returns_policy or other.",
        +  "enum": [
        +    "price_sensitivity",
        +    "timing_deferred",
        +    "quantity",
        +    "delivery",
        +    "returns_policy",
        +    "other"
        +  ],
        +  "type": "string"
        +}
    • Addedmake_offer
    • Addedrequest_return
    • Addedwithdraw_from_contract
  5. 4 tool updates
    • Addedaccept_offer
    • Addeddecline_offer
    • Addedprovide_details
    • Addedsuggest_time
  6. 12 tool updates
    • First observedacknowledge_receipt
    • First observedcancel_item
    • First observedcheck_availability
    • First observedcreate_booking
    • First observedcreate_order
    • First observedget_business_profile
    • First observedget_item_status
    • First observedlist_products
    • First observedlist_services
    • First observedrequest_quote
    • First observedsend_message
    • First observedverify_customer

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    MailKite offers email sending and receiving for agents at your domain or free inboxes Create inboxes for your agent Send emails from your agent Receive emails to your webhook Receive emails to your agent
    92
    105 npm
    MIT
  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables AI assistants on different platforms and sessions to exchange persistent messages with each other through simple natural language commands. Supports instance registration, message sending, and inbox checking without any coding.
    -
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI models to interact with messages from various messaging platforms (Mobile, Mail, WhatsApp, LinkedIn, Slack, Twitter, Telegram, Instagram, Messenger) through a standardized interface.
    3
    16
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    WhatsApp, Instagram, Telegram, SMS, Messenger & email in one AI-ready inbox. Manage conversations, send omnichannel messages, run campaigns, sync contacts, and query your knowledge base — 42 tools over a hosted, OAuth-secured MCP server.
    1
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.