Skip to main content
Glama

SzuruSzuru – rezerwacja czyszczenia tapicerki

Server Details

Quote, check slots and book on-site upholstery, carpet and mattress cleaning in Pomorskie, Poland.

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
99.7% over 21 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.6/5.0

Scored across 13 tools

Disambiguation5/5

Each tool maps to a distinct stage of the booking lifecycle, and descriptions explicitly state when not to use overlapping tools (e.g., calculate_quote vs check_availability, prepare_booking vs create_booking). Verification tools are also cleanly separated by purpose (existing bookings vs new booking confirmation).

Naming Consistency5/5

All 13 names follow a consistent snake_case verb_noun pattern (calculate_quote, check_availability, prepare_booking, etc.), with no camelCase or inconsistent verb styles. The convention is predictable and readable throughout.

Tool Count5/5

13 tools is well within the ideal range for a booking service, and each tool earns its place by covering a distinct capability: quoting, availability, service area, service catalog, two-step booking, verification, and management. No obvious redundancy.

Completeness5/5

The surface covers the full lifecycle: service discovery, service details, quote calculation, area check, availability, two-step booking with SMS confirmation, code resend, customer phone verification, booking retrieval, rescheduling, and cancellation. No critical dead ends are apparent for the stated domain.

Available Tools

13 tools
calculate_quoteWycenaA
Read-only
Inspect

PURPOSE: Calculates the price of an order (unit prices, quantity discounts, add-ons, travel fee, minimum order) for a postal code. Returns quote_id (valid 30 minutes). WHEN TO USE: Whenever the customer asks how much a cleaning costs and you know the service(s), quantity and postal code. Also the first step before check_availability. WHEN NOT TO USE: Not for checking dates and never as a booking - it reserves nothing. REQUIRED: postal_code; items[] with service (id from list_upholstery_services) and quantity. Add-ons optional (names from the catalog; close spellings are matched, unknown ones return error unsupported_addon with allowed_addons). If postal code, service or quantity is unknown, ask the customer - do not guess. SIDE EFFECTS: none for the customer (stores a 30-minute quote only). CONSTRAINTS: Report total_from exactly; never estimate or adjust prices. Area not served -> error unsupported_postcode. below_min_order=true -> ask the customer to add a service before booking.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesServices to price
session_idNoOptional. session_id from the previous result, if you have it. The server also recovers the session from quote_id / slot_id / confirmation_id / customer_grant.
postal_codeYesPolish postal code NN-NNN, e.g. 80-180

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNo
errorNoStable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability
itemsNo
messageNo
successYestrue = operation done / data returned; false = see error
currencyNo
quote_idNo
expires_atNo
session_idNo
total_fromNo
delivery_feeNo
missing_fieldsNo
below_min_orderNo
services_subtotalNo

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds substantial behavioral context beyond them: the returned quote_id is valid for 30 minutes, side effects are none for the customer (the quote is stored only), and named error behaviors are documented (unsupported_addon, unsupported_postcode, below_min_order). This gives the agent a complete operational picture.

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 well-structured with front-loaded, capitalized section headings (PURPOSE, WHEN TO USE, WHEN NOT TO USE, REQUIRED, SIDE EFFECTS, CONSTRAINTS), making scanning easy. It is longer than a typical description, but almost every sentence carries operational value; only brief retellings of required parameters overlap with the schema.

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

Completeness5/5

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

For a quote-calculation tool with an output schema and rich annotations, the description covers all decision-critical points: prerequisites, alternatives, error conditions, quote expiry, side effects, and the constraint to report total_from exactly. Nothing an agent needs to call it correctly appears to be missing.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description still adds value: it clarifies that service ids come from list_upholstery_services, that add-ons are optional and matched with close spellings, that unknown add-ons trigger unsupported_addon with allowed_addons, and that the agent should ask the customer rather than guess unknown values. This goes beyond what the schema alone communicates.

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 opens with a precise verb+resource: 'Calculates the price of an order (unit prices, quantity discounts, add-ons, travel fee, minimum order) for a postal code.' It also explicitly distinguishes this tool from siblings by naming check_availability and contrasting it with booking, so an agent can route correctly without schema inspection.

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 provides explicit WHEN TO USE ('Whenever the customer asks how much a cleaning costs...', 'first step before check_availability') and WHEN NOT TO USE ('Not for checking dates and never as a booking - it reserves nothing') sections. This is exactly the when/when-not/alternatives guidance the dimension rewards.

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

cancel_bookingAnuluj rezerwacjęA
DestructiveIdempotent
Inspect

PURPOSE: Cancels the verified customer's existing booking. Irreversible. WHEN TO USE: Only after the customer explicitly confirmed they want to cancel this specific booking (reference and date read back to them). WHEN NOT TO USE: Not to change the date (use reschedule_booking), never on an unclear request. REQUIRED: booking_reference, customer_grant (or a signed-in customer). reason and idempotency_key optional. SIDE EFFECTS: cancels the booking and notifies the customer by SMS/e-mail. Repeating the same call returns the same result.

ParametersJSON Schema
NameRequiredDescriptionDefault
reasonNoOptional short reason given by the customer
session_idNoOptional. session_id from the previous result, if you have it. The server also recovers the session from quote_id / slot_id / confirmation_id / customer_grant.
customer_grantNocustomer_grant returned by verify_phone_code
idempotency_keyNoOptional. Same value when retrying the same request. If omitted, the server derives the key from the request, so a retry never creates a second booking.
booking_referenceYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNo
dateNoYYYY-MM-DD, Polish time
timeNoHH:MM, Polish time
errorNoStable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability
priceNo
totalNo
end_atNo
statusNo
messageNo
successYestrue = operation done / data returned; false = see error
currencyNo
start_atNo
booking_idNoBooking reference to give the customer (same as booking_reference)
can_cancelNo
session_idNo
can_rescheduleNo
missing_fieldsNo
service_summaryNo
booking_referenceNo

TDQS

A4.9/5.0
Behavior5/5

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

Annotations cover the safety profile (destructiveHint, idempotentHint, readOnlyHint=false), and the description adds substance beyond them: notification side effects via SMS/e-mail, the irreversibility of the operation, and the repeated-call behavior. The auth requirement (customer_grant or signed-in customer) is also disclosed.

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?

Labeled sections (PURPOSE / WHEN TO USE / WHEN NOT TO USE / REQUIRED / SIDE EFFECTS) front-load the decision-critical information, and each line carries a distinct fact with no filler.

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

Completeness5/5

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

An output schema exists so return values need not be described, and the description still covers everything an agent needs: preconditions, auth path, irreversible consequences, notification side effects, and idempotent retry behavior.

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 already 80%, so the baseline is 3, but the description adds real meaning: it distinguishes which fields are required vs optional and clarifies that customer_grant can be replaced by a signed-in customer. session_id is omitted from the description but is well documented in the schema itself.

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 the specific verb and resource ("Cancels the verified customer's existing booking") and immediately flags the irreversible nature. It is clearly distinguishable from reschedule_booking, which is explicitly named as the wrong tool for date changes.

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?

Gives an explicit WHEN TO USE precondition (customer explicitly confirmed the specific booking, reference and date read back) and an explicit WHEN NOT TO USE with the named alternative (reschedule_booking) plus a prohibition on unclear requests. Nothing is left to inference.

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

