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:

  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"
)