Skoči na vsebino
Docs · strežnik MCP

Naj agent pogleda v knjigo rezervacij

Model Context Protocol je način, kako asistent prosi drug sistem za podatke. Ta stran opisuje strežnik, s katerim ga govorimo: kaj ga je mogoče vprašati, kaj sme ključ doseči, in kaj se zgodi, ko nekdo zahteva več.

Ključ ustvarite v nastavitvah

Ključi API so vklopljeni. Ključ pripada organizaciji, zato nastane tam: Nastavitve, nato Organizacije, nato izbrana, nato njen zavihek ključi API. Označite lokale, kjer sme delati, in dejanja, ki jih sme tam izvesti, nato prekopirajte vrednost, ki jo pokažemo samo enkrat. Odjemalca usmerite na spodnjo končno točko in deluje še danes. Kar ključ spremeni, je zapisano, večino tega pa lahko človek povrne.

Izberite organizacijo, v kateri naj nastane

Kaj je to

Tanek posrednik pred istim vmesnikom REST, ki ga uporablja nadzorna plošča.

Nima povezave do baze in sam ne odloča o ničemer. Ločevanje najemnikov, omejitve paketa, validacijo in omejevanje zahtevkov uveljavlja API, ker je to edino mesto, kjer se to lahko uveljavi enkrat. Vsako spodnje orodje kaže na pot, ki že obstaja, in na dovoljenje, ki se že preverja.

MCP je odprt protokol, zato deluje vsak odjemalec, ki ga govori. Nimamo priljubljenca.

Kaj je ključ

Eno poverilo, ena organizacija, in naprej toliko dosega, kolikor mu ga pustite.

  • Pripet na eno organizacijo

    Organizacija se izbere ob izdaji ključa in se pozneje ne da spremeniti. Klic, ki navede drugo, dobi 403, ki ga nobeno dovoljenje ne razširi. Agent, ki dela za dve podjetji, potrebuje dva ključa.

  • Zožljiv na posamezne lokale

    Organizacija ima lahko šest restavracij in ključu ni treba doseči vseh. Označite lokale, kjer sme delati, vse drugo pa je zavrnjeno, tudi klic seznama, ki lokala sploh ne navede.

  • Zožljiv na posamezna dejanja

    Branje jedilnika v obeh lokalih, sprejemanje rezervacij samo v centru. Dejanja se podelijo po lokalu, zato je zožitev mreža in ne eno stikalo.

  • Zapisano in povrnljivo

    Kar ključ spremeni, se zapiše pred spremembo, skupaj z argumenti, zadetim zapisom in njegovim stanjem prej. Če tega zapisa ni mogoče shraniti, se klic ne izvede. Večino sprememb lahko človek povrne v nastavitvah.

Obsegi

Obseg je groba pravica, ki jo nosi ključ. Pisalni obseg vključuje svojega bralnega, zato izberite najožjega, ki opravi delo. Poslovne številke stojijo za svojim obsegom in jih ne vključuje noben drug.

ObsegKaj podeli
org:read

Branje organizacije

Ogled podatkov organizacije
org:write

Urejanje organizacije

Odpiranje lokala ter nastavitev profila, odpiralnega časa in rezervacij
menu:read

Branje menija

Ogled menijev, sklopov, jedi in ponudb dneva
menu:write

Urejanje menija

Ustvarjanje in urejanje menijev ter jedi in njihova objava
booking:read

Branje rezervacij

Ogled rezervacij, razpoložljivosti, virov in vrst storitev – brez prihodkov in marže
booking:write

Urejanje rezervacij

Ustvarjanje, potrjevanje, prestavljanje in preklic rezervacij
sales:read

Branje povpraševanj

Ogled povpraševanj za dogodke, prodajnega toka in vrednosti posamezne stopnje
event:read

Branje dogodkov

Ogled dogodkov in prijav nanje
event:write

Urejanje dogodkov

Ustvarjanje, urejanje in objava dogodkov
contact:read

Branje stikov

Ogled stikov gostov in skupin
contact:write

Urejanje stikov

Ustvarjanje in urejanje stikov gostov ter njihovega članstva v skupinah
loyalty:read

Branje zvestobe

Ogled obiskov, točk in nagrad
staff:read