check_availabilitySprawdź terminyA
Read-only
Inspect

PURPOSE: Returns real, currently free appointment slots for a quote_id (new booking) or for an existing booking_reference (rescheduling, needs customer_grant). WHEN TO USE: When the customer asks when we can come, after calculate_quote. wanted.type: asap (earliest), date (one day), range (from-to), preferred (a day + nearby days, sorted by preferred_time); optional part_of_day. If type is omitted it follows the fields given (date -> date, from/to -> range, nothing -> asap). WHEN NOT TO USE: Never to book - it reserves nothing and holds no slot. REQUIRED: quote_id (or booking_reference + customer_grant). Dates as YYYY-MM-DD, Polish time. SIDE EFFECTS: none (read-only; slot_id values are valid ~15 minutes). RESULT: slots found -> success=true, slots[]. None in the requested period -> success=false, error="no_availability", next_available (date or null) and alternative_slots[] - offer those. Past date -> error date_in_past; beyond the online booking horizon -> error date_out_of_range. Never invent a slot.

ParametersJSON Schema
NameRequiredDescriptionDefault
wantedNoOptional preference; empty = earliest slots
quote_idNoquote_id from calculate_quote (new booking)
session_idNoOptional. session_id from the previous result, if you have it. The server also recovers the session from quote_id / slot_id / confirmation_id / customer_grant.
customer_grantNocustomer_grant returned by verify_phone_code
booking_referenceNoExisting booking to reschedule (requires customer_grant)

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNo
errorNoStable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability
slotsNo
reasonNo
messageNo
successYestrue = operation done / data returned; false = see error
searchedNo
session_idNo
missing_fieldsNo
next_availableNo
alternative_slotsNo

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already cover the read-only/no-destruction profile, and the description adds genuinely new behavior: no side effects, slot_id validity of ~15 minutes, the full error taxonomy (no_availability, date_in_past, date_out_of_range) and the instruction never to invent a slot. This is rich context beyond structured fields.

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

Conciseness5/5

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

Labelled sections (PURPOSE/WHEN TO USE/WHEN NOT TO USE/REQUIRED/SIDE EFFECTS/RESULT) front-load the decision-relevant information and every sentence carries operational content. Dense but zero waste for a tool with this much branching logic.

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

Completeness5/5

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

Covers the request modes, required inputs, side effects, success and failure shapes, and the ordering constraint relative to calculate_quote. With an output schema present, the description correctly focuses on routing and error semantics rather than restating return fields.

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 100% so the baseline is 3, but the description adds meaning the schema does not: how wanted.type selects behavior (asap/date/range/preferred) and the fallback when type is omitted (date->date, from/to->range, nothing->asap), plus the customer_grant requirement for rescheduling. It stops short of documenting preferred_time ordering semantics.

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

Purpose5/5

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

States a specific verb+resource (returns real, currently free appointment slots) and distinguishes the two calling modes by quote_id (new booking) vs booking_reference (reschedule). An agent can tell it apart from create_booking/reschedule_booking without opening a schema.

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

Usage Guidelines5/5

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

Explicit WHEN TO USE (after calculate_quote, when the customer asks when we can come) and WHEN NOT TO USE (never to book - reserves nothing), plus the sequencing relative to a named sibling. Nothing is left to inference.

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

check_service_areaSprawdź obszarA
Read-onlyIdempotent
Inspect

PURPOSE: Checks whether SzuruSzuru serves a Polish postal code. WHEN TO USE: When the customer asks whether we come to their town/postal code. WHEN NOT TO USE: Not needed before calculate_quote (calculate_quote checks the area itself). Never use it to reserve anything. REQUIRED: postal_code (NN-NNN). SIDE EFFECTS: none (read-only). RESULT: served -> success=true, available=true, city. Not served -> success=false, error="unsupported_postcode", available=false - tell the customer we do not serve this code; do not continue to quote or booking.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNoOptional, ignored by this tool.
postal_codeYesPolish postal code NN-NNN, e.g. 80-180

Output Schema

ParametersJSON Schema
NameRequiredDescription
cityNo
codeNo
errorNoStable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability
messageNo
successYestrue = operation done / data returned; false = see error
postcodeNo
availableNo
session_idNo
postal_codeNo
missing_fieldsNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/non-destructive, so 'SIDE EFFECTS: none' is partly redundant. What the description adds beyond structured data is the failure path — success=false, error='unsupported_postcode', available=false — plus the directive to stop the customer at that point rather than continue to quote or booking. That is genuine behavioral guidance, though it overlaps with the existing output schema.

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

Conciseness4/5

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

The labeled PUrpose/WHEN/REQUIRED/RESULT structure is front-loaded and scannable, and each block earns its place. Minor redundancy: 'SIDE EFFECTS: none (read-only)' duplicates the annotations, and 'REQUIRED: postal_code' duplicates the schema.

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

Completeness5/5

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

For a single-parameter eligibility check with an output schema, annotations, and a named sibling, nothing an agent needs is missing: input format, exclusions, expected result shape, and the escalation rule on failure are all present.

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%, and the schema already documents the NN-NNN pattern with an example and notes that session_id is ignored. The description's 'REQUIRED: postal_code (NN-NNN)' restates the schema without adding format, validation, or edge-case meaning, so the baseline 3 applies.

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 opens with a precise verb and resource: 'Checks whether SzuruSzuru serves a Polish postal code.' It names the sibling calculate_quote explicitly, so an agent can separate this read-only eligibility check from the quoting tool without inspecting either schema.

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 gives explicit WHEN TO USE ('when the customer asks whether we come to their town/postal code') and WHEN NOT TO USE ('not needed before calculate_quote — calculate_quote checks the area itself', 'never use it to reserve anything'). The alternative tool and the condition selecting it are spelled out, not inferred.

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

create_bookingPotwierdź rezerwacjęA
Idempotent
Inspect

PURPOSE: Step 2 of 2 of booking. Creates the real, confirmed SzuruSzuru booking for a confirmation_id from prepare_booking, using the 6-digit SMS code the customer received. WHEN TO USE: Only after prepare_booking succeeded and the customer has typed the SMS code in the conversation. WHEN NOT TO USE: Never to check price or availability, never without a code from the customer, never with a guessed or example code. REQUIRED: confirmation_id, sms_code. idempotency_key optional. Missing data -> error missing_required_fields; nothing is created. SIDE EFFECTS: creates a booking (a technician is scheduled) and sends SMS/e-mail confirmation to the customer. Idempotent: repeating the call with the same confirmation_id and code returns the SAME booking - it never creates a second one. RESULT: success=true, booking_id, status, date, time (Polish time), price, currency. Give these to the customer. Wrong code -> error verification_failed with attempts_left.

