Appointment Booking
Find real businesses and book appointments. Books via Cal.com; imports 12 platforms.
사용해야 할까요
품질 및 안전성
발견 사항 (1)
- LOWimport_booking_url에서
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`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"
]
}커뮤니티
증거