Appointo MCP by usefulapi

Read Appointo bookings, availability and subscriptions; create, reschedule and cancel bookings.

사용해야 할까요

품질 및 안전성

A
설명 품질
100%
스키마 완전성
95%
이름 품질
74%
오염 위험
100%
권한 일치
100%
프로토콜 준수
100%

발견 사항 (3)

  • LOWTool 'appointo_list_cancelled_bookings' name length outside 3-30 rangeappointo_list_cancelled_bookings에서
  • LOWTool 'appointo_list_subscription_contracts' name length outside 3-30 rangeappointo_list_subscription_contracts에서
  • LOWTool 'appointo_update_booking_buffers' name length outside 3-30 rangeappointo_update_booking_buffers에서

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~2,567토큰 (도구 정의)
~1.8 KB일반적인 응답 크기
상당한 주의 영향 (128k 컨텍스트의 2.01%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`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"
}

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 10개