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"
}社群
證據