Branje ekipe

Ogled članov ekipe, razporeda in pokritosti – brez plač in stroškov dela
staff:write

Urejanje ekipe

Ustvarjanje in urejanje izmen ter razporeditev
analytics:read

Branje analitike

Ogled prihodkov, marže, pogrinjkov, deleža neprihodov in stroškov dela
agent:read

Branje dnevnika agenta

Ogled tega, kaj je ta ključ sam naredil – svoje spremembe in branja, nič tujega
agent:write

Razveljavitev agenta

Ta ključ sme vzeti nazaj eno svojo nedavno spremembo. Le svojo, po eno naenkrat, znotraj ene ure – nikoli tuje in nikoli celega popoldneva

Skrbniškega obsega ni na izbiro. Pokril bi vsako orodje, tudi tista, ki pridejo po izdaji ključa, in temu nihče ne more privoliti z eno kljukico.

Povezava

Dve vrstici v nastavitvah vašega odjemalca. Končna točka je gostovan prenos streamable HTTP, torej ni ničesar za namestiti in ničesar za vzdrževati v teku.

Namesto ograde vstavite ključ, ki ste ga prekopirali ob izdaji. Ključ pokažemo samo enkrat; če ste ga izgubili, ustvarite novega in starega prekličite.

claude mcp add --transport http gustek https://mcp.guestavo.com/mcp \
  --header "Authorization: Bearer gvsk_your_key_here"

Kako izgleda zavrnitev

Manjkajoče dovoljenje se vrne kot 403, ki pove, katero je hotel, tako da lahko oseba, ki je ključ izdala, to popravi v nastavitvah brez branja te strani. Ključ, uperjen v napačno organizacijo ali napačen lokal, dobi 403, ki ga nobeno dovoljenje ne popravi.

Spretnost

Navodilo, ki ga izročite svojemu agentu, da mu izdelka ni treba razvozlati s poskusi in zavrnitvami.

Ena datoteka: kako se poveže, kaj odpre posamezno dovoljenje, v kakšnem vrstnem redu se lokal sestavi, katere zavrnitve ga čakajo in kaj vsaka pomeni ter kako popravi svojo napako. Nastane iz istega seznama orodij, ki ga strežnik ponudi, zato ne more opisovati različice izdelka, ki je ni več.

To besedilo je za vse enako, zato našteva vsa orodja izdelka in ne tistih, ki jih zmore en ključ. Ko je agent povezan, izve, kaj odpre njegov lastni ključ, in to je ožji in resničnejši odgovor.

Preberi spretnost

Ali pa jo takoj shranite tja, kjer jo agent išče:

mkdir -p ~/.claude/skills/gustek && curl -fsSL https://gustek.si/docs/mcp/skill.md -o ~/.claude/skills/gustek/SKILL.md

Orodja

75 orodij

Ustvarjeno iz istega registra, ki ga bere strežnik, zato ta seznam ne more odstopati od tega, kar vidi odjemalec. Združeno tako, kot združuje zaslon z dovoljenji, torej tako, kot se odloča lastnik.

Nobeno od teh orodij ne piše gostu. Orodja za rezervacije, ki bi sicer poslala potrditev ali odpoved, tečejo z zadržanim pošiljanjem, kadar kliče ključ, saj je pošta pravemu človeku edina stvar, ki je noben gumb za razveljavitev ne prikliče nazaj.

Poglej, kateri moduli so vklopljeni

org:read
  • get_organizationSamo branjeGET /api/organizations/:organizationId

    Read the organization: its name, locale and which product modules (menu, booking, events, outreach, loyalty, staff) are switched on. Call it when an action is refused because a module is off — only an owner can switch one on.

Poišči naše lokale

org:read
  • list_propertiesSamo branjeGET /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.

  • get_propertySamo branjeGET /api/properties/:propertyId

    Read one venue in full: address, timezone, opening hours and booking configuration. Use it to find out whether a venue is bookable at all before asking why get_booking_availability returns nothing.

Odpri lokal in ga nastavi

