Upsalt Booking

Search Upsalt venues, check availability, and book, view, or cancel a reservation.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
100%
Naming quality
70%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (5)

  • LOWTool 'find-company' doesn't follow camelCase/snake_casein find-company
  • LOWTool 'list-available-slots' doesn't follow camelCase/snake_casein list-available-slots
  • LOWTool 'create-booking' doesn't follow camelCase/snake_casein create-booking
  • LOWTool 'get-booking-info' doesn't follow camelCase/snake_casein get-booking-info
  • LOWTool 'cancel-booking' doesn't follow camelCase/snake_casein cancel-booking

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~938Tokens (tool definitions)
~1.8 KBTypical response size
Moderate attention impact (0.73% of 128k context)

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-http

What it can do

Tool inventory

Tools (5)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢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

Rate this Server

Evidence

Recent observations

verifiedversion not recorded5 tools
verifiedversion not recorded5 tools
verifiedversion not recorded5 tools