resOS MCP by usefulapi

Read bookings, guests and availability; create, update or cancel bookings in resOS.

Sollte ich dies verwenden

Qualität und Sicherheit

A
Qualität der Beschreibung
99%
Vollständigkeit des Schemas
90%
Qualität der Benennung
80%
Risiko der Vergiftung
100%
Übereinstimmung der Berechtigungen
100%
Einhaltung des Protokolls
100%

Basierend auf einer automatisierten Analyse der Tool-Definitionen und der Einhaltung des Protokolls.

Kontextkosten

~5,026Tokens (Tool-Definitionen)
~1.8 KBTypische Antwortgröße
Erhebliche Auswirkung auf die Aufmerksamkeit (3.93% von 128k Kontext)

Dies ist die ungefähre Anzahl der Tokens, die jedes Mal verbraucht werden, wenn die Tools des Servers in den Kontext eines Modells geladen werden. Höhere Werte verringern die Aufmerksamkeit, die für andere Aufgaben verfügbar ist.

Installieren

Installation mit einem Klick

Fügen Sie dies Ihrer Datei `claude_desktop_config.json` hinzu:

{
  "mcpServers": {
    "resos": {
      "url": "https://resos.usefulapi.io/mcp"
    }
  }
}

Remote-Endpunkte

https://resos.usefulapi.io/mcpstreamable-http

Was es kann

Tool-Inventar

Tools (19)

🟢 Nur lesen🟡 Schreiben🔴 Löschen⚪ Unbekannt
🟢resos_list_bookings(from_date_time, to_date_time, status, only_confirmed, people, ...)