org:write
  • create_propertySpreminja podatkePOST /api/organizations/:organizationId/properties

    Create a venue: name, URL slug, type, address and timezone. Set its opening hours and booking settings afterwards with the set_property_ tools. A key narrowed to particular venues cannot call this — the new venue is not one of them.

  • update_property_profileSpreminja podatkePATCH /api/properties/:propertyId/profile

    Change a venue’s name, description, address, city, country or timezone. Only the fields sent are written. The URL slug is not changeable here, because a printed QR code resolves through it.

  • set_property_operating_hoursSpreminja podatkePATCH /api/properties/:propertyId/operating-hours

    Set a venue’s opening hours. Only the days you name change; the rest of the week is left alone, and exceptions merge by date, so adding one holiday cannot drop the others. removeExceptionDates takes one back off.

  • set_property_booking_settingsSpreminja podatkePATCH /api/properties/:propertyId/booking-settings

    Configure how a venue takes bookings: interval, lead time, buffer, auto-confirm. enabled must be true or no slot is ever offered. publicBookingEnabled publishes the venue and requireStaffShiftCoverage can close its diary — confirm both.

Branje menija

menu:read
  • list_menusSamo branjeGET /api/menus

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

  • get_menuSamo branjeGET /api/menus/:menuId

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

  • list_menu_itemsSamo branjeGET /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_categoriesSamo branjeGET /api/menu-categories

    List the organization's dish sections (starters, mains, wine) as catalogue records. A section is filed here once and placed on any number of menus, so use this to find the categoryId add_category_to_menu needs.

  • list_menu_specialsSamo branjeGET /api/menus/:menuId/specials

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

Sestavljanje in urejanje jedilnika

menu:write
  • create_menuSpreminja podatkePOST /api/menus

    Create a menu for a venue: an empty shell with a name and a URL slug. Fill it with add_category_to_menu and add_item_to_menu_category, then publish_menu. Nobody sees it until it is published.

  • update_menuSpreminja podatkePATCH /api/menus/:menuId

    Rename a menu or change its slug, description, language, currency or display options. This edits the menu itself and not what is on it; a dish is edited with update_menu_item.

  • create_menu_categorySpreminja podatkePOST /api/menu-categories

    Create a dish section in the catalogue — starters, mains, desserts. It is on no menu until add_category_to_menu places it, and one section can be placed on several menus.

  • update_menu_categorySpreminja podatkePATCH /api/menu-categories/:categoryId

    Rename a catalogue dish section or change its description or image. The change lands on every menu that section appears on.

  • create_menu_itemSpreminja podatkePOST /api/menu-items

    Create a dish in the catalogue with its price, allergens and dietary tags. It is on no menu until add_item_to_menu_category files it under a section of one.

  • update_menu_itemSpreminja podatkePATCH /api/menu-items/:itemId

    Edit a catalogue dish: name, description, base price, allergens, dietary tags. It changes on every menu it appears on — to change one menu only, use set_menu_item_availability on that placement.

  • add_category_to_menuSpreminja podatkePOST /api/menus/:menuId/categories

    Put an existing catalogue section on a menu at a given position. Returns the assignmentId that add_item_to_menu_category needs — that id, not the categoryId, is what dishes are filed under.

  • add_item_to_menu_categorySpreminja podatkePOST /api/menus/:menuId/categories/:assignmentId/items

    Put a catalogue dish on one menu under one section, optionally with a price override for that menu alone. Takes the assignmentId add_category_to_menu returned, not a categoryId.

Objava jedilnika in spremembe za danes

menu:write
  • create_menu_specialSpreminja podatkePOST /api/menus/:menuId/specials

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

  • set_menu_item_availabilitySpreminja podatkePATCH /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_menuSpreminja podatkePOST /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.

  • archive_menuSpreminja podatkePOST /api/menus/:menuId/archive

    Take a menu out of service: it stops being served publicly and is filed as archived rather than deleted. publish_menu brings it back. There is no way to delete a menu here, by design.

Branje prodajnega toka

sales:read
  • list_inquiriesSamo branjeGET /api/inquiries

    List event inquiries for an organization, filterable by venue, stage, owner and whether the next action is overdue. This answers "what has come in, and what has nobody chased".

  • get_inquirySamo branjeGET /api/inquiries/:inquiryId

    Read one inquiry: who asked, what for, when they want it, what stage it is at and the notes on it.

  • get_inquiry_pipelineSamo branjeGET /api/inquiries/pipeline

    Count each pipeline stage and what it is worth, plus how many open inquiries are past their next action date. Money is reported per currency and never summed across them.

