Zum Inhalt springen
Docs · MCP-Server

Lassen Sie einen Agenten ins Reservierungsbuch schauen

Das Model Context Protocol ist die Art, wie ein Assistent ein anderes System um etwas bittet. Diese Seite beschreibt den Server, mit dem wir es sprechen: was man ihn fragen kann, was ein Schlüssel erreichen darf, und was passiert, wenn mehr verlangt wird.

Schlüssel lassen sich noch nicht erstellen

API-Schlüssel sind in der Produktion abgeschaltet. Der Endpunkt unten läuft und beantwortet den Handshake, ein Client verbindet sich also und listet die Werkzeuge auf, und danach kommt jeder einzelne Aufruf als 401 zurück, weil es keinen Schlüssel zum Authentifizieren gibt. Nichts auf dieser Seite ist heute einsetzbar. Tragen Sie sich ein und wir sagen Ihnen Bescheid, sobald sich das ändert.

Auf die Warteliste

Was es ist

Ein dünner Proxy vor derselben REST-API, die auch das Dashboard nutzt.

Er hält keine Datenbankverbindung und entscheidet nichts selbst. Mandantentrennung, Tariflimits, Validierung und Rate Limits erzwingt die API, weil das der einzige Ort ist, an dem sie einmal erzwungen werden können. Jedes Werkzeug unten zeigt auf eine Route, die es schon gibt, geschützt durch eine Berechtigung, die ohnehin geprüft wird.

MCP ist ein offenes Protokoll, jeder Client, der es spricht, funktioniert. Wir haben keinen Liebling.

Was ein Schlüssel ist

Ein Zugang, eine Organisation, und darüber hinaus so wenig Reichweite, wie Sie ihm lassen möchten.

  • An eine Organisation gebunden

    Die Organisation wird beim Erstellen gewählt und lässt sich danach nicht ändern. Ein Aufruf, der eine andere nennt, wird mit einem 403 abgelehnt, das keine Berechtigung aufweicht. Ein Agent für zwei Firmen braucht zwei Schlüssel.

  • Auf einzelne Standorte eingrenzbar

    Eine Organisation kann sechs Restaurants halten, und ein Schlüssel muss nicht alle erreichen. Haken Sie die Standorte an, an denen er arbeiten darf, und alles andere wird abgelehnt, auch eine Listenabfrage, die gar keinen Standort nennt.

  • Auf einzelne Aktionen eingrenzbar

    Die Karte an beiden Standorten lesen, Reservierungen nur in der Innenstadt annehmen. Aktionen werden pro Standort vergeben, die Eingrenzung ist also ein Raster und kein einzelner Schalter.

  • Protokolliert und umkehrbar

    Was ein Schlüssel ändert, wird vor der Änderung festgehalten, mit den Argumenten, dem betroffenen Datensatz und seinem Zustand davor. Lässt sich dieser Eintrag nicht schreiben, läuft der Aufruf nicht. Die meisten Änderungen kann ein Mensch in den Einstellungen zurücknehmen.

Scopes

Ein Scope ist die grobe Berechtigung, die ein Schlüssel trägt. Ein Schreib-Scope schließt seinen Lese-Scope ein, wählen Sie also den engsten, der die Aufgabe erledigt. Die kaufmännischen Zahlen liegen hinter einem eigenen Scope und sind in keinem anderen enthalten.

ScopeWas er gewährt
org:read

Organisation lesen

Organisationsdaten ansehen
menu:read

Speisekarte lesen

Speisekarten, Bereiche, Gerichte und Tagesangebote ansehen
menu:write

Speisekarte verwalten

Speisekarten und Gerichte erstellen, bearbeiten und veröffentlichen
booking:read

Reservierungen lesen

Reservierungen, Verfügbarkeit, Ressourcen und Leistungsarten ansehen – nicht Umsatz oder Marge
booking:write

Reservierungen verwalten

Reservierungen erstellen, bestätigen, verschieben und stornieren
event:read

Veranstaltungen lesen

Veranstaltungen und deren Anmeldungen ansehen
event:write

Veranstaltungen verwalten

Veranstaltungen erstellen, bearbeiten und veröffentlichen
contact:read

Kontakte lesen

Gästekontakte und Gruppen ansehen
contact:write

Kontakte verwalten

