Appointment Booking
Find real businesses and book appointments. Books via Cal.com; imports 12 platforms.
¿Debería usar esto?
Calidad y seguridad
Hallazgos (1)
- LOWen import_booking_url
Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.
Costo de contexto
Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.
Instalar
Instalación con un clic
Agrega esto a tu archivo `claude_desktop_config.json`:
{
"mcpServers": {
"appointment-booking": {
"url": "https://hatchloop.dev/mcp/appointment-booking"
}
}
}Puntos de conexión remotos
https://hatchloop.dev/mcp/appointment-bookingstreamable-httpQué puede hacer
Inventario de herramientas
Herramientas (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]
Esquema de entrada
{
"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]
Esquema de entrada
{
"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]
Esquema de entrada
{
"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]
Esquema de entrada
{
"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]
Esquema de entrada
{
"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]
Esquema de entrada
{
"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]
Esquema de entrada
{
"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]
Esquema de entrada
{
"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]
Esquema de entrada
{
"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"
]
}Comunidad
Evidencia