Appointo MCP by usefulapi
Read Appointo bookings, availability and subscriptions; create, reschedule and cancel bookings.
我该使用它吗
质量与安全性
发现(3)
- LOW在 appointo_list_cancelled_bookings 中
- LOW在 appointo_list_subscription_contracts 中
- LOW在 appointo_update_booking_buffers 中
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"appointo": {
"url": "https://appointo.usefulapi.io/mcp"
}
}
}远程端点
https://appointo.usefulapi.io/mcpstreamable-http它能做什么
工具清单
工具(10)
🟢appointo_list_products(search_term, limit, offset)
List the Shopify products that are set up as bookable in Appointo: name, appointment type, whether the widget is shown, and each product's appointments (the bookable variants/services with price, currency and id). Use an appointment id for availability and bookings. GET /products.
输入模式
{
"type": "object",
"properties": {
"search_term": {
"description": "Filter by product name.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"limit": {
"description": "Results per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
},
"offset": {
"description": "Number of results to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢appointo_list_appointments(appointment_id, product_id, search_term, limit, offset)
List appointments, i.e. the bookable services/variants, with name, price, currency and configuration. Filter by product or fetch one by id. These are the services customers book, not the bookings themselves (use appointo_list_bookings for those). GET /appointments.
输入模式
{
"type": "object",
"properties": {
"appointment_id": {
"description": "Fetch a single appointment by id.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"product_id": {
"description": "Only appointments of this Appointo product id (the `id` from appointo_list_products).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"search_term": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"limit": {
"description": "Results per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
},
"offset": {
"description": "Number of results to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢appointo_get_availability(appointment_id, start_date, end_date)
The free time slots of one appointment (bookable service) from start_date, optionally to end_date. Use it before creating or rescheduling a booking. GET /appointments/{appointment_id}/calendar_availability.
输入模式
{
"type": "object",
"properties": {
"appointment_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Appointo appointment id (from appointo_list_appointments)."
},
"start_date": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "First day, yyyy-mm-dd."
},
"end_date": {
"description": "Last day, yyyy-mm-dd.",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
}
},
"required": [
"appointment_id",
"start_date"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢appointo_list_bookings(booking_id, status, search_term, limit, offset)
List bookings with time, product, duration, quantity, price and the customers (name, email, phone, address). Filter upcoming/past or search; pass booking_id for one booking. The customers' cancel/reschedule link ids are never returned. GET /bookings.
输入模式
{
"type": "object",
"properties": {
"booking_id": {
"description": "Fetch a single booking by id.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"status": {
"description": "Only upcoming or only past bookings.",
"type": "string",
"enum": [
"upcoming",
"past"
]
},
"search_term": {
"description": "Searches product name, customer name, email, phone and order name.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"limit": {
"description": "Results per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
},
"offset": {
"description": "Number of results to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢appointo_list_cancelled_bookings(status, search_term, limit, offset)
List cancelled bookings, same shape as appointo_list_bookings. GET /bookings/cancelled_bookings.
输入模式
{
"type": "object",
"properties": {
"status": {
"description": "Only upcoming or only past bookings.",
"type": "string",
"enum": [
"upcoming",
"past"
]
},
"search_term": {
"description": "Searches product name, customer name, email, phone and order name.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"limit": {
"description": "Results per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
},
"offset": {
"description": "Number of results to skip (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢appointo_list_subscription_contracts(search_term)
List the recurring booking subscription contracts (customers who subscribed to repeat appointments). Search by product, variant, order number or customer name. The API documents no paging for this list. GET /appointment_subscriptions.
输入模式
{
"type": "object",
"properties": {
"search_term": {
"description": "Product name, variant name, order number or customer name.",
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴appointo_create_booking(appointment_id, timestring, name, email, phone, ...)
WRITE: create a booking for a customer on an appointment (bookable service) at a time slot. This is a real booking: Appointo may email the customer a confirmation and reserve the slot; the booking can later be cancelled with appointo_cancel_booking. Check appointo_get_availability first. Not idempotent: calling twice creates two bookings. The docs cap this at 100 requests per day. POST /bookings.
输入模式
{
"type": "object",
"properties": {
"appointment_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Appointo appointment id (from appointo_list_appointments)."
},
"timestring": {
"type": "string",
"description": "Start of the time slot, ISO 8601, e.g. 2026-11-03T14:00:00-05:00 (use a date only, 2026-11-03, for a day booking). Check appointo_get_availability for real slots."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Customer name."
},
"email": {
"type": "string",
"minLength": 3,
"maxLength": 254,
"pattern": "^[^\\s@<>\",;]+@[^\\s@<>\",;]+\\.[^\\s@<>\",;]+$",
"description": "Customer email."
},
"phone": {
"description": "Customer phone number.",
"type": "string",
"minLength": 1,
"maxLength": 40
},
"quantity": {
"description": "Number of spots (default 1).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1000
}
},
"required": [
"appointment_id",
"timestring",
"name",
"email"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴appointo_reschedule_booking(booking_id, timestring, customer_ids, override)
WRITE: move a booking (or only some of its customers) to a new time slot. Appointo may notify the customers of the change. override=true forces the booking into the slot even if it is unavailable or full, so leave it off unless the user explicitly asked for it. The docs cap this at 100 requests per day. PUT /bookings/reschedule.
输入模式
{
"type": "object",
"properties": {
"booking_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Booking id (from appointo_list_bookings)."
},
"timestring": {
"type": "string",
"description": "Start of the time slot, ISO 8601, e.g. 2026-11-03T14:00:00-05:00 (use a date only, 2026-11-03, for a day booking). Check appointo_get_availability for real slots."
},
"customer_ids": {
"description": "Only move these customer ids of the booking; omit to move the whole booking.",
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"override": {
"description": "Force the slot even if unavailable (default false).",
"type": "boolean"
}
},
"required": [
"booking_id",
"timestring"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴appointo_cancel_booking(booking_id, customer_ids)
WRITE: cancel a booking, or only some of its customers. The slot is freed and Appointo may notify the customers; whether a Shopify order is refunded is not controlled by this call. Cannot be undone through this server (create a new booking instead). The docs cap this at 100 requests per day. PUT /bookings/cancel.
输入模式
{
"type": "object",
"properties": {
"booking_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Booking id (from appointo_list_bookings)."
},
"customer_ids": {
"description": "Only cancel these customer ids of the booking; omit to cancel the whole booking.",
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
}
},
"required": [
"booking_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴appointo_update_booking_buffers(booking_id, start_buffer_time, end_buffer_time)
WRITE: set the start and/or end buffer time (minutes blocked before/after) of one booking. At least one value is required. The docs cap this at 100 requests per day. PUT /bookings/{booking_id}.
输入模式
{
"type": "object",
"properties": {
"booking_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Booking id (from appointo_list_bookings)."
},
"start_buffer_time": {
"description": "Buffer before the booking, minutes (> 0).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"end_buffer_time": {
"description": "Buffer after the booking, minutes (> 0).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
}
},
"required": [
"booking_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}社区
证据