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 WartelisteWas 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.
| Scope | Was er gewährt |
|---|---|
org:readOrganisation lesen | Organisationsdaten ansehen |
menu:readSpeisekarte lesen | Speisekarten, Bereiche, Gerichte und Tagesangebote ansehen |
menu:writeSpeisekarte verwalten | Speisekarten und Gerichte erstellen, bearbeiten und veröffentlichen |
booking:readReservierungen lesen | Reservierungen, Verfügbarkeit, Ressourcen und Leistungsarten ansehen – nicht Umsatz oder Marge |
booking:writeReservierungen verwalten | Reservierungen erstellen, bestätigen, verschieben und stornieren |
event:readVeranstaltungen lesen | Veranstaltungen und deren Anmeldungen ansehen |
event:writeVeranstaltungen verwalten | Veranstaltungen erstellen, bearbeiten und veröffentlichen |
contact:readKontakte lesen | Gästekontakte und Gruppen ansehen |
contact:writeKontakte verwalten | Gästekontakte und deren Gruppenzugehörigkeit erstellen und bearbeiten |
loyalty:readTreueprogramm lesen | Besuche, Punkte und Prämien ansehen |
staff:readTeam lesen | Teammitglieder, Dienstplan und Besetzung ansehen – nicht Löhne oder Personalkosten |
analytics:readAuswertungen 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 WerkzeugeErzeugt 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:readlist_propertiesNur lesendGET /api/organizations/:organizationId/propertiesList the venues (properties) in an organization. Start here to get the propertyId that menu, booking, event and staff tools ask for.
Karte lesen
menu:readlist_menusNur lesendGET /api/menusList an organization's menus with their status (draft, published, archived). Supports a search term.
get_menuNur lesendGET /api/menus/:menuIdRead one menu in full: its categories, the items filed under each, prices, allergens and dietary tags.
list_menu_itemsNur lesendGET /api/menu-itemsSearch 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/specialsList a menu's daily specials with the dates each one runs.
Karte ändern
menu:writecreate_menu_specialÄndert DatenPOST /api/menus/:menuId/specialsAdd 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/:itemAssignmentIdChange 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/publishPublish 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:readget_booking_availabilityNur lesendGET /api/public/bookings/availability/slotsFree 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-resourcesList the bookable resources at a venue — tables, rooms, chairs, courts — with their capacities.
list_booking_service_typesNur lesendGET /api/booking-service-typesList the service types a venue takes bookings for (dinner service, treatment, rental) with their durations.
list_bookingsNur lesendGET /api/bookingsList 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/:bookingIdRead one booking: guest, party size, time, assigned resources, status and notes.
Reservierungen annehmen und ändern
booking:writecreate_bookingÄndert DatenPOST /api/bookingsTake 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/confirmConfirm 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/rescheduleMove 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/cancelCancel 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:readlist_eventsNur lesendGET /api/eventsList events, filterable by venue, status, category, search term, or upcoming-only.
get_eventNur lesendGET /api/events/:eventIdRead one event: schedule, venue, capacity, ticketing and whether it is published.
list_event_registrationsNur lesendGET /api/events/:eventId/registrationsList 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:writecreate_eventÄndert DatenPOST /api/eventsCreate 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/publishPublish a draft event so it appears on the venue's public page and starts taking registrations.
Gästebuch lesen
contact:readlist_contactsNur lesendGET /api/contactsSearch 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/:contactIdRead one guest: contact details, consent state, and the email and phone endpoints they can be reached on.
list_contact_groupsNur lesendGET /api/contact-groupsList 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:writecreate_contactÄndert DatenPOST /api/contactsAdd 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/membersPut a guest into a contact group. Groups are how this product tags people — there is no separate tag.
Besuche und Treueprogramm lesen
loyalty:readlist_visitsNur lesendGET /api/loyalty/visitsVisit history: recorded guest check-ins, filterable by guest, venue, status and date range. This answers "when was she last in".
Dienstplan lesen
staff:readlist_staff_membersNur lesendGET /api/staff-membersList the people on a venue's team, with their roles and employment state.
list_staff_shiftsNur lesendGET /api/staff-shiftsThe 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/dayCoverage 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:readget_booking_analyticsNur lesendGET /api/booking-analytics/summaryBooking 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/coversBooked covers by day and service type over a date range.
get_labour_cost_reportNur lesendGET /api/staff-reporting/labour-costRostered labour cost against booked covers for one venue over a date range, including cost per cover.