Upsalt Booking
Search Upsalt venues, check availability, and book, view, or cancel a reservation.
Should I use this
Quality & Safety
Findings (5)
- LOWin find-company
- LOWin list-available-slots
- LOWin create-booking
- LOWin get-booking-info
- LOWin cancel-booking
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"upsalt-booking": {
"url": "https://ai.upsalt.io/mcp/booking"
}
}
}Remote endpoints
https://ai.upsalt.io/mcp/bookingstreamable-httpWhat it can do
Tool inventory
Tools (5)
🟢find-company(slug, business_type)
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.
Input Schema
{
"type": "object",
"properties": {
"slug": {
"description": "The company slug, as found in its booking page URL.",
"type": "string"
},
"business_type": {
"description": "Optional business type filter.",
"type": "string"
}
},
"required": [
"slug"
]
}🟢list-available-slots(company_id, date)
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.
Input Schema
{
"type": "object",
"properties": {
"company_id": {
"description": "The company id, as returned by the find-company tool.",
"type": "integer"
},
"date": {
"description": "The date to check, in YYYY-MM-DD format (e.g. 2026-07-20).",
"type": "string"
}
},
"required": [
"company_id",
"date"
]
}🔴create-booking(company_id, date, hour, shift_id, adults, ...)
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",
"properties": {
"company_id": {
"description": "The company id, as returned by the find-company tool.",
"type": "integer"
},
"date": {
"description": "Booking date in YYYY/MM/DD format (e.g. 2026/07/20). Note the slashes.",
"type": "string"
},
"hour": {
"description": "Booking hour in HH:MM format, taken from list-available-slots.",
"type": "string"
},
"shift_id": {
"description": "The shift id, taken from list-available-slots.",
"type": "integer"
},
"adults": {
"description": "Number of adults.",
"type": "integer"
},
"name": {
"description": "Guest first name.",
"type": "string"
},
"surname": {
"description": "Guest last name.",
"type": "string"
},
"email": {
"description": "Guest email address. The booking confirmation and management token are sent here.",
"type": "string"
},
"phone": {
"description": "Guest phone number.",
"type": "string"
},
"children": {
"description": "Number of children.",
"type": "integer"
},
"babies": {
"description": "Number of babies.",
"type": "integer"
},
"pets": {
"description": "Number of pets.",
"type": "integer"
},
"vegan": {
"description": "Whether the party includes vegan guests.",
"type": "boolean"
},
"vegetarian": {
"description": "Whether the party includes vegetarian guests.",
"type": "boolean"
},
"gluten_free": {
"description": "Whether the party needs gluten-free options.",
"type": "boolean"
},
"nuts_allergy": {
"description": "Whether the party has a nut allergy.",
"type": "boolean"
},
"message": {
"description": "Optional message for the business.",
"type": "string"
},
"pushchair": {
"description": "Number of pushchairs.",
"type": "integer"
},
"wheelchair": {
"description": "Number of wheelchairs.",
"type": "integer"
},
"highchair": {
"description": "Number of highchairs.",
"type": "integer"
},
"optin": {
"description": "Marketing opt-in flag (1 or 0).",
"type": "integer"
},
"latitude": {
"description": "Guest latitude, if known.",
"type": "number"
},
"longitude": {
"description": "Guest longitude, if known.",
"type": "number"
},
"country": {
"description": "Guest country.",
"type": "string"
},
"city": {
"description": "Guest city.",
"type": "string"
},
"guest_token": {
"description": "Existing guest token, if the guest has booked before.",
"type": "string"
}
},
"required": [
"company_id",
"date",
"hour",
"shift_id",
"adults",
"name",
"surname",
"email",
"phone"
]
}🟢get-booking-info(company_id, token)
Retrieve the details of an existing booking using the management token returned by create-booking.
Input Schema
{
"type": "object",
"properties": {
"company_id": {
"description": "The company id the booking belongs to.",
"type": "integer"
},
"token": {
"description": "The booking management token returned by create-booking.",
"type": "string"
}
},
"required": [
"company_id",
"token"
]
}🔴cancel-booking(token)
Cancel an existing booking using the management token returned by create-booking. This action is irreversible; confirm with the guest before calling it.
Input Schema
{
"type": "object",
"properties": {
"token": {
"description": "The booking management token returned by create-booking.",
"type": "string"
}
},
"required": [
"token"
]
}Community
Evidence