2.6 KiB
2.6 KiB
ServiceTitan MCP Server
MCP server for ServiceTitan API integration. Access jobs, customers, invoices, technicians, and appointments for field service management.
Setup
npm install
npm run build
Environment Variables
| Variable | Required | Description |
|---|---|---|
SERVICETITAN_CLIENT_ID |
Yes | App client ID from ServiceTitan developer portal |
SERVICETITAN_CLIENT_SECRET |
Yes | App client secret |
SERVICETITAN_TENANT_ID |
Yes | Tenant/company ID |
API Endpoints
- API Base:
https://api.servicetitan.io - Auth:
https://auth.servicetitan.io/connect/token
Tools
Jobs
- list_jobs - List work orders with filtering by status, customer, technician
- get_job - Get detailed job information
- create_job - Create new jobs/work orders
Customers (CRM)
- list_customers - List customers with filtering
- get_customer - Get customer details with locations and contacts
Accounting
- list_invoices - List invoices with filtering by status, customer, job
Dispatch
- list_technicians - List field technicians
- list_appointments - List scheduled appointments
Usage with Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"servicetitan": {
"command": "node",
"args": ["/path/to/mcp-servers/servicetitan/dist/index.js"],
"env": {
"SERVICETITAN_CLIENT_ID": "your-client-id",
"SERVICETITAN_CLIENT_SECRET": "your-client-secret",
"SERVICETITAN_TENANT_ID": "your-tenant-id"
}
}
}
}
Authentication
ServiceTitan uses OAuth 2.0 Client Credentials flow:
- Register your app in the ServiceTitan Developer Portal
- Request access to required API modules (CRM, JPM, Dispatch, Accounting)
- Get client credentials and tenant ID
The MCP server automatically handles token refresh.
API Modules
ServiceTitan API is organized into modules:
- jpm - Job Planning & Management (jobs, estimates)
- crm - Customer Relationship Management (customers, locations)
- dispatch - Dispatch (technicians, appointments, zones)
- accounting - Accounting (invoices, payments)
Examples
List scheduled jobs:
list_jobs(status: "Scheduled", pageSize: 25)
Get customer with details:
get_customer(customer_id: 12345)
Create a new job:
create_job(
customerId: 12345,
locationId: 67890,
jobTypeId: 111,
priority: "High",
summary: "AC repair - no cooling"
)
List tomorrow's appointments:
list_appointments(
startsOnOrAfter: "2024-01-15T00:00:00Z",
startsOnOrBefore: "2024-01-15T23:59:59Z"
)