@rowvyn/servicetitan-mcp 2.4.2 → 2.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -0
- package/README.md +53 -1
- package/build/chunks/chunk-MMQLAZ4R.js +54 -0
- package/build/index.js +1 -1
- package/build/sse.js +1 -1
- package/build/streamable-http.js +1 -1
- package/package.json +4 -4
- package/build/chunks/chunk-XORPTVFD.js +0 -54
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,30 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/), and this project adheres to [Semantic Versioning](https://semver.org/).
|
|
6
6
|
|
|
7
|
+
## [2.5.0] - 2026-04-02
|
|
8
|
+
|
|
9
|
+
### Performance
|
|
10
|
+
- **HTTP keep-alive + connection pooling** — shared `https.Agent` with `keepAlive: true`, `maxSockets: 32` eliminates TLS handshake overhead on consecutive API calls.
|
|
11
|
+
- **Auth pre-warming** — `client.prewarm()` called at server startup fetches and caches the OAuth token before the first tool execution, saving ~1-2s on cold starts.
|
|
12
|
+
- **Parallel invoice tracking** — Reports 2281 and 2282 now fetched concurrently via `Promise.all()` instead of sequentially.
|
|
13
|
+
- **Parallel estimate pipeline** — estimate pagination parallelized (6.49s → 1.50s).
|
|
14
|
+
- **`fetchAllPagesBlind` helper** — fires all `maxPages` page requests simultaneously without a probe step to determine `totalCount` first. Applied to bookings, estimates, invoices, and payments pagination. Saves one sequential round-trip per paginated call.
|
|
15
|
+
- **Sequential campaign calls** — `/v3/calls` endpoint uses sequential `fetchAllPages` instead of parallel. ServiceTitan's calls API exhibits extreme concurrency sensitivity (even 2 concurrent requests trigger rate-limiting and inflate results). Sequential is the only reliable approach.
|
|
16
|
+
- **Report 165 removal** — `technician_scorecard` no longer fetches Report 165 (redundant with `ConvertedJobs` field from Report 168). Reduces parallel POST calls from 5 to 4 on the default path.
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
- **`includeServiceRevenue`** parameter on `intel_membership_health` — opt-in invoice pagination for service revenue breakdown. Default: `false` (saves ~2-4s).
|
|
20
|
+
- **`includeProductivityMetrics`** parameter on `intel_revenue_summary` — opt-in Report 177 fetch for BU-level productivity metrics. Default: `false` (saves ~0.5-1s).
|
|
21
|
+
- **`includeExtendedMetrics`** parameter on `intel_technician_scorecard` — opt-in Reports 171/173/174 for revenue-per-hour, billable efficiency, and recall data. Default: `false` (saves ~1-2s).
|
|
22
|
+
- **`fetchAllPagesWithTotal`** helper — variant that returns both items and `totalCount` for callers that need the count.
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
- **Score improvement** — baseline score improved from 0.91 to 0.92-0.94 (typical), up to 1.24 on fast ServiceTitan API days. All 25 ground truth questions still pass.
|
|
26
|
+
- **Non-campaign tool latency** — `revenue_summary` 2.7-3.3s, `technician_scorecard` 2.1-2.7s, `membership_health` 2.0-2.8s, `estimate_pipeline` 1.5-1.8s, `invoice_tracking` 2.2-4.4s.
|
|
27
|
+
|
|
28
|
+
### Fixed
|
|
29
|
+
- **Test suite** — 12 test failures fixed for new opt-in parameter defaults and `fetchAllPagesBlind` mock compatibility. All 260 tests passing.
|
|
30
|
+
|
|
7
31
|
## [2.4.2] - 2026-03-29
|
|
8
32
|
|
|
9
33
|
### Fixed
|
|
@@ -215,6 +239,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/), and this
|
|
|
215
239
|
- Generated TOOLS.md tool catalog
|
|
216
240
|
- `.env.example` with all environment variables documented
|
|
217
241
|
|
|
242
|
+
[2.5.0]: https://github.com/montrellcruse/servicetitan-mcp/compare/v2.4.2...v2.5.0
|
|
243
|
+
[2.4.2]: https://github.com/montrellcruse/servicetitan-mcp/compare/v2.4.0...v2.4.2
|
|
218
244
|
[2.3.1]: https://github.com/montrellcruse/servicetitan-mcp/compare/v2.3.0...v2.3.1
|
|
219
245
|
[2.4.0]: https://github.com/montrellcruse/servicetitan-mcp/compare/v2.3.1...v2.4.0
|
|
220
246
|
[2.3.0]: https://github.com/montrellcruse/servicetitan-mcp/compare/v2.2.0...v2.3.0
|
package/README.md
CHANGED
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
|
|
10
10
|
The only MCP server for the ServiceTitan API — 467 tools across 15 domains, plus 10 intelligence tools that turn raw API data into business decisions.
|
|
11
11
|
|
|
12
|
+
Built by [**Rowvyn**](https://rowvyn.com) — [See the case study →](https://rowvyn.com/case-studies/servicetitan-mcp)
|
|
13
|
+
|
|
12
14
|
<p align="center">
|
|
13
15
|
<em>Connect any AI assistant to ServiceTitan's full API — CRM, dispatch, invoicing, payroll, and operational intelligence — through the Model Context Protocol.</em>
|
|
14
16
|
</p>
|
|
@@ -60,13 +62,16 @@ No install needed — runs directly:
|
|
|
60
62
|
"ST_CLIENT_ID": "your-client-id",
|
|
61
63
|
"ST_CLIENT_SECRET": "your-client-secret",
|
|
62
64
|
"ST_APP_KEY": "your-app-key",
|
|
63
|
-
"ST_TENANT_ID": "your-tenant-id"
|
|
65
|
+
"ST_TENANT_ID": "your-tenant-id",
|
|
66
|
+
"ST_ENVIRONMENT": "production"
|
|
64
67
|
}
|
|
65
68
|
}
|
|
66
69
|
}
|
|
67
70
|
}
|
|
68
71
|
```
|
|
69
72
|
|
|
73
|
+
> ⚠️ **`ST_ENVIRONMENT` defaults to `integration`.** If you're connecting to a live ServiceTitan account, you **must** set `ST_ENVIRONMENT` to `production` or you'll get silent auth failures and empty results.
|
|
74
|
+
|
|
70
75
|
### Install globally
|
|
71
76
|
|
|
72
77
|
```bash
|
|
@@ -330,6 +335,53 @@ npm run start # run compiled server
|
|
|
330
335
|
|
|
331
336
|
---
|
|
332
337
|
|
|
338
|
+
## Troubleshooting
|
|
339
|
+
|
|
340
|
+
### npm permission errors (EACCES)
|
|
341
|
+
|
|
342
|
+
If you see `EACCES: permission denied` errors when Claude Desktop tries to start the server, your npm cache directory is likely owned by root (common when Node was installed with `sudo`).
|
|
343
|
+
|
|
344
|
+
**Fix:**
|
|
345
|
+
|
|
346
|
+
```bash
|
|
347
|
+
sudo chown -R $(whoami) ~/.npm
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
Then restart Claude Desktop.
|
|
351
|
+
|
|
352
|
+
### Server won't start / "Could not connect to MCP server"
|
|
353
|
+
|
|
354
|
+
1. **Test outside Claude Desktop first:**
|
|
355
|
+
```bash
|
|
356
|
+
npx -y @rowvyn/servicetitan-mcp
|
|
357
|
+
```
|
|
358
|
+
If this fails, the issue is with Node, npm, or your environment — not Claude Desktop.
|
|
359
|
+
|
|
360
|
+
2. **Check Node version:** `node -v` — requires Node 22 or newer.
|
|
361
|
+
|
|
362
|
+
3. **Check for conflicting MCP installs:** If you previously installed a different ServiceTitan MCP server, remove it:
|
|
363
|
+
```bash
|
|
364
|
+
npm ls -g --depth=0 | grep -i servicetitan
|
|
365
|
+
npm uninstall -g <old-package-name>
|
|
366
|
+
npx clear-npx-cache
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
4. **Verify your `claude_desktop_config.json`** has no leftover entries from a previous MCP server. Only one `servicetitan` entry should exist under `mcpServers`.
|
|
370
|
+
|
|
371
|
+
### Auth failures / $0 revenue / empty results
|
|
372
|
+
|
|
373
|
+
- **Set `ST_ENVIRONMENT` to `production`.** This is the #1 cause. The default is `integration`, which authenticates against ServiceTitan's sandbox — not your live account. You'll get valid auth tokens that return zero data.
|
|
374
|
+
- **Verify credentials match:** `ST_CLIENT_ID` and `ST_CLIENT_SECRET` must be from the same ServiceTitan app. You can't mix credentials from different apps.
|
|
375
|
+
- **Check `ST_TENANT_ID`:** Must match the tenant associated with your app in the ServiceTitan developer portal.
|
|
376
|
+
|
|
377
|
+
### Claude Desktop logs
|
|
378
|
+
|
|
379
|
+
Claude Desktop writes MCP server logs to:
|
|
380
|
+
- **macOS:** `~/Library/Logs/Claude/mcp*.log`
|
|
381
|
+
- **Windows:** `%APPDATA%\Claude\logs\mcp*.log`
|
|
382
|
+
|
|
383
|
+
---
|
|
384
|
+
|
|
333
385
|
## Contributing
|
|
334
386
|
|
|
335
387
|
See [CONTRIBUTING.md](CONTRIBUTING.md).
|