_ registry / mcp streamable-http · checked 1h ago

szuruszuru-agent-gateway

https://agent.szuruszuru.pl

Registry code: 02b3627df8f27448

api record

SzuruSzuru: mobile upholstery, corner sofa, carpet and mattress cleaning at the customer's home in the Pomeranian region of Poland (Gdańsk, Gdynia, Słupsk, Kartuzy and surroundings). Price question -> calculate_quote (books nothing). Date question -> check_availability (books nothing). Booking only after the customer explicitly confirms a chosen slot and gives name, street address with number, mobile phone and accepts the terms: prepare_booking (sends an SMS code, books nothing) -> customer types the code -> create_booking (creates the booking; idempotent). Never call prepare_booking or…

endpoint
https://agent.szuruszuru.pl/mcp
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is szuruszuru-agent-gateway live?
Yes — it answered the hub's last check (checked 1h ago). It answered 100% of checks over the last 30 days.
Is szuruszuru-agent-gateway free to use?
Yes — the hub reached it with no key and no payment.
What tools does szuruszuru-agent-gateway have?
13 tools: calculate_quote, get_service_requirements, resend_confirmation_code, create_booking, start_phone_verification, verify_phone_code, reschedule_booking, cancel_booking, ….
Is szuruszuru-agent-gateway safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
100%

90 days 99.3%· all time 99.3%

latency
196ms

last good check

priced tools
0

of 13 tools

_ answered our checks, 90 days 439 checks · signed record
  • degraded → live
  • live → degraded· HTTP 522
  • degraded → live
  • live → degraded· timeout after 20000ms
_ what it is for
used for
  • get a quote for upholstery cleaning
  • check available cleaning slots
  • book a home upholstery cleaning
  • reschedule or cancel a booking
