Reservio MCP by usefulapi

Check open slots, list bookings, services and staff, book appointments and group events in Reservio.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
94%
Naming quality
79%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

  • LOWTool 'reservio_create_appointment_booking' name length outside 3-30 rangein reservio_create_appointment_booking

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~3,679Tokens (tool definitions)
~1.8 KBTypical response size
Significant attention impact (2.87% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "reservio": {
      "url": "https://reservio.usefulapi.io/mcp"
    }
  }
}

Remote endpoints

https://reservio.usefulapi.io/mcpstreamable-http

What it can do

Tool inventory

Tools (16)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢reservio_get_business(business_id)

Get the business profile: name, address, contact details, time zone. Reservio API: GET /businesses/{businessId}.

Input Schema

{
  "type": "object",
  "properties": {
    "business_id": {
      "description": "Business id. Default: the business you entered at login.",
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]+$"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢reservio_list_services(business_id, sort, filter, limit, offset)

List the services clients can book, with duration, price and capacity. Reservio API: GET /businesses/{businessId}/services.

Input Schema

{
  "type": "object",
  "properties": {
    "business_id": {
      "description": "Business id. Default: the business you entered at login.",
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]+$"
    },
    "sort": {
      "description": "Sort column, prefix - for descending, e.g. -createdAt.",
      "type": "string",
      "pattern": "^-?[A-Za-z.]+$"
    },
    "filter": {
      "description": "Filters as {\"name\": \"Bob\"}; each key becomes filter[key]=value (JSON:API).",
      "type": "object",
      "propertyNames": {
        "type": "string",
        "pattern": "^[A-Za-z.]+$"
      },
      "additionalProperties": {
        "type": "string"
      }
    },
    "limit": {
      "description": "Page size (default 50).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    },
    "offset": {
      "description": "Number of items to skip, for paging.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢reservio_get_service(business_id, service_id)

Get one service by id. Reservio API: GET /businesses/{businessId}/services/{serviceId}.

Input Schema

{
  "type": "object",
  "properties": {
    "business_id": {
      "description": "Business id. Default: the business you entered at login.",
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]+$"
    },
    "service_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]+$",
      "description": "Service id (from reservio_list_services)."
    }
  },
  "required": [
    "service_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢reservio_list_resources(business_id, sort, filter, limit, offset)

List bookable resources, such as staff members or rooms. Reservio API: GET /businesses/{businessId}/resources.

Input Schema

{
  "type": "object",
  "properties": {
    "business_id": {
      "description": "Business id. Default: the business you entered at login.",
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]+$"
    },
    "sort": {
      "description": "Sort column, prefix - for descending, e.g. -createdAt.",
      "type": "string",
      "pattern": "^-?[A-Za-z.]+$"
    },
    "filter": {
      "description": "Filters as {\"name\": \"Bob\"}; each key becomes filter[key]=value (JSON:API).",
      "type": "object",
      "propertyNames": {
        "type": "string",
        "pattern": "^[A-Za-z.]+$"
      },
      "additionalProperties": {
        "type": "string"
      }
    },
    "limit": {
      "description": "Page size (default 50).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    },
    "offset": {
      "description": "Number of items to skip, for paging.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢reservio_get_resource(business_id, resource_id)

Get one resource (staff member or room) by id. Reservio API: GET /businesses/{businessId}/resources/{resourceId}.

Input Schema

{
  "type": "object",
  "properties": {
    "business_id": {
      "description": "Business id. Default: the business you entered at login.",
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]+$"
    },
    "resource_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]+$",
      "description": "Resource id (from reservio_list_resources)."
    }
  },
  "required": [
    "resource_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢reservio_list_events(business_id, sort, filter, limit, offset)

List calendar events (appointments, group events, blocked time) with start, end, type and capacity. Reservio API: GET /businesses/{businessId}/events.

Input Schema

{
  "type": "object",
  "properties": {
    "business_id": {
      "description": "Business id. Default: the business you entered at login.",
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]+$"
    },
    "sort": {
      "description": "Sort column, prefix - for descending, e.g. -createdAt.",
      "type": "string",
      "pattern": "^-?[A-Za-z.]+$"
    },
    "filter": {
      "description": "Filters as {\"name\": \"Bob\"}; each key becomes filter[key]=value (JSON:API).",
      "type": "object",
      "propertyNames": {
        "type": "string",
        "pattern": "^[A-Za-z.]+$"
      },
      "additionalProperties": {
        "type": "string"
      }
    },
    "limit": {
      "description": "Page size (default 50).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    },
    "offset": {
      "description": "Number of items to skip, for paging.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢reservio_list_bookings(business_id, sort, filter, limit, offset)

List bookings with client name, state, cost and linked event. Sort by -createdAt to see the newest first (Reservio has no webhooks, so polling this is the way to find new bookings). Reservio API: GET /businesses/{businessId}/bookings.

Input Schema

{
  "type": "object",
  "properties": {
    "business_id": {
      "description": "Business id. Default: the business you entered at login.",
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]+$"
    },
    "sort": {
      "description": "Sort column, prefix - for descending, e.g. -createdAt.",
      "type": "string",
      "pattern": "^-?[A-Za-z.]+$"
    },
    "filter": {
      "description": "Filters as {\"name\": \"Bob\"}; each key becomes filter[key]=value (JSON:API).",
      "type": "object",
      "propertyNames": {
        "type": "string",
        "pattern": "^[A-Za-z.]+$"
      },
      "additionalProperties": {
        "type": "string"
      }
    },
    "limit": {
      "description": "Page size (default 50).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    },
    "offset": {
      "description": "Number of items to skip, for paging.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢reservio_list_coupons(business_id, sort, filter, limit, offset)

List coupons (credit or visit packages). Reservio API: GET /businesses/{businessId}/coupons.

Input Schema

{
  "type": "object",
  "properties": {
    "business_id": {
      "description": "Business id. Default: the business you entered at login.",
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]+$"
    },
    "sort": {
      "description": "Sort column, prefix - for descending, e.g. -createdAt.",
      "type": "string",
      "pattern": "^-?[A-Za-z.]+$"
    },
    "filter": {
      "description": "Filters as {\"name\": \"Bob\"}; each key becomes filter[key]=value (JSON:API).",
      "type": "object",
      "propertyNames": {
        "type": "string",
        "pattern": "^[A-Za-z.]+$"
      },
      "additionalProperties": {
        "type": "string"
      }
    },
    "limit": {
      "description": "Page size (default 50).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    },
    "offset": {
      "description": "Number of items to skip, for paging.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢reservio_get_coupon(business_id, coupon_id)

Get one coupon by id. Reservio API: GET /businesses/{businessId}/coupons/{couponId}.

Input Schema

{
  "type": "object",
  "properties": {
    "business_id": {
      "description": "Business id. Default: the business you entered at login.",
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]+$"
    },
    "coupon_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]+$",
      "description": "Coupon id (from reservio_list_coupons)."
    }
  },
  "required": [
    "coupon_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢reservio_list_opening_hours(business_id)

List the opening hours of the business (days and start/end in seconds from midnight). Reservio API: GET /businesses/{businessId}/opening-hours.

Input Schema

{
  "type": "object",
  "properties": {
    "business_id": {
      "description": "Business id. Default: the business you entered at login.",
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]+$"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢reservio_list_rosters(business_id, sort, filter, limit, offset)

List staff work schedules (rosters) per resource and date. Reservio API: GET /businesses/{businessId}/rosters.

Input Schema

{
  "type": "object",
  "properties": {
    "business_id": {
      "description": "Business id. Default: the business you entered at login.",
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]+$"
    },
    "sort": {
      "description": "Sort column, prefix - for descending, e.g. -createdAt.",
      "type": "string",
      "pattern": "^-?[A-Za-z.]+$"
    },
    "filter": {
      "description": "Filters as {\"name\": \"Bob\"}; each key becomes filter[key]=value (JSON:API).",
      "type": "object",
      "propertyNames": {
        "type": "string",
        "pattern": "^[A-Za-z.]+$"
      },
      "additionalProperties": {
        "type": "string"
      }
    },
    "limit": {
      "description": "Page size (default 50).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    },
    "offset": {
      "description": "Number of items to skip, for paging.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢reservio_get_booking_slots(business_id, from, to, service_id, resource_id)

List free time slots for a service in a date range, optionally for one resource. Use before creating a booking. Reservio API: GET /businesses/{businessId}/availability/booking-slots.

Input Schema

{
  "type": "object",
  "properties": {
    "business_id": {
      "description": "Business id. Default: the business you entered at login.",
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]+$"
    },
    "from": {
      "type": "string",
      "minLength": 8,
      "description": "Date or datetime, e.g. 2026-11-02 or 2026-11-02T09:00:00+01:00."
    },
    "to": {
      "type": "string",
      "minLength": 8,
      "description": "Date or datetime, e.g. 2026-11-02 or 2026-11-02T09:00:00+01:00."
    },
    "service_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]+$",
      "description": "Service id."
    },
    "resource_id": {
      "description": "Limit to one resource (staff member), from reservio_list_resources.",
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]+$"
    }
  },
  "required": [
    "from",
    "to",
    "service_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢reservio_get_booking_days(business_id, from, to, service_id, resource_id)

For each day in a range, tell whether any slot is free for a service. Reservio API: GET /businesses/{businessId}/availability/booking-days.

Input Schema

{
  "type": "object",
  "properties": {
    "business_id": {
      "description": "Business id. Default: the business you entered at login.",
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]+$"
    },
    "from": {
      "type": "string",
      "minLength": 8,
      "description": "Date or datetime, e.g. 2026-11-02 or 2026-11-02T09:00:00+01:00."
    },
    "to": {
      "type": "string",
      "minLength": 8,
      "description": "Date or datetime, e.g. 2026-11-02 or 2026-11-02T09:00:00+01:00."
    },
    "service_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]+$",
      "description": "Service id."
    },
    "resource_id": {
      "description": "Limit to one resource (staff member), from reservio_list_resources.",
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]+$"
    }
  },
  "required": [
    "from",
    "to",
    "service_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢reservio_get_event_days(business_id, from, to, resource_id)

For each day in a range, tell whether a group event is open for booking. Reservio API: GET /businesses/{businessId}/availability/event-days.

Input Schema

{
  "type": "object",
  "properties": {
    "business_id": {
      "description": "Business id. Default: the business you entered at login.",
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]+$"
    },
    "from": {
      "type": "string",
      "minLength": 8,
      "description": "Date or datetime, e.g. 2026-11-02 or 2026-11-02T09:00:00+01:00."
    },
    "to": {
      "type": "string",
      "minLength": 8,
      "description": "Date or datetime, e.g. 2026-11-02 or 2026-11-02T09:00:00+01:00."
    },
    "resource_id": {
      "description": "Limit to one resource (staff member), from reservio_list_resources.",
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]+$"
    }
  },
  "required": [
    "from",
    "to"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴reservio_create_appointment_booking(business_id, service_id, start, end, client, ...)

WRITE: create a real appointment booking for a service at a start/end time (use a slot from reservio_get_booking_slots). Reservio may notify the client. Not safe to repeat: a second call books a second appointment. Reservio API: POST /businesses/{businessId}/bookings.

Input Schema

{
  "type": "object",
  "properties": {
    "business_id": {
      "description": "Business id. Default: the business you entered at login.",
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]+$"
    },
    "service_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]+$",
      "description": "Service id."
    },
    "start": {
      "type": "string",
      "minLength": 8,
      "description": "Slot start, ISO 8601 with offset."
    },
    "end": {
      "type": "string",
      "minLength": 8,
      "description": "Slot end, ISO 8601 with offset."
    },
    "client": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "minLength": 1,
          "description": "Client name."
        },
        "email": {
          "description": "Client e-mail.",
          "type": "string"
        },
        "phone": {
          "description": "Client phone.",
          "type": "string"
        }
      },
      "required": [
        "name"
      ]
    },
    "note": {
      "description": "Note for the booking.",
      "type": "string"
    }
  },
  "required": [
    "service_id",
    "start",
    "end",
    "client"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴reservio_create_group_booking(business_id, event_id, client)

WRITE: book a client into an existing group event (event id from reservio_list_events). Reservio may notify the client. Not safe to repeat: a second call books a second seat. Reservio API: POST /businesses/{businessId}/bookings.

Input Schema

{
  "type": "object",
  "properties": {
    "business_id": {
      "description": "Business id. Default: the business you entered at login.",
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]+$"
    },
    "event_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]+$",
      "description": "Group event id."
    },
    "client": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "minLength": 1,
          "description": "Client name."
        },
        "email": {
          "description": "Client e-mail.",
          "type": "string"
        },
        "phone": {
          "description": "Client phone.",
          "type": "string"
        }
      },
      "required": [
        "name"
      ]
    }
  },
  "required": [
    "event_id",
    "client"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded16 tools