Book a table, appointment or class at a real local business. Instant confirmation, no API key.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Cancel an upcoming booking and release its slot to other guests. Identified like check_booking: booking_id plus manage_token. Confirm with the guest before calling; the cancellation is immediate and this server cannot undo it, the guest would simply book again. The venue is notified exactly as for a cancellation from the manage link. Safe to retry: cancelling a booking that is already cancelled returns the same result, not an error. A booking whose start time has passed cannot be cancelled and returns an error saying so. To move a booking to another time, cancel it and create a new one.
The booking_id create_booking returned, or the id in the guest's manage link.
The token from the same booking's manage link (its ?token= parameter).
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Cancel an upcoming booking and release its slot to other guests. Identified like check_booking: booking_id plus manage_token. Confirm with the guest before calling; the cancellation is immediate and this server cannot undo it, the guest would simply book again. The venue is notified exactly as for a cancellation from the manage link. Safe to retry: cancelling a booking that is already cancelled returns the same result, not an error. A booking whose start time has passed cannot be cancelled and returns an error saying so. To move a booking to another time, cancel it and create a new one.
| Argument | Type | Description |
|---|---|---|
| booking_id* | string | The booking_id create_booking returned, or the id in the guest's manage link. |
| manage_token* | string | The token from the same booking's manage link (its ?token= parameter). |
{
"type": "object",
"required": [
"booking_id",
"manage_token"
],
"properties": {
"booking_id": {
"type": "string",
"description": "The booking_id create_booking returned, or the id in the guest's manage link."
},
"manage_token": {
"type": "string",
"description": "The token from the same booking's manage link (its ?token= parameter)."
}
}
}List bookable time slots for a business on a given date and party size. Offer the guest only slots where available is true.
| Argument | Type | Description |
|---|---|---|
| date* | string | YYYY-MM-DD, in the venue's local calendar. |
| slug* | string | |
| party_size* | integer |
{
"type": "object",
"required": [
"slug",
"date",
"party_size"
],
"properties": {
"date": {
"type": "string",
"description": "YYYY-MM-DD, in the venue's local calendar."
},
"slug": {
"type": "string"
},
"party_size": {
"type": "integer",
"minimum": 1
}
}
}Look up one existing booking so the guest can confirm when and where it is. Identify it with the booking_id and manage_token that create_booking returned; both also sit in the guest's confirmation email as the manage link, /booking/<booking_id>?token=<manage_token>. Returns the business, the local date and time with its timezone, party size, service and status: confirmed, pending_confirmation, pending_payment (with payment_url while it can be paid), cancelled, or for past bookings completed or no_show. Never returns the guest's name, email or phone. A wrong or missing token is refused without revealing whether the booking exists.
| Argument | Type | Description |
|---|---|---|
| booking_id* | string | The booking_id create_booking returned, or the id in the guest's manage link. |
| manage_token* | string | The token from the same booking's manage link. If the guest only has the link, take the token from its ?token= parameter. |
{
"type": "object",
"required": [
"booking_id",
"manage_token"
],
"properties": {
"booking_id": {
"type": "string",
"description": "The booking_id create_booking returned, or the id in the guest's manage link."
},
"manage_token": {
"type": "string",
"description": "The token from the same booking's manage link. If the guest only has the link, take the token from its ?token= parameter."
}
}
}Create a real reservation. Use a start value returned by check_availability. Never invent guest details. Ask the person for their real name, email and phone first. If the result status is pending_confirmation, show the guest the confirmation_url. If it is pending_payment, the venue takes a prepayment: show the guest the payment_url, and do not say it is booked until it is paid.
| Argument | Type | Description |
|---|---|---|
| name* | string | |
| slug* | string | |
| email* | string | |
| notes | string | |
| phone* | string | |
| start* | string | The slot's `start` value, copied exactly as check_availability returned it. |
| source | string | Which assistant is booking. Defaults to other_ai. proof_video is our own channel: bookings made while filming a proof clip. |
| language | string | The guest's language as an ISO 639-1 code: en, nl, de, fr, es, it, id or bg. The confirmation, the reminders and the manage page are sent in it. Defaults to English. |
Fetch full details for one business id returned by search: services, hours, timezone and how to book it.
| Argument | Type | Description |
|---|---|---|
| id* | string |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
}
}
}Look up a business on G-Guest: services, opening hours, timezone and maximum party size. Call this first if you only know the slug.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Business identifier, e.g. "demo". |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Business identifier, e.g. \"demo\"."
}
}
}Ask G-Guest to list a business that is not on it yet. Use it when the person you are helping runs a restaurant, cafe, bar, salon, spa, studio or clinic and wants reservations that assistants can make. Nothing is published by this call: the request reaches the G-Guest team as a lead, a person reviews it and contacts the business, and only then is anything set up. The owner's or manager's email is required, because the reply comes by email; a phone is optional extra. Do not call it for a guest who merely wants to book somewhere, and never submit a business without its owner's or manager's say-so. Returns a receipt with a reference id; no timeline is promised.
| Argument | Type | Description |
|---|---|---|
| city* | string | City and country, e.g. "Canggu, Indonesia". |
| message | string | Anything the owner wants the team to know: languages, seats, how bookings are taken today. Up to 500 characters. |
| website | string | The business website or Instagram page, if it has one. |
| contact_name | string | Who asked, so the reply can address them by name. |
| business_name* | string | The business's own name, as its owner writes it. |
| business_type* | string | The closest category. |
| contact_email* |
Search bookable businesses on G-Guest by name or slug. Returns ids you can pass to fetch or to the booking tools.
| Argument | Type | Description |
|---|---|---|
| query* | string |
{
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"type": "string"
}
}
}| party_size* | integer |
| idempotency_key | string | Retry safety: pick any unique string for this booking attempt and reuse it on retries. The same key always returns the same booking, never a duplicate. |
{
"type": "object",
"required": [
"slug",
"start",
"party_size",
"name",
"email",
"phone"
],
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"email": {
"type": "string"
},
"notes": {
"type": "string"
},
"phone": {
"type": "string"
},
"start": {
"type": "string",
"description": "The slot's `start` value, copied exactly as check_availability returned it."
},
"source": {
"enum": [
"chatgpt",
"hermes",
"other_ai",
"proof_video"
],
"type": "string",
"description": "Which assistant is booking. Defaults to other_ai. proof_video is our own channel: bookings made while filming a proof clip."
},
"language": {
"type": "string",
"description": "The guest's language as an ISO 639-1 code: en, nl, de, fr, es, it, id or bg. The confirmation, the reminders and the manage page are sent in it. Defaults to English."
},
"party_size": {
"type": "integer",
"minimum": 1
},
"idempotency_key": {
"type": "string",
"description": "Retry safety: pick any unique string for this booking attempt and reuse it on retries. The same key always returns the same booking, never a duplicate."
}
}
}| string |
| Email of the owner or manager who asked. The reply goes here. |
| contact_phone | string | Phone with country code, optional. |
{
"type": "object",
"required": [
"business_name",
"city",
"business_type",
"contact_email"
],
"properties": {
"city": {
"type": "string",
"description": "City and country, e.g. \"Canggu, Indonesia\"."
},
"message": {
"type": "string",
"description": "Anything the owner wants the team to know: languages, seats, how bookings are taken today. Up to 500 characters."
},
"website": {
"type": "string",
"description": "The business website or Instagram page, if it has one."
},
"contact_name": {
"type": "string",
"description": "Who asked, so the reply can address them by name."
},
"business_name": {
"type": "string",
"description": "The business's own name, as its owner writes it."
},
"business_type": {
"enum": [
"restaurant",
"cafe",
"bar",
"salon",
"barbershop",
"spa",
"studio",
"clinic",
"other"
],
"type": "string",
"description": "The closest category."
},
"contact_email": {
"type": "string",
"description": "Email of the owner or manager who asked. The reply goes here."
},
"contact_phone": {
"type": "string",
"description": "Phone with country code, optional."
}
}
}