Appointment Booking

Find real businesses and book appointments. Books via Cal.com; imports 12 platforms.

사용해야 할까요

품질 및 안전성

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

발견 사항 (1)

  • LOWTool 'import_booking_url' suggests web access but openWorldHint=falseimport_booking_url에서

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

컨텍스트 비용

~1,818토큰 (도구 정의)
~1.2 KB일반적인 응답 크기
중간 정도의 주의 영향 (128k 컨텍스트의 1.42%)

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

설치

원클릭 설치

`claude_desktop_config.json` 파일에 다음을 추가하세요:

{
  "mcpServers": {
    "appointment-booking": {
      "url": "https://hatchloop.dev/mcp/appointment-booking"
    }
  }
}

원격 엔드포인트

https://hatchloop.dev/mcp/appointment-bookingstreamable-http

할 수 있는 일

도구 목록

도구 (9)

🟢 읽기 전용🟡 쓰기🔴 삭제⚪ 알 수 없음
🟢find_business(vertical, location, capability, price_band, availability_window, ...)

Given criteria (vertical, location, capability, price band, availability window), return ranked candidate businesses from our supply network. THE NETWORK IS SMALL AND STILL MOSTLY SAMPLE DATA: entries that are not real are named [DEMO] and flagged is_demo - check that field before acting on a result. [free, no key]

입력 스키마

{
  "type": "object",
  "properties": {
    "vertical": {
      "type": "string",
      "enum": [
        "personal_services",
        "home_services",
        "professional_services"
      ]
    },
    "location": {
      "type": "object",
      "required": [
        "zip_or_city"
      ],
      "properties": {
        "zip_or_city": {
          "type": "string"
        },
        "radius_miles": {
          "type": "number",
          "minimum": 0,
          "description": "Accepted but NOT applied - no coordinates exist, so results are not restricted to this radius. Disclosed back as radius_miles_applied: false."
        }
      },
      "description": "Where to search. Matched against the business's city, state and ZIP as text -…"
    },
    "capability": {
      "type": "string",
      "description": "Specific service capability required, e.g. 'haircut', 'plumbing',…"
    },
    "price_band": {
      "type": "object",
      "properties": {
        "max_usd": {
          "type": "number"
        }
      }
    },
    "availability_window": {
      "type": "object",
      "properties": {
        "start_iso": {
          "type": "string",
          "format": "date-time"
        },
        "end_iso": {
          "type": "string",
          "format": "date-time"
        }
      },
      "description": "Accepted but NOT APPLIED - it does not narrow results. We do not hold live…"
    },
    "max_results": {
      "type": "integer",
      "default": 5,
      "maximum": 20,
      "minimum": 1
    }
  },
  "required": [
    "vertical",
    "location"
  ]
}
🟢verify_business(smb_id, capability_to_verify)

Look up what we know about a business in our supply network: its contact channels, capabilities, and when the record was last verified. This is a DIRECTORY LOOKUP - it does not contact the business. [free, no key]

입력 스키마

{
  "type": "object",
  "properties": {
    "smb_id": {
      "type": "string"
    },
    "capability_to_verify": {
      "type": "string"
    }
  },
  "required": [
    "smb_id"
  ]
}
🔴schedule_appointment(smb_id, action, service, customer, requested_time, ...)

Check availability, book, or cancel via Cal.com. Only completes when the SMB's imported booking link is bound to this deployment's ONE connected Cal.com account; otherwise fails honestly (booking_destination_unmapped) with no charge. No working booking path exists yet for non-Cal.com platforms (voice AI, web form) — those SMBs fail honestly instead of a fabricated confirmation. [from $0.15/call, variable] [async→get_outcome]

입력 스키마

{
  "type": "object",
  "properties": {
    "smb_id": {
      "type": "string"
    },
    "action": {
      "type": "string",
      "enum": [
        "book",
        "cancel",
        "check_availability"
      ]
    },
    "service": {
      "type": "string"
    },
    "customer": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "phone": {
          "type": "string"
        },
        "email": {
          "type": "string"
        }
      }
    },
    "requested_time": {
      "type": "object",
      "properties": {
        "preferred_iso": {
          "type": "string",
          "format": "date-time"
        },
        "window_start_iso": {
          "type": "string",
          "format": "date-time"
        },
        "window_end_iso": {
          "type": "string",
          "format": "date-time"
        },
        "duration_minutes": {
          "type": "integer"
        }
      }
    },
    "existing_appointment_id": {
      "type": "string",
      "description": "Required for cancel"
    },
    "notes": {
      "type": "string"
    },
    "idempotency_key": {
      "type": "string",
      "maxLength": 128,
      "description": "Retry key: a 24h replay returns the original receipt, not re-run or charged."
    }
  },
  "required": [
    "smb_id",
    "action"
  ]
}
🟢get_status(operation_id)

