Skip to main content

nisebookings

com.nisebookings/bookingVersion 1.0.0

Operate a nisebookings account: catalogue, staff schedules, free slots, customers, appointments

Status

Responds78 msAnswered our handshake without sign-in.

Registry data may be out of date

We could not refresh it, so this page shows the last copy.
Last checked
Nov 14, 2026, 14:07 UTC
Latency
78 ms
Remotes responding
1 of 1
Sign-in
API key
Hosting
EU hosting detected (detected, not a legal statement)
Registry data as of
Nov 14, 2026, 22:14 UTC

Data from the official MCP Registry, checked by run.zero. How we check

Connect

Streamable HTTP
https://app.nisebookings.com/api/mcpResponds78 ms
No sign-in

Claude Code

claude mcp add --transport http booking https://app.nisebookings.com/api/mcp --header 'Authorization: Bearer <YOUR_TOKEN>'

Replace <YOUR_TOKEN> before running.

Claude Desktop and claude.ai

Settings > Connectors > Add custom connector
Name: booking
Remote MCP server URL: https://app.nisebookings.com/api/mcp
This server expects the header Authorization.

Cursor

{
  "mcpServers": {
    "booking": {
      "url": "https://app.nisebookings.com/api/mcp",
      "headers": {
        "Authorization": "Bearer <YOUR_TOKEN>"
      }
    }
  }
}

Replace <YOUR_TOKEN> before running.

VS Code

code --add-mcp '{"name":"booking","type":"http","url":"https://app.nisebookings.com/api/mcp","headers":{"Authorization":"Bearer <YOUR_TOKEN>"}}'

Replace <YOUR_TOKEN> before running.

Built your own server? run.zero hosts MCP servers on European infrastructure.

Host your own MCP server on run.zero

Tools

47 tools

