🚀 Don't want to self-host? Join the waitlist for our fully managed solution →
Zero setup. Zero maintenance. Just connect and automate.
🚀 ServiceTitan MCP Server
💡 What This Unlocks
This MCP server gives AI direct access to your entire ServiceTitan operation. Instead of clicking through screens, you just tell it what you need.
🎯 ServiceTitan-Native Power Moves
| Just say... | What happens |
|---|---|
| "Show me all high-priority jobs scheduled for tomorrow" | Queries jobs API, filters by priority and date, returns organized list with customer details |
| "Create an emergency AC repair job for John at 123 Main St" | Creates job, assigns priority, links to customer location, notifies dispatch |
| "Find all unpaid invoices over $500 from last month" | Searches accounting module, filters by amount and date, returns aging report |
| "Which technicians are available between 2-4pm today?" | Checks dispatch schedule, finds gaps, returns available techs with skills |
| "Send me a summary of today's completed jobs and revenue" | Aggregates job data, calculates totals, generates daily performance report |
🔗 The Real Power: Combining Tools
AI can chain multiple ServiceTitan operations together:
- Smart Dispatching: "Find the closest available plumber to handle the leak at 456 Oak Ave" → Check job type, filter techs by skill, calculate proximity, create appointment
- Revenue Recovery: "List customers with outstanding balances over 60 days and draft payment reminder texts" → Query invoices, filter aging, pull contact info, generate personalized messages
- Performance Analysis: "Compare this week's job completion rate vs last month by technician" → Pull job data, group by tech, calculate metrics, format comparison
📦 What's Inside
124 API tools covering the entire ServiceTitan platform:
- Job Planning & Management (JPM) — Jobs, estimates, projects, appointments
- Customer Relationship Management (CRM) — Customers, locations, contacts, bookings
- Dispatch — Technicians, appointments, zones, non-job appointments
- Accounting — Invoices, payments, invoice items, payment terms
- Reporting — Custom reports, dashboards, data export
All with proper error handling, automatic token refresh, and TypeScript types.
🚀 Quick Start
Option 1: Claude Desktop (Local)
-
Clone and build:
git clone https://github.com/YOUR_USERNAME/servicetitan-mcp.git cd servicetitan-mcp npm install npm run build -
Get your ServiceTitan credentials:
- Go to ServiceTitan Developer Portal
- Create an app or use existing credentials
- Copy Client ID, Client Secret, and Tenant ID
- Request access to required API modules (CRM, JPM, Dispatch, Accounting)
-
Configure Claude Desktop:
On macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonOn Windows:
%APPDATA%\Claude\claude_desktop_config.json{ "mcpServers": { "servicetitan": { "command": "node", "args": ["/ABSOLUTE/PATH/TO/servicetitan-mcp/dist/index.js"], "env": { "SERVICETITAN_CLIENT_ID": "your-client-id", "SERVICETITAN_CLIENT_SECRET": "your-client-secret", "SERVICETITAN_TENANT_ID": "your-tenant-id" } } } } -
Restart Claude Desktop
Option 2: Deploy to Railway
- Click the button above
- Set environment variables in Railway dashboard:
SERVICETITAN_CLIENT_IDSERVICETITAN_CLIENT_SECRETSERVICETITAN_TENANT_ID
- Use the Railway URL as your MCP server endpoint
Option 3: Docker
docker build -t servicetitan-mcp .
docker run -p 3000:3000 \
-e SERVICETITAN_CLIENT_ID=your-id \
-e SERVICETITAN_CLIENT_SECRET=your-secret \
-e SERVICETITAN_TENANT_ID=your-tenant \
servicetitan-mcp
🔐 Authentication
ServiceTitan uses OAuth 2.0 Client Credentials flow:
- Register your app in the ServiceTitan Developer Portal
- Request API access for required modules:
- CRM (Customer data)
- JPM (Job Planning & Management)
- Dispatch (Scheduling & technicians)
- Accounting (Invoices & payments)
- Get credentials:
- Client ID
- Client Secret
- Tenant ID (your ServiceTitan company ID)
The MCP server handles token refresh automatically — you never need to manually refresh.
📚 Available Tools
Jobs (Job Planning & Management)
list_jobs— List work orders with filtering by status, customer, technician, date rangeget_job— Get detailed job information including line items, notes, technicianscreate_job— Create new jobs/work orders with customer, location, job typeupdate_job— Update job status, priority, summary, or other fieldslist_job_types— List available job types for your company
Customers (CRM)
list_customers— List customers with filtering and searchget_customer— Get customer details including locations, contacts, tagscreate_customer— Add new customers to your CRMupdate_customer— Update customer informationlist_customer_contacts— List all contacts for a customer
Locations
list_locations— List service locationsget_location— Get location details with address and service historycreate_location— Add new service locationslist_location_contacts— Get contacts at a specific location
Invoices (Accounting)
list_invoices— List invoices with filtering by status, customer, job, dateget_invoice— Get detailed invoice with line items and paymentslist_invoice_items— Get line items for an invoiceexport_invoices— Batch export invoice data
Dispatch
list_technicians— List field technicians with status and skillsget_technician— Get technician details and schedulelist_appointments— List scheduled appointments with filteringget_appointment— Get appointment detailscreate_appointment— Schedule new appointmentslist_zones— List dispatch zones
Estimates
list_estimates— List estimates/quotesget_estimate— Get estimate detailscreate_estimate— Create new estimates
Reporting
get_report_data— Pull data from ServiceTitan reportslist_report_categories— List available report categories
🎯 Example Prompts
Once connected to Claude, you can use natural language:
Job Management
- "Show me all open emergency jobs assigned to Mike"
- "Create a plumbing job for leak repair at 789 Elm Street"
- "What jobs were completed yesterday by our HVAC techs?"
- "List all jobs with pending estimates over $5,000"
Customer Service
- "Find the customer John Smith and show me their service history"
- "Add a new customer: Sarah Johnson, 555-1234, 321 Oak Ave"
- "Which customers have had service in the last 30 days?"
Dispatch & Scheduling
- "Who's available tomorrow morning for a water heater install?"
- "Show me Mike's schedule for next week"
- "Create an appointment for Jane Doe on Friday at 2pm"
Financial
- "List all unpaid invoices from December"
- "Show me today's invoices with payment status"
- "Which customers owe more than $1,000?"
Analytics
- "Compare this month's job volume to last month"
- "What's the average job value for HVAC repairs?"
- "Show me top 10 customers by revenue this year"
🛠️ Development
Prerequisites
- Node.js 18+
- npm or yarn
- ServiceTitan Developer account
Setup
git clone https://github.com/YOUR_USERNAME/servicetitan-mcp.git
cd servicetitan-mcp
npm install
cp .env.example .env
# Edit .env with your ServiceTitan credentials
npm run build
npm start
Project Structure
servicetitan-mcp/
├── src/
│ ├── index.ts # Main MCP server
│ ├── tools/ # Tool implementations
│ │ ├── jobs.ts
│ │ ├── customers.ts
│ │ ├── invoices.ts
│ │ └── dispatch.ts
│ ├── api/ # ServiceTitan API client
│ │ ├── client.ts
│ │ └── auth.ts
│ └── types/ # TypeScript types
├── dist/ # Compiled JavaScript
├── tests/ # Unit tests
├── package.json
├── tsconfig.json
└── README.md
Testing
npm test # Run all tests
npm run test:watch # Watch mode
npm run test:coverage # Coverage report
Building
npm run build # Compile TypeScript
npm run build:watch # Watch mode
🐛 Troubleshooting
"Authentication failed"
- Double-check your Client ID and Client Secret
- Verify your Tenant ID is correct
- Ensure your app has been approved for API access in the developer portal
"Module access denied"
- Request access to the required modules (CRM, JPM, Dispatch, Accounting) in the developer portal
- Wait for approval from ServiceTitan
"Tools not appearing in Claude"
- Restart Claude Desktop after updating config
- Check that the path in
claude_desktop_config.jsonis absolute, not relative - Verify the build completed successfully (
dist/index.jsexists)
Rate limits
- ServiceTitan has rate limits per API endpoint
- The MCP server will automatically retry with exponential backoff
- For bulk operations, use pagination parameters
📖 Resources
- ServiceTitan API Documentation
- ServiceTitan Developer Portal
- MCP Protocol Specification
- Claude Desktop Documentation
🤝 Contributing
Contributions are welcome! Please:
- Fork the repo
- Create a feature branch (
git checkout -b feature/amazing-tool) - Commit your changes (
git commit -m 'Add amazing tool') - Push to the branch (
git push origin feature/amazing-tool) - Open a Pull Request
📄 License
MIT License - see LICENSE for details
🙏 Credits
Built by MCPEngine — AI infrastructure for business software.
Want more MCP servers? Check out our full catalog covering 30+ business platforms.
Questions? Open an issue or join our Discord community.