Branje rezervacij

booking:read
  • get_booking_availabilitySamo branjeGET /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_resourcesSamo branjeGET /api/booking-resources

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

  • list_booking_service_typesSamo branjeGET /api/booking-service-types

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

  • list_booking_blocked_timesSamo branjeGET /api/booking-blocked-times

    List a venue’s closures — holidays, maintenance windows, a table out of service — over an optional date range. This is why a date with opening hours can still offer no slots.

  • list_bookingsSamo branjeGET /api/bookings

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

  • get_bookingSamo branjeGET /api/bookings/:bookingId

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

Nastavitev rezervacij: storitve, mize, zaprtja

booking:write
  • create_booking_service_typeSpreminja podatkePOST /api/booking-service-types

    Define something a venue takes bookings for — dinner service, a treatment, a court hire — with its duration and optional price. Create these before resources, which reference them by id.

  • update_booking_service_typeSpreminja podatkePATCH /api/booking-service-types/:serviceTypeId

    Rename a service type or change its duration, price or order. Send isActive false to retire one: it stops being offered and the bookings already taken against it keep saying what was booked. There is no delete, by design.

  • create_booking_resourceSpreminja podatkePOST /api/booking-resources

    Add something a booking can be assigned to — a table, a room, a chair, a court — with its capacity and largest party. serviceTypeIds narrows it to particular services, so create those first.

  • update_booking_resourceSpreminja podatkePATCH /api/booking-resources/:resourceId

    Change a bookable resource: name, capacity, largest party, which services it takes, its own weekly availability. Send isActive false to take it out of service without destroying which parties sat at it.

  • create_booking_blocked_timeSpreminja podatkePOST /api/booking-blocked-times

    Close a venue, or one resource, for a period: a holiday, a private hire, maintenance. Times are the venue’s own wall clock, not UTC. recurrenceRule takes FREQ=DAILY or FREQ=WEEKLY, optionally with ;UNTIL=YYYY-MM-DD.

  • update_booking_blocked_timeSpreminja podatkePATCH /api/booking-blocked-times/:blockedTimeId

    Move or shorten a closure, change its reason, or scope it to one resource. Shortening it to a past window is how a closure is lifted — there is no delete here, and the original times are what an undo restores.

Sprejemanje in spreminjanje rezervacij

booking:write
  • create_bookingSpreminja podatkePOST /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. No confirmation is sent, but the venue may still send its own reminder.

  • confirm_bookingSpreminja podatkePOST /api/bookings/:bookingId/confirm

    Confirm a pending booking. This call emails nobody, but a confirmed booking becomes eligible for the venue's automatic reminder, which may reach the guest. Do not tell the caller the guest has been notified.

  • reschedule_bookingSpreminja podatkePOST /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_bookingSpreminja podatkePOST /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.

Branje dogodkov

event:read
  • list_eventsSamo branjeGET /api/events

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

  • get_eventSamo branjeGET /api/events/:eventId

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

  • list_event_registrationsSamo branjeGET /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".

Ustvarjanje, urejanje in objava dogodkov

event:write
  • create_eventSpreminja podatkePOST /api/events

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

  • update_eventSpreminja podatkePATCH /api/events/:eventId

    Change an event: title, description, dates, capacity, venue details, category or ticket links. Only the fields sent are written. Changes to a published event are live on the public page immediately.

  • publish_eventSpreminja podatkePOST /api/events/:eventId/publish

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

  • create_event_categorySpreminja podatkePOST /api/event-categories

    Create a category for the programme — live music, quiz, private hire — with a URL slug. It is on no event until create_event or update_event names its id. Slugs are unique within the organization.

  • update_event_categorySpreminja podatkePATCH /api/event-categories/:categoryId

    Rename a programme category or change its slug, description, colour, image or order. The change lands on every event filed under it, and a new slug changes the category’s public address.

Branje knjige gostov

contact:read
  • list_contactsSamo branjeGET /api/contacts

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

  • get_contactSamo branjeGET /api/contacts/:contactId

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

  • list_contact_groupsSamo branjeGET /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.

