What each permission unlocks
When you create an MCP key you tick permissions in two groups: Read access — what the assistant may look at — and Actions — what it may change. This page lists what each one actually gives it.
Untick a permission and the matching ability does not exist for that assistant: it never sees the tool, so it never tries and never asks. Nothing here can be worked around from the assistant's side — the app checks every request on its own.
👀 Read access
| Permission | The assistant can | Tools it gets |
|---|---|---|
| Dashboard | See bookings, revenue and trends for a date range, with the change against the period before | get_dashboard_stats |
| Service | List services and open one in full — price, duration, availability, staff, custom questions, bundle | list_services · get_service |
| Package | List packages and open one, including sessions remaining per purchase | list_packages · get_package |
| Appointment 👤 | List bookings filtered by status, service, staff or date, and open one in full | list_appointments · get_appointment |
| Staff | List staff with assigned services, working hours and contact detail | list_staff · get_staff |
| Customer 👤 | Search customers, open one record, and see their booking history | list_customers · get_customer · get_customer_appointments |
| Setting | Read your shop settings: timezone, business hours, notifications, branding, widget translation | get_settings |
👤 = gives the assistant access to customer names, emails and booking history. These carry the Customer data badge in the Create key dialog.
Setting is worth granting even to a read-only assistant: it is where your timezone lives, and every date the assistant quotes back to you depends on it.
✍️ Actions
Actions are grouped the same way the app's own edit screens are — one permission per tab — so an assistant allowed to change a price cannot quietly rearrange your availability.
Service
| Permission | The assistant can change | Tool |
|---|---|---|
| Create service | Create a new service across all tabs, including the service type, which is fixed once the service exists | create_service |
| Edit General setting | Name, price, linked product, booking type, channels, meeting location, status | update_service_general |
| Edit Availability | Booking hours, time slots, staff assignment, capacity, booking limits, blocked dates | update_service_availability |
| Edit Customization | Custom questions and intake fields | update_service_customization |
| Edit Advance | Waitlist, and group booking with its participant types | update_service_advance |
| Edit Bundle | Bundle sessions, pricing mode, discount, expiry | update_service_bundle |
| Delete service | Permanently remove services | delete_service |
Package
| Permission | The assistant can change | Tool |
|---|---|---|
| Create package | Create a new package | create_package |
| Edit General | Name, description, image, status | update_package_general |
| Edit Sessions & Pricing | Composition, session count, discount, validity | update_package_sessions_pricing |
| Delete package | Remove a package from the catalog | delete_package |
Appointment 👤
| Permission | The assistant can change | Tool |
|---|---|---|
| Create appointment | Book a new appointment for a customer, at a branch when the service runs at one. Every new booking starts Approved and Unpaid | create_appointment |
| Edit appointment | Status, payment status, customer detail, notes — not the booked date or time | update_appointment |
| Reschedule/cancel appointment | Move a booking to another slot, or cancel it — cancelling a paid booking makes the assistant say whether to refund | reschedule_appointment |
Reschedule / cancel can refund a customer, and emails them whenever the matching notification is switched on in Settings > Notifications. It is the one action whose effect reaches outside your admin — grant it only to an assistant you would trust to phone a customer.
An assistant cannot open a booking that is already paid or complete: Create appointment always writes Approved and Unpaid, and changing either afterwards takes Edit appointment.
Bookings also have to fit the store you actually run. A slot in the past, one inside the service's notice period, or one outside its booking window is refused — the same rules your customers meet on the storefront, now applied to assistants too.
Setting
| Permission | The assistant can change | Tool |
|---|---|---|
| Edit General | Order tags, storefront options, booking and cancellation policy, locations | update_settings_general |
| Edit Business hours | Weekly hours, breaks, holidays | update_settings_business_hours |
| Edit Notifications | Which events send an email, reminder timing, no-show alerts, sender identity | update_settings_notifications |
| Edit Branding | Widget colors, font, background, custom CSS | update_settings_branding |
| Edit Widget translation | Storefront widget strings and locale | update_settings_widget_translation |
| Manage integrations | See which calendar providers are connected — to the shop or to a staff member — and disconnect one | manage_integrations * |
Connecting a calendar needs an approval screen, so an assistant can only ever disconnect one.
* Over the Server URL this is one tool, manage_integrations, that takes status or
disconnect. Running the connector on your machine splits it into
get_integration_status and disconnect_integration, so reading a status is never a call to a
tool marked as making changes. Same permission either way.
🔒 What no permission unlocks
Some fields can never be written by an assistant, whatever you tick:
- Package totals — total sessions, compare-at price, discount amount, final price. They are recalculated from the package contents on every save.
- Money and order links on appointments — order id, order name, amount, service price, and the link to a bundle or package purchase.
- Record identity — the service type, the store the record belongs to, its id and creation date.
- An appointment's status and payment status at booking time — a new booking is always Approved and Unpaid, whatever the assistant asks for.
- Your store's timezone on a reschedule — the app fills it in. An assistant may still say which
timezone the customer is in; that is a different field,
clientTimezone. - Your SMTP credentials — never sent to an assistant at all, not even read.
If an assistant sends one of these anyway, the app ignores it and tells the assistant which fields it dropped, so it does not report a change that never happened.
Choosing well
- Start from what you actually want to ask. "How is next week looking?" needs Dashboard and Appointment read, nothing else.
- Grant Actions one tab at a time. An assistant that only adjusts prices needs Service > General, not the whole Service group.
- Prefer a separate key per assistant, so revoking one does not disturb the others.
- You can change permissions later with the pencil icon — it takes effect immediately, no reconnecting needed.