List bookings, newest or oldest first as you sort, with date, time, party size, status, the guest's name, e-mail and phone, assigned tables and custom-field answers. Filter by date range, status, party size or guest name. The comment thread and sent-message log are not included (use resos_get_booking for the thread). Pages of at most 100; pass next_skip to read on. GET /bookings.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "from_date_time": {
      "description": "Start of the range, inclusive: ISO 8601 with a timezone, e.g. 2026-10-01T00:00:00Z.",
      "type": "string"
    },
    "to_date_time": {
      "description": "End of the range, inclusive: ISO 8601 with a timezone, e.g. 2026-10-31T23:59:59Z.",
      "type": "string"
    },
    "status": {
      "description": "Only bookings with this status.",
      "type": "string",
      "enum": [
        "request",
        "declined",
        "approved",
        "arrived",
        "seated",
        "left",
        "no_show",
        "canceled",
        "deleted",
        "waitlist",
        "confirm",
        "closed"
      ]
    },
    "only_confirmed": {
      "description": "Only approved, arrived, seated or left bookings.",
      "type": "boolean"
    },
    "people": {
      "description": "Only bookings for exactly this many guests.",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "guest_name_contains": {
      "description": "Only bookings whose guest name contains this text.",
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "pattern": "^[\\p{L}\\p{N} '-]+$"
    },
    "sort": {
      "description": "Sort, `field:direction[,field2:direction]`, direction 1 ascending or -1 descending, e.g. `dateTime:-1`.",
      "type": "string",
      "pattern": "^[A-Za-z0-9_.]+:-?1(,[A-Za-z0-9_.]+:-?1)*$"
    },
    "custom_query": {
      "description": "Extra filter, comma-separated `field<op>value`: `:` equals, `>` greater, `<` less, `;` contains. Example: `guest.phone:+15550100001`.",
      "type": "string",
      "minLength": 1,
      "maxLength": 500
    },
    "skip": {
      "description": "Records to skip (default 0). Pass the previous reply's next_skip.",
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000
    },
    "limit": {
      "description": "Records to return, 1-100 (default 25).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢resos_get_booking(booking_id)

One booking by id, with the guest's contact data, tables, custom fields, payment, the comment thread (guest and restaurant messages) and the internal restaurant notes. GET /bookings/{id}.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "booking_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "pattern": "^[A-Za-z0-9_-]+$",
      "description": "resOS booking id (the _id of a booking)."
    }
  },
  "required": [
    "booking_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢resos_list_customers(name_contains, custom_query, skip, limit)

List the restaurant's customers (guest profiles): name, e-mails, phones, city and country, tags, notes, flags, booking count and newsletter consent. The street address is not returned. Filter by name. Pages of at most 100. GET /customers.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "name_contains": {
      "description": "Only customers whose name contains this text.",
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "pattern": "^[\\p{L}\\p{N} '-]+$"
    },
    "custom_query": {
      "description": "Extra filter, comma-separated `field<op>value`: `:` equals, `>` greater, `<` less, `;` contains. Example: `guest.phone:+15550100001`.",
      "type": "string",
      "minLength": 1,
      "maxLength": 500
    },
    "skip": {
      "description": "Records to skip (default 0). Pass the previous reply's next_skip.",
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000
    },
    "limit": {
      "description": "Records to return, 1-100 (default 25).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢resos_get_customer(customer_id)

One customer (guest profile) by id: contact data, tags, notes, flags, booking count and latest booking. GET /customers/{id}.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "customer_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "pattern": "^[A-Za-z0-9_-]+$",
      "description": "resOS customer id."
    }
  },
  "required": [
    "customer_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢resos_list_guest_feedback(from_date_time, to_date_time, only_submitted, sort, custom_query, ...)

List guest feedback (ratings for food, service, value and atmosphere, whether they recommend, and the message). Filter by date range, or only submitted feedback. Pages of at most 100. GET /guestFeedback.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "from_date_time": {
      "description": "Start of the range, inclusive: ISO 8601 with a timezone.",
      "type": "string"
    },
    "to_date_time": {
      "description": "End of the range, inclusive: ISO 8601 with a timezone.",
      "type": "string"
    },
    "only_submitted": {
      "description": "Only feedback the guest has submitted.",
      "type": "boolean"
    },
    "sort": {
      "description": "Sort, `field:direction[,field2:direction]`, direction 1 ascending or -1 descending, e.g. `dateTime:-1`.",
      "type": "string",
      "pattern": "^[A-Za-z0-9_.]+:-?1(,[A-Za-z0-9_.]+:-?1)*$"
    },
    "custom_query": {
      "description": "Extra filter, comma-separated `field<op>value`: `:` equals, `>` greater, `<` less, `;` contains. Example: `guest.phone:+15550100001`.",
      "type": "string",
      "minLength": 1,
      "maxLength": 500
    },
    "skip": {
      "description": "Records to skip (default 0). Pass the previous reply's next_skip.",
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000
    },
    "limit": {
      "description": "Records to return, 1-100 (default 25).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢resos_get_guest_feedback(feedback_id)

One guest feedback entry by id. GET /guestFeedback/{id}.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "feedback_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "pattern": "^[A-Za-z0-9_-]+$",
      "description": "resOS guest feedback id."
    }
  },
  "required": [
    "feedback_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢resos_list_seating_areas

List the seating areas with their tables (id, name, minimum and maximum seats) and table combinations. Use the ids for bookings and availability. GET /tables.

Eingabe-Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢resos_list_opening_hours(type, only_special, show_deleted, sort)

List the opening hours: regular weekly hours (day 1 Monday to 7 Sunday) and special date-specific hours, each with id, name, open and close times and whether the restaurant is open. GET /openingHours.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "type": {
      "description": "Opening-hour mode, e.g. `restaurant` or `shop`.",
      "type": "string",
      "minLength": 1,
      "maxLength": 50,
      "pattern": "^[A-Za-z0-9_-]+$"
    },
    "only_special": {
      "description": "Only special (date-specific) hours.",
      "type": "boolean"
    },
    "show_deleted": {
      "description": "Include deleted hours.",
      "type": "boolean"
    },
    "sort": {
      "description": "Sort, `field:direction[,field2:direction]`, direction 1 ascending or -1 descending, e.g. `dateTime:-1`.",
      "type": "string",
      "pattern": "^[A-Za-z0-9_.]+:-?1(,[A-Za-z0-9_.]+:-?1)*$"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢resos_get_opening_hour(opening_hour_id)

One opening-hour entry by id. GET /openingHours/{id}.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "opening_hour_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "pattern": "^[A-Za-z0-9_-]+$",
      "description": "resOS opening hour id."
    }
  },
  "required": [
    "opening_hour_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢resos_list_custom_fields

List the custom booking fields (name, label, type, required, choices). Use the ids to read or set custom-field answers. GET /customFields.

Eingabe-Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢resos_get_custom_field(custom_field_id)

One custom booking field by id. GET /customFields/{id}.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "custom_field_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "pattern": "^[A-Za-z0-9_-]+$",
      "description": "resOS custom field id."
    }
  },
  "required": [
    "custom_field_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢resos_get_available_dates(from_date, to_date)

Dates in a range on which the restaurant is open for bookings (default: the next 30 days). GET /bookingFlow/dates.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "from_date": {
      "description": "Start date, inclusive, yyyy-mm-dd (default today).",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "to_date": {
      "description": "End date, inclusive, yyyy-mm-dd (default 30 days after from_date).",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢resos_get_available_times(people, date, area_id, only_bookable_online)

Booking times that are free on a date for a party size, optionally for one seating area. GET /bookingFlow/times.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "people": {
      "type": "integer",
      "minimum": 1,
      "maximum": 1000,
      "description": "Number of guests."
    },
    "date": {
      "description": "Date, yyyy-mm-dd (default today).",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "area_id": {
      "description": "Only this seating area (id from resos_list_seating_areas).",
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "pattern": "^[A-Za-z0-9_-]+$"
    },
    "only_bookable_online": {
      "description": "Only areas that guests can book online (resOS default true).",
      "type": "boolean"
    }
  },
  "required": [
    "people"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢resos_get_available_tables(people, from_date_time, to_date_time, area_id, only_bookable_online, ...)

The tables and table combinations that are free for a party size in a time window (UTC). Use it before assigning tables to a booking. GET /bookingFlow/availableTables.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "people": {
      "type": "integer",
      "minimum": 1,
      "maximum": 1000,
      "description": "Number of guests."
    },
    "from_date_time": {
      "type": "string",
      "description": "Start of the window: ISO 8601 with a timezone, e.g. 2026-10-15T18:00:00Z."
    },
    "to_date_time": {
      "type": "string",
      "description": "End of the window: ISO 8601 with a timezone."
    },
    "area_id": {
      "description": "Only this seating area.",
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "pattern": "^[A-Za-z0-9_-]+$"
    },
    "only_bookable_online": {
      "description": "Only areas that guests can book online (resOS default true).",
      "type": "boolean"
    },
    "return_all_tables": {
      "description": "Also list occupied tables.",
      "type": "boolean"
    },
    "exclude_booking_id": {
      "description": "Ignore this booking when counting what is taken (to re-assign its tables).",
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "pattern": "^[A-Za-z0-9_-]+$"
    }
  },
  "required": [
    "people",
    "from_date_time",
    "to_date_time"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴resos_create_booking(people, date, time, guest_name, guest_email, ...)

WRITE: create a booking for a guest. It is a real booking in the restaurant's book. If notify_email or notify_sms is true, resOS e-mails or texts the GUEST (a confirmation); both default to false. Date and time are in the restaurant's local timezone. Check resos_get_available_times first: resOS may refuse a slot that is full or closed. It is not retried: if the call times out, read the bookings before you try again, or you may book twice. resOS may silently throttle the same e-mail, phone or IP creating more than 10 bookings in 24 hours. POST /bookings.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "people": {
      "type": "integer",
      "minimum": 1,
      "maximum": 1000,
      "description": "Number of guests."
    },
    "date": {
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
      "description": "Local date, yyyy-mm-dd."
    },
    "time": {
      "type": "string",
      "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
      "description": "Local time, HH:mm, 24-hour."
    },
    "guest_name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The guest's name."
    },
    "guest_email": {
      "description": "The guest's e-mail address.",
      "type": "string",
      "maxLength": 320
    },
    "guest_phone": {
      "description": "The guest's phone number with the country code.",
      "type": "string",
      "minLength": 5,
      "maxLength": 30,
      "pattern": "^\\+?[0-9 ()./-]+$"
    },
    "notify_email": {
      "description": "Send the guest an e-mail (needs guest_email). Default false.",
      "type": "boolean"
    },
    "notify_sms": {
      "description": "Send the guest a text message (needs guest_phone). Default false.",
      "type": "boolean"
    },
    "status": {
      "description": "Initial status (default: the resOS default for new bookings).",
      "type": "string",
      "enum": [
        "request",
        "approved",
        "waitlist",
        "confirm"
      ]
    },
    "language_code": {
      "description": "Language of the guest's messages.",
      "type": "string",
      "enum": [
        "da",
        "de",
        "el",
        "en",
        "es",
        "fi",
        "fr",
        "it",
        "nl",
        "no",
        "pl",
        "pt",
        "sq",
        "sv",
        "uk"
      ]
    },
    "comment": {
      "description": "A comment from the guest, e.g. `Window seat preferred`.",
      "type": "string",
      "minLength": 1,
      "maxLength": 2000
    },
    "note": {
      "description": "An internal restaurant note, not shown to the guest.",
      "type": "string",
      "minLength": 1,
      "maxLength": 2000
    },
    "duration": {
      "description": "Duration in minutes.",
      "type": "integer",
      "minimum": 1,
      "maximum": 1440
    },
    "area_id": {
      "description": "Seating area; resOS then picks tables from this area.",
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "pattern": "^[A-Za-z0-9_-]+$"
    },
    "table_ids": {
      "description": "Specific table ids to assign.",
      "minItems": 1,
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 64,
        "pattern": "^[A-Za-z0-9_-]+$"
      }
    }
  },
  "required": [
    "people",
    "date",
    "time",
    "guest_name"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴resos_update_booking(booking_id, date, time, people, table_ids, ...)

WRITE: change fields of an existing booking: date, time, party size, tables, duration, status, or the guest's name, e-mail or phone. Only the fields you pass change. A status change or a new time can make resOS e-mail or text the GUEST (for example on approved or declined). To cancel use resos_cancel_booking. It is not retried: after a timeout read the booking again before you try again. PUT /bookings/{id}.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "booking_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "pattern": "^[A-Za-z0-9_-]+$",
      "description": "resOS booking id."
    },
    "date": {
      "description": "New local date, yyyy-mm-dd (send with time).",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "time": {
      "description": "New local time, HH:mm (send with date).",
      "type": "string",
      "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
    },
    "people": {
      "description": "New number of guests.",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "table_ids": {
      "description": "Tables to assign (replaces the current ones).",
      "minItems": 1,
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 64,
        "pattern": "^[A-Za-z0-9_-]+$"
      }
    },
    "duration": {
      "description": "New duration in minutes.",
      "type": "integer",
      "minimum": 1,
      "maximum": 1440
    },
    "status": {
      "description": "New status. Use resos_cancel_booking to cancel.",
      "type": "string",
      "enum": [
        "request",
        "declined",
        "approved",
        "arrived",
        "seated",
        "left",
        "no_show",
        "waitlist",
        "confirm",
        "closed"
      ]
    },
    "guest_name": {
      "description": "New guest name.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "guest_email": {
      "description": "New guest e-mail.",
      "type": "string",
      "maxLength": 320
    },
    "guest_phone": {
      "description": "New guest phone with the country code.",
      "type": "string",
      "minLength": 5,
      "maxLength": 30,
      "pattern": "^\\+?[0-9 ()./-]+$"
    }
  },
  "required": [
    "booking_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴resos_cancel_booking(booking_id)

WRITE: cancel a booking (status canceled, with a canceled-at time). resOS may e-mail or text the GUEST a cancellation notice. The booking stays in resOS and can be read afterwards. Not retried: after a timeout read the booking first. PUT /bookings/{id}/cancel.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "booking_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "pattern": "^[A-Za-z0-9_-]+$",
      "description": "resOS booking id."
    }
  },
  "required": [
    "booking_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴resos_add_booking_note(booking_id, text)

WRITE: add an internal restaurant note to a booking (for example `Birthday, bring a candle`). The guest does not see it and nothing is sent. At most 50 notes per booking; notes cannot be deleted through the API. Not retried: after a timeout read the booking first, or the note may be added twice. POST /bookings/{id}/restaurantNote.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "booking_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "pattern": "^[A-Za-z0-9_-]+$",
      "description": "resOS booking id."
    },
    "text": {
      "type": "string",
      "minLength": 1,
      "maxLength": 2000,
      "description": "The note text, up to 2000 characters."
    }
  },
  "required": [
    "booking_id",
    "text"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴resos_send_booking_comment(booking_id, text, send_notification)

WRITE: post a comment from the restaurant on a booking's guest thread. The guest can see it. If send_notification is true, resOS e-mails or texts the GUEST the message now: you must choose true or false. At most 25 comments per booking and 5 per minute. Cannot be deleted through the API. Not retried: after a timeout read the booking first, or the guest may get it twice. POST /bookings/{id}/comment.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "booking_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "pattern": "^[A-Za-z0-9_-]+$",
      "description": "resOS booking id."
    },
    "text": {
      "type": "string",
      "minLength": 1,
      "maxLength": 2000,
      "description": "The message, up to 2000 characters."
    },
    "send_notification": {
      "type": "boolean",
      "description": "true = notify the guest by e-mail or text now; false = only add it to the thread."
    }
  },
  "required": [
    "booking_id",
    "text",
    "send_notification"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Diesen Server bewerten

Nachweis

Aktuelle Beobachtungen

verifiziertVersion nicht aufgezeichnet19 Tools