ParametersJSON Schema
NameRequiredDescriptionDefault
sms_codeYes6-digit code the customer received by SMS
session_idNoOptional. session_id from the previous result, if you have it. The server also recovers the session from quote_id / slot_id / confirmation_id / customer_grant.
confirmation_idYesconfirmation_id from prepare_booking
idempotency_keyNoOptional. Same value when retrying the same request. If omitted, the server derives the key from the request, so a retry never creates a second booking.

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNo
dateNoYYYY-MM-DD, Polish time
timeNoHH:MM, Polish time
errorNoStable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability
priceNo
totalNo
end_atNo
statusNo
messageNo
successYestrue = operation done / data returned; false = see error
currencyNo
start_atNo
duplicateNo
booking_idNoBooking reference to give the customer (same as booking_reference)
can_cancelNo
session_idNo
can_rescheduleNo
missing_fieldsNo
service_summaryNo
booking_referenceNo

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing side effects (technician scheduled, SMS/e-mail sent to customer), the idempotency mechanism, and named error modes (missing_required_fields, verification_failed with attempts_left). The annotations confirm idempotentHint/destructiveHint, and the prose adds the operational detail they cannot carry.

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

Conciseness5/5

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

Front-loaded with labeled sections (PURPOSE, WHEN TO USE/NOT, REQUIRED, SIDE EFFECTS, RESULT) that let an agent skim in priority order. Length is justified by a two-step, side-effecting, idempotent booking flow.

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

Completeness5/5

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

For a mutation tool with output schema present, the description supplies everything needed: prerequisites, failure modes, idempotency guarantees, and what success returns. No gaps remain for correct invocation.

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 the schema already documents all four parameters, including the retry semantics of idempotency_key. The description restates required vs optional but adds no syntax or format detail beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Creates the real, confirmed SzuruSzuru booking') and explicitly frames it as step 2 of 2 tied to prepare_booking, which cleanly separates it from the sibling that produces the confirmation_id.

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?

Contains dedicated WHEN TO USE and WHEN NOT TO USE sections, including the specific precondition (prepare_booking succeeded and the customer typed the SMS code) and explicit exclusions ('never to check price or availability, never without a code').

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

get_my_bookingsMoje rezerwacjeA
Read-onlyIdempotent
Inspect

