Pool service scheduling and lead management for Pool Pro Florida in St. Lucie County, Florida.
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.
Book a confirmed Pool Pro Florida appointment through Cal.com after the customer has selected an available time. Requires customer name, email, service address, and the exact start value returned by get_available_times. A successful booking triggers the existing Cal.com webhook, which creates the lead in Pool Founder.
Customer full name.
Customer email address.
Exact ISO 8601 slot start returned by get_available_times.
Pool service address; Cal.com uses this as the attendee address/location.
Optional notes about the pool or requested service.
Customer phone number. Normal U.S. formatting is accepted.
IANA time zone. Defaults to America/New_York.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Book a confirmed Pool Pro Florida appointment through Cal.com after the customer has selected an available time. Requires customer name, email, service address, and the exact start value returned by get_available_times. A successful booking triggers the existing Cal.com webhook, which creates the lead in Pool Founder.
| Argument | Type | Description |
|---|---|---|
| name* | string | Customer full name. |
| email* | string | Customer email address. |
| notes | string | Optional notes about the pool or requested service. |
| phone | string | Customer phone number. Normal U.S. formatting is accepted. |
| start* | string | Exact ISO 8601 slot start returned by get_available_times. |
| address* | string | Pool service address; Cal.com uses this as the attendee address/location. |
| timeZone | string | IANA time zone. Defaults to America/New_York. |
{
"type": "object",
"required": [
"name",
"email",
"address",
"start"
],
"properties": {
"name": {
"type": "string",
"description": "Customer full name."
},
"email": {
"type": "string",
"format": "email",
"description": "Customer email address."
},
"notes": {
"type": "string",
"description": "Optional notes about the pool or requested service."
},
"phone": {
"type": "string",
"description": "Customer phone number. Normal U.S. formatting is accepted."
},
"start": {
"type": "string",
"description": "Exact ISO 8601 slot start returned by get_available_times."
},
"address": {
"type": "string",
"description": "Pool service address; Cal.com uses this as the attendee address/location."
},
"timeZone": {
"type": "string",
"description": "IANA time zone. Defaults to America/New_York."
}
},
"additionalProperties": false
}Create a Pool Pro Florida service lead in Pool Founder when a customer is interested in service but is not yet booking an appointment. Do not call this before book_appointment for the same inquiry because a successful Cal.com booking creates the Pool Founder lead through the booking webhook.
| Argument | Type | Description |
|---|---|---|
| name* | string | Customer full name. |
| string | Customer email address. | |
| phone | string | Customer phone number. |
| address | string | Pool service address. |
| message | string | Customer request or useful notes. |
| service* | string | Requested service, such as Pool Cleaning or Pool Consultation. |
{
"type": "object",
"required": [
"name",
"service"
],
"properties": {
"name": {
"type": "string",
"description": "Customer full name."
},
"email": {
"type": "string",
"format": "email",
"description": "Customer email address."
},
"phone": {
"type": "string",
"description": "Customer phone number."
},
"address": {
"type": "string",
"description": "Pool service address."
},
"message": {
"type": "string",
"description": "Customer request or useful notes."
},
"service": {
"type": "string",
"description": "Requested service, such as Pool Cleaning or Pool Consultation."
}
},
"additionalProperties": false
}Get real Cal.com appointment availability for Pool Pro Florida. Use date-only YYYY-MM-DD values. Use this when a customer wants to schedule a pool consultation or service appointment.
| Argument | Type | Description |
|---|---|---|
| end* | string | Last date to check, YYYY-MM-DD. |
| start* | string | First date to check, YYYY-MM-DD. |
| timeZone | string | IANA time zone. Defaults to America/New_York. |
{
"type": "object",
"required": [
"start",
"end"
],
"properties": {
"end": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Last date to check, YYYY-MM-DD."
},
"start": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "First date to check, YYYY-MM-DD."
},
"timeZone": {
"type": "string",
"description": "IANA time zone. Defaults to America/New_York."
}
},
"additionalProperties": false
}Read the current PoolProFlorida.com sitemap index and discover published site pages. Use this to find the correct Pool Pro Florida page before reading current website content. An optional query ranks likely relevant page URLs first.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum number of matching sitemap URLs to return. |
| query | string | Optional Pool Pro Florida topic, such as weekly service, green pool, service area, pricing, Pool School, or a neighborhood name. |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Maximum number of matching sitemap URLs to return."
},
"query": {
"type": "string",
"description": "Optional Pool Pro Florida topic, such as weekly service, green pool, service area, pricing, Pool School, or a neighborhood name."
}
},
"additionalProperties": false
}Read the current text of a PoolProFlorida.com page. The page must be present in the current Pool Pro Florida sitemap index. Use this for current published services, pricing, service areas, hours, policies, and page-specific business information.
| Argument | Type | Description |
|---|---|---|
| url* | string | Exact PoolProFlorida.com URL returned by get_site_map. A site-relative path beginning with / is also accepted. |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Exact PoolProFlorida.com URL returned by get_site_map. A site-relative path beginning with / is also accepted."
}
},
"additionalProperties": false
}Replace the private Pool Pro Florida CardDAV address book from one complete Pool Founder active-customer snapshot. Owner-only. Creates and updates stable vCards and removes stale Pool Founder contacts only after the complete snapshot validates.
| Argument | Type | Description |
|---|---|---|
| snapshot* | object | |
| customers* | array |
{
"type": "object",
"required": [
"snapshot",
"customers"
],
"properties": {
"snapshot": {
"type": "object",
"required": [
"source",
"complete",
"generatedAt",
"customerCount"
],
"properties": {
"source": {
"type": "string",
"const": "poolfounder"
},
"complete": {
"type": "boolean",
"const": true
},
"generatedAt": {
"type": "string",
"description": "ISO 8601 snapshot generation time."
},
"customerCount": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"customers": {
"type": "array",
"items": {
"type": "object",
"required": [
"sourceId",
"displayName",
"phones",
"emails",
"locations"
],
"properties": {
"emails": {
"type": "array",
"items": {
"type": "object",
"required": [
"value"
],
"properties": {
"label": {
"type": "string"
},
"value": {
"type": "string",
"format": "email"
},
"primary": {
"type": "boolean"
}
},
"additionalProperties": false
}
},
"phones": {
"type": "array",
"items": {
"type": "object",
"required": [
"value"
],
"properties": {
"label": {
"type": "string"
},
"value": {
"type": "string"
},
"primary": {
"type": "boolean"
}
},
"additionalProperties": false
}
},
"company": {
"type": [
"string",
"null"
]
},
"lastName": {
"type": "string"
},
"sourceId": {
"type": "string",
"description": "Permanent Pool Founder customer ID."
},
"firstName": {
"type": "string"
},
"locations": {
"type": "array",
"items": {
"type": "object",
"required": [
"address"
],
"properties": {
"address": {
"type": "object",
"required": [
"street",
"city",
"state",
"postalCode",
"country"
],
"properties": {
"city": {
"type": "string"
},
"state": {
"type": "string"
},
"street": {
"type": "string"
},
"country": {
"type": "string"
},
"street2": {
"type": [
"string",
"null"
]
},
"postalCode": {
"type": "string"
}
},
"additionalProperties": false
},
"primary": {
"type": "boolean"
},
"sourceId": {
"type": "string"
}
},
"additionalProperties": false
}
},
"displayName": {
"type": "string"
},
"serviceDays": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"maxItems": 5000
}
},
"additionalProperties": false
}Synchronize one complete Pool Founder route-date window into the private Pool Pro Florida CalDAV calendar. Each stop is one stable VEVENT. Completed events are historical records and are never removed. Missing non-completed events inside a validated complete window are retained and marked cancelled instead of deleted.
| Argument | Type | Description |
|---|---|---|
| events* | array | |
| snapshot* | object |
{
"type": "object",
"required": [
"snapshot",
"events"
],
"properties": {
"events": {
"type": "array",
"items": {
"type": "object",
"required": [
"jobId",
"routeId",
"serviceDate",
"stopIndex",
"customerName",
"address",
"serviceName",
"start",
"end",
"status",
"timingSource"
],
"properties": {
"end": {
"type": "string",
"description": "ISO 8601 end with UTC offset or Z. Planned before service; actual departure after completion."
},
"email": {
"type": "string",
"format": "email",
"description": "Optional structured customer email from Pool Founder. Included in event notes for tap-to-email on mobile calendars."
},
"jobId": {
"type": "string",
"description": "Permanent Pool Founder job ID."
},
"phone": {
"type": "string",
"description": "Optional structured customer phone number from Pool Founder. Included in event notes for tap-to-call on mobile calendars."
},
"start": {
"type": "string",
"description": "ISO 8601 start with UTC offset or Z. Planned before service; actual arrival after completion."
},
"status": {
"enum": [
"planned",
"in_progress",
"completed",
"skipped",
"cancelled"
],
"type": "string"
},
"address": {
"type": "string",
"description": "Service address. Written to LOCATION so mobile calendars can open Maps."
},
"routeId": {
"type": "string",
"description": "Permanent Pool Founder route ID."
},
"routeName": {
"type": "string"
},
"stopIndex": {
"type": "integer",
"maximum": 500,
"minimum": 1
},
"serviceDate": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Service date in YYYY-MM-DD."
},
"serviceName": {
"type": "string"
},
"customerName": {
"type": "string"
},
"timingSource": {
"enum": [
"planned",
"actual"
],
"type": "string"
}
},
"additionalProperties": false
},
"maxItems": 5000
},
"snapshot": {
"type": "object",
"required": [
"source",
"complete",
"generatedAt",
"windowStart",
"windowEnd",
"eventCount"
],
"properties": {
"source": {
"type": "string",
"const": "poolfounder"
},
"complete": {
"type": "boolean",
"const": true
},
"windowEnd": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"eventCount": {
"type": "integer",
"minimum": 0
},
"generatedAt": {
"type": "string",
"description": "ISO 8601 snapshot generation time."
},
"windowStart": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}Import an image attached in ChatGPT into the Pool Pro Florida CMS media library. ChatGPT supplies a temporary download URL and file ID through its native file parameter handoff. The server downloads the image directly, validates it, strips embedded metadata by re-encoding to WebP, stores it outside Git, and returns a stable /media/... URL. This tool does not modify any page.
| Argument | Type | Description |
|---|---|---|
| alt | string | Accessible alt text for the image. |
| file* | object | |
| tags | array | Optional media tags such as hero, riverview, or generated. |
| source | string | Whether the image came from image generation or a user upload. |
| caption | string | Optional media-library caption. |
| filename | string | Optional override filename. If omitted, the filename supplied by ChatGPT is used. |
{
"type": "object",
"required": [
"file"
],
"properties": {
"alt": {
"type": "string",
"maxLength": 250,
"description": "Accessible alt text for the image."
},
"file": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string",
"description": "ChatGPT file identifier for the attached file."
},
"file_name": {
"type": "string",
"description": "Optional original filename supplied by ChatGPT."
},
"mime_type": {
"type": "string",
"description": "Optional MIME type supplied by ChatGPT."
},
"download_url": {
"type": "string",
"format": "uri",
"description": "Temporary HTTPS download URL supplied by ChatGPT for the attached file."
}
},
"additionalProperties": false
},
"tags": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]{1,64}$"
},
"maxItems": 10,
"description": "Optional media tags such as hero, riverview, or generated."
},
"source": {
"enum": [
"generated",
"uploaded"
],
"type": "string",
"description": "Whether the image came from image generation or a user upload."
},
"caption": {
"type": "string",
"maxLength": 1000,
"description": "Optional media-library caption."
},
"filename": {
"type": "string",
"description": "Optional override filename. If omitted, the filename supplied by ChatGPT is used."
}
},
"additionalProperties": false
}Create or update one private Pool Pro Florida CardDAV contact from Pool Founder. Owner-only and non-destructive: this tool never removes any other contacts.
| Argument | Type | Description |
|---|---|---|
| customer* | object | |
| generatedAt* | string | ISO 8601 generation time. |
{
"type": "object",
"required": [
"generatedAt",
"customer"
],
"properties": {
"customer": {
"type": "object",
"required": [
"sourceId",
"displayName",
"phones",
"emails",
"locations"
],
"properties": {
"emails": {
"type": "array",
"items": {
"type": "object",
"required": [
"value"
],
"properties": {
"label": {
"type": "string"
},
"value": {
"type": "string",
"format": "email"
},
"primary": {
"type": "boolean"
}
},
"additionalProperties": false
}
},
"phones": {
"type": "array",
"items": {
"type": "object",
"required": [
"value"
],
"properties": {
"label": {
"type": "string"
},
"value": {
"type": "string"
},
"primary": {
"type": "boolean"
}
},
"additionalProperties": false
}
},
"company": {
"type": [
"string",
"null"
]
},
"lastName": {
"type": "string"
},
"sourceId": {
"type": "string",
"description": "Permanent Pool Founder customer ID."
},
"firstName": {
"type": "string"
},
"locations": {
"type": "array",
"items": {
"type": "object",
"required": [
"address"
],
"properties": {
"address": {
"type": "object",
"required": [
"street",
"city",
"state",
"postalCode",
"country"
],
"properties": {
"city": {
"type": "string"
},
"state": {
"type": "string"
},
"street": {
"type": "string"
},
"country": {
"type": "string"
},
"street2": {
"type": [
"string",
"null"
]
},
"postalCode": {
"type": "string"
}
},
"additionalProperties": false
},
"primary": {
"type": "boolean"
},
"sourceId": {
"type": "string"
}
},
"additionalProperties": false
}
},
"displayName": {
"type": "string"
},
"serviceDays": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"generatedAt": {
"type": "string",
"description": "ISO 8601 generation time."
}
},
"additionalProperties": false
}Create or update one private Pool Pro Florida CalDAV VEVENT from a Pool Founder route stop. The identity is jobId plus serviceDate, so planned timing can later be replaced by actual arrival and departure without duplication. Owner-only and non-destructive.
| Argument | Type | Description |
|---|---|---|
| event* | object | |
| generatedAt* | string | ISO 8601 generation time. |
{
"type": "object",
"required": [
"generatedAt",
"event"
],
"properties": {
"event": {
"type": "object",
"required": [
"jobId",
"routeId",
"serviceDate",
"stopIndex",
"customerName",
"address",
"serviceName",
"start",
"end",
"status",
"timingSource"
],
"properties": {
"end": {
"type": "string",
"description": "ISO 8601 end with UTC offset or Z. Planned before service; actual departure after completion."
},
"email": {
"type": "string",
"format": "email",
"description": "Optional structured customer email from Pool Founder. Included in event notes for tap-to-email on mobile calendars."
},
"jobId": {
"type": "string",
"description": "Permanent Pool Founder job ID."
},
"phone": {
"type": "string",
"description": "Optional structured customer phone number from Pool Founder. Included in event notes for tap-to-call on mobile calendars."
},
"start": {
"type": "string",
"description": "ISO 8601 start with UTC offset or Z. Planned before service; actual arrival after completion."
},
"status": {
"enum": [
"planned",
"in_progress",
"completed",
"skipped",
"cancelled"
],
"type": "string"
},
"address": {
"type": "string",
"description": "Service address. Written to LOCATION so mobile calendars can open Maps."
},
"routeId": {
"type": "string",
"description": "Permanent Pool Founder route ID."
},
"routeName": {
"type": "string"
},
"stopIndex": {
"type": "integer",
"maximum": 500,
"minimum": 1
},
"serviceDate": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Service date in YYYY-MM-DD."
},
"serviceName": {
"type": "string"
},
"customerName": {
"type": "string"
},
"timingSource": {
"enum": [
"planned",
"actual"
],
"type": "string"
}
},
"additionalProperties": false
},
"generatedAt": {
"type": "string",
"description": "ISO 8601 generation time."
}
},
"additionalProperties": false
}