Appointment Booking
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Find real businesses and book appointments. Books via Cal.com; imports 12 platforms.
| Author | dev.hatchloop |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 965 ms |
| Last measured | 2026-10-26 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"Appointment Booking": {
"url": "https://hatchloop.dev/mcp/appointment-booking",
"transport": "streamable-http"
}
}
}
Measured tools (9)
find_businessread-onlyFind real businesses near a place, sorted by distance (nearest of those examined; see result.search). Data: OpenStreetMap (ODbL, (c) OSM contributors); phone, website, hours only when mapped. Coverage varies; community-mapped, NOT verified by us; source=openstreetmap rows cannot be booked. Answers within about 5 s: status partial (search_in_progress) means repeat the call. If OSM is down: retriable 'temporarily unavailable', never invented rows. [free, no key] [beta]
Parameters:
location(required) — object — City/town or ZIP, optionally with country ('Nizwa, Oman'). Geocoded by OSM.city— string — Instead of location: a city, e.g. 'Muscat, Oman'.region— string — With city: a state or region.vertical— stringcapability— string — Kind of business: 'dentist', 'cafe', 'plumber'. Use it or vertical.price_band— object — Supply-network rows only (OpenStreetMap has no prices).max_results— integeravailability_window— object — Accepted but NOT APPLIED: it does not narrow results (no live calendars). The…
Hints: read-only yes · destructive no · idempotent yes · open-world no
verify_businessread-onlyLook up what we know about a business in our supply network: contact channels, capabilities, last verification. A DIRECTORY LOOKUP - it does not contact the business. Supply-network ids only, not osm:... ids. [free, no key] [limited]
Parameters:
smb_id(required) — stringcapability_to_verify— string
Hints: read-only yes · destructive no · idempotent yes · open-world no
schedule_appointmentdestructiveCheck 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, not charged while no payment rail is on] [async→get_outcome] [limited]
Parameters:
smb_id(required) — stringaction(required) — stringnotes— stringservice— stringcustomer— objectrequested_time— objectidempotency_key— string — Retry key: a 24h replay returns the original receipt, not re-run or charged.existing_appointment_id— string — Required for cancel
Hints: read-only no · destructive yes · idempotent no · open-world yes
get_statusread-onlyQuery the current state of any in-flight async operation by operation_id. [free, no key]
Parameters:
operation_id(required) — string
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_outcomeread-onlyRetrieve the final OutcomeReceipt for a completed operation. [free, no key]
Parameters:
operation_id(required) — string
Hints: read-only yes · destructive no · idempotent yes · open-world no
preview_costread-onlyReturn 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]
Parameters:
operation(required) — stringparams(required) — object — The same request body you would pass to the operation
Hints: read-only yes · destructive no · idempotent yes · open-world no
self_testread-onlyService 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]
Hints: read-only yes · destructive no · idempotent yes · open-world no
check_booking_linkread-onlyFree, 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]
Parameters:
url(required) — string — Full http(s) URL to classify, e.g. 'https://cal.com/jane' or…
Hints: read-only yes · destructive no · idempotent yes · open-world no
import_booking_urlTurn 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] [limited]
Parameters:
booking_url(required) — string — Full URL the user supplied. Must point at one of the 12 supported booking…vertical— string — If omitted, inferred from the booking platform.capabilities— array — Free-form capability tags (e.g., ['haircut','color','blowdry']).country_code— string — ISO 3166-1 alpha-2 (e.g. 'US', 'FR'); routes compliance on later sends.business_name— string — If omitted, auto-extracted from the page's <title> or og:title.contact_email— stringcontact_phone— string — If omitted, the platform integration handles outreach.idempotency_key— string — Retry key: a 24h replay returns the original receipt, not re-run or charged.
Hints: read-only no · destructive no · idempotent yes · open-world no
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.