MCP Server

Upsalt Booking

io.github.Everyways/upsalt-booking
Travel & Hospitality Public & reachable MCP 2026-07-28

What this MCP does

Searches venue profiles and availability, and creates, retrieves, or cancels reservations.

cancel-booking
Cancel Booking
Cancel an existing booking using the management token returned by create-booking. This action is irreversible; confirm with the guest before calling it.
Destructive
Input schema
{'type': 'object', 'required': ['token'], 'properties': {'token': {'type': 'string', 'description': 'The booking management token returned by create-booking.'}}}
create-booking
Create Booking
Create a booking for a company as a guest. Requires a date (YYYY/MM/DD), an hour and shift_id obtained from list-available-slots, and the guest contact details. On success, returns the reservation details including a token that can be used with get-booking-info and cancel-booking.
Input schema
{'type': 'object', 'required': ['company_id', 'date', 'hour', 'shift_id', 'adults', 'name', 'surname', 'email', 'phone'], 'properties': {'city': {'type': 'string', 'description': 'Guest city.'}, 'date': {'type': 'string', 'description': 'Booking date in YYYY/MM/DD format (e.g. 2026/07/20). Note the slashes.'}, 'hour': {'type': 'string', 'description': 'Booking hour in HH:MM format, taken from list-available-slots.'}, 'name': {'type': 'string', 'description': 'Guest first name.'}, 'pets': {'type': 'integer', 'description': 'Number of pets.'}, 'email': {'type': 'string', 'description': 'Guest email address. The booking confirmation and management token are sent here.'}, 'optin': {'type': 'integer', 'description': 'Marketing opt-in flag (1 or 0).'}, 'phone': {'type': 'string', 'description': 'Guest phone number.'}, 'vegan': {'type': 'boolean', 'description': 'Whether the party includes vegan guests.'}, 'adults': {'type': 'integer', 'description': 'Number of adults.'}, 'babies': {'type': 'integer', 'description': 'Number of babies.'}, 'country': {'type': 'string', 'description': 'Guest country.'}, 'message': {'type': 'string', 'description': 'Optional message for the business.'}, 'surname': {'type': 'string', 'description': 'Guest last name.'}, 'children': {'type': 'integer', 'description': 'Number of children.'}, 'latitude': {'type': 'number', 'description': 'Guest latitude, if known.'}, 'shift_id': {'type': 'integer', 'description': 'The shift id, taken from list-available-slots.'}, 'highchair': {'type': 'integer', 'description': 'Number of highchairs.'}, 'longitude': {'type': 'number', 'description': 'Guest longitude, if known.'}, 'pushchair': {'type': 'integer', 'description': 'Number of pushchairs.'}, 'company_id': {'type': 'integer', 'description': 'The company id, as returned by the find-company tool.'}, 'vegetarian': {'type': 'boolean', 'description': 'Whether the party includes vegetarian guests.'}, 'wheelchair': {'type': 'integer', 'description': 'Number of wheelchairs.'}, 'gluten_free': {'type': 'boolean', 'description': 'Whether the party needs gluten-free options.'}, 'guest_token': {'type': 'string', 'description': 'Existing guest token, if the guest has booked before.'}, 'nuts_allergy': {'type': 'boolean', 'description': 'Whether the party has a nut allergy.'}}}
find-company
Find Company
Find a company by its slug and return its public profile: services, opening hours, and booking configuration. Use this first to obtain the company_id needed by the other tools.
Read only
Input schema
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'The company slug, as found in its booking page URL.'}, 'business_type': {'type': 'string', 'description': 'Optional business type filter.'}}}
get-booking-info
Get Booking Info
Retrieve the details of an existing booking using the management token returned by create-booking.
Read only
Input schema
{'type': 'object', 'required': ['company_id', 'token'], 'properties': {'token': {'type': 'string', 'description': 'The booking management token returned by create-booking.'}, 'company_id': {'type': 'integer', 'description': 'The company id the booking belongs to.'}}}
list-available-slots
List Available Slots
List the available booking slots for a company on a given date. Returns shifts and bookable hours; use the shift_id and hour when creating a booking.
Read only
Input schema
{'type': 'object', 'required': ['company_id', 'date'], 'properties': {'date': {'type': 'string', 'description': 'The date to check, in YYYY-MM-DD format (e.g. 2026-07-20).'}, 'company_id': {'type': 'integer', 'description': 'The company id, as returned by the find-company tool.'}}}
Added
cancel-booking
Sept. 17, 2026, 12:41 p.m.
Added
get-booking-info
Sept. 17, 2026, 12:41 p.m.
Added
create-booking
Sept. 17, 2026, 12:41 p.m.
Added
list-available-slots
Sept. 17, 2026, 12:41 p.m.
Added
find-company
Sept. 17, 2026, 12:41 p.m.