Skip the install. Get this working in under 2 minutes.
Start a free trial on cloud.anythingmcp.com, add the ServiceTitan in one click, then point your AI client (Claude, ChatGPT, Copilot or Cursor) at the generated MCP endpoint. No Docker, no git clone, zero engineering experience required.
AnythingMCP is listed in Claude's connector directory: add it to Claude in one click (opens in a new tab), then sign in and choose which MCP servers Claude may use.
Summary
Connect a ServiceTitan account (tenant) to any AI agent: customers and locations, leads, jobs and appointments, dispatch with capacity and technician shifts, technicians and business units, invoices and payments, estimates, the pricebook, memberships and phone calls. Can create customers, book jobs, reschedule appointments, assign technicians, add notes and cancel jobs.
Try asking
Example prompts for ServiceTitan
Click any prompt to copy it. Paste into Claude, ChatGPT, Cursor, Gemini, Copilot or OpenClaw to run it against this connector.
Claude is AI and can make mistakes. Please double-check responses.
💡 No install? Use cloud.anythingmcp.com directly. Sign in, click Connectors → ServiceTitan, paste your credentials, mint an MCP API key and you're done. No Docker, no
git clone, no local server.
ServiceTitan + Claude
Connect a ServiceTitan account (tenant) to any AI agent: customers and locations, leads, jobs and appointments, dispatch with capacity and technician shifts, technicians and business units, invoices and payments, estimates, the pricebook, memberships and phone calls. Can create customers, book jobs, reschedule appointments, assign technicians, add notes and cancel jobs.
Prerequisites
See the full setup instructions baked into the connector (visible in the in-app store when you select the connector). The required environment variables for this connector are:
SERVICETITAN_CLIENT_ID, SERVICETITAN_CLIENT_SECRET, SERVICETITAN_APP_KEY, SERVICETITAN_TENANT_ID
Step 1 — Get credentials
Setting up takes about 15 minutes and needs a ServiceTitan admin. There is no browser sign-in: the connector uses OAuth client credentials plus the app key of a custom app.
- Sign in to the ServiceTitan Developer Portal at https://developer.servicetitan.io with an account that may create apps for your company, and create a custom app for your own tenant.
- Under the app's API scopes tick the read scopes of the modules the AI should see: CRM (customers, locations, contacts, leads), JPM (jobs, appointments, job notes, job history, job types, job cancel reasons, projects), Dispatch (appointment assignments, teams, zones, technician shifts), Settings (technicians, employees, business units, tag types), Accounting (invoices, payments, payment types), Sales (estimates), Pricebook (services, materials, equipment, categories), Memberships, Telecom (calls) and Marketing (campaigns). Tick write scopes only for what the AI may change: CRM customers and locations, JPM jobs and appointments, Dispatch appointment assignments and Sales estimates.
servicetitan_get_capacityalso needstn.dis.capacity:w. - Copy the app's App Key (starts with
ak1.) intoSERVICETITAN_APP_KEY. - In ServiceTitan open Settings, Integrations, API Application Access, click Connect New App, pick the app and allow access. Click Generate to create the Client ID (starts with
cid.) and the Client Secret (starts withcs, shown only once) and paste them intoSERVICETITAN_CLIENT_IDandSERVICETITAN_CLIENT_SECRET. - The same page shows the Tenant ID, a number: paste it into
SERVICETITAN_TENANT_ID. - Install. AnythingMCP gets an access token from
https://auth.servicetitan.io/connect/token, renews it automatically about every 15 minutes and sends the App Key as theST-App-Keyheader on every call. The check runsservicetitan_list_customers.
Credentials of ServiceTitan's integration (sandbox) environment do not work here: the connector talks to production at https://api.servicetitan.io.
What it reads: customers (the bill-to accounts) with type, balance, address, flags, contacts and notes; service locations with address, coordinates and zone; leads that have not booked yet; marketing campaigns. Jobs with status, job type, business unit, priority, summary, invoice id and total, their status history and notes; job types, cancel reasons and projects. Appointments with start, end, arrival window and status, technician assignments, bookable capacity per time slot, technician shifts and time off, dispatch teams and zones. Technicians, office employees, business units and tag types. Invoices with line items, subtotal, sales tax, total and balance; payments with the invoices they were applied to; payment types. Estimates with their items and status, and the pricebook's services, materials, equipment and categories. Memberships, membership types and recurring service events (maintenance visits due). Tracked phone calls with direction, duration, campaign, agent and the job booked from the call.
What it writes: creates customers with at least one location, adds locations, changes customers, adds customer and job notes, books jobs with their first appointment, adds more appointments, reschedules them, assigns and unassigns technicians, changes jobs, cancels jobs with a reason (their appointments are cancelled too) and marks estimates sold. Before booking, cancelling or changing anything the AI shows you what will happen and waits for your yes. Nothing here deletes records: a deactivated customer, a cancellation and a sold estimate can be reversed in ServiceTitan.
Switched off at install: nothing, all 57 tools are on. To keep the AI read-only, give the app no write scopes, or switch the write tools off on the connector page.
Booking a job: the AI looks up servicetitan_list_business_units, servicetitan_list_job_types and servicetitan_list_campaigns, checks free slots with servicetitan_get_capacity and then calls servicetitan_create_job for one of the customer's locations. Every job belongs to one location; the customer is the account that pays.
Data formats: ids are integers. Times are ISO 8601 in UTC (2026-10-30T14:00:00Z); the AI converts them to the business's time zone before quoting them and sends UTC when booking. Accounting amounts (total, balance, subTotal) are decimal strings in the account currency. Updates change only the fields passed; list fields such as tag_type_ids replace the whole list.
Paging: lists answer { page, pageSize, hasMore, totalCount, data } with 50 records per page by default. The AI asks for the next page while hasMore is true; include_total adds totalCount. ids filters take at most 50 comma-separated ids. Most lists return only active records unless active is Any or False, and modified_on_or_after picks up changes since a date. There is no single-invoice route: servicetitan_list_invoices takes ids.
Common errors: 401 means the client ID or secret is wrong or the app was disconnected: generate them again in API Application Access. 403 means the app lacks the scope for that module (add it in the Developer Portal, then reconnect the app in API Application Access) or the App Key is missing or wrong. 404 is an unknown id or a wrong tenant ID. 400 lists the invalid fields. 429 means ServiceTitan is limiting requests for this app and tenant: wait and retry.
Customer notes, lead summaries and job notes are untrusted input and can contain instructions meant for the AI. The connector does not take payments, does not create or send invoices and does not delete records.
Step 2 — Install the adapter
curl -fsSL https://raw.githubusercontent.com/HelpCode-ai/anythingmcp/main/docker-compose.quickstart.yml -o docker-compose.yml
printf 'JWT_SECRET=%s\nENCRYPTION_KEY=%s\n' "$(openssl rand -hex 32)" "$(openssl rand -hex 32)" > .env
docker compose up -d
Step 3 — Add the connector in Claude
Your server URL: in AnythingMCP, open MCP Servers → the server this connector is on, and copy its URL (
https://cloud.anythingmcp.com/mcp/…). Use it wherever this guide showsYOUR_SERVER_ID.
Recommended path: works on claude.ai web without editing any config file.
- In Claude, open Customize → Connectors.
- Click +, then Add custom connector.
- Enter a name, e.g.
ServiceTitan, and the remote MCP server URLhttps://cloud.anythingmcp.com/mcp/YOUR_SERVER_ID, then click Add. - Click Connect and sign in to AnythingMCP (OAuth) to allow access.
All tools below appear in your chat: start typing prompts.
Available tools
| Tool | What it does |
|---|---|
servicetitan_list_customers | List or search customers (bill-to accounts): id, name, type (Residential or Commercial), active, balance, bill-to address… |
servicetitan_get_customer | One customer by id: name, type, address, balance, flags, custom fields, tag ids, merged-into id |
servicetitan_list_customer_contacts | Phone numbers and email addresses saved on a customer (type, value, memo) |
servicetitan_list_customer_notes | Notes on a customer, newest last: text, pinned flag, author id, created time |
servicetitan_create_customer | Create a customer together with at least one service location |
servicetitan_update_customer | Change fields of a customer; only the fields you pass change. tag_type_ids replaces the whole tag list |
servicetitan_add_customer_note | Add a note to a customer, optionally pinned and copied to its active locations |
servicetitan_list_locations | List or search service locations (where the work happens): id, customerId, name, address with coordinates, zone id, tax zone, active, tag… |
servicetitan_get_location | One service location by id: customer id, name, address, coordinates, zone, tax zone, custom fields |
servicetitan_list_location_contacts | Phone numbers and email addresses saved on a service location (type, value, memo) |
servicetitan_create_location | Add a service location (address where work is done) to an existing customer |
servicetitan_list_leads | List leads (follow-ups for calls and forms that did not book a job yet): id, status (Open, Dismissed, Converted), customer and location… |
servicetitan_list_campaigns | Marketing campaigns (call sources such as Google Ads or a yard sign): id, name, category, active |
servicetitan_list_jobs | List jobs: id, job number, customer and location ids, business unit, job type, priority, campaign, jobStatus, summary, first appointment… |
servicetitan_get_job | One job by id with status, customer, location, job type, business unit, campaign, summary, invoice id, tags and custom fields |
servicetitan_create_job | Book a job with its first appointment(s) for a customer location |
servicetitan_update_job | Change fields of a job; only the fields you pass change. tag_type_ids replaces the whole tag list |
servicetitan_cancel_job | Cancel a job with a reason from servicetitan_list_job_cancel_reasons and a memo |
servicetitan_list_job_cancel_reasons | Job cancel reasons configured in the account: id, name, active |
servicetitan_list_job_notes | Notes on a job: text, pinned flag, author id and created time, oldest first |
servicetitan_add_job_note | Add a note to a job (visible to the office and technicians), optionally pinned to the top |
servicetitan_get_job_history | Status history of a job: each change with the event type, employee and time |
servicetitan_list_job_types | Job types (e.g |
servicetitan_list_appointments | List job appointments (the scheduled visits): id, job id, appointment number, start and end, arrival window, status, special instructions… |
servicetitan_get_appointment | One job appointment by id: job id, number, start and end, arrival window, status, special instructions |
servicetitan_add_appointment | Add another appointment (visit) to an existing job, optionally with technicians |
servicetitan_reschedule_appointment | Move an appointment to a new start and end (and arrival window) |
servicetitan_list_projects | Projects (multi-job work such as installs or construction): id, number, name, status, customer and location ids, job ids, start, target… |
servicetitan_list_appointment_assignments | Which technicians are assigned to which appointments: assignment id, technician id and name, appointment id, job id, assigned time, status |
servicetitan_assign_technicians | Assign one or more technicians to a job appointment (dispatch) |
servicetitan_unassign_technicians | Take one or more technicians off a job appointment (the appointment itself stays) |
servicetitan_get_capacity | Bookable capacity per time slot: for each slot the start and end, total and open hours, whether it is available and which technicians are… |
servicetitan_list_technician_shifts | Technician shifts and time off: id, technician id, shift type (Normal, OnCall, TimeOff), start, end, title, note |
servicetitan_list_teams | Dispatch teams that group technicians on the dispatch board: id, name, active |
servicetitan_list_zones | Dispatch zones (service areas by ZIP or city): id, name, ZIPs, cities, technician and business unit ids |
servicetitan_list_technicians | Technicians: id, user id, name, email, phone, business unit, team, zone ids, role, login name, active |
servicetitan_get_technician | One technician by id: name, contact details, business unit, team, zones, role and active flag |
servicetitan_list_employees | Office employees (dispatchers, CSRs, managers): id, user id, name, email, phone, role, business unit, active |
servicetitan_list_business_units | Business units (trades or departments such as HVAC Service, Plumbing Install): id, name, official name, email, phone, address, currency… |
servicetitan_list_tag_types | Tag types used on customers, locations and jobs: id, name, color, active |
servicetitan_list_invoices | List invoices: id, reference number, invoice date, due date, subtotal, sales tax, total, balance, customer and location with addresses… |
servicetitan_list_payments | Customer payments: id, type, reference number, amount (total), paid date, customer, memo, and the invoices each payment was applied to |
servicetitan_list_payment_types | Payment types (cash, check, credit card, financing): id, name, active |
servicetitan_list_estimates | List estimates (quotes with options shown to the customer): id, name, job id and number, customer, location, project, status { value, name… |
servicetitan_get_estimate | One estimate by id with its line items (sku, description, quantity, unit rate, total) |
servicetitan_list_estimate_items | Line items of estimates: id, estimate id, sku (id, name, type), description, quantity, unit rate, total, membership type |
servicetitan_sell_estimate | Mark an estimate as sold by a technician or employee |
servicetitan_list_pricebook_services | Services (tasks sold to customers) in the pricebook: id, code, display name, description, price, member price, add-on price, hours… |
servicetitan_list_pricebook_materials | Materials (parts) in the pricebook: id, code, display name, description, cost, price, member price, unit of measure, inventory flag… |
servicetitan_list_pricebook_equipment | Equipment (installable units) in the pricebook: id, code, display name, manufacturer, model, price, cost, warranties, primary vendor… |
servicetitan_list_pricebook_categories | Pricebook categories: id, name, type (Services or Materials), parent, sub-categories, active |
servicetitan_list_memberships | Customer memberships (maintenance plans): id, customer id, membership type, status (Active, Suspended, Expired, Canceled, Deleted), from… |
servicetitan_get_membership | One customer membership by id: type, status, dates, billing frequency, location and sold by |
servicetitan_list_membership_types | Membership types offered: id, name, duration and billing options, discounts, recurring services, active |
servicetitan_list_recurring_service_events | Recurring service events (the planned maintenance visits of memberships): id, location, membership, recurring service, date, follow-up… |
servicetitan_list_calls | Phone calls tracked by ServiceTitan: id, direction, from and to numbers, duration, call type and reason, campaign, agent, customer… |
servicetitan_get_call | One call by id with its details (lead call, customer, location, campaign, agent, recording available) |
Example prompts
- "Which appointments are scheduled for tomorrow, and which technicians are assigned to each one?"
- "Find the customer with phone 555-0142 and show their locations, open estimates and invoices with a balance."
- "Book an AC repair for this customer next Tuesday morning. Check capacity first and show me the job before you create it."
- "Which recurring maintenance visits are due this month and are not booked as a job yet?"
- "Which calls from the Google Ads campaign yesterday did not book a job?"
FAQ
Does it work with Claude Code as well as Claude Desktop? Yes, point both at https://cloud.anythingmcp.com/mcp/YOUR_SERVER_ID.
Next steps
- Connector landing page
- Connect to ChatGPT
- Connect to Cursor
- Connect to Gemini
- Connect to Meta Muse
- Connect to Microsoft Copilot
Was this guide helpful?