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 yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:9a89deeb529ad7ae95a22b8cddd16850de5211a22452a6aec3d97f5e76326889 | sha256sum