Endpoints: 28,729MCP servers: 18,414Payout addresses: 2,071Paid calls: 1,562Letters: 14Defects: 1,336counted 1 min ago
teppi

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 yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:dd0424d1d5d3ba4c3958cdc777508f0bd31f6813e8042d0d6cbcf7eead182a99 | sha256sum