Dodajanje, popravljanje in razvrščanje gostov

contact:write
  • create_contactSpreminja podatkePOST /api/contacts

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

  • update_contactSpreminja podatkePATCH /api/contacts/:contactId

    Correct a guest’s details: name, email, phone, tags or custom fields. Only the fields sent are written, and at least one of email, phone or an external id must remain. This cannot change their marketing consent.

  • add_contact_to_groupSpreminja podatkePOST /api/contact-groups/:groupId/members

    Put a guest into a contact group. Groups are how this product tags people — there is no separate tag. Adding somebody who is already in it changes nothing.

Ustvarjanje in umik skupin gostov

contact:write
  • create_contact_groupSpreminja podatkePOST /api/contact-groups

    Create a contact group (a segment) to file guests into. Names are unique within the organization. Leave definition out for a hand-picked list; a definition makes it a rule-based group the platform recomputes.

  • update_contact_groupSpreminja podatkePATCH /api/contact-groups/:groupId

    Rename a contact group or change its description, colour or matching rules. Changing the rules of a rule-based group changes who a campaign addressed to it will reach.

  • archive_contact_groupSpreminja podatkePOST /api/contact-groups/:groupId/archive

    Take a contact group out of use: it stops appearing in the ordinary listing and is filed as archived rather than deleted, keeping every membership. unarchive_contact_group brings it back. There is no delete, by design.

  • unarchive_contact_groupSpreminja podatkePOST /api/contact-groups/:groupId/unarchive

    Put an archived contact group back into use. Refused if it is not archived, so this cannot be used to check whether one is.

Branje obiskov in zvestobe

loyalty:read
  • list_visitsSamo branjeGET /api/loyalty/visits

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

Branje razporeda

staff:read
  • list_staff_membersSamo branjeGET /api/staff-members

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

  • list_staff_shiftsSamo branjeGET /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_daySamo branjeGET /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".

  • get_staff_publish_impactSamo branjeGET /api/staff-shifts/publish-impact

    What publishing the rota for a venue over a date range would take off sale: with requireStaffShiftCoverage on, an unpublished shift leaves a resource bookable and a published one constrains it. Read this before publishing.

Polnjenje in objava razporeda

staff:write
  • create_staff_shiftSpreminja podatkePOST /api/staff-shifts

    File a shift on the rota at a venue: date, start and end in the venue’s own wall clock, optional role and break. Leave staffMemberId out for an open shift nobody is assigned to. It is a draft until published.

  • update_staff_shiftSpreminja podatkePATCH /api/staff-shifts/:shiftId

    Move a shift, reassign it, edit its role or break, or send status published to put it on the rota and draft to take it off. Where the venue requires shift cover, publishing changes what guests can book — read get_staff_publish_impact first.

Branje poročil, vključno z denarjem

analytics:read
  • get_booking_analyticsSamo branjeGET /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_reportSamo branjeGET /api/booking-reporting/covers

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

  • get_labour_cost_reportSamo branjeGET /api/staff-reporting/labour-cost

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

Poglej, kaj je ta ključ sam naredil

agent:read
  • list_agent_actionsSamo branjeGET /api/agent-actions

    List what THIS key has already done — its own changes and reads, newest first, with the id of each one and whether it can still be undone. Call it to check whether a write landed after a timeout, or before reporting back what you changed.

  • get_agent_action_revert_planSamo branjeGET /api/agent-actions/:agentActionId/revert-plan

    Ask what undoing one of your own actions would do, and what it would refuse, without undoing anything. Call it before revert_agent_action when the change is not one you made seconds ago.

Naj sam prekliče svoje nedavne spremembe

agent:write
  • revert_agent_actionSpreminja podatkePOST /api/agent-actions/:agentActionId/revert

    Undo one change YOU made, named by its id from list_agent_actions. Refused if it was not yours, was already undone, is older than an hour, or the record has changed since — the refusal says which.

  • revert_last_agent_actionSpreminja podatkePOST /api/agent-actions/revert-last

    Undo the last change you made — this conversation only, when your client sends a session id. Pass expectedTool to be refused rather than undo the wrong thing if the ledger disagrees with what you think you did last.