Appointedd MCP by usefulapi

Read Appointedd bookings, customers and availability; create, change and cancel bookings.

我该使用它吗

质量与安全性

A
描述质量
98%
模式完整度
95%
命名质量
73%
投毒风险
100%
权限匹配度
100%
协议合规性
100%

发现(7)

  • LOWTool 'appointedd_list_resource_groups' name length outside 3-30 range在 appointedd_list_resource_groups 中
  • LOWTool 'appointedd_list_service_categories' name length outside 3-30 range在 appointedd_list_service_categories 中
  • LOWTool 'appointedd_get_service_category' name length outside 3-30 range在 appointedd_get_service_category 中
  • LOWTool 'appointedd_find_available_intervals' name length outside 3-30 range在 appointedd_find_available_intervals 中
  • LOWTool 'appointedd_find_available_dates' name length outside 3-30 range在 appointedd_find_available_dates 中
  • LOWTool 'appointedd_update_booking_customer' name length outside 3-30 range在 appointedd_update_booking_customer 中
  • LOWTool 'appointedd_cancel_booking_customer' name length outside 3-30 range在 appointedd_cancel_booking_customer 中

基于对工具定义和协议合规性的自动分析。

上下文开销

~6,174token 数(工具定义)
~2.7 KB典型响应大小
对注意力有显著影响(占 128k 上下文窗口的 4.82%)

这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。

安装

一键安装

将以下内容添加到你的 `claude_desktop_config.json` 文件中:

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

远程端点

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

它能做什么

工具清单

工具(20)

🟢 只读🟡 写入🔴 删除⚪ 未知
🟢appointedd_list_bookings(after, before, statuses, customers, services, ...)

List bookings, newest first by default. Filter by time window (after/before), customer, service, resource, category, status or creation/update time. Each booking has its service, resource, start/end, status and the customers on it (with their notes, questions and statuses). Page with `next`. GET /bookings.

输入模式