Query the current state of any in-flight async operation by operation_id. [free, no key]

입력 스키마

{
  "type": "object",
  "properties": {
    "operation_id": {
      "type": "string"
    }
  },
  "required": [
    "operation_id"
  ]
}
🟢get_outcome(operation_id)

Retrieve the final OutcomeReceipt for a completed operation. [free, no key]

입력 스키마

{
  "type": "object",
  "properties": {
    "operation_id": {
      "type": "string"
    }
  },
  "required": [
    "operation_id"
  ]
}
🟢preview_cost(operation, params)

Return an expected cost estimate, latency estimate, and success-probability estimate for a proposed call before execution. Returns the exact price when it is fixed, and a min/max range when the cost depends on channel or outcome. It does not promise an accuracy percentage - check cost_range. [free, no key]

입력 스키마

{
  "type": "object",
  "properties": {
    "operation": {
      "type": "string"
    },
    "params": {
      "type": "object",
      "description": "The same request body you would pass to the operation"
    }
  },
  "required": [
    "operation",
    "params"
  ]
}
🟢self_test

Service health probe: runs 6 internal checks and reports how many passed. Confirms the server is up and responding - it does NOT probe each tool individually. Use to verify connectivity before production use. [free, no key]

입력 스키마

{
  "type": "object",
  "properties": {}
}
🟢check_booking_link(url)

Free, instant pre-flight check for a booking URL. Classifies which booking platform a URL belongs to and tells you whether import_booking_url will accept it, WITHOUT fetching the page or spending money. Returns the platform, the exact smb_id import_booking_url would assign, the channels the booking will route through, and the inferred country. Use it to de-risk a paid booking BEFORE calling import_booking_url + schedule_appointment. [free, no key]

입력 스키마

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "Full http(s) URL to classify, e.g. 'https://cal.com/jane' or…"
    }
  },
  "required": [
    "url"
  ]
}
🟡import_booking_url(booking_url, business_name, vertical, country_code, contact_phone, ...)

Turn a public booking URL into a callable smb_id for send_message and capture_lead. But schedule_appointment only completes on Cal.com bound to our one connected account — the other 11 always fail schedule_appointment honestly, uncharged. Detects 12 platforms (Cal.com, Calendly, Doctolib, Booksy, Fresha, OpenTable, Setmore, Square, Acuity, Schedulista, Squarespace, BookMyCity). Idempotent — calling twice returns the same smb_id. [free, requires key]

입력 스키마

{
  "type": "object",
  "properties": {
    "booking_url": {
      "type": "string",
      "format": "uri",
      "description": "Full URL the user supplied. Must point at one of the 12 supported booking…"
    },
    "business_name": {
      "type": "string",
      "description": "If omitted, auto-extracted from the page's <title> or og:title."
    },
    "vertical": {
      "type": "string",
      "enum": [
        "personal_services",
        "home_services",
        "professional_services",
        "restaurants",
        "retail",
        "healthcare",
        "fitness"
      ],
      "description": "If omitted, inferred from the booking platform."
    },
    "country_code": {
      "type": "string",
      "description": "ISO 3166-1 alpha-2 (e.g. 'US', 'FR'); routes compliance on later sends."
    },
    "contact_phone": {
      "type": "string",
      "description": "If omitted, the platform integration handles outreach."
    },
    "contact_email": {
      "type": "string"
    },
    "capabilities": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Free-form capability tags (e.g., ['haircut','color','blowdry'])."
    },
    "idempotency_key": {
      "type": "string",
      "maxLength": 128,
      "description": "Retry key: a 24h replay returns the original receipt, not re-run or charged."
    }
  },
  "required": [
    "booking_url"
  ]
}

커뮤니티

이 서버 평가하기

증거

최근 관측

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