takes → gives
text, data → data
tools
6 reads4 changes data3 sends messages
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 13 tools
1 open 12 never probed 1 of 13 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • list_upholstery_services reads open 11h ago

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "category": {
          "enum": [
            "chairs",
            "furniture",
            "leather",
            "mattress",
            "carpet"
          ],
          "type": "string",
          "description": "Optional filter (furniture = sofas, corner sofas, armchairs; leather = leather furniture)"
        },
        "session_id": {
          "type": "string",
          "pattern": "^as_[0-9a-z]{26}$",
          "maxLength": 40,
          "minLength": 28,
          "description": "Optional, ignored by this tool."
        }
      },
      "additionalProperties": false
    }
    arguments 24 lines
  • calculate_quote reads unknown 1h ago

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "postal_code",
        "items"
      ],
      "properties": {
        "items": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "service",
              "quantity"
            ],
            "properties": {
              "addons": {
                "type": "array",
                "items": {
                  "type": "string",
                  "maxLength": 60,
                  "minLength": 2
                },
                "maxItems": 10,
                "description": "Optional add-on names as listed for this service, e.g. \"Impregnacja Ochronna Przed Zabrudzeniami\""
              },
              "service": {
                "type": "string",
                "pattern": "^[a-z0-9_\\-]+$",
                "maxLength": 64,
                "minLength": 2,
                "description": "Service id from list_upholstery_services, e.g. pranie_naroznika_l_4_5_os"
              },
              "quantity": {
                "type": "number",
                "maximum": 500,
                "minimum": 0.5,
                "description": "Pieces (whole number), mattress sides (1-2) or square metres for carpets"
              }
            },
            "additionalProperties": false
          },
          "maxItems": 20,
          "minItems": 1,
          "description": "Services to price"
        },
        "session_id": {
          "type": "string",
          "pattern": "^as_[0-9a-z]{26}$",
          "maxLength": 40,
          "minLength": 28,
          "description": "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": {
          "type": "string",
          "pattern": "^\\d{2}[-\\s]?\\d{3}$",
          "maxLength": 6,
          "minLength": 5,
          "description": "Polish postal code NN-NNN, e.g. 80-180"
        }
      },
      "additionalProperties": false
    }
    arguments 63 lines
  • get_service_requirements reads unknown 1h ago

    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).

    mcp-tool

    {
      "type": "object",
      "required": [
        "service"
      ],
      "properties": {
        "service": {
          "type": "string",
          "pattern": "^[a-z0-9_\\-]+$",
          "maxLength": 64,
          "minLength": 2,
          "description": "Service id from list_upholstery_services, e.g. pranie_naroznika_l_4_5_os"
        },
        "session_id": {
          "type": "string",
          "pattern": "^as_[0-9a-z]{26}$",
          "maxLength": 40,
          "minLength": 28,
          "description": "Optional, ignored by this tool."
        }
      },
      "additionalProperties": false
    }
    arguments 23 lines
  • resend_confirmation_code sends messages unknown never probed

    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).

    mcp-tool

    {
      "type": "object",
      "required": [
        "confirmation_id"
      ],
      "properties": {
        "session_id": {
          "type": "string",
          "pattern": "^as_[0-9a-z]{26}$",
          "maxLength": 40,
          "minLength": 28,
          "description": "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": {
          "type": "string",
          "pattern": "^c_[0-9a-z]{26}$",
          "maxLength": 40,
          "minLength": 28,
          "description": "confirmation_id from prepare_booking"
        }
      },
      "additionalProperties": false
    }
    arguments 23 lines
  • create_booking changes data unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "confirmation_id",
        "sms_code"
      ],
      "properties": {
        "sms_code": {
          "type": "string",
          "pattern": "^\\s*\\d{3}\\s?\\d{3}\\s*$",
          "maxLength": 8,
          "minLength": 6,
          "description": "6-digit code the customer received by SMS"
        },
        "session_id": {
          "type": "string",
          "pattern": "^as_[0-9a-z]{26}$",
          "maxLength": 40,
          "minLength": 28,
          "description": "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": {
          "type": "string",
          "pattern": "^c_[0-9a-z]{26}$",
          "maxLength": 40,
          "minLength": 28,
          "description": "confirmation_id from prepare_booking"
        },
        "idempotency_key": {
          "type": "string",
          "pattern": "^[A-Za-z0-9._:\\-]{8,128}$",
          "maxLength": 128,
          "minLength": 8,
          "description": "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."
        }
      },
      "additionalProperties": false
    }
    arguments 38 lines
  • start_phone_verification sends messages unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "phone"
      ],
      "properties": {
        "phone": {
          "type": "string",
          "pattern": "^[+\\d][\\d\\s\\-]{8,19}$",
          "maxLength": 20,
          "minLength": 9,
          "description": "Polish mobile number of the customer"
        },
        "session_id": {
          "type": "string",
          "pattern": "^as_[0-9a-z]{26}$",
          "maxLength": 40,
          "minLength": 28,
          "description": "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."
        }
      },
      "additionalProperties": false
    }
    arguments 23 lines
  • verify_phone_code changes data unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "verification_id",
        "code"
      ],
      "properties": {
        "code": {
          "type": "string",
          "pattern": "^\\s*\\d{3}\\s?\\d{3}\\s*$",
          "maxLength": 8,
          "minLength": 6,
          "description": "6-digit code the customer received by SMS"
        },
        "session_id": {
          "type": "string",
          "pattern": "^as_[0-9a-z]{26}$",
          "maxLength": 40,
          "minLength": 28,
          "description": "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": {
          "type": "string",
          "pattern": "^v_[0-9a-z]{26}$",
          "maxLength": 40,
          "minLength": 28,
          "description": "verification_id from start_phone_verification"
        }
      },
      "additionalProperties": false
    }
    arguments 31 lines
  • reschedule_booking changes data unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "booking_reference",
        "slot_id"
      ],
      "properties": {
        "slot_id": {
          "type": "string",
          "pattern": "^s_[0-9a-z]{26}$",
          "maxLength": 40,
          "minLength": 28,
          "description": "slot_id from check_availability(booking_reference)"
        },
        "session_id": {
          "type": "string",
          "pattern": "^as_[0-9a-z]{26}$",
          "maxLength": 40,
          "minLength": 28,
          "description": "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": {
          "type": "string",
          "maxLength": 80,
          "minLength": 20,
          "description": "customer_grant returned by verify_phone_code"
        },
        "idempotency_key": {
          "type": "string",
          "pattern": "^[A-Za-z0-9._:\\-]{8,128}$",
          "maxLength": 128,
          "minLength": 8,
          "description": "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": {
          "type": "string",
          "pattern": "^[A-Za-z0-9\\-]{8,20}$",
          "maxLength": 20,
          "minLength": 8
        }
      },
      "additionalProperties": false
    }
    arguments 43 lines
  • cancel_booking changes data unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "booking_reference"
      ],
      "properties": {
        "reason": {
          "type": "string",
          "maxLength": 120,
          "description": "Optional short reason given by the customer"
        },
        "session_id": {
          "type": "string",
          "pattern": "^as_[0-9a-z]{26}$",
          "maxLength": 40,
          "minLength": 28,
          "description": "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": {
          "type": "string",
          "maxLength": 80,
          "minLength": 20,
          "description": "customer_grant returned by verify_phone_code"
        },
        "idempotency_key": {
          "type": "string",
          "pattern": "^[A-Za-z0-9._:\\-]{8,128}$",
          "maxLength": 128,
          "minLength": 8,
          "description": "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": {
          "type": "string",
          "pattern": "^[A-Za-z0-9\\-]{8,20}$",
          "maxLength": 20,
          "minLength": 8
        }
      },
      "additionalProperties": false
    }
    arguments 40 lines
  • check_service_area reads unknown 11h ago

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "postal_code"
      ],
      "properties": {
        "session_id": {
          "type": "string",
          "pattern": "^as_[0-9a-z]{26}$",
          "maxLength": 40,
          "minLength": 28,
          "description": "Optional, ignored by this tool."
        },
        "postal_code": {
          "type": "string",
          "pattern": "^\\d{2}[-\\s]?\\d{3}$",
          "maxLength": 6,
          "minLength": 5,
          "description": "Polish postal code NN-NNN, e.g. 80-180"
        }
      },
      "additionalProperties": false
    }
    arguments 23 lines
  • prepare_booking sends messages unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "quote_id",
        "slot_id",
        "customer",
        "terms_accepted"
      ],
      "properties": {
        "notes": {
          "type": "string",
          "maxLength": 200,
          "description": "Optional note for the cleaner (fabric type, stains, parking)"
        },
        "slot_id": {
          "type": "string",
          "pattern": "^s_[0-9a-z]{26}$",
          "maxLength": 40,
          "minLength": 28,
          "description": "slot_id chosen by the customer from check_availability"
        },
        "customer": {
          "type": "object",
          "required": [
            "name",
            "address"
          ],
          "properties": {
            "city": {
              "type": "string",
              "maxLength": 80,
              "description": "Optional; derived from the postal code of the quote"
            },
            "name": {
              "type": "string",
              "maxLength": 100,
              "minLength": 5,
              "description": "First and last name, e.g. \"Jan Kowalski\""
            },
            "email": {
              "type": "string",
              "maxLength": 254,
              "description": "Optional"
            },
            "phone": {
              "type": "string",
              "pattern": "^[+\\d][\\d\\s\\-]{8,19}$",
              "maxLength": 20,
              "minLength": 9,
              "description": "Polish mobile number (9 digits, optional +48) - receives the SMS code. Required unless the customer is signed in."
            },
            "address": {
              "type": "string",
              "maxLength": 200,
              "minLength": 4,
              "description": "Street and house/flat number, e.g. \"Grunwaldzka 12/3\""
            }
          },
          "additionalProperties": false
        },
        "quote_id": {
          "type": "string",
          "pattern": "^q_[0-9a-z]{26}$",
          "maxLength": 40,
          "minLength": 28,
          "description": "quote_id from calculate_quote"
        },
        "session_id": {
          "type": "string",
          "pattern": "^as_[0-9a-z]{26}$",
          "maxLength": 40,
          "minLength": 28,
          "description": "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": {
          "type": "object",
          "properties": {
            "nip": {
              "type": "string",
              "pattern": "^[0-9\\-]{10,13}$",
              "maxLength": 13,
              "minLength": 10
            },
            "address": {
              "type": "string",
              "maxLength": 200
            },
            "company": {
              "type": "string",
              "maxLength": 150
            }
          },
          "description": "Optional, only if the customer wants a company invoice",
          "additionalProperties": false
        },
        "terms_accepted": {
          "type": "boolean",
          "description": "true only if the customer explicitly accepted the terms and consents. false -> the server returns the consent text to show."
        }
      },
      "additionalProperties": false
    }
    arguments 102 lines
  • get_my_bookings reads unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "session_id": {
          "type": "string",
          "pattern": "^as_[0-9a-z]{26}$",
          "maxLength": 40,
          "minLength": 28,
          "description": "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": {
          "type": "string",
          "maxLength": 80,
          "minLength": 20,
          "description": "customer_grant returned by verify_phone_code"
        },
        "booking_reference": {
          "type": "string",
          "pattern": "^[A-Za-z0-9\\-]{8,20}$",
          "maxLength": 20,
          "minLength": 8,
          "description": "Optional: one booking instead of the list"
        }
      },
      "additionalProperties": false
    }
    arguments 26 lines
  • check_availability reads unknown 11h ago

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "wanted": {
          "type": "object",
          "properties": {
            "to": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
              "maxLength": 10,
              "description": "YYYY-MM-DD (for range, max 30 days)"
            },
            "date": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
              "maxLength": 10,
              "description": "YYYY-MM-DD (for date / preferred)"
            },
            "from": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
              "maxLength": 10,
              "description": "YYYY-MM-DD (for range)"
            },
            "type": {
              "enum": [
                "asap",
                "date",
                "range",
                "preferred"
              ],
              "type": "string"
            },
            "part_of_day": {
              "enum": [
                "morning",
                "afternoon",
                "evening"
              ],
              "type": "string",
              "description": "morning <12:00, afternoon 12-16, evening >=16:00"
            },
            "preferred_time": {
              "type": "string",
              "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
              "maxLength": 5
            }
          },
          "description": "Optional preference; empty = earliest slots",
          "additionalProperties": false
        },
        "quote_id": {
          "type": "string",
          "pattern": "^q_[0-9a-z]{26}$",
          "maxLength": 40,
          "minLength": 28,
          "description": "quote_id from calculate_quote (new booking)"
        },
        "session_id": {
          "type": "string",
          "pattern": "^as_[0-9a-z]{26}$",
          "maxLength": 40,
          "minLength": 28,
          "description": "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": {
          "type": "string",
          "maxLength": 80,
          "minLength": 20,
          "description": "customer_grant returned by verify_phone_code"
        },
        "booking_reference": {
          "type": "string",
          "pattern": "^[A-Za-z0-9\\-]{8,20}$",
          "maxLength": 20,
          "minLength": 8,
          "description": "Existing booking to reschedule (requires customer_grant)"
        }
      },
      "additionalProperties": false
    }
    arguments 81 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id 02b3627df8f27448.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/02b3627df8f27448/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/02b3627df8f27448/badge.svg)](https://brick.blue/agent/02b3627df8f27448?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.