{
  "type": "object",
  "properties": {
    "after": {
      "description": "Only bookings that start at or after this date-time.",
      "type": "string"
    },
    "before": {
      "description": "Only bookings that end at or before this date-time.",
      "type": "string"
    },
    "statuses": {
      "description": "Only bookings with one of these statuses.",
      "maxItems": 4,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "confirmed",
          "declined",
          "cancelled",
          "pending"
        ]
      }
    },
    "customers": {
      "description": "Only bookings for customers with one of these ids.",
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100
      }
    },
    "services": {
      "description": "Only bookings of services with one of these ids.",
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100
      }
    },
    "resources": {
      "description": "Only bookings of resources with one of these ids.",
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100
      }
    },
    "categories": {
      "description": "Only bookings of service categories with one of these ids.",
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100
      }
    },
    "ids": {
      "description": "Only bookings with one of these ids.",
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100
      }
    },
    "created_after": {
      "type": "string",
      "description": "ISO 8601 date-time, e.g. 2026-11-02T09:00:00Z (a date-time without an offset is read in UTC unless a timezone is given)."
    },
    "created_before": {
      "type": "string",
      "description": "ISO 8601 date-time, e.g. 2026-11-02T09:00:00Z (a date-time without an offset is read in UTC unless a timezone is given)."
    },
    "updated_after": {
      "type": "string",
      "description": "ISO 8601 date-time, e.g. 2026-11-02T09:00:00Z (a date-time without an offset is read in UTC unless a timezone is given)."
    },
    "updated_before": {
      "type": "string",
      "description": "ISO 8601 date-time, e.g. 2026-11-02T09:00:00Z (a date-time without an offset is read in UTC unless a timezone is given)."
    },
    "sort_by": {
      "description": "Sort property (default natural).",
      "type": "string",
      "enum": [
        "natural",
        "creation",
        "updated",
        "start"
      ]
    },
    "order_by": {
      "description": "Sort direction (the API default is desc).",
      "type": "string",
      "enum": [
        "asc",
        "desc"
      ]
    },
    "timezone": {
      "description": "IANA time zone for the dates and times in the reply, e.g. Europe/London (default UTC).",
      "type": "string"
    },
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "start": {
      "description": "Page cursor: pass the previous reply's `next` to get the following page.",
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "end": {
      "description": "Page cursor: pass the previous reply's `prev` to get the preceding page.",
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢appointedd_list_customers(ids, sort_by, order_by, limit, start, ...)

List customers in the CRM: name, email, phone/mobile, address, tags, custom fields, marketing opt-in. Page with `next`. GET /customers.

输入模式

{
  "type": "object",
  "properties": {
    "ids": {
      "description": "Only customers with one of these ids.",
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100
      }
    },
    "sort_by": {
      "description": "Sort property (default natural).",
      "type": "string",
      "enum": [
        "natural",
        "created",
        "profile.firstname",
        "profile.lastname"
      ]
    },
    "order_by": {
      "description": "Sort direction (the API default is desc).",
      "type": "string",
      "enum": [
        "asc",
        "desc"
      ]
    },
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "start": {
      "description": "Page cursor: pass the previous reply's `next` to get the following page.",
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "end": {
      "description": "Page cursor: pass the previous reply's `prev` to get the preceding page.",
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢appointedd_get_customer(customer_id)

One customer by id. GET /customers/{customer_id}.

输入模式

{
  "type": "object",
  "properties": {
    "customer_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Appointedd id (24-character hex string)."
    }
  },
  "required": [
    "customer_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢appointedd_list_resources(ids, services, sort_by, order_by, limit, ...)

List resources (the staff members, rooms or equipment that bookings are made for): name, assigned service ids and resource group ids. Page with `next`. GET /resources.

输入模式

{
  "type": "object",
  "properties": {
    "ids": {
      "description": "Only resources with one of these ids.",
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100
      }
    },
    "services": {
      "description": "Only resources assigned to services with one of these ids.",
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100
      }
    },
    "sort_by": {
      "type": "string",
      "enum": [
        "natural",
        "creation"
      ]
    },
    "order_by": {
      "description": "Sort direction (the API default is desc).",
      "type": "string",
      "enum": [
        "asc",
        "desc"
      ]
    },
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "start": {
      "description": "Page cursor: pass the previous reply's `next` to get the following page.",
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "end": {
      "description": "Page cursor: pass the previous reply's `prev` to get the preceding page.",
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢appointedd_list_resource_groups(ids, order_by, limit, start, end)

List resource groups (id and name). Page with `next`. GET /resources/groups.

输入模式

{
  "type": "object",
  "properties": {
    "ids": {
      "description": "Only resource groups with one of these ids.",
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100
      }
    },
    "order_by": {
      "description": "Sort direction (the API default is desc).",
      "type": "string",
      "enum": [
        "asc",
        "desc"
      ]
    },
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "start": {
      "description": "Page cursor: pass the previous reply's `next` to get the following page.",
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "end": {
      "description": "Page cursor: pass the previous reply's `prev` to get the preceding page.",
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢appointedd_list_services(ids, limit, start, end)

List services (what can be booked): name, category, durations and prices, buffers, occupancy and booking type. Page with `next`. GET /services.

输入模式

{
  "type": "object",
  "properties": {
    "ids": {
      "description": "Only services with one of these ids.",
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100
      }
    },
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "start": {
      "description": "Page cursor: pass the previous reply's `next` to get the following page.",
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "end": {
      "description": "Page cursor: pass the previous reply's `prev` to get the preceding page.",
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢appointedd_get_service(service_id)

One service by id, including its booking questions, durations, prices and buffers. GET /services/{service_id}.

输入模式

{
  "type": "object",
  "properties": {
    "service_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Appointedd id (24-character hex string)."
    }
  },
  "required": [
    "service_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢appointedd_list_service_categories(ids, limit, start, end)

List service categories (id and name). Page with `next`. GET /services/categories.

输入模式

{
  "type": "object",
  "properties": {
    "ids": {
      "description": "Only service categories with one of these ids.",
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100
      }
    },
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "start": {
      "description": "Page cursor: pass the previous reply's `next` to get the following page.",
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "end": {
      "description": "Page cursor: pass the previous reply's `prev` to get the preceding page.",
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢appointedd_get_service_category(category_id)

One service category by id. GET /services/categories/{category_id}.

输入模式

{
  "type": "object",
  "properties": {
    "category_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Appointedd id (24-character hex string)."
    }
  },
  "required": [
    "category_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢appointedd_find_available_intervals(ranges, service_id, resource_ids, resource_group_ids, duration, ...)

Find the start times at which a service can be booked in the given ranges, with the free resource ids for each (and existing group bookings with room). Step 1 of making a booking: pick a start, then appointedd_create_reservation. Read-only. POST /availability/intervals/search.

输入模式

{
  "type": "object",
  "properties": {
    "ranges": {
      "minItems": 1,
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "start": {
            "type": "string",
            "description": "ISO 8601 date-time, e.g. 2026-11-02T09:00:00Z (a date-time without an offset is read in UTC unless a timezone is given)."
          },
          "end": {
            "type": "string",
            "description": "ISO 8601 date-time, e.g. 2026-11-02T09:00:00Z (a date-time without an offset is read in UTC unless a timezone is given)."
          }
        },
        "required": [
          "start",
          "end"
        ]
      },
      "description": "One or more date-time ranges to search, e.g. [{start, end}]."
    },
    "service_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Service the booking would be for (use appointedd_list_services)."
    },
    "resource_ids": {
      "description": "Resources (staff, rooms) to check. Default: all resources assigned to the service. Not together with resource_group_ids.",
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100,
        "description": "Appointedd id (24-character hex string)."
      }
    },
    "resource_group_ids": {
      "description": "Resource groups whose resources to check. Not together with resource_ids.",
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100,
        "description": "Appointedd id (24-character hex string)."
      }
    },
    "duration": {
      "description": "Continuous minutes that must be free. Default: the service's default duration.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100000
    },
    "spaces": {
      "description": "Spaces needed (excludes group bookings with too few spaces). Default 1.",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "timezone": {
      "description": "IANA time zone for range times without an offset and for the reply. Default UTC.",
      "type": "string"
    },
    "ignore_notice_restriction": {
      "description": "Ignore the organisation's/service's notice period.",
      "type": "boolean"
    },
    "ignore_service_schedule": {
      "description": "Ignore the service's schedule.",
      "type": "boolean"
    }
  },
  "required": [
    "ranges",
    "service_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢appointedd_find_available_dates(ranges, service_id, resource_ids, resource_group_ids, duration, ...)

Find which days in the given ranges have any availability for a service (a calendar view; use appointedd_find_available_intervals for the times). Read-only. POST /availability/days/search.

输入模式

{
  "type": "object",
  "properties": {
    "ranges": {
      "minItems": 1,
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "start": {
            "type": "string",
            "description": "ISO 8601 date-time, e.g. 2026-11-02T09:00:00Z (a date-time without an offset is read in UTC unless a timezone is given)."
          },
          "end": {
            "type": "string",
            "description": "ISO 8601 date-time, e.g. 2026-11-02T09:00:00Z (a date-time without an offset is read in UTC unless a timezone is given)."
          }
        },
        "required": [
          "start",
          "end"
        ]
      },
      "description": "One or more date-time ranges to search, e.g. [{start, end}]."
    },
    "service_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Service the booking would be for (use appointedd_list_services)."
    },
    "resource_ids": {
      "description": "Resources (staff, rooms) to check. Default: all resources assigned to the service. Not together with resource_group_ids.",
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100,
        "description": "Appointedd id (24-character hex string)."
      }
    },
    "resource_group_ids": {
      "description": "Resource groups whose resources to check. Not together with resource_ids.",
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100,
        "description": "Appointedd id (24-character hex string)."
      }
    },
    "duration": {
      "description": "Continuous minutes that must be free. Default: the service's default duration.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100000
    },
    "spaces": {
      "description": "Spaces needed (excludes group bookings with too few spaces). Default 1.",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "timezone": {
      "description": "IANA time zone for range times without an offset and for the reply. Default UTC.",
      "type": "string"
    },
    "ignore_notice_restriction": {
      "description": "Ignore the organisation's/service's notice period.",
      "type": "boolean"
    },
    "ignore_service_schedule": {
      "description": "Ignore the service's schedule.",
      "type": "boolean"
    }
  },
  "required": [
    "ranges",
    "service_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢appointedd_get_reservation(reservation_id, timezone)

One reservation (availability slot) by id: its service, resource, times and expiry. GET /availability/slots/{reservation_id}.

输入模式

{
  "type": "object",
  "properties": {
    "reservation_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Appointedd id (24-character hex string)."
    },
    "timezone": {
      "description": "IANA time zone for the dates and times in the reply, e.g. Europe/London (default UTC).",
      "type": "string"
    }
  },
  "required": [
    "reservation_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡appointedd_create_customer(firstname, lastname, email, mobile, phone, ...)

WRITE: create a customer in the CRM (first and last name required; email, mobile, phone, tags optional). POST /customers.

输入模式

{
  "type": "object",
  "properties": {
    "firstname": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "First name."
    },
    "lastname": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Last name."
    },
    "email": {
      "type": "string",
      "maxLength": 320
    },
    "mobile": {
      "type": "string",
      "maxLength": 40
    },
    "phone": {
      "type": "string",
      "maxLength": 40
    },
    "tags": {
      "description": "Tags to put on the customer.",
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 100
      }
    }
  },
  "required": [
    "firstname",
    "lastname"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴appointedd_update_customer(customer_id, firstname, lastname, email, mobile, ...)

WRITE: change a customer's name, email, mobile, phone or tags. Only the fields you pass are sent; `tags` replaces the customer's tag list. PUT /customers/{customer_id}.

输入模式

{
  "type": "object",
  "properties": {
    "customer_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Appointedd id (24-character hex string)."
    },
    "firstname": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "lastname": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "email": {
      "type": "string",
      "maxLength": 320
    },
    "mobile": {
      "type": "string",
      "maxLength": 40
    },
    "phone": {
      "type": "string",
      "maxLength": 40
    },
    "tags": {
      "description": "New tag list (replaces the old one).",
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 100
      }
    }
  },
  "required": [
    "customer_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡appointedd_create_reservation(service_id, start, resource_id, resource_group_ids, duration, ...)

WRITE: hold a date and time for a booking (step 2). The reservation blocks that slot for `expires_after` minutes (default: the organisation's setting); then call appointedd_create_booking with the returned reservation id. Without resource_id a free resource assigned to the service is picked. POST /availability/slots.

输入模式

{
  "type": "object",
  "properties": {
    "service_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Appointedd id (24-character hex string)."
    },
    "start": {
      "type": "string",
      "description": "Start date-time, normally a `start` returned by appointedd_find_available_intervals."
    },
    "resource_id": {
      "description": "Resource to book. Default: any free resource of the service.",
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "resource_group_ids": {
      "description": "Restrict the automatic resource choice to these groups.",
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100,
        "description": "Appointedd id (24-character hex string)."
      }
    },
    "duration": {
      "description": "Booking length in minutes; pass the same `duration` you searched with. Default: the service's default duration.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100000
    },
    "required_spaces": {
      "description": "Spaces needed (default 1).",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "ignore_notice_restriction": {
      "description": "Ignore the notice period; set it if you searched with it.",
      "type": "boolean"
    },
    "ignore_service_schedule": {
      "description": "Ignore the service's schedule; set it if you searched with it.",
      "type": "boolean"
    },
    "expires_after": {
      "description": "Minutes until the hold expires.",
      "type": "integer",
      "minimum": 1,
      "maximum": 1440
    },
    "timezone": {
      "description": "IANA time zone of `start` (when it has no offset) and of the reply. Default UTC.",
      "type": "string"
    }
  },
  "required": [
    "service_id",
    "start"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡appointedd_create_booking(reservation_id, customers, label, send_payment_request, timezone)

WRITE: turn an active reservation into a booking (step 3) for one or more customers; Appointedd matches each customer to the CRM by name/email/mobile or creates it. Payment requests are NOT sent unless send_payment_request is true. With an empty customers list an empty booking is created. POST /bookings.

输入模式

{
  "type": "object",
  "properties": {
    "reservation_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Id returned by appointedd_create_reservation (must not have expired)."
    },
    "customers": {
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "profile": {
            "type": "object",
            "properties": {
              "firstname": {
                "type": "string",
                "minLength": 1,
                "maxLength": 200,
                "description": "First name."
              },
              "lastname": {
                "type": "string",
                "minLength": 1,
                "maxLength": 200,
                "description": "Last name."
              },
              "email": {
                "type": "string",
                "maxLength": 320
              },
              "mobile": {
                "type": "string",
                "maxLength": 40
              }
            },
            "required": [
              "firstname",
              "lastname"
            ]
          },
          "notes": {
            "description": "Free-form notes for this customer on the booking.",
            "type": "string",
            "maxLength": 5000
          },
          "total_spaces": {
            "description": "Spaces this customer uses (default 1).",
            "type": "integer",
            "minimum": 1,
            "maximum": 1000
          },
          "status": {
            "type": "string",
            "enum": [
              "Arrived",
              "Complete",
              "No Show",
              "No Status"
            ]
          },
          "marketing_subscribed": {
            "description": "Customer agreed to marketing emails (default false).",
            "type": "boolean"
          }
        },
        "required": [
          "profile"
        ]
      },
      "description": "Customers to add; [] for an empty booking."
    },
    "label": {
      "description": "Label shown on the booking in the appointment screen.",
      "type": "string",
      "maxLength": 500
    },
    "send_payment_request": {
      "description": "Send each customer a payment request (default false here; the API's own default is true).",
      "type": "boolean"
    },
    "timezone": {
      "description": "IANA time zone for the dates and times in the reply, e.g. Europe/London (default UTC).",
      "type": "string"
    }
  },
  "required": [
    "reservation_id",
    "customers"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴appointedd_update_booking(booking_id, service_id, resource_id, total_spaces, label, ...)

WRITE: change a booking's service, resource, label or total spaces, or move it by giving `parts` with new start/end times. Customers are NOT emailed unless send_notifications is true. PUT /bookings/{booking_id}.

输入模式

{
  "type": "object",
  "properties": {
    "booking_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Appointedd id (24-character hex string)."
    },
    "service_id": {
      "description": "Move the booking to this service.",
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "resource_id": {
      "description": "Assign the booking to this resource.",
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "total_spaces": {
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "label": {
      "type": "string",
      "maxLength": 500
    },
    "parts": {
      "description": "New time parts of the booking (start/end); an availability check runs when moving.",
      "minItems": 1,
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string",
            "maxLength": 200
          },
          "start": {
            "type": "string",
            "description": "ISO 8601 date-time with an offset, e.g. 2026-11-02T09:00:00Z."
          },
          "end": {
            "type": "string",
            "description": "ISO 8601 date-time with an offset, e.g. 2026-11-02T09:00:00Z."
          }
        },
        "required": [
          "start",
          "end"
        ]
      }
    },
    "send_notifications": {
      "description": "Email each customer that the booking changed (default false here; the API's own default is true).",
      "type": "boolean"
    },
    "ignore_service_schedule": {
      "description": "Allow moving outside the service's schedule.",
      "type": "boolean"
    },
    "timezone": {
      "description": "IANA time zone for the dates and times in the reply, e.g. Europe/London (default UTC).",
      "type": "string"
    }
  },
  "required": [
    "booking_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴appointedd_update_booking_customer(booking_id, customer_booking_id, status, notes)

WRITE: set the arrival status (Arrived, Complete, No Show, No Status) and/or notes of one customer on a booking. customer_booking_id is the customer's `customer_booking_id` (or `customer_id`) in the booking's customers list. PUT /bookings/{booking_id}/customers/{customer_booking_id}.

输入模式

{
  "type": "object",
  "properties": {
    "booking_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Appointedd id (24-character hex string)."
    },
    "customer_booking_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "`customer_booking_id` (or `customer_id`) from the booking's customers list."
    },
    "status": {
      "type": "string",
      "enum": [
        "Arrived",
        "Complete",
        "No Show",
        "No Status"
      ]
    },
    "notes": {
      "description": "Replaces the customer's notes on this booking.",
      "type": "string",
      "maxLength": 5000
    }
  },
  "required": [
    "booking_id",
    "customer_booking_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴appointedd_cancel_booking(booking_id)

WRITE (cannot be undone): cancel a whole booking. Appointedd may notify the customers according to the organisation's settings. To remove one customer from a group booking use appointedd_cancel_booking_customer. POST /bookings/{booking_id}/cancel.

输入模式

{
  "type": "object",
  "properties": {
    "booking_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Appointedd id (24-character hex string)."
    }
  },
  "required": [
    "booking_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴appointedd_cancel_booking_customer(booking_id, customer_booking_id)

WRITE (cannot be undone): cancel one customer's place on a booking (the booking stays for the others). customer_booking_id is the `customer_booking_id` in the booking's customers list. POST /bookings/{booking_id}/customers/{customer_booking_id}/cancel.

输入模式

{
  "type": "object",
  "properties": {
    "booking_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Appointedd id (24-character hex string)."
    },
    "customer_booking_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "`customer_booking_id` from the booking's customers list."
    }
  },
  "required": [
    "booking_id",
    "customer_booking_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

社区

评价此服务器

证据

最近观测

已验证未记录版本20 个工具