Gästekontakte und deren Gruppenzugehörigkeit erstellen und bearbeiten
loyalty:read

Treueprogramm lesen

Besuche, Punkte und Prämien ansehen
staff:read

Team lesen

Teammitglieder, Dienstplan und Besetzung ansehen – nicht Löhne oder Personalkosten
analytics:read

Auswertungen lesen

Umsatz, Marge, Gedecke, No-Show-Quote und Personalkosten-Auswertungen ansehen

Einen Admin-Scope gibt es nicht zur Auswahl. Er würde jedes Werkzeug abdecken, auch die, die nach dem Erstellen des Schlüssels dazukommen, und dem kann niemand mit einem Häkchen zustimmen.

Verbinden, sobald Schlüssel an sind

Zwei Zeilen in der Konfiguration Ihres Clients. Der Endpunkt ist ein gehosteter Streamable-HTTP-Transport, es gibt also nichts zu installieren und nichts am Laufen zu halten.

Kopieren Sie das heute, verbindet sich Ihr Client, listet die Werkzeuge und bekommt beim ersten Aufruf ein 401. Das ist so erwartet und keine Fehlkonfiguration.

{
  "mcpServers": {
    "guestavo": {
      "type": "http",
      "url": "https://mcp.guestavo.com/mcp",
      "headers": { "Authorization": "Bearer gvsk_your_key_here" }
    }
  }
}

Wie eine Ablehnung aussieht

Eine fehlende Berechtigung kommt als 403 zurück und nennt die gewünschte, sodass die Person, die den Schlüssel erstellt hat, das in den Einstellungen beheben kann, ohne diese Seite zu lesen. Ein Schlüssel für die falsche Organisation oder den falschen Standort bekommt ein 403, das keine Berechtigung behebt.

Die Werkzeuge

34 Werkzeuge

Erzeugt aus derselben Registry, die der Server liest, diese Liste kann also nicht von dem abweichen, was ein Client sieht. Gruppiert wie im Berechtigungsdialog, also so, wie eine Inhaberin entscheidet.

Kein Werkzeug hier schreibt einem Gast. Reservierungswerkzeuge, die sonst eine Bestätigung oder Absage mailen, laufen mit unterdrücktem Versand, wenn ein Schlüssel der Aufrufer ist, denn eine Mail an einen echten Menschen ist das Einzige, was kein Rückgängig-Knopf zurückholt.

Unsere Standorte finden

org:read
  • list_propertiesNur lesendGET /api/organizations/:organizationId/properties

    List the venues (properties) in an organization. Start here to get the propertyId that menu, booking, event and staff tools ask for.

Karte lesen

menu:read
  • list_menusNur lesendGET /api/menus

    List an organization's menus with their status (draft, published, archived). Supports a search term.

  • get_menuNur lesendGET /api/menus/:menuId

    Read one menu in full: its categories, the items filed under each, prices, allergens and dietary tags.

  • list_menu_itemsNur lesendGET /api/menu-items

    Search the dish catalogue by name across the whole organization. Items live independently of the menus they appear on, so use this to find a dish when the menu is unknown.

  • list_menu_specialsNur lesendGET /api/menus/:menuId/specials

    List a menu's daily specials with the dates each one runs.

Karte ändern

menu:write
  • create_menu_specialÄndert DatenPOST /api/menus/:menuId/specials

    Add a daily special to a menu for a given date or date range.

  • set_menu_item_availabilityÄndert DatenPATCH /api/menus/:menuId/categories/:assignmentId/items/:itemAssignmentId

    Change the availability note or price override of one item as it appears on one menu. This is how a dish comes off tonight, or goes lunch-only, without being deleted.

  • publish_menuÄndert DatenPOST /api/menus/:menuId/publish

    Publish a menu so the venue's public page and QR code serve it. Draft edits are invisible to guests until this runs.

Reservierungsbuch lesen

booking:read
  • get_booking_availabilityNur lesendGET /api/public/bookings/availability/slots

    Free booking slots at a venue on one date, optionally narrowed by party size, service type or resource. Call before create_booking. Name the venue by propertyId or by propertySlug.

  • list_booking_resourcesNur lesendGET /api/booking-resources

    List the bookable resources at a venue — tables, rooms, chairs, courts — with their capacities.

  • list_booking_service_typesNur lesendGET /api/booking-service-types

    List the service types a venue takes bookings for (dinner service, treatment, rental) with their durations.

  • list_bookingsNur lesendGET /api/bookings

    List bookings for an organization, filterable by venue, date range, status and guest name. This answers "who is coming in tonight".

  • get_bookingNur lesendGET /api/bookings/:bookingId

    Read one booking: guest, party size, time, assigned resources, status and notes.

