Find open slots on any appty link and book solo providers. Providers manage bookings by API key.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Optional. Public tools need no auth. For provider tools send 'Bearer <appty_sk_... key>' from Dashboard > Settings > AI assistants.
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.
Book a client into a service at a start time, the same way the dashboard books. Returns a preview first and only acts when confirm=true. A past start is saved as completed with no email. A future start emails the usual confirmation. No money moves through the assistant. Any pay link is only a request the client pays on Appty.
Session start, ISO 8601. Does not have to be an open public slot.
Client id from list_clients.
Service id. One-off shells are refused.
Set true only after the caller has seen a preview and wants it done. Anything else, including the string "true", is a preview and changes nothing.
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.
Book a client into a service at a start time, the same way the dashboard books. Returns a preview first and only acts when confirm=true. A past start is saved as completed with no email. A future start emails the usual confirmation. No money moves through the assistant. Any pay link is only a request the client pays on Appty.
| Argument | Type | Description |
|---|---|---|
| start* | string | Session start, ISO 8601. Does not have to be an open public slot. |
| confirm | boolean | Set true only after the caller has seen a preview and wants it done. Anything else, including the string "true", is a preview and changes nothing. |
| client_id* | string | Client id from list_clients. |
| service_id* | string | Service id. One-off shells are refused. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"client_id",
"service_id",
"start"
],
"properties": {
"start": {
"type": "string",
"minLength": 1,
"description": "Session start, ISO 8601. Does not have to be an open public slot."
},
"confirm": {
"type": "boolean",
"description": "Set true only after the caller has seen a preview and wants it done. Anything else, including the string \"true\", is a preview and changes nothing."
},
"client_id": {
"type": "string",
"format": "uuid",
"description": "Client id from list_clients."
},
"service_id": {
"type": "string",
"format": "uuid",
"description": "Service id. One-off shells are refused."
}
},
"additionalProperties": false
}Cancel one booking under the provider's cancellation policy and email the client. Returns a preview first and only acts when confirm=true. No money moves through the assistant. Any refund or fee is applied by Appty, the same as the dashboard. The client pays anything still due on Appty.
| Argument | Type | Description |
|---|---|---|
| reason | string | |
| confirm | boolean | Set true only after the caller has seen a preview and wants it done. Anything else, including the string "true", is a preview and changes nothing. |
| booking_id* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"booking_id"
],
"properties": {
"reason": {
"type": "string",
"maxLength": 500
},
"confirm": {
"type": "boolean",
"description": "Set true only after the caller has seen a preview and wants it done. Anything else, including the string \"true\", is a preview and changes nothing."
},
"booking_id": {
"type": "string",
"format": "uuid"
}
},
"additionalProperties": false
}Open start times for a public service, using the same slot rules as the booking page. from_date and to_date are YYYY-MM-DD and at most 31 days apart. Each start is ISO 8601 with the provider's offset, plus a provider-local label.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Booking link slug, the part after getappty.com/ |
| to_date* | string | Last day to include, YYYY-MM-DD. At most 31 days after from_date. |
| timezone | string | IANA zone the dates are in. Defaults to the provider's zone. Slot labels stay in the provider's zone. |
| from_date* | string | First day to include, YYYY-MM-DD |
| service_id* | string | Service id from get_provider |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"slug",
"service_id",
"from_date",
"to_date"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Booking link slug, the part after getappty.com/"
},
"to_date": {
"type": "string",
"description": "Last day to include, YYYY-MM-DD. At most 31 days after from_date."
},
"timezone": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "IANA zone the dates are in. Defaults to the provider's zone. Slot labels stay in the provider's zone."
},
"from_date": {
"type": "string",
"description": "First day to include, YYYY-MM-DD"
},
"service_id": {
"type": "string",
"format": "uuid",
"description": "Service id from get_provider"
}
},
"additionalProperties": false
}Check that a start is still open, then return a link to the booking page with that service and time selected. The client confirms and pays on Appty. Nothing is booked here.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Booking link slug, the part after getappty.com/ |
| start* | string | Slot start, ISO 8601, from find_open_slots |
| service_id* | string | Service id from get_provider |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"slug",
"service_id",
"start"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Booking link slug, the part after getappty.com/"
},
"start": {
"type": "string",
"minLength": 1,
"description": "Slot start, ISO 8601, from find_open_slots"
},
"service_id": {
"type": "string",
"format": "uuid",
"description": "Service id from get_provider"
}
},
"additionalProperties": false
}Public booking page for a provider slug: name, headline, time zone, currency, services, upcoming group sessions, and the booking URL. No client data.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Booking link slug, the part after getappty.com/ |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Booking link slug, the part after getappty.com/"
}
},
"additionalProperties": false
}This provider's bookings. Omit from and to for upcoming sessions. Never includes pay or manage tokens.
| Argument | Type | Description |
|---|---|---|
| to | string | Include sessions starting before this ISO 8601 time. |
| from | string | Include sessions starting at or after this ISO 8601 time. When from and to are both omitted, this is now. |
| limit | integer | Default 50. Maximum 100. |
| status | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"to": {
"type": "string",
"minLength": 1,
"description": "Include sessions starting before this ISO 8601 time."
},
"from": {
"type": "string",
"minLength": 1,
"description": "Include sessions starting at or after this ISO 8601 time. When from and to are both omitted, this is now."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Default 50. Maximum 100."
},
"status": {
"enum": [
"held",
"requested",
"confirmed",
"completed",
"cancelled"
],
"type": "string"
}
},
"additionalProperties": false
}This provider's clients: id, name, email, phone, billing currency, and default pay mode.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Default 50. Maximum 100. |
| query | string | Case-insensitive match on the client's name or email. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Default 50. Maximum 100."
},
"query": {
"type": "string",
"maxLength": 200,
"description": "Case-insensitive match on the client's name or email."
}
},
"additionalProperties": false
}Move a booking to an open slot. The client is not emailed. Returns a preview first and only acts when confirm=true. No money moves through the assistant.
| Argument | Type | Description |
|---|---|---|
| confirm | boolean | Set true only after the caller has seen a preview and wants it done. Anything else, including the string "true", is a preview and changes nothing. |
| new_start* | string | New start, ISO 8601. Must be an open slot for this booking's length. |
| booking_id* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"booking_id",
"new_start"
],
"properties": {
"confirm": {
"type": "boolean",
"description": "Set true only after the caller has seen a preview and wants it done. Anything else, including the string \"true\", is a preview and changes nothing."
},
"new_start": {
"type": "string",
"minLength": 1,
"description": "New start, ISO 8601. Must be an open slot for this booking's length."
},
"booking_id": {
"type": "string",
"format": "uuid"
}
},
"additionalProperties": false
}Create one invoice per currency for a client's sessions (by id or by calendar month) and email it. Returns a preview first and only acts when confirm=true. No money moves through the assistant. The invoice only sends a request the client pays on Appty.
| Argument | Type | Description |
|---|---|---|
| period | string | Calendar month YYYY-MM in the provider's time zone. Uninvoiced sessions in that month. |
| confirm | boolean | Set true only after the caller has seen a preview and wants it done. Anything else, including the string "true", is a preview and changes nothing. |
| client_id* | string | |
| booking_ids | array | Sessions to put on the invoice. Pass this or period. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"client_id"
],
"properties": {
"period": {
"type": "string",
"pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
"description": "Calendar month YYYY-MM in the provider's time zone. Uninvoiced sessions in that month."
},
"confirm": {
"type": "boolean",
"description": "Set true only after the caller has seen a preview and wants it done. Anything else, including the string \"true\", is a preview and changes nothing."
},
"client_id": {
"type": "string",
"format": "uuid"
},
"booking_ids": {
"type": "array",
"items": {
"$ref": "#/properties/client_id"
},
"maxItems": 100,
"minItems": 1,
"description": "Sessions to put on the invoice. Pass this or period."
}
},
"additionalProperties": false
}Email a pay link for one booking, or for a client's unpaid sessions and invoices. Returns a preview first and only acts when confirm=true. No money moves through the assistant. This only sends a request the client pays on Appty. Group spots, packages, and fees are not emailed.
| Argument | Type | Description |
|---|---|---|
| confirm | boolean | Set true only after the caller has seen a preview and wants it done. Anything else, including the string "true", is a preview and changes nothing. |
| client_id | string | Email a pay reminder for each unpaid session and invoice this client has. Pass this or booking_id. |
| booking_id | any | Email a pay link for this booking. Pass this or client_id. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"confirm": {
"type": "boolean",
"description": "Set true only after the caller has seen a preview and wants it done. Anything else, including the string \"true\", is a preview and changes nothing."
},
"client_id": {
"type": "string",
"format": "uuid",
"description": "Email a pay reminder for each unpaid session and invoice this client has. Pass this or booking_id."
},
"booking_id": {
"$ref": "#/properties/client_id",
"description": "Email a pay link for this booking. Pass this or client_id."
}
},
"additionalProperties": false
}Unpaid balances for this provider, grouped by client and currency. Same figures as the dashboard who-owes page.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"additionalProperties": false
}