Find participating local service providers and book live appointment times.
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.
Use this only with the one-time approval issued after the user confirms the exact cancellation inside the protected management form. It cancels only the authorized active booking, frees its capacity, and sends transactional notifications. Safe retries must reuse the same idempotency key.
One-time approval supplied only by the protected management form.
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
Use this only with the one-time approval issued after the user confirms the exact cancellation inside the protected management form. It cancels only the authorized active booking, frees its capacity, and sends transactional notifications. Safe retries must reuse the same idempotency key.
| Argument | Type | Description |
|---|---|---|
| source* | string | |
| correlation_id* | string | |
| idempotency_key* | string | |
| anonymous_session_id* | string | |
| booking_change_authorization_token* | string | One-time approval supplied only by the protected management form. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"booking_change_authorization_token",
"idempotency_key",
"source",
"anonymous_session_id",
"correlation_id"
],
"properties": {
"source": {
"enum": [
"chatgpt_plugin",
"chatgpt_ads",
"ai_search",
"organic_search",
"paid_search",
"manual_referral",
"provider_referral",
"direct",
"test"
],
"type": "string"
},
"correlation_id": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"idempotency_key": {
"type": "string",
"maxLength": 200,
"minLength": 16
},
"anonymous_session_id": {
"type": "string",
"maxLength": 200,
"minLength": 8
},
"booking_change_authorization_token": {
"type": "string",
"minLength": 32,
"description": "One-time approval supplied only by the protected management form."
}
}
}Compatibility-only completion for an explicitly initiated legacy profile-link session. Never call it as part of a new booking and never ask for an SMS code in chat. Viewing or managing an existing appointment starts Connect through the corresponding booking-management tool.
| Argument | Type | Description |
|---|---|---|
| linking_session_id* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"linking_session_id"
],
"properties": {
"linking_session_id": {
"type": "string",
"maxLength": 200,
"minLength": 10
}
}
}Use only from the protected final card with its one-time authorization after the user presses Confirm. Provider, request, hold, time and protected answers come from server context; do not pass or reconstruct them. This anonymous action completes the booking and must not trigger Connect or phone verification. Safe retries must reuse the same idempotency key.
| Argument | Type | Description |
|---|---|---|
| source* | string | |
| campaign_id | string | |
| correlation_id* | string | |
| idempotency_key* | string | |
| anonymous_session_id* | string | |
| booking_authorization_token* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"booking_authorization_token",
"idempotency_key",
"source",
"anonymous_session_id",
"correlation_id"
],
"properties": {
"source": {
"enum": [
"chatgpt_plugin",
"chatgpt_ads",
"ai_search",
"organic_search",
"paid_search",
"manual_referral",
"provider_referral",
"direct",
"test"
],
"type": "string"
},
"campaign_id": {
"type": "string",
"maxLength": 200
},
"correlation_id": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"idempotency_key": {
"type": "string",
"maxLength": 200,
"minLength": 16
},
"anonymous_session_id": {
"type": "string",
"maxLength": 200,
"minLength": 8
},
"booking_authorization_token": {
"type": "string",
"minLength": 32
}
}
}Open an appointment that belongs to the connected customer. This is read-only. Historical appointments have no management actions. Give at most one short introductory sentence before calling this tool as the last action, then end the reply: no summary, status, details or instructions after the card. The live card owns viewing, exact change review and completion.
| Argument | Type | Description |
|---|---|---|
| intent | string | |
| booking_id* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"booking_id"
],
"properties": {
"intent": {
"enum": [
"view",
"reschedule",
"cancel"
],
"type": "string",
"default": "view"
},
"booking_id": {
"type": "string",
"maxLength": 200,
"minLength": 10
}
}
}Refresh availability only when needed, such as when the user asks to check again. start_service_request and update_service_request already return current matching data. Returns aggregated windows and refinement fields without selecting a company or reserving capacity.
| Argument | Type | Description |
|---|---|---|
| request_id* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string",
"maxLength": 200,
"minLength": 10
}
}
}Use immediately when the user asks to see or manage appointments. For cancellation or rescheduling, pass status='active'. Active means a confirmed or rescheduled appointment whose arrival window has not ended; past or terminal bookings are never active. If multiple active appointments are returned, show the choices instead of guessing. Connect is handled by the platform; never ask for a phone or code in chat.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| status | string | Use 'active' for cancellation or rescheduling. It returns only actionable appointments whose arrival window has not ended; omit to include history. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1
},
"status": {
"type": "string",
"maxLength": 40,
"description": "Use 'active' for cancellation or rescheduling. It returns only actionable appointments whose arrival window has not ended; omit to include history."
}
}
}Use this only from the protected management form after secure appointment access. It prepares the exact reschedule or cancellation review but does not change the booking. A reschedule accepts only a live slot returned inside the protected form and temporarily reserves that capacity. The user must separately confirm the exact preview before a write tool can run.
| Argument | Type | Description |
|---|---|---|
| action* | string | |
| booking_id | string | |
| new_slot_id | string | |
| idempotency_key* | string | |
| management_context_token | string | Opaque short-lived context supplied only by the protected management form. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"action",
"idempotency_key"
],
"properties": {
"action": {
"enum": [
"reschedule",
"cancel"
],
"type": "string"
},
"booking_id": {
"type": "string",
"maxLength": 200,
"minLength": 10
},
"new_slot_id": {
"type": "string",
"minLength": 32
},
"idempotency_key": {
"type": "string",
"maxLength": 200,
"minLength": 16
},
"management_context_token": {
"type": "string",
"minLength": 32,
"description": "Opaque short-lived context supplied only by the protected management form."
}
}
}Open the protected contact/terms/Confirm card only after company choice. Pass the explicitly chosen company's option_key from current service_options; omit it only for a single option or a previously selected company. First give at most one short introductory sentence, then call this tool as the last action and end the reply. Do not write anything after the card: it owns all subsequent instructions, progress and receipt.
| Argument | Type | Description |
|---|---|---|
| option_key | string | Exact option_key from this request's current service_options for the company explicitly chosen by the user. Never infer a choice from price or ordering. |
| request_id* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"request_id"
],
"properties": {
"option_key": {
"type": "string",
"maxLength": 100,
"minLength": 10,
"description": "Exact option_key from this request's current service_options for the company explicitly chosen by the user. Never infer a choice from price or ordering."
},
"request_id": {
"type": "string",
"maxLength": 200,
"minLength": 10
}
}
}Use this only with the one-time approval issued after the user confirms the exact reschedule inside the protected management form. It moves the existing booking to the reserved available time, preserves its prior-time history, frees the old capacity, and sends transactional notifications. Safe retries must reuse the same idempotency key.
| Argument | Type | Description |
|---|---|---|
| source* | string | |
| correlation_id* | string | |
| idempotency_key* | string | |
| anonymous_session_id* | string | |
| booking_change_authorization_token* | string | One-time approval supplied only by the protected management form. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"booking_change_authorization_token",
"idempotency_key",
"source",
"anonymous_session_id",
"correlation_id"
],
"properties": {
"source": {
"enum": [
"chatgpt_plugin",
"chatgpt_ads",
"ai_search",
"organic_search",
"paid_search",
"manual_referral",
"provider_referral",
"direct",
"test"
],
"type": "string"
},
"correlation_id": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"idempotency_key": {
"type": "string",
"maxLength": 200,
"minLength": 16
},
"anonymous_session_id": {
"type": "string",
"maxLength": 200,
"minLength": 8
},
"booking_change_authorization_token": {
"type": "string",
"minLength": 32,
"description": "One-time approval supplied only by the protected management form."
}
}
}Use only from the final protected card when the user selects one exact provider option. It rechecks availability, releases any previous selection, creates one temporary hold for the selected company, and returns its protected booking schema. It does not create a booking.
| Argument | Type | Description |
|---|---|---|
| option_key* | string | |
| request_id* | string | |
| idempotency_key* | string | |
| expected_state_version* | integer |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"request_id",
"expected_state_version",
"option_key",
"idempotency_key"
],
"properties": {
"option_key": {
"type": "string",
"maxLength": 100,
"minLength": 10
},
"request_id": {
"type": "string",
"maxLength": 200,
"minLength": 10
},
"idempotency_key": {
"type": "string",
"maxLength": 200,
"minLength": 16
},
"expected_state_version": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1
}
}
}Start a new supported service request immediately with the user's full intent and known public facts. Returns the vertical introduction and next intake/matching step, including availability when intake is complete; no separate lookup is needed. Use provider_hint only for an explicitly named company.
| Argument | Type | Description |
|---|---|---|
| answers | object | |
| user_intent* | string | |
| provider_hint | any | |
| vertical_hint | string | Optional exact live vertical ID. Omit it when uncertain and let the server classify user_intent. |
| idempotency_key* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"user_intent",
"idempotency_key"
],
"properties": {
"answers": {
"type": "object",
"default": {},
"properties": {
"brand": {
"description": "Brand"
},
"model": {
"description": "Model"
},
"zip_code": {
"description": "ZIP"
},
"appliance_type": {
"description": "Appliance type"
},
"selected_time_key": {
"type": "string",
"minLength": 1,
"description": "Exact time key returned by MCP Near Me after the user chooses an arrival window."
},
"problem_description": {
"description": "Problem"
}
},
"additionalProperties": false
},
"user_intent": {
"type": "string",
"maxLength": 3000,
"minLength": 3
},
"provider_hint": {
"anyOf": [
{
"type": "string",
"maxLength": 100,
"minLength": 3
},
{
"type": "null"
}
]
},
"vertical_hint": {
"enum": [
"appliance_repair",
"commercial_kitchen_refrigeration_repair"
],
"type": "string",
"description": "Optional exact live vertical ID. Omit it when uncertain and let the server classify user_intent."
},
"idempotency_key": {
"type": "string",
"maxLength": 200,
"minLength": 16
}
}
}Submit supplied answers and any chosen selected_time_key with the latest expected_state_version. Omitted optional/conditional fields do not block progress. Returns the updated next_action and current availability; continue directly without get_service_options. choose_service_provider means ask for a company before opening its protected contact card.
| Argument | Type | Description |
|---|---|---|
| answers | object | |
| request_id* | string | |
| idempotency_key* | string | |
| expected_state_version* | integer | |
| explicitly_unknown_field_ids | array |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"request_id",
"expected_state_version",
"idempotency_key"
],
"properties": {
"answers": {
"type": "object",
"default": {},
"properties": {
"brand": {
"description": "Brand"
},
"model": {
"description": "Model"
},
"zip_code": {
"description": "ZIP"
},
"appliance_type": {
"description": "Appliance type"
},
"selected_time_key": {
"type": "string",
"minLength": 1,
"description": "Exact time key returned by MCP Near Me after the user chooses an arrival window."
},
"problem_description": {
"description": "Problem"
}
},
"additionalProperties": false
},
"request_id": {
"type": "string",
"maxLength": 200,
"minLength": 10
},
"idempotency_key": {
"type": "string",
"maxLength": 200,
"minLength": 16
},
"expected_state_version": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1
},
"explicitly_unknown_field_ids": {
"type": "array",
"items": {
"type": "string",
"maxLength": 120,
"minLength": 1
},
"default": []
}
}
}