MCP
The connected guest experience.

What is MCP?
MCP (Model Context Protocol) lets you connect an AI client — such as Claude Desktop, Claude on the web or Cursor — directly to your HolidayHero workspace. Once connected, the AI can read and write your listings, reservations, check-ins, conversations, tasks, amenities, guidebooks, experiences and more, exactly as an operator would from the admin panel.
A few things are true of every connection:
It is scoped to one workspace. A client connected to workspace A cannot see workspace B, even if the same operator belongs to both.
The AI works through the same rules as the admin panel. Validation applies unchanged — if a change would be rejected in the panel, it is rejected for the AI too.
When the connected user is an operator of the workspace, their permissions are honoured on every tool call. A user who is not an operator has full access — see Who can do what.
Every tool call is written to an audit trail, so nothing happens invisibly.
Access can be revoked at any time, per user or per client.
Open it from /mcp in your admin panel. The page has three parts: Connection, Users and Connectors.
Connection
This is the on/off switch for the whole workspace.
Go to the MCP page.
Click Enable.
The card now shows your Endpoint URL — the address an AI client connects to. Use the copy icon next to it. The URL contains an opaque, per-workspace code rather than your workspace ID.
Below it, OAuth discovery document links to the .well-known metadata for clients that configure themselves automatically. Most operators never need it.
To switch MCP off again, click Disable and confirm. Every connected client stops working immediately. Enabling again later reactivates the same endpoint URL.

Users
An MCP user is someone who is allowed to connect an AI client to this workspace. Usually that is one of your operators — but being an operator is not enough on its own; they must also be listed here.
There are two ways to add users:
Invite by email — enter an address and click Send invite. The person receives an email with a magic link. Opening it confirms the invite and marks them Active. The link is valid for one hour.
Import existing operators — adds every current operator of the workspace in one go, each receiving their own invite email.
The address the invite was sent to.
Name
The operator's name, when known.
Access
Operator permissions when the address belongs to an operator of this workspace — click it to open that operator and review their permissions. Full access when it does not (see Who can do what).
Status
Invited until the magic link is opened, Active afterwards, Revoked once access has been withdrawn.
Last login
When this user's AI client last connected, or Never.
Who can do what
There are two kinds of MCP user, and the Access column tells you which one you are looking at:
Operator permissions
The invited address belongs to an operator of this workspace.
Exactly what that operator may do in the admin panel. Every tool call is checked against their Read / Write permissions — an operator with only Amenities → Read cannot update a reservation or message a guest over MCP either. Workspace owners have unrestricted access, as in the panel.
Full access
The invited address does not belong to an operator of this workspace — typically HolidayHero staff helping with onboarding or support.
Every tool, with no per-resource limits. There is no operator role to mirror.
A refused call is not an error you need to fix: the AI receives a clear permission_denied reply naming the missing permission, the call is logged in the Activity tab, and the AI is told to report it to you rather than retry. A workspace owner can grant the permission on the operator's detail page, after which the next call succeeds.
Because a non-operator gets full access, only invite addresses you trust with the whole workspace. To give a colleague limited AI access, add them as an operator with the right permissions first, then invite that same address here — their role is picked up automatically, even if they became an operator after the invite was sent.
From the ⋮ menu on a row you can Resend invite (issues a fresh one-hour link) or Revoke access.
Revoking a user also revokes every connector they created and every token those connectors issued. Any AI client they set up stops working straight away. Revocation is permanent — to let them back in, invite them again.