Reservierungen annehmen und ändern

booking:write
  • create_bookingÄndert DatenPOST /api/bookings

    Take a booking for a guest at a venue on a date and time. Check get_booking_availability first; an identical repeat is answered from the first call, not booked twice. The guest is not emailed; the venue confirms.

  • confirm_bookingÄndert DatenPOST /api/bookings/:bookingId/confirm

    Confirm a pending booking. The guest is not emailed by this call; the venue tells them. Do not report to the caller that the guest has been notified.

  • reschedule_bookingÄndert DatenPOST /api/bookings/:bookingId/reschedule

    Move an existing booking to a different date or time, keeping the guest and party size. The guest is not emailed about the change; the venue tells them.

  • cancel_bookingÄndert DatenPOST /api/bookings/:bookingId/cancel

    Cancel a booking, with an optional reason recorded against it. The reason does not reach the guest and no cancellation email is sent; the venue tells them.

Veranstaltungen lesen

event:read
  • list_eventsNur lesendGET /api/events

    List events, filterable by venue, status, category, search term, or upcoming-only.

  • get_eventNur lesendGET /api/events/:eventId

    Read one event: schedule, venue, capacity, ticketing and whether it is published.

  • list_event_registrationsNur lesendGET /api/events/:eventId/registrations

    List who has registered for an event, with party sizes and check-in state. This answers "how many are coming to the quiz".

Veranstaltungen anlegen und veröffentlichen

event:write
  • create_eventÄndert DatenPOST /api/events

    Create an event at a venue. It starts as a draft and is not public until publish_event runs.

  • publish_eventÄndert DatenPOST /api/events/:eventId/publish

    Publish a draft event so it appears on the venue's public page and starts taking registrations.

Gästebuch lesen

contact:read
  • list_contactsNur lesendGET /api/contacts

    Search guests by name, email or phone, optionally within one contact group. Use it to resolve a name to a contactId.

  • get_contactNur lesendGET /api/contacts/:contactId

    Read one guest: contact details, consent state, and the email and phone endpoints they can be reached on.

  • list_contact_groupsNur lesendGET /api/contact-groups

    List contact groups (segments), static and rule-based, with member counts. Use it to find the groupId for add_contact_to_group.

Gäste anlegen und einsortieren

contact:write
  • create_contactÄndert DatenPOST /api/contacts

    Add a guest to the contact book. Creating a contact is not a marketing opt-in — consent is recorded separately.

  • add_contact_to_groupÄndert DatenPOST /api/contact-groups/:groupId/members

    Put a guest into a contact group. Groups are how this product tags people — there is no separate tag.

Besuche und Treueprogramm lesen

loyalty:read
  • list_visitsNur lesendGET /api/loyalty/visits

    Visit history: recorded guest check-ins, filterable by guest, venue, status and date range. This answers "when was she last in".

Dienstplan lesen

staff:read
  • list_staff_membersNur lesendGET /api/staff-members

    List the people on a venue's team, with their roles and employment state.

  • list_staff_shiftsNur lesendGET /api/staff-shifts

    The rota over a date range: who is on, when, in what role, and which shifts are still open. Requires from and to dates.

  • get_staff_coverage_dayNur lesendGET /api/staff-coverage/day

    Coverage for one venue on one date: rostered hours against expected demand, hour by hour, so a gap is visible. This answers "are we short on Saturday".

Auswertungen lesen, inklusive Geld

analytics:read
  • get_booking_analyticsNur lesendGET /api/booking-analytics/summary

    Booking trend, capacity use, no-show rate, revenue and margin over a date range. The general "how did we do" number.

  • get_covers_reportNur lesendGET /api/booking-reporting/covers

    Booked covers by day and service type over a date range.

  • get_labour_cost_reportNur lesendGET /api/staff-reporting/labour-cost

    Rostered labour cost against booked covers for one venue over a date range, including cost per cover.