# ServiceTitan MCP Server MCP server for [ServiceTitan](https://www.servicetitan.com/) API integration. Access jobs, customers, invoices, technicians, and appointments for field service management. ## Setup ```bash 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`: ```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: 1. Register your app in the ServiceTitan Developer Portal 2. Request access to required API modules (CRM, JPM, Dispatch, Accounting) 3. 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" ) ```