PURPOSE: Lists the verified customer's bookings from the last 90 days (or one booking by booking_reference): reference, services, date, time, price, status, can_reschedule, can_cancel. WHEN TO USE: When the customer asks about their existing booking(s). WHEN NOT TO USE: Not for new bookings. Without customer_grant it returns error verification_required - then run start_phone_verification -> verify_phone_code. REQUIRED: customer_grant (or a signed-in customer). SIDE EFFECTS: none (read-only). Never shows other customers' data.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNoOptional. session_id from the previous result, if you have it. The server also recovers the session from quote_id / slot_id / confirmation_id / customer_grant.
customer_grantNocustomer_grant returned by verify_phone_code
booking_referenceNoOptional: one booking instead of the list

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNo
dateNoYYYY-MM-DD, Polish time
timeNoHH:MM, Polish time
countNo
errorNoStable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability
priceNo
totalNo
end_atNo
statusNo
messageNo
successYestrue = operation done / data returned; false = see error
bookingsNo
currencyNo
start_atNo
booking_idNoBooking reference to give the customer (same as booking_reference)
can_cancelNo
session_idNo
can_rescheduleNo
missing_fieldsNo
service_summaryNo
booking_referenceNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower; the description still adds the 90-day retention window, the verification_required error contract with its remediation chain, and the data-isolation guarantee ('Never shows other customers' data'). 'SIDE EFFECTS: none (read-only)' duplicates the annotation, which keeps it short of a 5.

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

Conciseness5/5

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

Labeled blocks (PURPOSE / WHEN TO USE / WHEN NOT TO USE / REQUIRED / SIDE EFFECTS) front-load the decision-relevant information, and every line carries a distinct fact with no filler.

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

Completeness5/5

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

With an output schema present, return values need no explanation, and annotations cover the safety profile. The remaining gaps an agent would care about, auth path and error recovery, are both stated, so nothing material is missing.

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 100%, so the schema already documents all three parameters including session_id recovery and the booking_reference pattern. The description only restates the booking_reference list-vs-single switch, adding no syntax or format detail beyond the schema; baseline 3 is correct.

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?

Opens with a specific verb+resource ('Lists the verified customer's bookings') and scopes it to a 90-day window plus the single-booking alternative via booking_reference. The listed return fields (reference, services, date, status, can_reschedule, can_cancel) make the distinction from create_booking/cancel_booking/reschedule_booking unambiguous.

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?

Explicit WHEN TO USE ('customer asks about existing booking(s)') and WHEN NOT TO USE ('not for new bookings'), plus a named recovery path: on verification_required run start_phone_verification -> verify_phone_code. This routes the agent to siblings with the exact triggering condition.

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

get_service_requirementsWymagania usługiA
Read-onlyIdempotent
Inspect

PURPOSE: Returns the details of ONE service: unit (piece / m2 / mattress side), allowed quantity, add-on names and prices, short description and FAQ. WHEN TO USE: When the request is ambiguous (e.g. which corner sofa size, carpet area in m2, which add-ons exist for this service). WHEN NOT TO USE: Not for prices of an order (use calculate_quote) or availability. REQUIRED: service (id from list_upholstery_services). SIDE EFFECTS: none (read-only).

ParametersJSON Schema
NameRequiredDescriptionDefault
serviceYesService id from list_upholstery_services, e.g. pranie_naroznika_l_4_5_os
session_idNoOptional, ignored by this tool.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
codeNo
unitNo
errorNoStable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability
messageNo
name_plNo
successYestrue = operation done / data returned; false = see error
session_idNo
price_modelNo
missing_fieldsNo

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered by structured data; the description's 'SIDE EFFECTS: none (read-only)' largely restates it. It does add value by disclosing the breadth of returned content, but that overlaps the output schema.

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

Conciseness4/5

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

Labelled sections (PURPOSE / WHEN TO USE / WHEN NOT TO USE / REQUIRED / SIDE EFFECTS) make it scannable and front-loaded. One clause, the side-effects note, duplicates the annotations rather than adding new information.

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

Completeness5/5

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

Given an output schema is present, the description need not detail return values, and it still supplies purpose, routing conditions, the required parameter source, and a safety note. An agent has everything needed to select and invoke it correctly.

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 both the service id and the ignored session_id are already documented in the schema exactly as the description repeats them. Baseline 3 is correct when the schema carries the full parameter burden.

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 states a specific verb and resource ('Returns the details of ONE service') and enumerates exactly what is returned (unit, quantity, add-ons, description, FAQ). This lets an agent distinguish it from siblings like list_upholstery_services or calculate_quote without opening any schema.

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

Usage Guidelines5/5

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

Explicit WHEN TO USE ('when the request is ambiguous') and WHEN NOT TO USE ('not for prices of an order (use calculate_quote) or availability') sections name both the condition and the alternative sibling tools. Nothing is left to inference.

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

list_upholstery_servicesLista usług SzuruSzuruA
Read-onlyIdempotent
Inspect

PURPOSE: Lists SzuruSzuru services (mobile upholstery, corner sofa, armchair, carpet, rug and mattress cleaning at the customer's home, Pomeranian region, Poland) with service ids, unit prices in PLN, units and add-on names. WHEN TO USE: To find the service id and exact add-on names before calculate_quote, or when the customer asks what is offered. WHEN NOT TO USE: Not for a price of a concrete order (use calculate_quote), not for coverage (check_service_area) or dates (check_availability). REQUIRED: nothing. SIDE EFFECTS: none (read-only). CONSTRAINTS: Prices come only from this catalog and calculate_quote - never estimate a price.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNoOptional filter (furniture = sofas, corner sofas, armchairs; leather = leather furniture)
session_idNoOptional, ignored by this tool.

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNo
errorNoStable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability
messageNo
successYestrue = operation done / data returned; false = see error
servicesNo
session_idNo
pricing_rulesNo
missing_fieldsNo
catalog_versionNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is largely pre-declared. The description nonetheless adds a useful domain constraint not present in structured data: prices come only from this catalog and calculate_quote, never estimated. It does not add much beyond that (no pagination or ordering behavior), so it sits just above adequate.

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?

Labeled sections (PURPOSE / WHEN TO USE / WHEN NOT TO USE / REQUIRED / SIDE EFFECTS / CONSTRAINTS) make it scannable, and the purpose is front-loaded before the routing rules. Every sentence carries a distinct instruction; no filler.

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

Completeness5/5

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

Output schema exists, so return-value explanation is unnecessary, yet the description still names the key returned fields. Required params (none), side effects, filtering option and the pricing constraint are all covered, leaving no gap for an agent to call it correctly.

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 both parameters (category enum with its meaning, session_id being ignored) are fully documented in the schema. The description adds no parameter syntax or format detail beyond that, so the baseline 3 is correct.

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 (Lists) and resource (SzuruSzuru services) with scope: the service domain, region, and the exact fields returned (service ids, unit prices in PLN, units, add-on names). An agent can distinguish it from calculate_quote and the other siblings without opening any schema.

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

Usage Guidelines5/5

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

Explicit WHEN TO USE (find service id / exact add-on names before calculate_quote, or answer what is offered) and WHEN NOT TO USE with named alternatives for each excluded case (calculate_quote for order pricing, check_service_area for coverage, check_availability for dates). Nothing is left to inference.

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

prepare_bookingPrzygotuj rezerwacjęA
Idempotent
Inspect

PURPOSE: Step 1 of 2 of booking. Holds the chosen slot for 10 minutes and sends a 6-digit SMS code to the customer's Polish mobile. Returns confirmation_id and a summary to show verbatim. Does NOT create a booking. WHEN TO USE: Only after the customer explicitly said they want to book THIS slot, gave first and last name, street address with number and mobile phone, and accepted the terms. WHEN NOT TO USE: Not for price or date questions, not when the customer says "maybe" or only asks how much / when. Never guess or invent missing data - ask. REQUIRED: quote_id, slot_id (from check_availability), customer.name, customer.address, customer.phone, terms_accepted=true. Missing data -> error missing_required_fields with missing_fields[]. SIDE EFFECTS: one SMS to the phone + 10-minute slot hold. The identical call repeated returns the same confirmation_id, no new SMS. NEXT: ask the customer for the SMS code, then call create_booking.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNoOptional note for the cleaner (fabric type, stains, parking)
slot_idYesslot_id chosen by the customer from check_availability
customerYes
quote_idYesquote_id from calculate_quote
session_idNoOptional. session_id from the previous result, if you have it. The server also recovers the session from quote_id / slot_id / confirmation_id / customer_grant.
invoice_dataNoOptional, only if the customer wants a company invoice
terms_acceptedYestrue only if the customer explicitly accepted the terms and consents. false -> the server returns the consent text to show.

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNo
errorNoStable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability
totalNo
statusNo
messageNo
successYestrue = operation done / data returned; false = see error
summaryNo
currencyNo
expires_atNo
session_idNo
code_sent_toNo
missing_fieldsNo
booking_createdNo
confirmation_idNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare destructiveHint=false, idempotentHint=true and openWorldHint=false, but the description adds material behavior beyond them: the 10-minute hold, the outbound SMS side effect to the customer's phone, the idempotency contract (same confirmation_id, no duplicate SMS), and the missing_required_fields error shape. This is a genuinely informative mutation contract.

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?

Labeled sections (PURPOSE/WHEN TO USE/WHEN TO NOT USE/REQUIRED/SIDE EFFECTS/NEXT) put the highest-value facts first with zero filler. Long but every clause carries operational information.

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

Completeness5/5

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

For a stateful two-step booking flow, it supplies preconditions, side effects, error contract, idempotency and the explicit next step (collect SMS code, call create_booking). With an output schema present it correctly avoids describing return values, and nothing needed to call it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 86%, so the schema already documents quote_id, slot_id, customer fields and terms_accepted. The description mainly restates the required list rather than adding new meaning (e.g. it does not explain the phone-optional-when-signed-in rule that the schema itself carries). Baseline 3 is appropriate.

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 precise verb and resource ('Step 1 of 2 of booking... Holds the chosen slot for 10 minutes and sends a 6-digit SMS code'), and explicitly negates the closest sibling with 'Does NOT create a booking.' An agent can distinguish it from create_booking without inspecting either schema.

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?

Provides explicit WHEN TO USE preconditions (customer confirmed this slot, gave name/address/phone, accepted terms) and a WHEN TO NOT USE clause covering price/date questions and vague 'maybe' intent, plus a 'never guess' instruction. Routing against siblings like calculate_quote and check_availability is unambiguous.

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

reschedule_bookingZmień terminA
DestructiveIdempotent
Inspect

PURPOSE: Moves the verified customer's existing booking to a new slot. Price and services stay the same. WHEN TO USE: Only after check_availability(booking_reference) and after the customer explicitly confirmed the new date and time. WHEN NOT TO USE: Not for new bookings, not to change services or price. REQUIRED: booking_reference, slot_id (from check_availability with that booking_reference), customer_grant (or a signed-in customer). idempotency_key optional. SIDE EFFECTS: changes the booking and notifies the customer by SMS/e-mail. Repeating the same call returns the same result.

ParametersJSON Schema
NameRequiredDescriptionDefault
slot_idYesslot_id from check_availability(booking_reference)
session_idNoOptional. session_id from the previous result, if you have it. The server also recovers the session from quote_id / slot_id / confirmation_id / customer_grant.
customer_grantNocustomer_grant returned by verify_phone_code
idempotency_keyNoOptional. Same value when retrying the same request. If omitted, the server derives the key from the request, so a retry never creates a second booking.
booking_referenceYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNo
dateNoYYYY-MM-DD, Polish time
timeNoHH:MM, Polish time
errorNoStable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability
priceNo
totalNo
end_atNo
statusNo
messageNo
successYestrue = operation done / data returned; false = see error
currencyNo
start_atNo
booking_idNoBooking reference to give the customer (same as booking_reference)
can_cancelNo
session_idNo
can_rescheduleNo
missing_fieldsNo
service_summaryNo
rescheduled_fromNo
booking_referenceNo

TDQS

A4.5/5.0
Behavior4/5

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

Adds real context beyond the annotations: notifies the customer by SMS/e-mail, price/services are unchanged, and repeated calls return the same result (reinforcing idempotentHint=true consistently with destructiveHint=true). It does not state whether the old slot is released or the notification timing, which keeps it short of a 5.

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

Conciseness4/5

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

Labeled sections (PURPOSE / WHEN TO USE / WHEN NOT / REQUIRED / SIDE EFFECTS) front-load the decision-relevant facts and every line carries information. Slightly longer than strictly necessary, but nothing is filler.

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

Completeness4/5

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

With an output schema present, return values need no explanation, and the description covers prerequisites, safety-relevant side effects, and idempotency. It stops short of stating what happens to the vacated slot and the exact auth/permission requirement, the only meaningful gaps.

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 80%, so the baseline is 3; the description rises above it by tying slot_id to check_availability(booking_reference), tying customer_grant to a signed-in alternative, and naming idempotency_key's optional status and retry semantics. It does not add format details beyond those already in the schema.

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

Purpose5/5

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

States a specific verb+resource ('moves the verified customer's existing booking to a new slot') plus a scope constraint ('price and services stay the same'). This clearly distinguishes it from create_booking and cancel_booking without needing to open either schema.

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

Usage Guidelines5/5

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

Explicit WHEN TO USE section requires the prior check_availability(booking_reference) call and explicit customer confirmation, and WHEN NOT TO USE excludes new bookings and service/price changes. Alternative routing is unambiguous.

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

resend_confirmation_codeWyślij kod ponownieAInspect

PURPOSE: Re-sends the SMS code of a prepared booking. WHEN TO USE: Only when the customer says the SMS from prepare_booking did not arrive. WHEN NOT TO USE: Not after a wrong code (ask the customer to re-type it) and not to start a new booking. REQUIRED: confirmation_id. SIDE EFFECTS: sends one SMS (max 1 per minute, 3 per 30 minutes per phone; otherwise error rate_limited with retry_after).

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNoOptional. session_id from the previous result, if you have it. The server also recovers the session from quote_id / slot_id / confirmation_id / customer_grant.
confirmation_idYesconfirmation_id from prepare_booking

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNo
errorNoStable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability
messageNo
successYestrue = operation done / data returned; false = see error
expires_atNo
session_idNo
code_sent_toNo
missing_fieldsNo
confirmation_idNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only declare non-read-only, non-idempotent, non-destructive; the description goes further by disclosing side effects (sends exactly one SMS), concrete rate limits (1/min, 3 per 30 min per phone), and the exact error and recovery field (rate_limited with retry_after). That is behavior an agent must know before calling.

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?

Labeled sections (PURPOSE / WHEN TO USE / WHEN NOT TO USE / REQUIRED / SIDE EFFECTS) front-load the routing decision and compress rate-limit detail into one line. Every sentence carries operational weight.

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

Completeness5/5

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

An output schema exists, so return values need not be explained. The description covers the remaining agent-facing gaps: correct trigger conditions, exclusions, required input, and failure/backoff behavior.

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 both parameters are fully documented in the schema itself. The description only restates that confirmation_id is required and cites its source, adding little beyond the structured field, so baseline 3 applies.

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 precise verb+resource: re-sending the SMS code of a prepared booking. This clearly separates it from prepare_booking (initial send) and verify_phone_code (code entry), so an agent can route correctly without opening the schema.

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

Usage Guidelines5/5

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

Explicit WHEN TO USE (SMS from prepare_booking did not arrive) and WHEN NOT TO USE (not after a wrong code, not to start a new booking), with the corrective action spelled out for the wrong-code case. No inference required.

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

start_phone_verificationWeryfikacja numeruAInspect

PURPOSE: Sends an SMS code to a Polish mobile number to prove the customer owns it, before showing, rescheduling or cancelling their EXISTING bookings. WHEN TO USE: When the customer asks about their existing booking(s) and no customer_grant is available yet. WHEN NOT TO USE: Not for a new booking (prepare_booking sends its own code). REQUIRED: phone. SIDE EFFECTS: sends one SMS (a repeated call within 60 s returns the same verification_id without a new SMS). The response is the same whether or not the number is known.

ParametersJSON Schema
NameRequiredDescriptionDefault
phoneYesPolish mobile number of the customer
session_idNoOptional. session_id from the previous result, if you have it. The server also recovers the session from quote_id / slot_id / confirmation_id / customer_grant.

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNo
errorNoStable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability
messageNo
successYestrue = operation done / data returned; false = see error
expires_inNo
session_idNo
code_sent_toNo
missing_fieldsNo
verification_idNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only give the generic flags (readOnly=false, destructive=false, openWorld=false, idempotent=false); the description goes well beyond them by disclosing the single-SMS side effect and the 60-second dedupe window that returns the same verification_id without a new SMS. It also discloses the anti-enumeration property (identical response whether or not the number is known), which is real behavioral information an agent needs.

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 labeled PURPOSE / WHEN / WHEN NOT / REQUIRED / SIDE EFFECTS structure is front-loaded and highly scannable with no filler prose. The 'REQUIRED: phone' line duplicates the schema's required field, so it isn't perfectly waste-free, but the size is appropriate.

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

Completeness5/5

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

An output schema exists, so return-value explanation is unnecessary; what remains — purpose, selection criteria, the SMS side effect, dedupe behavior, and privacy semantics — is fully covered for a two-parameter 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% and both parameters are documented in the schema, so the baseline is 3. The description restates only that phone is required and says nothing about session_id or the server's session-recovery behavior beyond what the schema already explains.

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 states a concrete verb+resource (send an SMS code to a Polish mobile number) and the business goal (proving ownership before acting on EXISTING bookings). It also differentiates itself from the sibling prepare_booking, so an agent can distinguish it without opening either schema.

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

Usage Guidelines5/5

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

Explicit WHEN TO USE (customer asks about an existing booking and no customer_grant exists) and WHEN NOT TO USE (new booking -> prepare_booking sends its own code), naming the alternative directly. This is the full when/when-not/alternative pattern.

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

verify_phone_codePotwierdź kodAInspect

PURPOSE: Exchanges the SMS code from start_phone_verification for a customer_grant (valid 60 minutes) that gives access to this customer's own bookings. WHEN TO USE: Right after the customer types the code from start_phone_verification. WHEN NOT TO USE: Not for the booking code from prepare_booking (that one goes to create_booking). REQUIRED: verification_id, code. SIDE EFFECTS: none besides issuing the grant. Pass customer_grant to get_my_bookings, check_availability(booking_reference), reschedule_booking and cancel_booking.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYes6-digit code the customer received by SMS
session_idNoOptional. session_id from the previous result, if you have it. The server also recovers the session from quote_id / slot_id / confirmation_id / customer_grant.
verification_idYesverification_id from start_phone_verification

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNo
errorNoStable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability
scopesNo
messageNo
successYestrue = operation done / data returned; false = see error
expires_inNo
session_idNo
customer_grantNo
missing_fieldsNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare non-read-only, non-destructive, non-idempotent behavior, and the description adds context beyond them: the grant's 60-minute validity, 'no side effects besides issuing the grant', and exactly which downstream tools consume the grant. It stops short of failure modes (expired/invalid code) and retry limits, so not a 5.

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

Conciseness5/5

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

Labeled PURPOSE / WHEN TO USE / WHEN NOT TO USE / REQUIRED / SIDE EFFECTS blocks front-load the routing decision and the object handoff; every sentence carries information, with no filler.

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

Completeness5/5

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

An output schema exists so return values need not be described, and the description closes the loop by telling the agent which tools to feed the grant into. For a two-required-parameter verification tool, nothing needed to call it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters already document their format and provenance. The description only restates the two required names and adds no semantics beyond the schema, which matches the baseline-3 rule when the schema does the heavy lifting.

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

Purpose5/5

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

States a specific verb and resource: exchanges the SMS code for a customer_grant that grants access to the customer's bookings. It also pins the input's origin (start_phone_verification) and the grant's 60-minute lifetime, which no sibling tool shares.

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?

Explicit WHEN TO USE (right after the customer types the code from start_phone_verification) and WHEN NOT TO USE, naming prepare_booking/create_booking as the conflicting path so the agent can disambiguate the two code flows.

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
    • Changedcalculate_quote8 fields changed
      • addedInput schema / properties / items / description
        Added value: +"Services to price"
      • changedInput schema / properties / items / items / properties / addons / description
        Previous value: -"Add-on names exactly as listed for the service"New value: +"Optional add-on names as listed for this service, e.g. \"Impregnacja Ochronna Przed Zabrudzeniami\""
      • changedInput schema / properties / items / items / properties / quantity / description
        Previous value: -"Pieces, mattress sides (1-2) or square metres for carpets"New value: +"Pieces (whole number), mattress sides (1-2) or square metres for carpets"
      • changedInput schema / properties / items / items / properties / service / description
        Previous value: -"Service id from list_upholstery_services"New value: +"Service id from list_upholstery_services, e.g. pranie_naroznika_l_4_5_os"
      • addedInput schema / properties / postal_code / description
        Added value: +"Polish postal code NN-NNN, e.g. 80-180"
      • changedInput schema / properties / postal_code / pattern
        Previous value: -"^\\d{2}-?\\d{3}$"New value: +"^\\d{2}[-\\s]?\\d{3}$"
      • changedInput schema / properties / session_id / description
        Previous value: -"Session id from a previous response (keeps quote, slots and confirmation together)"New value: +"Optional. session_id from the previous result, if you have it. The server also recovers the session from quote_id / slot_id / confirmation_id / customer_grant."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "below_min_order": {
        +      "type": "boolean"
        +    },
        +    "code": {
        +      "type": "string"
        +    },
        +    "currency": {
        +      "type": "string"
        +    },
        +    "delivery_fee": {
        +      "type": "number"
        +    },
        +    "error": {
        +      "description": "Stable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability",
        +      "type": "string"
        +    },
        +    "expires_at": {
        +      "type": "string"
        +    },
        +    "items": {
        +      "type": "array"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "missing_fields": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "quote_id": {
        +      "type": "string"
        +    },
        +    "services_subtotal": {
        +      "type": "number"
        +    },
        +    "session_id": {
        +      "type": "string"
        +    },
        +    "success": {
        +      "description": "true = operation done / data returned; false = see error",
        +      "type": "boolean"
        +    },
        +    "total_from": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "success"
        +  ],
        +  "type": "object"
        +}
    • Changedcancel_booking5 fields changed
      • addedInput schema / properties / customer_grant / description
        Added value: +"customer_grant returned by verify_phone_code"
      • addedInput schema / properties / idempotency_key / description
        Added value: +"Optional. Same value when retrying the same request. If omitted, the server derives the key from the request, so a retry never creates a second booking."
      • addedInput schema / properties / session_id / description
        Added value: +"Optional. session_id from the previous result, if you have it. The server also recovers the session from quote_id / slot_id / confirmation_id / customer_grant."
      • changedInput schema / required
        Previous value: -[
        -  "booking_reference",
        -  "idempotency_key"
        -]New value: +[
        +  "booking_reference"
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "booking_id": {
        +      "description": "Booking reference to give the customer (same as booking_reference)",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "booking_reference": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "can_cancel": {
        +      "type": "boolean"
        +    },
        +    "can_reschedule": {
        +      "type": "boolean"
        +    },
        +    "code": {
        +      "type": "string"
        +    },
        +    "currency": {
        +      "type": "string"
        +    },
        +    "date": {
        +      "description": "YYYY-MM-DD, Polish time",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "end_at": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "error": {
        +      "description": "Stable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability",
        +      "type": "string"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "missing_fields": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "price": {
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "service_summary": {
        +      "type": "string"
        +    },
        +    "session_id": {
        +      "type": "string"
        +    },
        +    "start_at": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "status": {
        +      "type": "string"
        +    },
        +    "success": {
        +      "description": "true = operation done / data returned; false = see error",
        +      "type": "boolean"
        +    },
        +    "time": {
        +      "description": "HH:MM, Polish time",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "total": {
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    }
        +  },
        +  "required": [
        +    "success"
        +  ],
        +  "type": "object"
        +}
    • Changedcheck_availability11 fields changed
      • addedInput schema / properties / booking_reference / description
        Added value: +"Existing booking to reschedule (requires customer_grant)"
      • changedInput schema / properties / customer_grant / description
        Previous value: -"From verify_phone_code (only for booking_reference)"New value: +"customer_grant returned by verify_phone_code"
      • addedInput schema / properties / quote_id / description
        Added value: +"quote_id from calculate_quote (new booking)"
      • addedInput schema / properties / session_id / description
        Added value: +"Optional. session_id from the previous result, if you have it. The server also recovers the session from quote_id / slot_id / confirmation_id / customer_grant."
      • addedInput schema / properties / wanted / description
        Added value: +"Optional preference; empty = earliest slots"
      • addedInput schema / properties / wanted / properties / date / description
        Added value: +"YYYY-MM-DD (for date / preferred)"
      • addedInput schema / properties / wanted / properties / from / description
        Added value: +"YYYY-MM-DD (for range)"
      • addedInput schema / properties / wanted / properties / part_of_day / description
        Added value: +"morning <12:00, afternoon 12-16, evening >=16:00"
      • addedInput schema / properties / wanted / properties / to / description
        Added value: +"YYYY-MM-DD (for range, max 30 days)"
      • removedInput schema / properties / wanted / properties / type / default
        Removed value: -"asap"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "alternative_slots": {
        +      "items": {
        +        "properties": {
        +          "date": {
        +            "type": "string"
        +          },
        +          "priority_fee": {
        +            "type": "number"
        +          },
        +          "slot_id": {
        +            "type": "string"
        +          },
        +          "start_at": {
        +            "type": "string"
        +          },
        +          "time": {
        +            "type": "string"
        +          },
        +          "total": {
        +            "type": "number"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "code": {
        +      "type": "string"
        +    },
        +    "error": {
        +      "description": "Stable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability",
        +      "type": "string"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "missing_fields": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "next_available": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "reason": {
        +      "type": "string"
        +    },
        +    "searched": {
        +      "type": "object"
        +    },
        +    "session_id": {
        +      "type": "string"
        +    },
        +    "slots": {
        +      "items": {
        +        "properties": {
        +          "date": {
        +            "type": "string"
        +          },
        +          "priority_fee": {
        +            "type": "number"
        +          },
        +          "slot_id": {
        +            "type": "string"
        +          },
        +          "start_at": {
        +            "type": "string"
        +          },
        +          "time": {
        +            "type": "string"
        +          },
        +          "total": {
        +            "type": "number"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "success": {
        +      "description": "true = operation done / data returned; false = see error",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "success"
        +  ],
        +  "type": "object"
        +}
    • Changedcheck_service_area4 fields changed
      • addedInput schema / properties / postal_code / description
        Added value: +"Polish postal code NN-NNN, e.g. 80-180"
      • changedInput schema / properties / postal_code / pattern
        Previous value: -"^\\d{2}-?\\d{3}$"New value: +"^\\d{2}[-\\s]?\\d{3}$"
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Optional, ignored by this tool.",
        +  "maxLength": 40,
        +  "minLength": 28,
        +  "pattern": "^as_[0-9a-z]{26}$",
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "available": {
        +      "type": "boolean"
        +    },
        +    "city": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "code": {
        +      "type": "string"
        +    },
        +    "error": {
        +      "description": "Stable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability",
        +      "type": "string"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "missing_fields": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "postal_code": {
        +      "type": "string"
        +    },
        +    "postcode": {
        +      "type": "string"
        +    },
        +    "session_id": {
        +      "type": "string"
        +    },
        +    "success": {
        +      "description": "true = operation done / data returned; false = see error",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "success"
        +  ],
        +  "type": "object"
        +}
    • Changedcreate_booking6 fields changed
      • addedInput schema / properties / confirmation_id / description
        Added value: +"confirmation_id from prepare_booking"
      • addedInput schema / properties / idempotency_key / description
        Added value: +"Optional. Same value when retrying the same request. If omitted, the server derives the key from the request, so a retry never creates a second booking."
      • addedInput schema / properties / session_id / description
        Added value: +"Optional. session_id from the previous result, if you have it. The server also recovers the session from quote_id / slot_id / confirmation_id / customer_grant."
      • addedInput schema / properties / sms_code / description
        Added value: +"6-digit code the customer received by SMS"
      • changedInput schema / required
        Previous value: -[
        -  "confirmation_id",
        -  "sms_code",
        -  "idempotency_key"
        -]New value: +[
        +  "confirmation_id",
        +  "sms_code"
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "booking_id": {
        +      "description": "Booking reference to give the customer (same as booking_reference)",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "booking_reference": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "can_cancel": {
        +      "type": "boolean"
        +    },
        +    "can_reschedule": {
        +      "type": "boolean"
        +    },
        +    "code": {
        +      "type": "string"
        +    },
        +    "currency": {
        +      "type": "string"
        +    },
        +    "date": {
        +      "description": "YYYY-MM-DD, Polish time",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "duplicate": {
        +      "type": "boolean"
        +    },
        +    "end_at": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "error": {
        +      "description": "Stable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability",
        +      "type": "string"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "missing_fields": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "price": {
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "service_summary": {
        +      "type": "string"
        +    },
        +    "session_id": {
        +      "type": "string"
        +    },
        +    "start_at": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "status": {
        +      "type": "string"
        +    },
        +    "success": {
        +      "description": "true = operation done / data returned; false = see error",
        +      "type": "boolean"
        +    },
        +    "time": {
        +      "description": "HH:MM, Polish time",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "total": {
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    }
        +  },
        +  "required": [
        +    "success"
        +  ],
        +  "type": "object"
        +}
    • Changedget_my_bookings3 fields changed
      • addedInput schema / properties / customer_grant / description
        Added value: +"customer_grant returned by verify_phone_code"
      • addedInput schema / properties / session_id / description
        Added value: +"Optional. session_id from the previous result, if you have it. The server also recovers the session from quote_id / slot_id / confirmation_id / customer_grant."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "booking_id": {
        +      "description": "Booking reference to give the customer (same as booking_reference)",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "booking_reference": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "bookings": {
        +      "items": {
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "can_cancel": {
        +      "type": "boolean"
        +    },
        +    "can_reschedule": {
        +      "type": "boolean"
        +    },
        +    "code": {
        +      "type": "string"
        +    },
        +    "count": {
        +      "type": "integer"
        +    },
        +    "currency": {
        +      "type": "string"
        +    },
        +    "date": {
        +      "description": "YYYY-MM-DD, Polish time",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "end_at": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "error": {
        +      "description": "Stable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability",
        +      "type": "string"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "missing_fields": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "price": {
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "service_summary": {
        +      "type": "string"
        +    },
        +    "session_id": {
        +      "type": "string"
        +    },
        +    "start_at": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "status": {
        +      "type": "string"
        +    },
        +    "success": {
        +      "description": "true = operation done / data returned; false = see error",
        +      "type": "boolean"
        +    },
        +    "time": {
        +      "description": "HH:MM, Polish time",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "total": {
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    }
        +  },
        +  "required": [
        +    "success"
        +  ],
        +  "type": "object"
        +}
    • Changedget_service_requirements3 fields changed
      • changedInput schema / properties / service / description
        Previous value: -"Service id from list_upholstery_services"New value: +"Service id from list_upholstery_services, e.g. pranie_naroznika_l_4_5_os"
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Optional, ignored by this tool.",
        +  "maxLength": 40,
        +  "minLength": 28,
        +  "pattern": "^as_[0-9a-z]{26}$",
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "code": {
        +      "type": "string"
        +    },
        +    "error": {
        +      "description": "Stable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability",
        +      "type": "string"
        +    },
        +    "id": {
        +      "type": "string"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "missing_fields": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "name_pl": {
        +      "type": "string"
        +    },
        +    "price_model": {
        +      "type": "object"
        +    },
        +    "session_id": {
        +      "type": "string"
        +    },
        +    "success": {
        +      "description": "true = operation done / data returned; false = see error",
        +      "type": "boolean"
        +    },
        +    "unit": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "success"
        +  ],
        +  "type": "object"
        +}
    • Changedlist_upholstery_services3 fields changed
      • changedInput schema / properties / category / description
        Previous value: -"Optional filter (leather = leather furniture)"New value: +"Optional filter (furniture = sofas, corner sofas, armchairs; leather = leather furniture)"
      • addedInput schema / properties / session_id
        Added value: +{
        +  "description": "Optional, ignored by this tool.",
        +  "maxLength": 40,
        +  "minLength": 28,
        +  "pattern": "^as_[0-9a-z]{26}$",
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "catalog_version": {
        +      "type": "string"
        +    },
        +    "code": {
        +      "type": "string"
        +    },
        +    "error": {
        +      "description": "Stable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability",
        +      "type": "string"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "missing_fields": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "pricing_rules": {
        +      "type": "object"
        +    },
        +    "services": {
        +      "items": {
        +        "properties": {
        +          "id": {
        +            "type": "string"
        +          },
        +          "name_pl": {
        +            "type": "string"
        +          },
        +          "unit": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "session_id": {
        +      "type": "string"
        +    },
        +    "success": {
        +      "description": "true = operation done / data returned; false = see error",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "success"
        +  ],
        +  "type": "object"
        +}
    • Changedprepare_booking10 fields changed
      • changedInput schema / properties / customer / properties / address / description
        Previous value: -"Street and house/flat number"New value: +"Street and house/flat number, e.g. \"Grunwaldzka 12/3\""
      • addedInput schema / properties / customer / properties / city / description
        Added value: +"Optional; derived from the postal code of the quote"
      • changedInput schema / properties / customer / properties / name / description
        Previous value: -"First and last name"New value: +"First and last name, e.g. \"Jan Kowalski\""
      • changedInput schema / properties / customer / properties / phone / description
        Previous value: -"Polish mobile number (optional when the customer is signed in)"New value: +"Polish mobile number (9 digits, optional +48) - receives the SMS code. Required unless the customer is signed in."
      • addedInput schema / properties / invoice_data / description
        Added value: +"Optional, only if the customer wants a company invoice"
      • addedInput schema / properties / quote_id / description
        Added value: +"quote_id from calculate_quote"
      • addedInput schema / properties / session_id / description
        Added value: +"Optional. session_id from the previous result, if you have it. The server also recovers the session from quote_id / slot_id / confirmation_id / customer_grant."
      • addedInput schema / properties / slot_id / description
        Added value: +"slot_id chosen by the customer from check_availability"
      • changedInput schema / properties / terms_accepted / description
        Previous value: -"Customer accepted the terms and the consent text (must be true)"New value: +"true only if the customer explicitly accepted the terms and consents. false -> the server returns the consent text to show."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "booking_created": {
        +      "type": "boolean"
        +    },
        +    "code": {
        +      "type": "string"
        +    },
        +    "code_sent_to": {
        +      "type": "string"
        +    },
        +    "confirmation_id": {
        +      "type": "string"
        +    },
        +    "currency": {
        +      "type": "string"
        +    },
        +    "error": {
        +      "description": "Stable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability",
        +      "type": "string"
        +    },
        +    "expires_at": {
        +      "type": "string"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "missing_fields": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "session_id": {
        +      "type": "string"
        +    },
        +    "status": {
        +      "type": "string"
        +    },
        +    "success": {
        +      "description": "true = operation done / data returned; false = see error",
        +      "type": "boolean"
        +    },
        +    "summary": {
        +      "type": "string"
        +    },
        +    "total": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "success"
        +  ],
        +  "type": "object"
        +}
    • Changedreschedule_booking6 fields changed
      • addedInput schema / properties / customer_grant / description
        Added value: +"customer_grant returned by verify_phone_code"
      • addedInput schema / properties / idempotency_key / description
        Added value: +"Optional. Same value when retrying the same request. If omitted, the server derives the key from the request, so a retry never creates a second booking."
      • addedInput schema / properties / session_id / description
        Added value: +"Optional. session_id from the previous result, if you have it. The server also recovers the session from quote_id / slot_id / confirmation_id / customer_grant."
      • addedInput schema / properties / slot_id / description
        Added value: +"slot_id from check_availability(booking_reference)"
      • changedInput schema / required
        Previous value: -[
        -  "booking_reference",
        -  "slot_id",
        -  "idempotency_key"
        -]New value: +[
        +  "booking_reference",
        +  "slot_id"
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "booking_id": {
        +      "description": "Booking reference to give the customer (same as booking_reference)",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "booking_reference": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "can_cancel": {
        +      "type": "boolean"
        +    },
        +    "can_reschedule": {
        +      "type": "boolean"
        +    },
        +    "code": {
        +      "type": "string"
        +    },
        +    "currency": {
        +      "type": "string"
        +    },
        +    "date": {
        +      "description": "YYYY-MM-DD, Polish time",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "end_at": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "error": {
        +      "description": "Stable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability",
        +      "type": "string"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "missing_fields": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "price": {
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "rescheduled_from": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "service_summary": {
        +      "type": "string"
        +    },
        +    "session_id": {
        +      "type": "string"
        +    },
        +    "start_at": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "status": {
        +      "type": "string"
        +    },
        +    "success": {
        +      "description": "true = operation done / data returned; false = see error",
        +      "type": "boolean"
        +    },
        +    "time": {
        +      "description": "HH:MM, Polish time",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "total": {
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    }
        +  },
        +  "required": [
        +    "success"
        +  ],
        +  "type": "object"
        +}
    • Changedresend_confirmation_code3 fields changed
      • addedInput schema / properties / confirmation_id / description
        Added value: +"confirmation_id from prepare_booking"
      • addedInput schema / properties / session_id / description
        Added value: +"Optional. session_id from the previous result, if you have it. The server also recovers the session from quote_id / slot_id / confirmation_id / customer_grant."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "code": {
        +      "type": "string"
        +    },
        +    "code_sent_to": {
        +      "type": "string"
        +    },
        +    "confirmation_id": {
        +      "type": "string"
        +    },
        +    "error": {
        +      "description": "Stable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability",
        +      "type": "string"
        +    },
        +    "expires_at": {
        +      "type": "string"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "missing_fields": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "session_id": {
        +      "type": "string"
        +    },
        +    "success": {
        +      "description": "true = operation done / data returned; false = see error",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "success"
        +  ],
        +  "type": "object"
        +}
    • Changedstart_phone_verification3 fields changed
      • addedInput schema / properties / phone / description
        Added value: +"Polish mobile number of the customer"
      • addedInput schema / properties / session_id / description
        Added value: +"Optional. session_id from the previous result, if you have it. The server also recovers the session from quote_id / slot_id / confirmation_id / customer_grant."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "code": {
        +      "type": "string"
        +    },
        +    "code_sent_to": {
        +      "type": "string"
        +    },
        +    "error": {
        +      "description": "Stable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability",
        +      "type": "string"
        +    },
        +    "expires_in": {
        +      "type": "integer"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "missing_fields": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "session_id": {
        +      "type": "string"
        +    },
        +    "success": {
        +      "description": "true = operation done / data returned; false = see error",
        +      "type": "boolean"
        +    },
        +    "verification_id": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "success"
        +  ],
        +  "type": "object"
        +}
    • Changedverify_phone_code4 fields changed
      • addedInput schema / properties / code / description
        Added value: +"6-digit code the customer received by SMS"
      • addedInput schema / properties / session_id / description
        Added value: +"Optional. session_id from the previous result, if you have it. The server also recovers the session from quote_id / slot_id / confirmation_id / customer_grant."
      • addedInput schema / properties / verification_id / description
        Added value: +"verification_id from start_phone_verification"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "code": {
        +      "type": "string"
        +    },
        +    "customer_grant": {
        +      "type": "string"
        +    },
        +    "error": {
        +      "description": "Stable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability",
        +      "type": "string"
        +    },
        +    "expires_in": {
        +      "type": "integer"
        +    },
        +    "message": {
        +      "type": "string"
        +    },
        +    "missing_fields": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "scopes": {
        +      "type": "array"
        +    },
        +    "session_id": {
        +      "type": "string"
        +    },
        +    "success": {
        +      "description": "true = operation done / data returned; false = see error",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "success"
        +  ],
        +  "type": "object"
        +}
  2. 13 tool updates
    • First observedcalculate_quote
    • First observedcancel_booking
    • First observedcheck_availability
    • First observedcheck_service_area
    • First observedcreate_booking
    • First observedget_my_bookings
    • First observedget_service_requirements
    • First observedlist_upholstery_services
    • First observedprepare_booking
    • First observedreschedule_booking
    • First observedresend_confirmation_code
    • First observedstart_phone_verification
    • First observedverify_phone_code

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources