Connect Housecall Pro to ChatGPT: Manage Jobs & Field Dispatch
Learn how to connect Housecall Pro to ChatGPT using an MCP server. Automate field dispatch, job scheduling, and estimates with natural language.
If you need to connect Housecall Pro to ChatGPT to automate field dispatch operations, generate estimates, or orchestrate job scheduling, you need a Model Context Protocol (MCP) server. This server acts as the translation layer between ChatGPT's tool calls and Housecall Pro's REST APIs. You can either build and maintain this infrastructure yourself, or use a managed integration platform like Truto to dynamically generate a secure, authenticated MCP server URL.
If your team uses Claude, check out our guide on connecting Housecall Pro to Claude or explore our broader architectural overview on connecting Housecall Pro to AI Agents.
Giving a Large Language Model (LLM) read and write access to a comprehensive field service management platform like Housecall Pro is a massive engineering challenge. You have to handle complex scheduling logic, nested line items within estimate options, and destructive bulk update operations. Every time a developer adds a new resource or updates a schema in Housecall Pro, your custom server code must be updated, redeployed, and tested.
This guide breaks down exactly how to use Truto to generate a secure, managed MCP server for Housecall Pro, connect it natively to ChatGPT, and execute complex field workflows using natural language.
The Engineering Reality of the Housecall Pro API
A custom MCP server is a self-hosted integration layer. While the open MCP standard provides a predictable way for models to discover tools over JSON-RPC 2.0, implementing it against Housecall Pro's highly specific field service architecture requires navigating several platform-specific quirks.
If you decide to build a custom MCP server for Housecall Pro, you own the entire API lifecycle. Here are the specific integration challenges that break standard CRUD assumptions:
Destructive Bulk Line Item Updates
When manipulating job line items, Housecall Pro relies heavily on a bulk update endpoint (housecall_pro_job_line_items_bulk_update). If an AI agent attempts to append a single line item using this endpoint, it can inadvertently wipe out the entire invoice. By default, the append_line_items flag is set to false. Any existing line items omitted from the request body are instantly deleted. Your MCP server must force the agent to either fetch the entire array first and append to it, or strictly utilize the single-creation endpoint (create_a_housecall_pro_job_line_item) while managing the associated rate limits.
Schedules versus Appointments
The Housecall Pro API treats scheduling with extreme granularity. Jobs have a base schedule, but a multi-day job might have several discrete appointments. If a job has a multi-day schedule containing more than one appointment, the standard housecall_pro_job_schedules_bulk_update endpoint will reject the request. The LLM must be trained to introspect the job, identify if it is a multi-day multi-appointment entity, and pivot to calling the specific appointment endpoints (list_all_housecall_pro_job_appointments and update_a_housecall_pro_job_appointment_by_id).
Deeply Nested Estimate Structures
Estimates in Housecall Pro are not flat documents. An estimate belongs to a customer, contains multiple options, and each option contains its own array of line_items. When an LLM wants to "add a premium tier to the Smith estimate", the server must first pull the estimate, create a new estimate option (create_a_housecall_pro_estimate_option), capture the returned option_id, and then bulk update the line items specifically for that option. Flattening this into a single MCP tool namespace requires careful schema extraction and documentation.
Creating the Housecall Pro MCP Server
Truto dynamically generates MCP tools by reading the underlying integration's resources and documentation records. A tool only appears if it has an explicit documentation entry, ensuring the LLM receives clean, actionable descriptions and strictly enforced JSON schemas.
You can create an MCP server URL for a connected Housecall Pro account in two ways.
Method 1: Via the Truto UI
If you prefer a visual interface, you can generate the server directly from the dashboard:
- Navigate to the Integrated Accounts page for your Housecall Pro connection.
- Click the MCP Servers tab.
- Click Create MCP Server.
- Select your desired configuration. You can name the server (e.g., "Dispatch AI"), restrict the allowed methods (e.g., read-only), and filter the tags (e.g., only expose "jobs" and "customers").
- Copy the generated MCP server URL. This single URL carries the cryptographic token that authenticates the LLM to the specific Housecall Pro tenant.
Method 2: Via the API
For teams building automated deployment pipelines or provisioning AI agents programmatically, you can POST directly to the Truto API.
curl -X POST https://api.truto.one/integrated-account/<INTEGRATED_ACCOUNT_ID>/mcp \
-H "Authorization: Bearer $TRUTO_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Housecall Pro Dispatch Bot",
"config": {
"methods": ["read", "write"],
"tags": ["jobs", "employees", "customers"]
},
"expires_at": "2026-12-31T23:59:59Z"
}'The response provides the secure URL:
{
"id": "mcp_abc123",
"name": "Housecall Pro Dispatch Bot",
"url": "https://api.truto.one/mcp/a1b2c3d4e5f6g7h8i9j0"
}Treat this URL like a production secret. It acts as the routing and authentication layer for the JSON-RPC 2.0 communication between ChatGPT and Truto.
Connecting the MCP Server to ChatGPT
Once you have your Truto MCP URL, you must register it with your LLM client.
Option A: Via the ChatGPT UI
If you are using ChatGPT directly:
- In ChatGPT, navigate to Settings -> Apps -> Advanced settings.
- Ensure Developer mode is enabled.
- Under MCP servers / Custom connectors, click to add a new server.
- Give it a recognizable name like "Housecall Pro (Truto)".
- Paste the Truto MCP URL into the Server URL field and click Save.
ChatGPT will immediately ping the endpoint, perform the MCP initialize handshake, and execute tools/list to populate its context window with the available Housecall Pro endpoints.
Option B: Via Manual Config File (Local Agents)
If you are running a local agent, an open-source framework, or testing via an MCP inspector, you configure the server using a JSON configuration file. While Truto's endpoint natively supports HTTP POST JSON-RPC, standard desktop clients often expect a Server-Sent Events (SSE) transport adapter.
You run a standard adapter like @modelcontextprotocol/server-sse pointing to your Truto URL:
{
"mcpServers": {
"housecall_pro": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-sse",
"--url",
"https://api.truto.one/mcp/a1b2c3d4e5f6g7h8i9j0"
]
}
}
}This maps the local standard I/O streams of the client to the remote HTTP POST requirements of the Truto MCP server.
Hero Tools for Housecall Pro
Truto automatically maps Housecall Pro's API surface into descriptive, snake_case tool names with fully documented JSON schemas. When ChatGPT calls these tools, Truto flattens the query and body schemas into a single namespace, parsing the LLM's arguments and executing the request against the proxy API.
Here are 7 high-leverage tools available for Housecall Pro workflows.
1. list_all_housecall_pro_jobs
Fetches a paginated list of jobs. Truto automatically injects limit and next_cursor parameters into the schema. ChatGPT can use this to scan the day's schedule or find jobs matching specific criteria.
"Fetch the 10 most recent jobs in Housecall Pro. If there is a next_cursor in the response, fetch the next page and summarize the work_status for all 20 jobs."
2. housecall_pro_company_booking_windows
Retrieves available windows to book a job or estimate based on Online Booking settings and open employee slots. This is critical for AI booking agents that need to respect actual capacity rather than blindly assigning times.
"Check the company booking windows for the next 3 days for a standard 60-minute service. What slots are available?"
3. create_a_housecall_pro_customer
Creates a new customer record. The schema includes nested objects for phone numbers, email addresses, and physical addresses. Truto ensures the LLM provides the strictly required fields based on the documentation records.
"Create a new customer named Sarah Jenkins. Her email is sarah@example.com, phone is 555-0199, and her address is 123 Maple Street, Austin, TX 78701."
4. create_a_housecall_pro_estimate
Generates an estimate associated with a specific customer. It optionally accepts a schedule window and assigned employees. This tool is the entry point for quoting workflows.
"Draft a new estimate for customer ID 'cust_8910'. Set the work status to draft and schedule it for tomorrow at 9 AM."
5. housecall_pro_job_line_items_bulk_update
Performs bulk operations on job line items. Because this is a destructive operation in the Housecall Pro API, the LLM must explicitly map the IDs of items it wishes to keep.
"Update the line items for job ID 'job_554'. Add a new item called 'Emergency Service Fee' for $150, but make sure to include the existing 'Diagnostic Check' item so it doesn't get deleted."
6. housecall_pro_jobs_dispatch
Assigns a specific job to one or more employees and triggers dispatch notifications.
"Dispatch job 'job_992' to employee ID 'emp_12' and confirm the assignment was successful."
7. list_all_housecall_pro_employees
Retrieves the active employee roster, including their internal IDs, roles, and current status. This is normally used as a lookup step before executing a dispatch operation.
"List all active employees. Find the ID for the technician named 'Mike' so we can assign him to a new repair job."
For the complete inventory of available Housecall Pro tools - including routing, lead management, and webhook subscriptions - visit the Housecall Pro integration page.
Workflows in Action
MCP enables ChatGPT to chain multiple Housecall Pro endpoints together to accomplish complex, multi-step field service objectives. Here are two real-world scenarios.
Workflow 1: Emergency Field Dispatch
A dispatcher interacting with ChatGPT needs to find an available technician, create a customer, generate a job, and dispatch it immediately.
"A new customer, John Doe (555-0122, 999 Oak Ln, Denver CO), just called with a burst pipe. Find out which employee is available today, create the customer, create an emergency repair job for his address, and dispatch the available employee to the job."
Step-by-step Execution:
housecall_pro_company_booking_windows: ChatGPT checks capacity for the day to confirm a slot exists.list_all_housecall_pro_employees: Retrieves the roster to identify an available technician ID.create_a_housecall_pro_customer: Creates John Doe's record and retrieves the newcustomer_idand nestedaddress_id.create_a_housecall_pro_job: Uses the IDs to generate the work order.housecall_pro_jobs_dispatch: Pushes the job to the selected technician's mobile app.
sequenceDiagram
participant User
participant GPT as ChatGPT
participant Truto as Truto MCP Server
participant Upstream as Housecall Pro API
User->>GPT: "Create emergency job for John Doe and dispatch..."
GPT->>Truto: call housecall_pro_company_booking_windows
Truto->>Upstream: GET /company/booking_windows
Upstream-->>Truto: 200 OK (Slots available)
Truto-->>GPT: Returns available windows
GPT->>Truto: call list_all_housecall_pro_employees
Truto->>Upstream: GET /employees
Upstream-->>Truto: 200 OK (Employee list)
Truto-->>GPT: Returns employees
GPT->>Truto: call create_a_housecall_pro_customer
Truto->>Upstream: POST /customers
Upstream-->>Truto: 201 Created (customer_id: 123)
Truto-->>GPT: Returns new customer ID
GPT->>Truto: call create_a_housecall_pro_job
Truto->>Upstream: POST /jobs
Upstream-->>Truto: 201 Created (job_id: 456)
Truto-->>GPT: Returns job ID
GPT->>Truto: call housecall_pro_jobs_dispatch
Truto->>Upstream: POST /jobs/456/dispatch
Upstream-->>Truto: 200 OK
Truto-->>GPT: Confirm dispatch success
GPT-->>User: "Job 456 created and dispatched to Mike."Workflow 2: Automated Estimate Generation
A sales representative wants ChatGPT to generate a tiered estimate for an existing customer.
"Find the customer named 'Acme Corp'. Create a new estimate for them. Add two options to the estimate: Option A called 'Standard Service' for $500, and Option B called 'Premium Service' for $800."
Step-by-step Execution:
list_all_housecall_pro_customers: ChatGPT searches the customer list for "Acme Corp" to grab the exactcustomer_id.create_a_housecall_pro_estimate: Generates the base estimate document.create_a_housecall_pro_estimate_option(Standard): Creates the first tier on the estimate.create_a_housecall_pro_estimate_option(Premium): Creates the second tier.housecall_pro_estimate_option_line_items_bulk_update: Attaches the specific $500 and $800 line items to the respective options.
flowchart TD
A["list_all_housecall_pro_customers<br>Find 'Acme Corp' ID"] --> B["create_a_housecall_pro_estimate<br>Generate base document"]
B --> C["create_a_housecall_pro_estimate_option<br>Create 'Standard' Option"]
B --> D["create_a_housecall_pro_estimate_option<br>Create 'Premium' Option"]
C --> E["housecall_pro_estimate_option_line_items_bulk_update<br>Add $500 line item"]
D --> F["housecall_pro_estimate_option_line_items_bulk_update<br>Add $800 line item"]Security and Access Control
Connecting an LLM to a live field service database requires strict boundaries. Truto provides several mechanisms to lock down the MCP server environment:
- Method Filtering: You can constrain the server to safe operations. By passing
methods: ["read"]during creation, Truto filters out allcreate,update, anddeletetools. The LLM can query customer history but cannot mutate data. - Tag Filtering: Restrict the AI's blast radius by functional domain. Setting
tags: ["jobs", "employees"]ensures the LLM cannot access tools related to billing, estimates, or company settings. - Time-to-Live (TTL): Temporary servers can be created via the
expires_atproperty. Once the Unix timestamp is reached, Truto purges the token from the key-value store and the server self-destructs. This is perfect for short-lived CI/CD integration tests or temporary contractor access. - Secondary Authentication: By enabling
require_api_token_auth, possession of the MCP URL is no longer sufficient. The connecting client (or human user) must also supply a valid Truto API token in the authorization header.
A factual note on rate limits: Field service APIs are heavily rate limited to protect backend infrastructure. Truto does not retry, throttle, or apply backoff on rate limit errors. When the Housecall Pro API returns an HTTP 429 Too Many Requests error, Truto passes that error directly to the caller. Truto normalizes the upstream rate limit information into standardized IETF headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset). The caller (your AI framework or agent orchestrator) is strictly responsible for implementing its own retry and exponential backoff logic.
Final Thoughts
Building a custom integration layer between ChatGPT and Housecall Pro forces your team to manage complex scheduling abstractions, nested estimate options, destructive bulk updates, and OAuth token refreshes.
By leveraging Truto's auto-generated MCP servers, you offload the entire infrastructure burden. Your AI agents gain immediate, schema-validated access to the Housecall Pro API, securely sandboxed by method and tag filters. You focus on engineering the field service prompts and workflows; Truto handles the protocol translation.
FAQ
- How do I give ChatGPT access to my Housecall Pro jobs?
- You can generate a Model Context Protocol (MCP) server URL via Truto. This URL securely wraps the Housecall Pro REST API into a format ChatGPT can understand and execute directly from its interface.
- Does Truto automatically handle Housecall Pro rate limits for ChatGPT?
- No. Truto standardizes the rate limit headers into IETF format (ratelimit-limit, ratelimit-remaining, ratelimit-reset) and passes HTTP 429 errors directly back to the calling client. Your AI framework or client is responsible for implementing retry and backoff logic.
- Can I restrict ChatGPT to read-only access for Housecall Pro?
- Yes. When creating the MCP server in Truto, you can pass a configuration object with a methods filter set to ['read']. This prevents ChatGPT from seeing or executing any write, update, or delete operations.
- How do I handle multi-day job schedules in Housecall Pro?
- For multi-day jobs with more than one appointment, you cannot use the standard bulk schedule update endpoints. You must orchestrate the individual job appointment endpoints to manage the schedule accurately.