SzuruSzuru – rezerwacja czyszczenia tapicerki
Server Details
Quote, check slots and book on-site upholstery, carpet and mattress cleaning in Pomorskie, Poland.
- Status
- Healthy
- Uptime
- 99.7% over 21 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 13 tools
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).
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.
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.
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 toolscalculate_quoteWycenaARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Services to price | |
| session_id | No | 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. | |
| postal_code | Yes | Polish postal code NN-NNN, e.g. 80-180 |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | |
| error | No | Stable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability |
| items | No | |
| message | No | |
| success | Yes | true = operation done / data returned; false = see error |
| currency | No | |
| quote_id | No | |
| expires_at | No | |
| session_id | No | |
| total_from | No | |
| delivery_fee | No | |
| missing_fields | No | |
| below_min_order | No | |
| services_subtotal | No |
TDQS
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.
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.
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.
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.
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.
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ęADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Optional short reason given by the customer | |
| session_id | No | 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. | |
| customer_grant | No | customer_grant returned by verify_phone_code | |
| idempotency_key | No | 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. | |
| booking_reference | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | |
| date | No | YYYY-MM-DD, Polish time |
| time | No | HH:MM, Polish time |
| error | No | Stable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability |
| price | No | |
| total | No | |
| end_at | No | |
| status | No | |
| message | No | |
| success | Yes | true = operation done / data returned; false = see error |
| currency | No | |
| start_at | No | |
| booking_id | No | Booking reference to give the customer (same as booking_reference) |
| can_cancel | No | |
| session_id | No | |
| can_reschedule | No | |
| missing_fields | No | |
| service_summary | No | |
| booking_reference | No |
TDQS
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.
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.
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.
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.
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.
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ź terminyARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| wanted | No | Optional preference; empty = earliest slots | |
| quote_id | No | quote_id from calculate_quote (new booking) | |
| session_id | No | 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. | |
| customer_grant | No | customer_grant returned by verify_phone_code | |
| booking_reference | No | Existing booking to reschedule (requires customer_grant) |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | |
| error | No | Stable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability |
| slots | No | |
| reason | No | |
| message | No | |
| success | Yes | true = operation done / data returned; false = see error |
| searched | No | |
| session_id | No | |
| missing_fields | No | |
| next_available | No | |
| alternative_slots | No |
TDQS
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.
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.
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.
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.
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.
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ź obszarARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No | Optional, ignored by this tool. | |
| postal_code | Yes | Polish postal code NN-NNN, e.g. 80-180 |
Output Schema
| Name | Required | Description |
|---|---|---|
| city | No | |
| code | No | |
| error | No | Stable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability |
| message | No | |
| success | Yes | true = operation done / data returned; false = see error |
| postcode | No | |
| available | No | |
| session_id | No | |
| postal_code | No | |
| missing_fields | No |
TDQS
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.
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.
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.
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.
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.
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ęAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sms_code | Yes | 6-digit code the customer received by SMS | |
| session_id | No | 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. | |
| confirmation_id | Yes | confirmation_id from prepare_booking | |
| idempotency_key | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | |
| date | No | YYYY-MM-DD, Polish time |
| time | No | HH:MM, Polish time |
| error | No | Stable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability |
| price | No | |
| total | No | |
| end_at | No | |
| status | No | |
| message | No | |
| success | Yes | true = operation done / data returned; false = see error |
| currency | No | |
| start_at | No | |
| duplicate | No | |
| booking_id | No | Booking reference to give the customer (same as booking_reference) |
| can_cancel | No | |
| session_id | No | |
| can_reschedule | No | |
| missing_fields | No | |
| service_summary | No | |
| booking_reference | No |
TDQS
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.
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.
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.
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.
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.
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 rezerwacjeARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No | 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. | |
| customer_grant | No | customer_grant returned by verify_phone_code | |
| booking_reference | No | Optional: one booking instead of the list |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | |
| date | No | YYYY-MM-DD, Polish time |
| time | No | HH:MM, Polish time |
| count | No | |
| error | No | Stable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability |
| price | No | |
| total | No | |
| end_at | No | |
| status | No | |
| message | No | |
| success | Yes | true = operation done / data returned; false = see error |
| bookings | No | |
| currency | No | |
| start_at | No | |
| booking_id | No | Booking reference to give the customer (same as booking_reference) |
| can_cancel | No | |
| session_id | No | |
| can_reschedule | No | |
| missing_fields | No | |
| service_summary | No | |
| booking_reference | No |
TDQS
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.
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.
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.
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.
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.
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ługiARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| service | Yes | Service id from list_upholstery_services, e.g. pranie_naroznika_l_4_5_os | |
| session_id | No | Optional, ignored by this tool. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| code | No | |
| unit | No | |
| error | No | Stable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability |
| message | No | |
| name_pl | No | |
| success | Yes | true = operation done / data returned; false = see error |
| session_id | No | |
| price_model | No | |
| missing_fields | No |
TDQS
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.
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.
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.
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.
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.
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 SzuruSzuruARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Optional filter (furniture = sofas, corner sofas, armchairs; leather = leather furniture) | |
| session_id | No | Optional, ignored by this tool. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | |
| error | No | Stable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability |
| message | No | |
| success | Yes | true = operation done / data returned; false = see error |
| services | No | |
| session_id | No | |
| pricing_rules | No | |
| missing_fields | No | |
| catalog_version | No |
TDQS
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.
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.
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.
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.
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.
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ęAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Optional note for the cleaner (fabric type, stains, parking) | |
| slot_id | Yes | slot_id chosen by the customer from check_availability | |
| customer | Yes | ||
| quote_id | Yes | quote_id from calculate_quote | |
| session_id | No | 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. | |
| invoice_data | No | Optional, only if the customer wants a company invoice | |
| terms_accepted | Yes | true only if the customer explicitly accepted the terms and consents. false -> the server returns the consent text to show. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | |
| error | No | Stable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability |
| total | No | |
| status | No | |
| message | No | |
| success | Yes | true = operation done / data returned; false = see error |
| summary | No | |
| currency | No | |
| expires_at | No | |
| session_id | No | |
| code_sent_to | No | |
| missing_fields | No | |
| booking_created | No | |
| confirmation_id | No |
TDQS
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.
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.
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.
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.
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.
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ń terminADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slot_id | Yes | slot_id from check_availability(booking_reference) | |
| session_id | No | 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. | |
| customer_grant | No | customer_grant returned by verify_phone_code | |
| idempotency_key | No | 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. | |
| booking_reference | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | |
| date | No | YYYY-MM-DD, Polish time |
| time | No | HH:MM, Polish time |
| error | No | Stable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability |
| price | No | |
| total | No | |
| end_at | No | |
| status | No | |
| message | No | |
| success | Yes | true = operation done / data returned; false = see error |
| currency | No | |
| start_at | No | |
| booking_id | No | Booking reference to give the customer (same as booking_reference) |
| can_cancel | No | |
| session_id | No | |
| can_reschedule | No | |
| missing_fields | No | |
| service_summary | No | |
| rescheduled_from | No | |
| booking_reference | No |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No | 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. | |
| confirmation_id | Yes | confirmation_id from prepare_booking |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | |
| error | No | Stable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability |
| message | No | |
| success | Yes | true = operation done / data returned; false = see error |
| expires_at | No | |
| session_id | No | |
| code_sent_to | No | |
| missing_fields | No | |
| confirmation_id | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| phone | Yes | Polish mobile number of the customer | |
| session_id | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | |
| error | No | Stable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability |
| message | No | |
| success | Yes | true = operation done / data returned; false = see error |
| expires_in | No | |
| session_id | No | |
| code_sent_to | No | |
| missing_fields | No | |
| verification_id | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | 6-digit code the customer received by SMS | |
| session_id | No | 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. | |
| verification_id | Yes | verification_id from start_phone_verification |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | |
| error | No | Stable machine-readable error id when success=false, e.g. missing_required_fields, unsupported_postcode, no_availability |
| scopes | No | |
| message | No | |
| success | Yes | true = operation done / data returned; false = see error |
| expires_in | No | |
| session_id | No | |
| customer_grant | No | |
| missing_fields | No |
TDQS
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.
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.
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.
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.
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.
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.
13 tool updates
- Changed
calculate_quote8 fields changed- added
Input schema / properties / items / descriptionAdded value: +"Services to price" - changed
Input schema / properties / items / items / properties / addons / descriptionPrevious 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\"" - changed
Input schema / properties / items / items / properties / quantity / descriptionPrevious 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" - changed
Input schema / properties / items / items / properties / service / descriptionPrevious value: -"Service id from list_upholstery_services"New value: +"Service id from list_upholstery_services, e.g. pranie_naroznika_l_4_5_os" - added
Input schema / properties / postal_code / descriptionAdded value: +"Polish postal code NN-NNN, e.g. 80-180" - changed
Input schema / properties / postal_code / patternPrevious value: -"^\\d{2}-?\\d{3}$"New value: +"^\\d{2}[-\\s]?\\d{3}$" - changed
Input schema / properties / session_id / descriptionPrevious 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." - changed
Output 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" +}
- Changed
cancel_booking5 fields changed- added
Input schema / properties / customer_grant / descriptionAdded value: +"customer_grant returned by verify_phone_code" - added
Input schema / properties / idempotency_key / descriptionAdded 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." - added
Input schema / properties / session_id / descriptionAdded 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." - changed
Input schema / requiredPrevious value: -[ - "booking_reference", - "idempotency_key" -]New value: +[ + "booking_reference" +] - changed
Output 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" +}
- Changed
check_availability11 fields changed- added
Input schema / properties / booking_reference / descriptionAdded value: +"Existing booking to reschedule (requires customer_grant)" - changed
Input schema / properties / customer_grant / descriptionPrevious value: -"From verify_phone_code (only for booking_reference)"New value: +"customer_grant returned by verify_phone_code" - added
Input schema / properties / quote_id / descriptionAdded value: +"quote_id from calculate_quote (new booking)" - added
Input schema / properties / session_id / descriptionAdded 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." - added
Input schema / properties / wanted / descriptionAdded value: +"Optional preference; empty = earliest slots" - added
Input schema / properties / wanted / properties / date / descriptionAdded value: +"YYYY-MM-DD (for date / preferred)" - added
Input schema / properties / wanted / properties / from / descriptionAdded value: +"YYYY-MM-DD (for range)" - added
Input schema / properties / wanted / properties / part_of_day / descriptionAdded value: +"morning <12:00, afternoon 12-16, evening >=16:00" - added
Input schema / properties / wanted / properties / to / descriptionAdded value: +"YYYY-MM-DD (for range, max 30 days)" - removed
Input schema / properties / wanted / properties / type / defaultRemoved value: -"asap" - changed
Output 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" +}
- Changed
check_service_area4 fields changed- added
Input schema / properties / postal_code / descriptionAdded value: +"Polish postal code NN-NNN, e.g. 80-180" - changed
Input schema / properties / postal_code / patternPrevious value: -"^\\d{2}-?\\d{3}$"New value: +"^\\d{2}[-\\s]?\\d{3}$" - added
Input schema / properties / session_idAdded value: +{ + "description": "Optional, ignored by this tool.", + "maxLength": 40, + "minLength": 28, + "pattern": "^as_[0-9a-z]{26}$", + "type": "string" +} - changed
Output 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" +}
- Changed
create_booking6 fields changed- added
Input schema / properties / confirmation_id / descriptionAdded value: +"confirmation_id from prepare_booking" - added
Input schema / properties / idempotency_key / descriptionAdded 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." - added
Input schema / properties / session_id / descriptionAdded 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." - added
Input schema / properties / sms_code / descriptionAdded value: +"6-digit code the customer received by SMS" - changed
Input schema / requiredPrevious value: -[ - "confirmation_id", - "sms_code", - "idempotency_key" -]New value: +[ + "confirmation_id", + "sms_code" +] - changed
Output 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" +}
- Changed
get_my_bookings3 fields changed- added
Input schema / properties / customer_grant / descriptionAdded value: +"customer_grant returned by verify_phone_code" - added
Input schema / properties / session_id / descriptionAdded 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." - changed
Output 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" +}
- Changed
get_service_requirements3 fields changed- changed
Input schema / properties / service / descriptionPrevious value: -"Service id from list_upholstery_services"New value: +"Service id from list_upholstery_services, e.g. pranie_naroznika_l_4_5_os" - added
Input schema / properties / session_idAdded value: +{ + "description": "Optional, ignored by this tool.", + "maxLength": 40, + "minLength": 28, + "pattern": "^as_[0-9a-z]{26}$", + "type": "string" +} - changed
Output 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" +}
- Changed
list_upholstery_services3 fields changed- changed
Input schema / properties / category / descriptionPrevious value: -"Optional filter (leather = leather furniture)"New value: +"Optional filter (furniture = sofas, corner sofas, armchairs; leather = leather furniture)" - added
Input schema / properties / session_idAdded value: +{ + "description": "Optional, ignored by this tool.", + "maxLength": 40, + "minLength": 28, + "pattern": "^as_[0-9a-z]{26}$", + "type": "string" +} - changed
Output 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" +}
- Changed
prepare_booking10 fields changed- changed
Input schema / properties / customer / properties / address / descriptionPrevious value: -"Street and house/flat number"New value: +"Street and house/flat number, e.g. \"Grunwaldzka 12/3\"" - added
Input schema / properties / customer / properties / city / descriptionAdded value: +"Optional; derived from the postal code of the quote" - changed
Input schema / properties / customer / properties / name / descriptionPrevious value: -"First and last name"New value: +"First and last name, e.g. \"Jan Kowalski\"" - changed
Input schema / properties / customer / properties / phone / descriptionPrevious 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." - added
Input schema / properties / invoice_data / descriptionAdded value: +"Optional, only if the customer wants a company invoice" - added
Input schema / properties / quote_id / descriptionAdded value: +"quote_id from calculate_quote" - added
Input schema / properties / session_id / descriptionAdded 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." - added
Input schema / properties / slot_id / descriptionAdded value: +"slot_id chosen by the customer from check_availability" - changed
Input schema / properties / terms_accepted / descriptionPrevious 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." - changed
Output 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" +}
- Changed
reschedule_booking6 fields changed- added
Input schema / properties / customer_grant / descriptionAdded value: +"customer_grant returned by verify_phone_code" - added
Input schema / properties / idempotency_key / descriptionAdded 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." - added
Input schema / properties / session_id / descriptionAdded 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." - added
Input schema / properties / slot_id / descriptionAdded value: +"slot_id from check_availability(booking_reference)" - changed
Input schema / requiredPrevious value: -[ - "booking_reference", - "slot_id", - "idempotency_key" -]New value: +[ + "booking_reference", + "slot_id" +] - changed
Output 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" +}
- Changed
resend_confirmation_code3 fields changed- added
Input schema / properties / confirmation_id / descriptionAdded value: +"confirmation_id from prepare_booking" - added
Input schema / properties / session_id / descriptionAdded 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." - changed
Output 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" +}
- Changed
start_phone_verification3 fields changed- added
Input schema / properties / phone / descriptionAdded value: +"Polish mobile number of the customer" - added
Input schema / properties / session_id / descriptionAdded 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." - changed
Output 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" +}
- Changed
verify_phone_code4 fields changed- added
Input schema / properties / code / descriptionAdded value: +"6-digit code the customer received by SMS" - added
Input schema / properties / session_id / descriptionAdded 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." - added
Input schema / properties / verification_id / descriptionAdded value: +"verification_id from start_phone_verification" - changed
Output 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" +}
13 tool updates
- First observed
calculate_quote - First observed
cancel_booking - First observed
check_availability - First observed
check_service_area - First observed
create_booking - First observed
get_my_bookings - First observed
get_service_requirements - First observed
list_upholstery_services - First observed
prepare_booking - First observed
reschedule_booking - First observed
resend_confirmation_code - First observed
start_phone_verification - First observed
verify_phone_code
Related MCP Connectors
Book window & gutter cleaning in Colorado and New Mexico: instant firm quote, real calendar slot
Quote, hold and book US house cleaning jobs on a customer's behalf, at each business's own prices.
Accommodation search in Poland on noclegowo.pl: offers, availability and whole-stay prices.
3M+ Polish companies (KRS, CEIDG): financials, people, rankings and public registries.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceYour AI agent's practical guide to life and administration in Poland.MIT

cenogram-mcp-serverofficial
AlicenseAqualityAmaintenance7M+ real estate transactions from Poland's RCN registry. Search, compare, and analyze prices28133 npm1MIT- AlicenseAqualityDmaintenancePolish phone number lookup: who called, spam and scam checks, UKE DNO registry, CERT phishing stats51MIT
- FlicenseAqualityCmaintenanceEnables AI assistants to conduct a 30-question information security and GDPR/NIS2 compliance screening for Polish SMEs, with fully local scoring, area-based results, gap identification, and prioritized remediation steps.5-
Glama MCP Gateway
Add one secure layer between your agents and this server.