Find real businesses and book appointments. Books via Cal.com; imports 12 platforms.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
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]
Full http(s) URL to classify, e.g. 'https://cal.com/jane' or…
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]
| Argument | Type | Description |
|---|---|---|
| url* | string | Full http(s) URL to classify, e.g. 'https://cal.com/jane' or… |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Full http(s) URL to classify, e.g. 'https://cal.com/jane' or…"
}
}
}Find 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]
| Argument | Type | Description |
|---|---|---|
| city | string | Instead of location: a city, e.g. 'Muscat, Oman'. |
| region | string | With city: a state or region. |
| location* | object | City/town or ZIP, optionally with country ('Nizwa, Oman'). Geocoded by OSM. |
| vertical | string | |
| capability | string | Kind of business: 'dentist', 'cafe', 'plumber'. Use it or vertical. |
| price_band | object | Supply-network rows only (OpenStreetMap has no prices). |
| max_results | integer | |
| availability_window | object | Accepted but NOT APPLIED: it does not narrow results (no live calendars). The… |
{
"type": "object",
"required": [
"location"
],
"properties": {
"city": {
"type": "string",
"description": "Instead of location: a city, e.g. 'Muscat, Oman'."
},
"region": {
"type": "string",
"description": "With city: a state or region."
},
"location": {
"type": "object",
"required": [
"zip_or_city"
],
"properties": {
"zip_or_city": {
"type": "string",
"description": "Town, city, address or postal code, with the country if not US: 'Nizwa, Oman'. A bare 5-digit ZIP is a US ZIP; add the country for any other postal code."
},
"radius_miles": {
"type": "number",
"minimum": 0,
"description": "Radius in miles (default 3.1, max 25); applies to OpenStreetMap results only."
}
},
"description": "City/town or ZIP, optionally with country ('Nizwa, Oman'). Geocoded by OSM."
},
"vertical": {
"enum": [
"personal_services",
"home_services",
"professional_services"
],
"type": "string"
},
"capability": {
"type": "string",
"description": "Kind of business: 'dentist', 'cafe', 'plumber'. Use it or vertical."
},
"price_band": {
"type": "object",
"properties": {
"max_usd": {
"type": "number"
}
},
"description": "Supply-network rows only (OpenStreetMap has no prices)."
},
"max_results": {
"type": "integer",
"default": 5,
"maximum": 20,
"minimum": 1
},
"availability_window": {
"type": "object",
"properties": {
"end_iso": {
"type": "string",
"format": "date-time"
},
"start_iso": {
"type": "string",
"format": "date-time"
}
},
"description": "Accepted but NOT APPLIED: it does not narrow results (no live calendars). The…"
}
}
}Retrieve the final OutcomeReceipt for a completed operation. [free, no key]
| Argument | Type | Description |
|---|---|---|
| operation_id* | string |
{
"type": "object",
"required": [
"operation_id"
],
"properties": {
"operation_id": {
"type": "string"
}
}
}Query the current state of any in-flight async operation by operation_id. [free, no key]
| Argument | Type | Description |
|---|---|---|
| operation_id* | string |
{
"type": "object",
"required": [
"operation_id"
],
"properties": {
"operation_id": {
"type": "string"
}
}
}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] [limited]
| Argument | Type | Description |
|---|---|---|
| vertical | string | If omitted, inferred from the booking platform. |
| booking_url* | string | Full URL the user supplied. Must point at one of the 12 supported booking… |
| 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 | string | |
| contact_phone | string | If omitted, the platform integration handles outreach. |
| idempotency_key | string |
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]
| Argument | Type | Description |
|---|---|---|
| params* | object | The same request body you would pass to the operation |
| operation* | string |
{
"type": "object",
"required": [
"operation",
"params"
],
"properties": {
"params": {
"type": "object",
"description": "The same request body you would pass to the operation"
},
"operation": {
"type": "string"
}
}
}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, not charged while no payment rail is on] [async→get_outcome] [limited]
| Argument | Type | Description |
|---|---|---|
| notes | string | |
| action* | string | |
| smb_id* | string | |
| service | string | |
| customer | object | |
| requested_time | object | |
| idempotency_key | string | Retry key: a 24h replay returns the original receipt, not re-run or charged. |
| existing_appointment_id | string | Required for cancel |
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]
No arguments.
{
"type": "object",
"properties": {}
}Look 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]
| Argument | Type | Description |
|---|---|---|
| smb_id* | string | |
| capability_to_verify | string |
{
"type": "object",
"required": [
"smb_id"
],
"properties": {
"smb_id": {
"type": "string"
},
"capability_to_verify": {
"type": "string"
}
}
}| Retry key: a 24h replay returns the original receipt, not re-run or charged. |
{
"type": "object",
"required": [
"booking_url"
],
"properties": {
"vertical": {
"enum": [
"personal_services",
"home_services",
"professional_services",
"restaurants",
"retail",
"healthcare",
"fitness"
],
"type": "string",
"description": "If omitted, inferred from the booking platform."
},
"booking_url": {
"type": "string",
"format": "uri",
"description": "Full URL the user supplied. Must point at one of the 12 supported booking…"
},
"capabilities": {
"type": "array",
"items": {
"type": "string"
},
"description": "Free-form capability tags (e.g., ['haircut','color','blowdry'])."
},
"country_code": {
"type": "string",
"description": "ISO 3166-1 alpha-2 (e.g. 'US', 'FR'); routes compliance on later sends."
},
"business_name": {
"type": "string",
"description": "If omitted, auto-extracted from the page's <title> or og:title."
},
"contact_email": {
"type": "string"
},
"contact_phone": {
"type": "string",
"description": "If omitted, the platform integration handles outreach."
},
"idempotency_key": {
"type": "string",
"maxLength": 128,
"description": "Retry key: a 24h replay returns the original receipt, not re-run or charged."
}
}
}{
"type": "object",
"required": [
"smb_id",
"action"
],
"properties": {
"notes": {
"type": "string"
},
"action": {
"enum": [
"book",
"cancel",
"check_availability"
],
"type": "string"
},
"smb_id": {
"type": "string"
},
"service": {
"type": "string"
},
"customer": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"email": {
"type": "string"
},
"phone": {
"type": "string"
}
}
},
"requested_time": {
"type": "object",
"properties": {
"preferred_iso": {
"type": "string",
"format": "date-time"
},
"window_end_iso": {
"type": "string",
"format": "date-time"
},
"duration_minutes": {
"type": "integer"
},
"window_start_iso": {
"type": "string",
"format": "date-time"
}
}
},
"idempotency_key": {
"type": "string",
"maxLength": 128,
"description": "Retry key: a 24h replay returns the original receipt, not re-run or charged."
},
"existing_appointment_id": {
"type": "string",
"description": "Required for cancel"
}
}
}