Tools of nisebookings
Read-only
Idempotent
Open world
add_customer_to_appointmentAdd another booking (customer) to an existing group appointment. Give customerId or customer {name, email, phone}. 409 capacity_exceeded when it does not fit. Response includes the new bookingId. Scope bookings:write.NoNoNoNo
add_holidayAdd a day off. kind: once | yearly (same date every year) | exception (a working day despite company days off). staffId null/omitted = company-wide. Scope catalog:write.NoNoNoNo
api_requestAny /api/v1 management API call not covered by a dedicated tool. path is relative to /api/v1 (e.g. "/services/<uuid>/extras"), ids in place of {…}; put query parameters in query, the JSON body in body (camelCase). Same scopes and errors as the API: {error: {code, message, fields}}. Lists take limit ≤ 100 / offset and return {data, total}. Not for /public/ (use find_slots). Routes: GET /me GET POST /categories GET PATCH DELETE /categories/{id} GET POST /services GET PATCH DELETE /services/{id} GET POST /services/{id}/extras GET PATCH DELETE /services/{id}/extras/{extraId} GET PUT /services/{id}/fields GET PUT /services/{id}/parts GET POST /staff GET PATCH DELETE /staff/{id} GET PUT /staff/{id}/schedule GET /staff/{id}/services PUT DELETE /staff/{id}/services/{serviceId} GET POST /holidays DELETE /holidays/{id} GET PUT /business-hours GET PATCH /settings DELETE /sandbox PUT DELETE /settings/mollie-key GET POST /notifications GET /notifications/codes GET PATCH DELETE /notifications/{id} GET /outbox GET POST /coupons POST /coupons/generate GET PATCH DELETE /coupons/{id} GET POST /events GET PATCH DELETE /events/{id} GET /events/{id}/attendees GET PUT /events/{id}/staff GET POST /events/{id}/ticket-types GET PATCH DELETE /events/{id}/ticket-types/{ticketTypeId} POST /attendees/{id}/cancel GET POST /packages GET /packages/{id} GET POST /customers GET PATCH DELETE /customers/{id} GET POST /appointments GET PATCH DELETE /appointments/{id} POST /appointments/{id}/bookings GET /bookings GET PATCH DELETE /bookings/{id} POST /bookings/{id}/give-seat GET /payments GET /payments/{id} POST /payments/{id}/complete POST /payments/{id}/refund POST /projects GET POST /webhooks GET /webhooks/events GET PATCH DELETE /webhooks/{id} POST /webhooks/{id}/rotate-secret POST /webhooks/{id}/test GET /webhooks/{id}/deliveries POST /webhooks/{id}/deliveries/{deliveryId}/retryYesNoNoNo
assign_staff_serviceLet a staff member offer a service (create or update the link). Missing fields keep current link values, or for a new link the service price/capacity and deposit null (= service deposit). Required before a staff member can be booked for the service. Scope catalog:write.NoNoYesNo
create_appointmentBook like the admin: one appointment with one booking. Give customerId or customer {name, email, phone}. Without end the service duration is used; without status the tenant default. A day service (rental, durationDays > 0) starts at the local midnight (00:00) and without end spans its number of days. The staff member must offer the service. Admin checks (overlap, duration, schedule, holiday) return 422 code "warnings" with fields: explain them to the user and retry with force: true only if they agree. Hard limits are 409 capacity_exceeded / slot_unavailable. Response includes bookingId (use it for update_booking). With recurrence the call books the whole recurring series at once instead. To find free times use find_slots. Scope bookings:write.NoNoNoNo
create_customerCreate a customer. email is unique per tenant: 409 when it exists, so search with list_customers first. Scope customers:write.NoNoNoNo
create_projectCreate a new account (project) for a client, owned by this account's first owner — the agency case: one login or key configures several client sites. The new account starts on Free; the allowance is the highest `projects` among the plans of the accounts that owner owns (Free/Pro 1, Agency 5, € 9 per extra project), so 402 plan_limit when it is full and 409 when the slug is taken. Give the client access afterwards from the admin (Settings → Team) or let them sign up. Scope projects:write.NoNoNoNo
create_serviceCreate a service; missing fields get admin defaults (type simple, duration 60, deposit 100%, taxRate 21). `type` cannot change later. A service is bookable once visibility is public and a public staff member with a schedule offers it (assign_staff_service). Scope catalog:write.NoNoNoNo
create_staffCreate a staff member; the weekly schedule starts as a copy of the business hours. Link services with assign_staff_service afterwards. Scope catalog:write.NoNoNoNo
create_webhookRegister a URL that receives signed POSTs (Standard Webhooks: webhook-id, webhook-timestamp, webhook-signature "v1,<base64 HMAC-SHA256>" over "id.timestamp.body" keyed with the base64 part of the secret after whsec_). Payloads are thin ({id, type, createdAt, tenantId, data: ids + status, previousStatus, start}): fetch details via the API. url must be public https (private/loopback addresses are refused, 422 on url). events: booking.created, booking.updated, booking.cancelled, ticket.created, ticket.approved, ticket.cancelled, payment.completed, payment.failed, payment.refunded. Returns the endpoint plus `secret` (whsec_…) ONCE: store it now. Max 10 endpoints. Retries: 1m, 5m, 30m, 2h, 12h, 24h. Then call test_webhook. Scope settings:write.NoNoNoNo
delete_appointmentDelete an appointment and its bookings. notify: true first sets approved bookings to cancelled and pending ones to rejected and mails the customers. To cancel but keep the record, use update_booking status cancelled instead. scope this|following|series for recurring series. Scope bookings:write.YesNoYesNo
delete_holidayRemove a day off by id (from list_holidays). Scope catalog:write.YesNoYesNo
delete_webhookDelete an endpoint and its delivery log. To pause instead: api_request PATCH /webhooks/{id} {active: false}. New secret: POST /webhooks/{id}/rotate-secret. Scope settings:write.YesNoYesNo
find_slotsBookable times for a service, day by day, exactly as the booking widget sees them (respects schedules, days off, existing bookings, capacity, minimum notice and booking horizon). Returns {days: [{date, slots: [{start, time, staffId, state?}]}], hasMore}; days without free times are omitted. Pass a slot's start and staffId to create_appointment. state "waitlist" = full, waiting list open. Works with any key (public data).Not declaredYesNot declaredNo
generate_couponsCreate up to 100 unique coupon codes from a mask: every * becomes one of 0-9A-Z (e.g. "SUMMER-****"). The other fields are the template for each coupon; discount (percent) or deduction must be > 0. 422 on mask when it is used up. Returns {data: coupons}. Single coupons: api_request POST /coupons. Scope catalog:write.NoNoNoNo
get_appointmentOne appointment with bookings (bookingId, status, persons), customers, extras, series/group ids and meetingUrl. Scope bookings:read.Not declaredYesNot declaredNo
get_business_hoursCompany opening hours {days: [{weekday 1=Mon…7=Sun, start, end}]}; a missing weekday = closed. New staff copy these. Scope settings:read.Not declaredYesNot declaredNo
get_customerOne customer by id. Scope customers:read.Not declaredYesNot declaredNo
get_paymentOne payment with its items and bookings. Mark a local payment paid / refund it via api_request POST /payments/{id}/complete or /refund (payments:write). Scope payments:read.Not declaredYesNot declaredNo
get_serviceOne service by id. Scope catalog:read.Not declaredYesNot declaredNo
get_settingsAll admin-editable tenant settings, plus read-only id, publicKey (for the widget / public API) and currency. Scope settings:read.Not declaredYesNot declaredNo
get_staffOne staff member by id. Scope catalog:read.Not declaredYesNot declaredNo
get_staff_scheduleWeekly working hours of a staff member: {days: [{weekday 1=Mon…7=Sun, start, end, breaks}]}. A missing weekday is a day off. Scope catalog:read.Not declaredYesNot declaredNo
list_appointmentsThe calendar: appointments with their bookings and customers. Filter by from/to (ISO date-times; start ≥ from, < to), staffId, serviceId, status (appointments having a booking in that status). Scope bookings:read. Paginated: limit ≤ 100 (default 50), offset; returns {data, total}.Not declaredYesNot declaredNo
list_categoriesService categories, ordered by position. Scope catalog:read. Paginated: limit ≤ 100 (default 50), offset; returns {data, total}.Not declaredYesNot declaredNo
list_couponsCoupons (discount codes) ordered by code. Scope catalog:read. Paginated: limit ≤ 100 (default 50), offset; returns {data, total}.Not declaredYesNot declaredNo
list_customersCustomers, optionally searched with q (name, e-mail or phone). Scope customers:read. Paginated: limit ≤ 100 (default 50), offset; returns {data, total}.Not declaredYesNot declaredNo
list_eventsTicketed events ordered by startAt. Ticket types, attendees and event staff are under /events/{id}/… via api_request. Scope catalog:read. Paginated: limit ≤ 100 (default 50), offset; returns {data, total}.Not declaredYesNot declaredNo
list_holidaysDays off. staffId filters: a staff id, or "company" for company-wide days; omit for all. Scope catalog:read. Paginated: limit ≤ 100 (default 50), offset; returns {data, total}.Not declaredYesNot declaredNo
list_outboxThe e-mail log, newest first: what was sent or queued (id, status, toEmail, toName, subject, text, html, createdAt, sentAt, lastError). On a sandbox nothing is delivered: rows end as status "suppressed", read them here to verify confirmations. Filters: status (pending|sending|sent|failed|suppressed), to (exact address, case-insensitive). Scope settings:read. Paginated: limit ≤ 100 (default 50), offset; returns {data, total}.Not declaredYesNot declaredNo
list_paymentsPayments, newest first. Filters: status (pending|completed|rejected|refunded), type (local|free|mollie), customerId. Scope payments:read. Paginated: limit ≤ 100 (default 50), offset; returns {data, total}.Not declaredYesNot declaredNo
list_servicesAll services of the tenant (simple, compound, collaborative, package), ordered by position. Scope catalog:read. Paginated: limit ≤ 100 (default 50), offset; returns {data, total}.Not declaredYesNot declaredNo
list_staffAll staff members, including archived ones (visibility = archive). Scope catalog:read. Paginated: limit ≤ 100 (default 50), offset; returns {data, total}.Not declaredYesNot declaredNo
list_staff_servicesServices this staff member offers, with per-link price, capacityMin/Max and deposit. Scope catalog:read. Paginated: limit ≤ 100 (default 50), offset; returns {data, total}.Not declaredYesNot declaredNo
list_webhook_deliveriesDelivery log of one endpoint, newest first: id, eventId, type, status (pending|sending|delivered|failed), attempts, nextAttemptAt, lastStatus (HTTP), lastError, createdAt, deliveredAt, payload. Resend one: api_request POST /webhooks/{id}/deliveries/{deliveryId}/retry. Scope settings:read. Paginated: limit ≤ 100 (default 50), offset; returns {data, total}.Not declaredYesNot declaredNo
list_webhooksWebhook endpoints (id, url, events, active, description, createdAt, updatedAt); the secret is never returned. Event types with descriptions: api_request GET /webhooks/events. Scope settings:read. Paginated: limit ≤ 100 (default 50), offset; returns {data, total}.Not declaredYesNot declaredNo
set_business_hoursReplace ALL business hours (not a merge): one entry per open weekday, no breaks; a missing weekday = closed. Does not change existing staff schedules. Scope settings:write.YesNoYesNo
set_staff_scheduleReplace the WHOLE week of a staff member (not a merge): send every working day; a missing weekday becomes a day off. end > start, breaks inside the day and not overlapping. Read it first with get_staff_schedule. Scope catalog:write.YesNoYesNo
test_webhookQueue a `ping` event ({type: "ping", data: {endpointId}}) to the endpoint and send it right away. Returns the delivery (202); check the outcome (status delivered/pending, lastStatus, lastError) with list_webhook_deliveries a second later. Scope settings:write.NoNoNoNo
unassign_staff_serviceStop a staff member offering a service. Existing appointments stay. Scope catalog:write.YesNoYesNo
update_appointmentMove or change an appointment: send only what changes (start, end, staffId, serviceId, internalNote). start without end keeps the service duration (for a day service: its number of days); besides, a day service starts at the local midnight (00:00). scope following|series shifts later/all appointments of a recurring series (response seriesMoved). Warnings → 422 code "warnings" unless force: true. Does not mail; status changes go through update_booking. Scope bookings:write.NoNoYesNo
update_bookingChange a booking's status (approve, cancel, reject, done…) and/or persons. id is the bookingId (from create_appointment or get_appointment), not the appointment id. The status also applies to other parts of the same compound/collaborative group; scope following|series applies it to a recurring series. Response {id, changed, failed, reason}: id is the booking you patched — a 200 without an error means its status changed. changed lists the other bookings that followed (group parts, series) and is empty when there were none; failed counts bookings that no longer fit. notify: true mails the customer about the status change. Scope bookings:write.YesNoYesNo
update_customerPartial update of a customer. Scope customers:write.NoNoYesNo
update_servicePartial update: send only the fields that change (merged over current values). `type` is fixed. Scope catalog:write.NoNoYesNo
update_settingsPartial update: only fields present are validated and written; returns all settings. id, publicKey and currency are read-only. The Mollie key is set via api_request PUT /settings/mollie-key {key} (scope payments:write) before payMollieEnabled: true. Scope settings:write.NoNoYesNo
update_staffPartial update of a staff member. visibility "archive" hides them (staff are never deleted). Scope catalog:write.NoNoYesNo
whoamiThe tenant (id, name, timeZone, currency), the scopes of the API key in use and the plan (id, label, bookingsPerMonth, usedThisMonth, level ok|warn|full). Works with any valid key. Call first to learn which tools your key may use and, when writing fails with 402 plan_limit, what the account's plan allows.Not declaredYesNot declaredNo

Details

Registry status
Active
Published
Oct 13, 2026
Updated
Oct 13, 2026
Repository
Not given
Categories (suggested)
Developer toolsSuggested categories are assigned automatically from the registry text and may be wrong. Verified operators can correct them.
GDPR
Not declared

Are you the operator? Claim this listing