Find enrolled home-service and trade businesses by trade and ZIP, and send a booking request.
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.
List the windows a Book It business accepts booking requests for, by date in the business's time zone, after its minimum notice and without its days off, for up to 14 days at a time. Each window has a window_id for request_booking. A window is when the business says it can take work, not a confirmed slot.
The business_id exactly as find_provider returned it, such as "juniper-ridge-roofing".
How many days to show, 1 to 14. Defaults to 7.
First date to show, YYYY-MM-DD, in the business's time zone. Defaults to today there.
List the windows a Book It business accepts booking requests for, by date in the business's time zone, after its minimum notice and without its days off, for up to 14 days at a time. Each window has a window_id for request_booking. A window is when the business says it can take work, not a confirmed slot.
| Argument | Type | Description |
|---|---|---|
| days | integer | How many days to show, 1 to 14. Defaults to 7. |
| from_date | string | First date to show, YYYY-MM-DD, in the business's time zone. Defaults to today there. |
| business_id* | string | The business_id exactly as find_provider returned it, such as "juniper-ridge-roofing". |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"business_id"
],
"properties": {
"days": {
"type": "integer",
"maximum": 14,
"minimum": 1,
"description": "How many days to show, 1 to 14. Defaults to 7."
},
"from_date": {
"type": "string",
"maxLength": 10,
"description": "First date to show, YYYY-MM-DD, in the business's time zone. Defaults to today there."
},
"business_id": {
"type": "string",
"maxLength": 80,
"minLength": 3,
"description": "The business_id exactly as find_provider returned it, such as \"juniper-ridge-roofing\"."
}
}
}Find home-service and trade businesses enrolled in Book It that serve a US ZIP code for a trade, such as HVAC, plumbing, roofing or lawn care. Returns each business's name, phone, website, the services that match the stated need, and its next open request window. Only businesses that enrolled and list that ZIP in their own service area appear; the result states the ordering rule, which is a fair daily rotation and never paid placement. An empty list means no enrolled business covers that trade and ZIP yet.
| Argument | Type | Description |
|---|---|---|
| zip* | string | The 5-digit US ZIP code where the work is. |
| need | string | What the person needs in a few words, such as "furnace blowing cold air". Used to surface matching services. |
| trade* | string | The trade or a common name for it: "hvac", "furnace repair", "plumber", "roofer", "lawn care", "tree service". |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"trade",
"zip"
],
"properties": {
"zip": {
"type": "string",
"pattern": "^\\d{5}$",
"description": "The 5-digit US ZIP code where the work is."
},
"need": {
"type": "string",
"maxLength": 300,
"description": "What the person needs in a few words, such as \"furnace blowing cold air\". Used to surface matching services."
},
"trade": {
"type": "string",
"maxLength": 80,
"minLength": 2,
"description": "The trade or a common name for it: \"hvac\", \"furnace repair\", \"plumber\", \"roofer\", \"lawn care\", \"tree service\"."
}
}
}Get one Book It business's services with any price range the business entered, its service-area ZIPs, its weekly hours for requests, its next open window, and the consent text a person agrees to before a booking request is sent.
| Argument | Type | Description |
|---|---|---|
| business_id* | string | The business_id exactly as find_provider returned it, such as "juniper-ridge-roofing". |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"business_id"
],
"properties": {
"business_id": {
"type": "string",
"maxLength": 80,
"minLength": 3,
"description": "The business_id exactly as find_provider returned it, such as \"juniper-ridge-roofing\"."
}
}
}Return the price range a Book It business entered for one of its services, labelled as the business's own range and not a quote. When the business entered no range, says so. Book It never estimates, averages or invents a price.
| Argument | Type | Description |
|---|---|---|
| service | string | Instead of service_id, the service name as the business lists it, such as "Furnace repair". |
| service_id | string | The service_id from get_services or find_provider. |
| business_id* | string | The business_id exactly as find_provider returned it, such as "juniper-ridge-roofing". |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"business_id"
],
"properties": {
"service": {
"type": "string",
"maxLength": 80,
"description": "Instead of service_id, the service name as the business lists it, such as \"Furnace repair\"."
},
"service_id": {
"type": "string",
"maxLength": 40,
"description": "The service_id from get_services or find_provider."
},
"business_id": {
"type": "string",
"maxLength": 80,
"minLength": 3,
"description": "The business_id exactly as find_provider returned it, such as \"juniper-ridge-roofing\"."
}
}
}Send a Book It business a booking request on a person's behalf. Collects only the person's name, phone, ZIP, what they need and a preferred time. The business receives it by email and in its inbox and confirms a time with the person directly; the request is never a confirmed appointment. Requires consent_confirmed true, which means the person read and agreed to the business's booking_consent_text (from get_services or check_availability). US and Canadian phone numbers only. A repeat request from the same phone to the same business within 24 hours returns the first request instead of sending another.
| Argument | Type | Description |
|---|---|---|
| need* | string | What the person needs, in their words, such as "Furnace runs but blows cold air." |
| service_id | string | Optional service_id from get_services. |
| business_id* | string | The business_id exactly as find_provider returned it, such as "juniper-ridge-roofing". |
| customer_zip* | string | The 5-digit ZIP where the work is. It must be in the business's service area. |
| customer_name* | string | The person's name, at least a first name. |
| customer_phone* | string | A US or Canadian phone number the business can call or text, such as (406) 555-0123. |
| consent_confirmed* |
| boolean |
| True only after the person read the business's booking_consent_text and agreed to it. |
| preferred_time_note | string | A short preferred time in words, such as "any weekday morning", when no window fits. |
| preferred_window_id | string | A window_id from check_availability, such as "2026-10-15@08:00-12:00". |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"business_id",
"customer_name",
"customer_phone",
"customer_zip",
"need",
"consent_confirmed"
],
"properties": {
"need": {
"type": "string",
"maxLength": 600,
"minLength": 5,
"description": "What the person needs, in their words, such as \"Furnace runs but blows cold air.\""
},
"service_id": {
"type": "string",
"maxLength": 40,
"description": "Optional service_id from get_services."
},
"business_id": {
"type": "string",
"maxLength": 80,
"minLength": 3,
"description": "The business_id exactly as find_provider returned it, such as \"juniper-ridge-roofing\"."
},
"customer_zip": {
"type": "string",
"pattern": "^\\d{5}$",
"description": "The 5-digit ZIP where the work is. It must be in the business's service area."
},
"customer_name": {
"type": "string",
"maxLength": 80,
"minLength": 2,
"description": "The person's name, at least a first name."
},
"customer_phone": {
"type": "string",
"maxLength": 25,
"minLength": 10,
"description": "A US or Canadian phone number the business can call or text, such as (406) 555-0123."
},
"consent_confirmed": {
"type": "boolean",
"description": "True only after the person read the business's booking_consent_text and agreed to it."
},
"preferred_time_note": {
"type": "string",
"maxLength": 120,
"description": "A short preferred time in words, such as \"any weekday morning\", when no window fits."
},
"preferred_window_id": {
"type": "string",
"maxLength": 40,
"description": "A window_id from check_availability, such as \"2026-10-15@08:00-12:00\"."
}
}
}