AdvocateMCP
Qué hace este MCP
Helps users discover local businesses, ask questions, obtain quotes, request callbacks, reserve and confirm appointments, and submit service inquiries.
Herramientas
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'reservation_id', 'cancel_token'], 'properties': {'slug': {'type': 'string', 'minLength': 1, 'description': 'Business slug identifier'}, 'cancel_token': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'The cancel_token from the payment receipt'}, 'reservation_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "The paid reservation's id"}}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['status', 'reservation_id', 'refund', 'refunded_cents', 'pending_cents', 'currency'], 'properties': {'refund': {'enum': ['full', 'none', 'pending'], 'type': 'string', 'description': 'full: the payment ledger confirms the refund; none: deposit was forfeited; pending: cancellation is complete and refund verification or retry is pending'}, 'status': {'type': 'string', 'const': 'cancelled'}, 'currency': {'type': 'string'}, 'pending_cents': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'refunded_cents': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'reservation_id': {'type': 'string'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'reservation_id', 'code'], 'properties': {'code': {'type': 'string', 'pattern': '^\\d{6}$', 'description': 'The customer-supplied 6-digit confirmation code received at their own email or SMS contact. Relay only that supplied code; never generate, guess, or fetch it.'}, 'slug': {'type': 'string', 'minLength': 1, 'description': 'Business slug identifier'}, 'reservation_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'The reservation id returned by reserve_slot'}}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['status', 'reservation_id'], 'properties': {'status': {'type': 'string', 'description': "'confirmed': a booking was committed to the selected configured calendar, or a historical legacy reservation was confirmed. 'booking_pending': the provider outcome is unresolved; do not create another booking or seek owner approval — repeat confirm_booking later to read the stored outcome. 'pending_merchant': a historical merchant-review reservation awaits a business decision — see message. 'already_confirmed': this reservation was confirmed earlier (safe replay)."}, 'message': {'type': 'string', 'description': 'Optional customer-facing status detail to relay'}, 'reservation_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'reservation_id'], 'properties': {'slug': {'type': 'string', 'minLength': 1, 'description': 'Business slug identifier'}, 'reservation_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'The reservation_id reserve_slot returned with payment.required = true'}}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['payment_link', 'amount_cents', 'currency', 'kind', 'balance_due_cents', 'due_at_visit', 'expires_at', 'instructions'], 'properties': {'kind': {'enum': ['deposit', 'full'], 'type': 'string'}, 'currency': {'type': 'string'}, 'expires_at': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Unix seconds after which the reservation lapses unpaid'}, 'amount_cents': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Minor units charged now'}, 'due_at_visit': {'type': 'boolean'}, 'instructions': {'type': 'string'}, 'payment_link': {'type': 'string', 'description': 'POST here (no body) to receive the HTTP 402 MPP challenge'}, 'balance_due_cents': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Minor units due at the visit'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'minLength': 1, 'description': 'Business slug identifier'}, 'window_end': {'type': 'integer', 'maximum': 9007199254740991, 'description': "Unix seconds (absolute instant; default now + 7 days). See window_start on reading the response's `timezone`.", 'exclusiveMinimum': 0}, 'window_start': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Unix seconds (absolute instant; default now). The business\'s own timezone is not an input — it is returned as `timezone` in the response. To target a local phrase like "Tuesday afternoon", request a generously wide window and filter the returned slots using that `timezone`.', 'exclusiveMinimum': 0}}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slots', 'source', 'timezone', 'generated_at'], 'properties': {'slots': {'type': 'array', 'items': {'type': 'object', 'required': ['start', 'end', 'capacity'], 'properties': {'end': {'type': 'number'}, 'start': {'type': 'number'}, 'capacity': {'type': 'number'}}, 'additionalProperties': False}}, 'source': {'type': 'string'}, 'timezone': {'type': 'string'}, 'generated_at': {'type': 'number'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'minLength': 1, 'description': 'Business slug identifier'}}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'mode', 'url', 'provider', 'kind', 'eligibility', 'guidance_for_agent'], 'properties': {'url': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'kind': {'anyOf': [{'enum': ['appointment', 'intake'], 'type': 'string'}, {'type': 'null'}]}, 'mode': {'enum': ['external', 'native', 'unavailable'], 'type': 'string'}, 'slug': {'type': 'string'}, 'provider': {'anyOf': [{'enum': ['jane', 'kilo', 'teletherapy', 'other'], 'type': 'string'}, {'type': 'null'}]}, 'eligibility': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'guidance_for_agent': {'type': 'string'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'minLength': 1, 'description': 'Business slug identifier'}}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'has_policy', 'policy_text', 'guidance_for_agent'], 'properties': {'slug': {'type': 'string'}, 'has_policy': {'type': 'boolean'}, 'policy_text': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'guidance_for_agent': {'type': 'string'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'minLength': 1, 'description': 'Business slug identifier'}}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'has_credentials', 'licenses', 'insured', 'bonded', 'certifications', 'summary'], 'properties': {'slug': {'type': 'string'}, 'bonded': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}]}, 'insured': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}]}, 'summary': {'type': 'string'}, 'licenses': {'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string'}, 'number': {'type': 'string'}, 'expires_at': {'type': 'string'}, 'jurisdiction': {'type': 'string'}}, 'additionalProperties': False}}, 'certifications': {'type': 'array', 'items': {'type': 'string'}}, 'has_credentials': {'type': 'boolean'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'offer_id'], 'properties': {'slug': {'type': 'string', 'minLength': 1, 'description': 'Business slug identifier'}, 'offer_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'The offer id returned by get_quote'}}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['url', 'summary', 'state'], 'properties': {'url': {'type': 'string'}, 'state': {'enum': ['pending', 'resolved'], 'type': 'string'}, 'summary': {'type': 'object', 'required': ['business', 'service', 'amount', 'currency', 'params', 'cancellation_policy', 'offer_expires_at'], 'properties': {'amount': {'type': 'number', 'description': 'Major units (e.g. 29.00 for $29.00), never minor-unit cents'}, 'params': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}, 'service': {'type': 'string'}, 'business': {'type': 'string'}, 'currency': {'type': 'string'}, 'offer_expires_at': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Offer price validity expiry (Unix seconds)'}, 'cancellation_policy': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'service'], 'properties': {'slug': {'type': 'string', 'minLength': 1, 'description': 'Business slug identifier'}, 'params': {'type': 'object', 'description': "Optional service parameters (e.g., {size:'large'})", 'propertyNames': {'type': 'string', 'maxLength': 64}, 'additionalProperties': {'type': 'string', 'maxLength': 200}}, 'service': {'type': 'string', 'minLength': 1, 'description': 'Requested service name to quote'}}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['quote', 'offer'], 'properties': {'offer': {'anyOf': [{'type': 'object', 'required': ['offer_id', 'version', 'key_id', 'expires_at'], 'properties': {'key_id': {'type': 'string'}, 'version': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'offer_id': {'type': 'string'}, 'expires_at': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Offer expiry (Unix seconds); the quoted price is guaranteed until then'}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'Server-minted immutable price offer — only exact configured prices mint one; estimates and ranges never do.'}, 'quote': {'anyOf': [{'type': 'object', 'required': ['low', 'high', 'currency', 'confidence', 'basis'], 'properties': {'low': {'type': 'number'}, 'high': {'type': 'number'}, 'basis': {'enum': ['pricing_json_v2', 'llm_estimate'], 'type': 'string'}, 'currency': {'type': 'string'}, 'confidence': {'enum': ['exact', 'range', 'estimate'], 'type': 'string'}, 'disclaimer': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'null'}]}, 'reason': {'type': 'string'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'mode', 'idempotency_key'], 'properties': {'mode': {'enum': ['human', 'agent'], 'type': 'string', 'description': 'Handoff mode: human (SMS/email) or agent (continuation URL)'}, 'slug': {'type': 'string', 'minLength': 1, 'description': 'Business slug identifier'}, 'reason': {'type': 'string', 'maxLength': 800, 'description': 'Why the user wants to reach a human'}, 'message': {'type': 'string', 'maxLength': 800, 'minLength': 1, 'description': 'Deprecated alias for `reason`. The notification body is composed by the server from the fields above; this value is delivered as the reason line, not as the message itself. Supplying both is an error.'}, 'purpose': {'type': 'string', 'minLength': 1, 'description': 'Purpose description for agent-mode continuation'}, 'urgency': {'enum': ['low', 'normal', 'high', 'emergency'], 'type': 'string', 'description': 'How time-sensitive (default: normal)'}, 'agent_id': {'type': 'string', 'description': 'Optional agent identifier'}, 'contact_name': {'type': 'string', 'maxLength': 120, 'description': "End-user's name"}, 'contact_email': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", 'description': "End-user's email"}, 'contact_phone': {'type': 'string', 'maxLength': 40, 'description': "End-user's phone"}, 'reservation_id': {'type': 'string', 'description': 'Optional link to a prior reservation'}, 'idempotency_key': {'type': 'string', 'minLength': 1, 'description': 'Unique key for idempotent handoff'}}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['mode', 'handoff_id'], 'properties': {'mode': {'enum': ['human', 'agent'], 'type': 'string', 'description': "The handoff's mode, and which of the fields below are present. Normally the mode you asked for — but an idempotent replay returns the STORED handoff's mode, which differs when an idempotency_key is reused with a different mode than the call that created it."}, 'reason': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "human mode, not delivered: 'form_routing_configured', 'no_recipient_configured', 'sms_consent_missing', a shape-mismatch skip, a spend-cap denial, or a provider failure code"}, 'status': {'type': 'string', 'description': "human mode replay while the original send is still in flight: 'pending'"}, 'channel': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "human mode, skipped before sending: the channel that would have been used ('sms' or 'email'), or 'form' when the business only takes leads through a web form"}, 'form_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "human mode, channel 'form': the business's own contact form for the user to complete"}, 'delivered': {'type': 'boolean', 'description': 'human mode: present only as false, when nothing was sent — see reason'}, 'ticket_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "human mode, delivered: the provider's message id, or the handoff_id when the provider issues none"}, 'expires_at': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'agent mode: Unix seconds when continuation_url stops working (one hour)'}, 'handoff_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'delivered_via': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "human mode: 'sms' or 'email' — the channel the notification went to"}, 'handshake_token': {'type': 'string', 'description': 'agent mode: the bare token carried inside continuation_url'}, 'continuation_url': {'type': 'string', 'description': 'agent mode: signed URL the next agent redeems exactly once at /a2a/continue'}, 'idempotent_replay': {'type': 'boolean', 'description': 'Present and true when this idempotency_key already had a handoff; nothing was re-sent and no token was re-minted'}, 'continuation_expired': {'type': 'boolean', 'description': 'agent mode replay: true when the stored continuation has already expired; it is never re-minted — start a new handoff'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'minLength': 1, 'description': 'Business slug identifier'}}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'services', 'guidance_for_agent'], 'properties': {'slug': {'type': 'string'}, 'services': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'description', 'price_min_cents', 'price_max_cents', 'currency', 'unit', 'params', 'payable', 'quote_hint'], 'properties': {'name': {'type': 'string'}, 'unit': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'params': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}, 'payable': {'type': 'boolean'}, 'currency': {'type': 'string'}, 'quote_hint': {'type': 'object', 'required': ['service', 'params'], 'properties': {'params': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}, 'service': {'type': 'string'}}, 'additionalProperties': False}, 'description': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'price_max_cents': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'price_min_cents': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'guidance_for_agent': {'type': 'string'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'query'], 'properties': {'slug': {'type': 'string', 'minLength': 1, 'description': 'Business slug identifier'}, 'query': {'type': 'string', 'maxLength': 2000, 'minLength': 1, 'description': "The visitor's question about this business"}, 'stage': {'enum': ['browsing', 'comparing', 'committing'], 'type': 'string', 'description': 'Optional buyer stage: browsing | comparing | committing'}, 'agent_id': {'type': 'string', 'description': 'Optional self-asserted calling-agent id — used for logging/tuning only, never auth'}}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['answer', 'referral_url', 'business', 'business_slug'], 'properties': {'answer': {'type': 'string', 'description': "Plain-text answer grounded ONLY in the business's public profile; a fixed apology sentence when the model was unavailable or over budget"}, 'business': {'type': 'string', 'description': "The business's display name"}, 'referral_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "Signed, tracked link to the business's own website for the user to follow; null when the business lists no website"}, 'business_slug': {'type': 'string', 'description': 'Echo of the slug that was queried'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'idempotency_key'], 'properties': {'slug': {'type': 'string', 'minLength': 1, 'description': 'Business slug identifier'}, 'reason': {'type': 'string', 'maxLength': 800, 'description': 'Why the user wants the callback'}, 'urgency': {'enum': ['low', 'normal', 'high', 'emergency'], 'type': 'string', 'description': 'How time-sensitive (default: normal)'}, 'agent_id': {'type': 'string', 'description': 'Optional agent identifier'}, 'contact_name': {'type': 'string', 'maxLength': 120, 'description': "End-user's name"}, 'contact_email': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", 'description': "End-user's email"}, 'contact_phone': {'type': 'string', 'maxLength': 40, 'description': "End-user's phone"}, 'idempotency_key': {'type': 'string', 'minLength': 1, 'description': 'Idempotency key'}, 'preferred_channel': {'enum': ['phone', 'email', 'sms', 'any'], 'type': 'string', 'description': 'Channel the user prefers (default: any)'}}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['callback_id', 'status', 'delivered_via', 'acknowledgment'], 'properties': {'reason': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "Present for a known routing or provider outcome: 'form_routing_configured', 'no_recipient_configured', 'sms_consent_missing', a shape-mismatch skip, a spend-cap denial, or a provider failure code"}, 'status': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "'notified': the configured notification provider accepted the request; this does not prove the business read it. 'failed': routing was not available or the provider reported a failure — see reason. 'pending': a web-form business (see form_url), or a replay while the original send is still in flight."}, 'form_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "Present with reason 'form_routing_configured': the business's own contact form for the user to complete, or null where the business chose form routing without supplying one"}, 'callback_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'delivered_via': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "'sms' or 'email' when notified; null otherwise"}, 'acknowledgment': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'Customer-facing sentence to relay; null only on a replay caught while the original send is still in flight'}, 'idempotent_replay': {'type': 'boolean', 'description': 'Present and true when this idempotency_key already had a request; nothing was re-sent'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['business_id'], 'properties': {'business_id': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'Exact public business slug or provider_business_id obtained from search or the business feed'}}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['business_id', 'name', 'service_names', 'context_token', 'disclosure'], 'properties': {'name': {'type': 'string'}, 'address': {'type': 'string'}, 'disclosure': {'type': 'string'}, 'business_id': {'type': 'string'}, 'context_token': {'type': 'string'}, 'service_names': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'window_start', 'window_end', 'customer_contact', 'idempotency_key'], 'properties': {'slug': {'type': 'string', 'minLength': 1, 'description': 'Business slug identifier'}, 'agent_id': {'type': 'string', 'description': 'Optional agent identifier'}, 'offer_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Optional id of a signed get_quote offer to redeem against this reservation. Omit for a business with no exact-priced service — authentication is a capability upgrade here, never a toll.'}, 'window_end': {'type': 'integer', 'maximum': 9007199254740991, 'description': "Slot end (Unix seconds, an absolute instant) — the matching get_availability slot's `end`; see window_start.", 'exclusiveMinimum': 0}, 'window_start': {'type': 'integer', 'maximum': 9007199254740991, 'description': "Slot start (Unix seconds, an absolute instant). Take it from a get_availability slot: that response carries the business's `timezone`, so request a wide availability window there and filter the returned slots locally rather than guessing the zone.", 'exclusiveMinimum': 0}, 'idempotency_key': {'type': 'string', 'minLength': 1, 'description': 'Unique key for idempotent reservation'}, 'customer_contact': {'type': 'object', 'anyOf': [{'required': ['email']}, {'required': ['phone']}], 'properties': {'name': {'type': 'string', 'description': "Customer's name, if known"}, 'email': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", 'description': 'Where the 6-digit confirmation code is sent, preferred over phone'}, 'phone': {'type': 'string', 'description': 'SMS fallback for the confirmation code when no email is given. Any common way of writing a number is accepted and reformatted for you: (512) 317-1992, 512-317-1992 and 5123171992 all work, and a bare national number is read as US. Only input that cannot be read as a number at all is refused, and then only when no email was supplied, since a hold nobody can confirm is worse than a refused call.'}}, 'description': 'How to reach the customer. MUST include at least one of email or phone — the confirmation code is delivered there, and a hold nobody can confirm is unreachable from both sides. Email is used when both are present.'}}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['reservation_id', 'status', 'expires_at', 'confirmation'], 'properties': {'status': {'type': 'string', 'description': "Reservation state — 'pending_offer' on a fresh hold; a replay returns the existing row's state"}, 'payment': {'type': 'object', 'required': ['required'], 'properties': {'kind': {'enum': ['deposit', 'full'], 'type': 'string'}, 'currency': {'type': 'string'}, 'required': {'type': 'boolean'}, 'amount_cents': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'balance_due_cents': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'description': "Always present. required:false — confirm with the code (confirmation.method 'otp'). required:true — the customer pays amount_cents (currency) to confirm; balance_due_cents is paid at the visit.", 'additionalProperties': False}, 'expires_at': {'type': 'string', 'description': 'ISO-8601. When this hold lapses if it is not confirmed (by code, or by payment when payment.required)'}, 'confirmation': {'type': 'object', 'required': ['method', 'channel', 'delivered'], 'properties': {'method': {'type': 'string', 'description': "'otp': a 6-digit code was sent to the customer. 'payment': no code — this booking is confirmed by paying the deposit in `payment`"}, 'channel': {'type': 'string', 'description': "Where the code went: 'email', 'sms', or 'none' if delivery was unavailable"}, 'delivered': {'type': 'boolean', 'description': 'False means the hold exists but no code reached the customer — the booking cannot be confirmed until one does'}}, 'additionalProperties': False}, 'reservation_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'booking_details': {'type': 'object', 'required': ['business_name', 'timezone', 'start', 'end', 'calendar_name', 'reference'], 'properties': {'end': {'type': 'string'}, 'start': {'type': 'string'}, 'timezone': {'type': 'string'}, 'reference': {'type': 'string'}, 'business_name': {'type': 'string'}, 'calendar_name': {'type': 'string'}}, 'description': 'For configured calendars: present these fixed booking details to the customer before confirming their code. No owner approval is required.', 'additionalProperties': False}, 'idempotent_replay': {'type': 'boolean', 'description': 'Present and true when this idempotency_key already had a reservation; no new code was sent'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['search'], 'properties': {'search': {'type': 'string', 'minLength': 1, 'description': 'Search term — matched against business name, description, services, and category'}, 'location': {'type': 'string', 'description': 'Optional location filter (city, state, or region). Narrows results geographically.'}}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['results'], 'properties': {'results': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'name', 'summary', 'summary_truncated', 'category', 'location', 'website'], 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'summary': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'website': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'category': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'location': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'summary_truncated': {'type': 'boolean'}}, 'additionalProperties': False}}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['business_id', 'context_token', 'idempotency_key', 'service', 'details', 'consent'], 'properties': {'consent': {'type': 'boolean', 'const': True, 'description': 'True only after the customer explicitly agrees to send these contact details and this request to the named business'}, 'details': {'type': 'string', 'maxLength': 600, 'minLength': 1, 'description': 'Brief service requirements; exclude sensitive medical, financial and authentication information'}, 'service': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': 'Service the customer wants a quote for'}, 'business_id': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'The exact provider_business_id (public business slug) returned by request_service'}, 'contact_name': {'type': 'string', 'maxLength': 120, 'minLength': 1}, 'contact_email': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", 'maxLength': 254}, 'contact_phone': {'type': 'string', 'maxLength': 40, 'minLength': 1}, 'context_token': {'type': 'string', 'maxLength': 2000, 'minLength': 1, 'description': 'Opaque business context from request_service; pass unchanged'}, 'idempotency_key': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'A UUID for this request; reuse unchanged when checking or retrying an uncertain submission'}}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['status', 'request_id', 'message'], 'properties': {'code': {'type': 'string'}, 'status': {'enum': ['submitted', 'not_sent', 'delivery_unknown', 'rejected'], 'type': 'string'}, 'message': {'type': 'string'}, 'replayed': {'type': 'boolean'}, 'request_id': {'anyOf': [{'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, {'type': 'null'}]}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'contact_email', 'topics', 'idempotency_key'], 'properties': {'slug': {'type': 'string', 'minLength': 1, 'description': 'Business slug identifier'}, 'topics': {'type': 'array', 'items': {'type': 'string', 'maxLength': 40, 'minLength': 1}, 'maxItems': 10, 'minItems': 1, 'description': "Topic tags (e.g., ['deals', 'schedule_changes'])"}, 'agent_id': {'type': 'string', 'description': 'Optional agent identifier'}, 'contact_email': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", 'minLength': 1, 'description': 'Email to subscribe — confirmed via returned token'}, 'idempotency_key': {'type': 'string', 'minLength': 1, 'description': 'Idempotency key'}}}
Esquema de salida
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['subscription_id', 'status', 'confirmation_token', 'confirmation_url', 'expires_at', 'topics', 'acknowledgment'], 'properties': {'status': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "'pending' until the user opens confirmation_url; a replay returns the stored state (e.g. 'confirmed' once they have)"}, 'topics': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'description': 'Normalised topic tags: trimmed, lower-cased, de-duplicated'}, 'expires_at': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Unix seconds when confirmation_url stops working'}, 'acknowledgment': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'Customer-facing sentence to relay, including the confirmation link'}, 'subscription_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'confirmation_url': {'type': 'string', 'description': 'The link the user must open within 7 days to start receiving updates'}, 'idempotent_replay': {'type': 'boolean', 'description': 'Present and true when this idempotency_key already had a subscription; the stored token is returned, refreshed only if it had expired'}, 'confirmation_token': {'type': 'string', 'description': 'Capability token for this subscriber only — it is the proof of consent; never pass it to another tool or party'}}, 'additionalProperties': False}
Cambios recientes en herramientas
Servidores MCP similares
octapi
Provides WhatsApp-based tools for managing inboxes, customers, catalogues, bookings, and fees.
独行录 / opcmenu
Supports founder and company discovery, collaboration goals and tasks, events and signups, networking, messaging, profiles, produ…
AgentLot Marketplace
Enables agents and users to discover, bid on, purchase, deliver, and settle paid digital services and compute work.
Odichat
Manages WhatsApp, Instagram, and Facebook inboxes with contacts, conversations, agents, automation rules, labels, canned response…
KaiCalls
Provides AI phone reception, outbound calling campaigns, call transcripts and recordings, lead management, routing, staff alerts,…
anima
Provides agent-owned email inboxes, phone and SMS identities, email drafting and sending, message search and threading, domains, …
zobrx
Provides read-only ecommerce operations and analytics for orders, inventory, marketplace performance, advertising, settlements, t…
agendaforge
Manages events, agendas, sessions, speakers, attendees, sponsors, forms, contacts, email templates, approvals, and organizer work…