Connectors
A connector is the credential for one AI client on one device — "Claude Desktop on my laptop", "Cursor at the office". Creating one gives you a Client ID and a Client secret the AI client uses to prove who it is.
Enter a New connector name that tells you which client and device it is for.
Click Create connector.
A yellow banner appears with the Client ID and Client secret. Copy both now.
The client secret is shown exactly once. HolidayHero keeps only a fingerprint of it, so it cannot be displayed again. If you lose it, revoke the connector and create a new one.
Name
The name you gave the connector.
Client ID
Starts with mcp_. Click it to copy.
User
The MCP user who created it.
Created / Last used
When the connector was made, and when its AI client last called the workspace.
Click Revoke at the end of a row to cut off that one client without touching anything else.
Connecting Claude
The steps below are for Claude Desktop and Claude on the web; other MCP-capable clients follow the same shape.
Enable MCP and copy the Endpoint URL.
Create a connector and copy its Client ID and Client secret.
In Claude, open Settings → Connectors and add a custom connector with the endpoint URL.
When Claude asks you to authenticate, enter the client ID and secret.
Claude now lists the HolidayHero tools and can act on your workspace in conversation. The connection stays live until you revoke the connector or user, or disable MCP.
What the AI can do
The AI works through a fixed set of tools. Each tool maps onto one thing you can already do in the admin panel — under the connected operator's permissions, or without limits for a user who is not an operator (see Who can do what). Tools are named resource_action: _list and _get read, _create / _update / _delete write. A write that is rejected returns the reason instead of failing silently.
Everything is identified by a HolidayHero ID of the form gid://holidayhero/Reservation/42 — the AI reads these from a _list or _get call before writing.
Listings
listing_list, listing_get, listing_create, listing_update, listing_attach_amenities, listing_attach_guidebooks, listing_attach_experiences, listing_attach_announcements, listing_attach_smart_devices, listing_section_update (the Contact and Directions blocks), plus image and document tools (see below) and listing_section_*_images.
Reservations
reservation_list, reservation_get, reservation_create, reservation_update, plus document tools.
Check-ins
checkin_list, checkin_get, checkin_update, checkin_mark_no_show, checkin_unmark_no_show.
Guest invitations
invitation_list, invitation_get, invitation_create, invitation_update, invitation_delete.
Conversations
conversation_list, conversation_get (a thread with its recent messages), conversation_message_send, conversation_update (change the status to FOLLOW_UP, PENDING or RESOLVED, or hand a thread from the AI to a human).
Tasks
task_list, task_get, task_create, task_update, task_note_create.
Amenities
amenity_list, amenity_get, amenity_create, amenity_update, amenity_delete, plus image and document tools.
Guidebooks
guidebook_list, guidebook_get, guidebook_create, guidebook_update, guidebook_delete, plus image and document tools.
Announcements
announcement_list, announcement_get, announcement_create, announcement_update, announcement_delete.
Calendar events
calendar_event_list, calendar_event_get, calendar_event_create, calendar_event_update, calendar_event_delete, plus image and document tools.
Experiences
experience_list, experience_get, experience_create, experience_update, experience_delete, experience_host_note_create, plus image and document tools.
Experience products (upsells)
experience_product_create, experience_product_update, experience_product_delete, experience_products_reorder, experience_product_field_create, experience_product_field_update, experience_product_field_delete, vat_rate_list.
Places
places_search, place_get — look up a real business on Google Places before creating an experience for it.
Brands
brand_list, brand_get, brand_create, brand_update, brand_delete, brand_art_direction_detect.
Uploads
upload_target_create — a one-hour upload slot for a file that has no public URL.
Image and document tools follow one pattern for every resource that has them: <resource>_create_images, _update_images, _delete_images, _reorder_images, and the same four with _documents. Images and documents are given as URLs; HolidayHero downloads and stores them. Uploading the same file twice is harmless — duplicates are recognised and skipped.
A few tools deserve a note:
experience_host_note_createis the only write allowed on an experience that is backed by a Google Place. Its name, address, contact details and pricing come from the shared partner copy and cannot be edited; a host note is how you add your own information for guests.vat_rate_listreturns the selectable EU VAT rates. The AI is told to pick from this list rather than compose a rate itself, because a wrong rate is charged to real guests.brand_art_direction_detectreads a brand's website and writes an art-direction brief onto the brand. It runs in the background and overwrites any existing brief.conversation_message_sendsends a real message to a guest. Ask the AI to show you the draft first if you want to review it.
Frequently Asked Questions
Agent Instructions: Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.
Perform an HTTP GET request on the current page URL with the ask query parameter:
The question should be specific, self-contained, and written in natural language. The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.
Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
Last updated