Server definition
- Hash
- sha256:dd0424d1d5d3ba4c3958cdc777508f0bd31f6813e8042d0d6cbcf7eead182a99
- What it is
- What a remote MCP server returned when asked what it offers: 9 tools
The blob, as servednamed by its sha256
{
"instructions": null,
"tools": [
{
"description": "Create a REAL appointment. CONSEQUENCEFUL: only after the user has explicitly chosen a slot and authorized the booking in their own words. Flow: (1) check the service's bookingRequirements and collect any required customer details (e.g. phone); (2) create a mandate via the create_mandate tool with the user's exact instruction; (3) call this tool with the mandateRef. The mandate is single-use and expires in 15 minutes. On SLOT_NO_LONGER_AVAILABLE offer the returned alternatives — never rebook unilaterally.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"businessId": {
"type": "string"
},
"customer": {
"additionalProperties": false,
"properties": {
"email": {
"type": "string"
},
"name": {
"type": "string"
},
"phone": {
"description": "Required when the service's bookingRequirements.phone is 'required'",
"type": "string"
},
"timezone": {
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"draftId": {
"description": "Booking draft the user consented to (from prepare_booking). When given, the request must match the draft exactly or booking fails with CONSENT_DRAFT_MISMATCH.",
"type": "string"
},
"idempotencyKey": {
"description": "Stable key; safe retries return the original booking",
"type": "string"
},
"mandateRef": {
"description": "From create_mandate (or create_mandate_for_draft) — records the user's authorization",
"type": "string"
},
"serviceId": {
"type": "string"
},
"slot": {
"additionalProperties": false,
"properties": {
"end": {
"type": "string"
},
"staffId": {
"type": "string"
},
"start": {
"type": "string"
}
},
"required": [
"start",
"end"
],
"type": "object"
},
"slotId": {
"description": "Slot id from get_availability (preferred)",
"type": "string"
}
},
"required": [
"businessId",
"serviceId",
"customer",
"mandateRef"
],
"type": "object"
},
"name": "create_booking",
"outputSchema": null
},
{
"description": "Legacy: record the user's authorization WITHOUT a booking draft. Prefer the draft flow: prepare_booking → show proposal → user agrees → create_mandate_for_draft → create_booking with draftId. The draft flow binds consent to the exact appointment the user saw.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"action": {
"enum": [
"create_booking",
"reschedule_booking",
"cancel_booking"
],
"type": "string"
},
"actorRef": {
"description": "Your agent/session identifier, recorded in the audit trail",
"type": "string"
},
"businessId": {
"description": "Bind the mandate to this business",
"type": "string"
},
"instruction": {
"description": "The user's exact words — never fabricate or paraphrase",
"type": "string"
},
"serviceId": {
"type": "string"
}
},
"required": [
"actorRef",
"action",
"businessId",
"instruction"
],
"type": "object"
},
"name": "create_mandate",
"outputSchema": null
},
{
"description": "After the user explicitly agrees to the exact proposal in the draft (an affirmative reply such as 'yes, book it' — the user having already seen business, service, date and time), assert consent here to get a single-use mandate bound to that draft. consentObtained must be true; this assertion is audited. If anything consequential changes (different time, service or business), prepare a NEW draft and get fresh consent.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"actorRef": {
"description": "Your agent/session identifier, recorded in the audit trail",
"type": "string"
},
"consent": {
"additionalProperties": false,
"properties": {
"consentMethod": {
"description": "How, e.g. 'chat reply: yes, book it' or 'spoken yes'",
"type": "string"
},
"consentObtained": {
"const": true,
"type": "boolean"
},
"consentedBy": {
"description": "Who consented, e.g. 'the customer'",
"type": "string"
},
"draftId": {
"type": "string"
},
"instruction": {
"description": "The user's exact consenting words, for the audit trail",
"type": "string"
}
},
"required": [
"consentObtained",
"draftId"
],
"type": "object"
},
"draftId": {
"description": "The draft the user consented to (from prepare_booking)",
"type": "string"
}
},
"required": [
"actorRef",
"draftId",
"consent"
],
"type": "object"
},
"name": "create_mandate_for_draft",
"outputSchema": null
},
{
"description": "Search the AgentBookable registry for businesses that accept AI bookings. Search by free text, category, city, service name or geo radius. ALWAYS start here — the results include capability flags and _links telling you the exact next endpoints.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"category": {
"type": "string"
},
"city": {
"description": "e.g. 'Civray'",
"type": "string"
},
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
},
"query": {
"description": "Free text on name/category/description/services, e.g. 'hairdresser'",
"type": "string"
},
"radiusKm": {
"type": "number"
},
"service": {
"description": "Service name, e.g. 'Haircut'",
"type": "string"
}
},
"type": "object"
},
"name": "find_businesses",
"outputSchema": null
},
{
"description": "Find LIVE availability for a service. Always call this immediately before create_booking — slots are temporary (~60s) and revalidated at booking. Pass an ISO-8601 window; use a slot id from the result when booking.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"businessId": {
"type": "string"
},
"from": {
"description": "ISO-8601 window start, e.g. 2026-09-01T00:00:00Z",
"type": "string"
},
"serviceId": {
"type": "string"
},
"to": {
"description": "ISO-8601 window end",
"type": "string"
}
},
"required": [
"businessId",
"serviceId",
"from",
"to"
],
"type": "object"
},
"name": "get_availability",
"outputSchema": null
},
{
"description": "Retrieve a booking by its AgentBookable id (bb_bkg_*). Requires the mandateRef issued for that booking (from create_booking / create_mandate). Provider identity is never returned.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"bookingId": {
"type": "string"
},
"mandateRef": {
"description": "Mandate ref returned when the booking was authorized/created",
"type": "string"
}
},
"required": [
"bookingId",
"mandateRef"
],
"type": "object"
},
"name": "get_booking",
"outputSchema": null
},
{
"description": "Get one business's record by id (ab_bus_*) or slug. Includes capabilities (availability/booking/reschedule/cancellation/payment) — NEVER promise an action whose flag is false — plus _links to the service list, availability endpoint and booking flow, and per-service bookingRequirements (e.g. whether customer phone is required).",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"businessId": {
"description": "ab_bus_* id or public slug, e.g. 'agentbookable-demo'",
"type": "string"
}
},
"required": [
"businessId"
],
"type": "object"
},
"name": "get_business",
"outputSchema": null
},
{
"description": "List the services a business has opened to AI booking. Each service has a durationMinutes and bookingRequirements telling you what customer details to collect (name/email/phone) BEFORE booking.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"businessId": {
"description": "ab_bus_* id or slug",
"type": "string"
}
},
"required": [
"businessId"
],
"type": "object"
},
"name": "list_services",
"outputSchema": null
},
{
"description": "Prepare a booking draft: the concrete proposal (business, service, time, customer) to show the user. Validates live availability and customer requirements — if requirements are missing you get MISSING_CUSTOMER_REQUIREMENT: ask the user for those details first, then call again. Show the returned draft to the user as the final proposal (business, service, duration, date/time), then obtain explicit affirmative consent. The draft expires after 30 minutes; consent binds to this exact proposal.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"actorRef": {
"description": "Your agent/session identifier for the audit trail",
"type": "string"
},
"businessId": {
"type": "string"
},
"customer": {
"additionalProperties": false,
"properties": {
"email": {
"type": "string"
},
"name": {
"type": "string"
},
"phone": {
"type": "string"
},
"timezone": {
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"serviceId": {
"type": "string"
},
"slot": {
"additionalProperties": false,
"properties": {
"end": {
"type": "string"
},
"staffId": {
"type": "string"
},
"start": {
"type": "string"
}
},
"required": [
"start",
"end"
],
"type": "object"
},
"slotId": {
"description": "Slot id from get_availability (preferred)",
"type": "string"
}
},
"required": [
"businessId",
"serviceId",
"customer",
"actorRef"
],
"type": "object"
},
"name": "prepare_booking",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:dd0424d1d5d3ba4c3958cdc777508f0bd31f6813e8042d0d6cbcf7eead182a99 | sha256sum