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

Server definition

Hash
sha256:9a89deeb529ad7ae95a22b8cddd16850de5211a22452a6aec3d97f5e76326889
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": "Cancel a booking in any non-terminal state, or a confirmed reservation (the registry notifies the merchant). Cancellation is mandatory when the human no longer wants the table — no-shows destroy merchant trust and are tracked per developer key.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "booking_id": { "type": "string" }, "reason": { "type": "string" } }, "required": [ "booking_id" ], "type": "object" }, "name": "cancel_booking", "outputSchema": null }, { "description": "V1 does NOT hold live table availability — availability is checked on the phone call at booking time. This tool returns the merchant's reservation policy, structured hours, and holiday exceptions so you can pick a plausible time before calling place_booking.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "merchant_id": { "type": "string" } }, "required": [ "merchant_id" ], "type": "object" }, "name": "get_availability", "outputSchema": null }, { "description": "State machine position for a booking: pending → queued → in_progress → confirmed | failed | needs_input (plus cancelled). Includes structured details on confirmation (confirmed_time, confirmation_code, merchant_instructions), structured failure reason (no_answer | fully_booked | closed | policy_mismatch | merchant_declined | bad_data), or needs_input options awaiting your decision. include_events=true returns the full audit log.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "booking_id": { "type": "string" }, "include_events": { "type": "boolean" } }, "required": [ "booking_id" ], "type": "object" }, "name": "get_booking_status", "outputSchema": null }, { "description": "Every field the registry holds on one merchant: schema fields, structured hours, raw feedback history, platform-observed operational stats, and per-field provenance with timestamps. Maximal data, zero opinion — the registry never scores or ranks.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "merchant_id": { "type": "string" } }, "required": [ "merchant_id" ], "type": "object" }, "name": "get_merchant", "outputSchema": null }, { "description": "Evaluate the registry itself: per-city coverage (with each city's IANA timezone), merchant/bookable counts, verification and freshness stats, feedback corpus size, schema version, and the documented deterministic ordering rule. Honest by design — including how stale the data is.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": {}, "type": "object" }, "name": "get_registry_meta", "outputSchema": null }, { "description": "Amend a booking before or after the call. For a booking in needs_input: pass accept_option_index to take one of the merchant's offered times (confirms immediately), or pass a new datetime/party_size to re-queue an amended request. Modifying an already-confirmed booking cancels it and books the new request (new booking_id returned).", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "accept_option_index": { "description": "Index into needs_input_options to accept", "minimum": 0, "type": "integer" }, "booking_id": { "type": "string" }, "datetime": { "description": "New requested time, ISO-8601; naive means the merchant's local wall time", "type": "string" }, "party_size": { "minimum": 1, "type": "integer" }, "window_minutes": { "maximum": 240, "minimum": 0, "type": "integer" } }, "required": [ "booking_id" ], "type": "object" }, "name": "modify_booking", "outputSchema": null }, { "description": "Request a table reservation. Returns booking_id with state 'queued' immediately; fulfillment is asynchronous (a call is placed to the merchant). Poll get_booking_status or supply callback_url for webhooks. RETRY SAFETY: pass a unique client_reference_id (recommended: always); if this call times out or errors ambiguously, retry with the SAME client_reference_id and the registry returns the already-created booking instead of double-booking the restaurant. Never re-call place_booking after a timeout without one. If the merchant counter-offers a time within window_minutes and accept_within_window=true, it is auto-accepted (recommended). Otherwise the booking pauses in needs_input for you to resolve via modify_booking. Merchants on the human_call channel are fulfilled by a human operator during the operator window published in get_registry_meta — those bookings queue until worked (up to the channel SLA), so book ahead rather than for the next hour.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "accept_within_window": { "description": "Auto-accept merchant counter-offers inside the window (recommended: true)", "type": "boolean" }, "callback_url": { "description": "Webhook URL for booking state-change events", "format": "uri", "type": "string" }, "client_reference_id": { "description": "Your unique ID for this booking request (a UUID is ideal). Retrying with the same value returns the existing booking (idempotent_replay: true) instead of creating a duplicate; the same value with different parameters is rejected as client_reference_conflict", "maxLength": 128, "minLength": 1, "type": "string" }, "contact": { "description": "Optional phone/email for confirmation relay to the end human", "type": "string" }, "datetime": { "description": "Requested time, ISO-8601. Naive ('2026-07-18T19:00') means the merchant's LOCAL wall time (see the merchant's timezone field); an explicit offset ('2026-07-18T19:00:00+09:00') is also accepted", "type": "string" }, "merchant_id": { "type": "string" }, "party_size": { "minimum": 1, "type": "integer" }, "reservation_name": { "description": "Name for the reservation", "type": "string" }, "sandbox_outcome": { "description": "TEST ONLY, sandbox merchants (sandbox: true): force the simulated call's result so you can exercise a specific branch on demand — confirmed, no_answer (retries then fails), counter_offer (pauses in needs_input), fully_booked, merchant_declined, bad_data. Rejected for real merchants; omit it in production", "enum": [ "confirmed", "no_answer", "counter_offer", "fully_booked", "merchant_declined", "bad_data" ], "type": "string" }, "special_requests": { "maxLength": 280, "type": "string" }, "window_minutes": { "description": "Acceptable +/- window around datetime", "maximum": 240, "minimum": 0, "type": "integer" } }, "required": [ "merchant_id", "party_size", "datetime", "reservation_name" ], "type": "object" }, "name": "place_booking", "outputSchema": null }, { "description": "Filter-based search over the restaurant registry (coverage cities + timezones in get_registry_meta). NOT ranked: results come back in deterministic order (merchant_id ASC by default; distance ASC when lat/lng given and order_by=\"distance\"). Returns compact records with pagination. Use get_merchant for the full signal dump on a specific merchant. All filters are optional and combinable.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "attribute_tags": { "description": "Match ALL of these attributes, e.g. ['outdoor_seating','vegetarian_friendly']", "items": { "type": "string" }, "type": "array" }, "bookable_only": { "description": "Only merchants the registry can book right now (phone-verified, accepts reservations, not opted out)", "type": "boolean" }, "cuisine_tags": { "description": "Match ANY of these cuisines, e.g. ['japanese','korean']", "items": { "type": "string" }, "type": "array" }, "lat": { "description": "Latitude for geo-radius filter (requires lng and radius_km)", "type": "number" }, "limit": { "maximum": 100, "minimum": 1, "type": "integer" }, "lng": { "type": "number" }, "neighborhood": { "description": "Exact neighborhood name, e.g. 'Mission'", "type": "string" }, "offset": { "minimum": 0, "type": "integer" }, "open_at": { "description": "ISO-8601 datetime; only merchants open at this time. With an explicit offset ('2026-07-18T19:00:00+09:00' or trailing Z) the instant is evaluated in each merchant's own timezone; without one it means each merchant's local wall clock", "type": "string" }, "order_by": { "enum": [ "merchant_id", "distance" ], "type": "string" }, "party_size": { "description": "Only merchants that can seat this party size", "minimum": 1, "type": "integer" }, "price_band_max": { "maximum": 4, "minimum": 1, "type": "integer" }, "price_band_min": { "maximum": 4, "minimum": 1, "type": "integer" }, "radius_km": { "description": "Radius in km around lat/lng", "type": "number" }, "sandbox": { "description": "Filter by merchant kind. true = sandbox test merchants only (safe integration targets: they book end-to-end and return a SIMULATED confirmation, never dialing a real venue). false = real merchants only — use this for any booking a human will act on. Omitted = both. Every result carries `sandbox`; never present a sandbox confirmation to a user as a real reservation.", "type": "boolean" } }, "type": "object" }, "name": "search_merchants", "outputSchema": null }, { "description": "Report how a confirmed reservation actually went. Accepted only against a confirmed booking_id, once per booking, within 14 days of confirmation. Structured fields first; optional free text ≤ 500 chars. This corpus is served raw to all agents via get_merchant — it is never editorialized or turned into a score.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "booking_id": { "type": "string" }, "free_text": { "maxLength": 500, "type": "string" }, "matched_description": { "description": "Did the merchant match the registry's description?", "type": "boolean" }, "reservation_honored": { "description": "Did the merchant honor the reservation?", "type": "boolean" }, "seated_on_time": { "type": "boolean" }, "would_repeat": { "type": "boolean" } }, "required": [ "booking_id", "reservation_honored" ], "type": "object" }, "name": "submit_feedback", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:9a89deeb529ad7ae95a22b8cddd16850de5211a22452a6aec3d97f5e76326889 | sha256sum