@elitedcs/ghl-mcp 3.59.0 → 3.60.0
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 +29 -0
- package/README.md +3 -3
- package/dist/index.js +139 -39
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,34 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 3.60.0 — One install for every tier, and upgrading is just the license key
|
|
4
|
+
|
|
5
|
+
A real free-tier user installed, was told "Setup complete!", asked for the
|
|
6
|
+
account audit every email promises — and got "Tool not found." The audit
|
|
7
|
+
needs a one-time browser login that was framed as optional and buried after
|
|
8
|
+
the success message. Worse: a free user who completed that login and then
|
|
9
|
+
upgraded had it silently ERASED by the upgrade itself. This release makes
|
|
10
|
+
the install one thing, for everyone:
|
|
11
|
+
|
|
12
|
+
- **"Complete" now means complete.** When the browser login hasn't happened
|
|
13
|
+
yet, setup says "Step 1 of 2 done" and names the next command
|
|
14
|
+
(`capture_firebase_interactive`, now available before the restart) — one
|
|
15
|
+
restart total, not two. The word "optional" is gone.
|
|
16
|
+
- **The auditor never vanishes.** Before the unlock, `audit_workflows` and
|
|
17
|
+
`validate_workflow` answer with 60-second finish-your-install directions
|
|
18
|
+
instead of not existing.
|
|
19
|
+
- **Upgrading is one paste.** `setup_ghl_mcp` now accepts just your email and
|
|
20
|
+
the new license key: the GHL credentials and Workflow Builder unlock saved
|
|
21
|
+
on your machine are reused and kept. (Previously, re-running setup wiped
|
|
22
|
+
the unlock — fixed, with tests that keep it fixed.) Supply the GHL key and
|
|
23
|
+
location ID only on a first-time setup, always as a pair.
|
|
24
|
+
- **A rejected credential update can no longer destroy a working one** — if
|
|
25
|
+
you re-run setup with bad Firebase values, the good saved ones stay.
|
|
26
|
+
- `health_check` now points at the one-click unlock and current URLs.
|
|
27
|
+
|
|
28
|
+
The free and paid tiers install identically; the license key alone decides
|
|
29
|
+
what unlocks. Free stays read-only; paid unlocks everything, on the same
|
|
30
|
+
install, with the same key-swap.
|
|
31
|
+
|
|
3
32
|
## 3.59.0 — One-command install: `npx -y @elitedcs/ghl-mcp cli install`
|
|
4
33
|
|
|
5
34
|
The old install step said "Edit Config, paste this block." Edit Config opens a
|
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@ Works with **both the Claude Desktop App and Claude Code terminal** — your cho
|
|
|
8
8
|
|
|
9
9
|
**License required.** Get it at [ghlcommand.com](https://ghlcommand.com?utm_source=npm&utm_medium=readme) — $97/mo, covering UNLIMITED GoHighLevel sub-accounts on up to 3 machines (never billed per account). **30-day time-back guarantee**: save 5+ hours on one client build or your first month back.
|
|
10
10
|
|
|
11
|
-
**Try it FREE (read-only tier).** Grab an instant free key at [ghlcommand.com/free](https://ghlcommand.com/free?utm_source=npm&utm_medium=readme) — 107 read-only tools on your own GHL account (
|
|
11
|
+
**Try it FREE (read-only tier).** Grab an instant free key at [ghlcommand.com/free](https://ghlcommand.com/free?utm_source=npm&utm_medium=readme) — 107 read-only tools on your own GHL account once the two-step install is finished (the same install as the paid tier — upgrading later is just a license swap): the account-wide workflow audit (`audit_workflows` finds the silently broken references GHL never warns you about), account health, and every read across contacts, pipelines, funnels, and workflows. Write tools stay visible and answer with upgrade info. Buying later with the same email upgrades your key in place — 1 machine on free, 3 when you upgrade.
|
|
12
12
|
|
|
13
13
|
**How this differs from HighLevel's official MCP.** HighLevel ships an official Anthropic MCP that reads and writes your CRM (contacts, conversations, calendars, opportunities, payments, social) over the public API — it's free and it's good; use it for that. What it *cannot* do, because the public API doesn't expose it: **build or edit workflows, build funnels/landing pages, or build forms.** That's exactly what GHL Command does — the programmatic Workflow Builder, funnel/page builder, form builder, deep workflow cloning, the silent-failure `audit_workflows`, and Blueprint (build a whole client account from one intake — ships as a guided skill that **installs itself automatically** with this package; nothing to download), all on GHL's internal APIs. **Official MCP = read/write your CRM. GHL Command = build and fix it.** They stack fine together.
|
|
14
14
|
|
|
@@ -175,7 +175,7 @@ https://app.gohighlevel.com/v2/location/YOUR_LOCATION_ID/dashboard
|
|
|
175
175
|
|
|
176
176
|
## Enable the Workflow Builder
|
|
177
177
|
|
|
178
|
-
The builder + cloner + validator tools (workflow builder, funnel builder, form builder, pipeline builder, workflow cloner, validate_workflow) use GHL's internal API and require Firebase credentials. Without them, the other
|
|
178
|
+
The builder + cloner + validator tools (workflow builder, funnel builder, form builder, pipeline builder, workflow cloner, validate_workflow) use GHL's internal API and require Firebase credentials. Without them, the other 181 tools work fine — you just won't have workflow/funnel/form/pipeline editing. This is the flagship feature: do this step.
|
|
179
179
|
|
|
180
180
|
**One-click capture (v3.49.0+, the supported path):**
|
|
181
181
|
|
|
@@ -518,7 +518,7 @@ Highlights (full guide: [`docs/HEADLESS.md`](docs/HEADLESS.md)):
|
|
|
518
518
|
|---|---|
|
|
519
519
|
| `get_mcp_version` | Check installed version against the latest published to npm. Confirms an upgrade landed after restarting Claude. Available even before GHL credentials are configured. |
|
|
520
520
|
| `health_check` | Run a full health check: npm registry + version status, GHL API key validity, default location reachability, Firebase auth status, token registry presence. Use when something feels broken. |
|
|
521
|
-
| `enable_workflow_builder` | Add Firebase credentials to an existing install to unlock
|
|
521
|
+
| `enable_workflow_builder` | Add Firebase credentials to an existing install to unlock 52 additional Firebase-gated tools (workflow builder, funnel builder, form builder, pipeline builder, workflow cloner, smart lists, reputation, email campaigns, email templates, memberships, validate_workflow). No need to re-enter license / API key / location ID. Run this any time after the basic setup, on the buyer's schedule. |
|
|
522
522
|
|
|
523
523
|
### Other Modules
|
|
524
524
|
|
package/dist/index.js
CHANGED
|
@@ -1508,12 +1508,16 @@ function registerSetupTool(server2, pkgVersion) {
|
|
|
1508
1508
|
if (pkgVersion) setupPkgVersion = pkgVersion;
|
|
1509
1509
|
server2.tool(
|
|
1510
1510
|
"setup_ghl_mcp",
|
|
1511
|
-
"First-run setup for GHL Command MCP. Validates your license and GHL credentials, then writes them to a per-user credentials file
|
|
1511
|
+
"First-run setup AND license upgrades for GHL Command MCP. Validates your license and GHL credentials, then writes them to a per-user credentials file; restart Claude once after it completes. UPGRADING an existing install (e.g. free key to paid)? Supply ONLY email + license_key \u2014 the GHL credentials and any Workflow Builder unlock already saved on this machine are reused and kept; do not re-enter ghl_api_key or ghl_location_id. No license yet? Paid ($97/mo) at https://ghlcommand.com \u2014 or a FREE read-only key, instantly, at https://ghlcommand.com/free.",
|
|
1512
1512
|
{
|
|
1513
1513
|
email: import_zod42.z.string().email().describe("Email used at purchase."),
|
|
1514
1514
|
license_key: import_zod42.z.string().min(20).describe("License key from your purchase email."),
|
|
1515
|
-
|
|
1516
|
-
|
|
1515
|
+
// v3.60.0: optional AS A PAIR for the one-line upgrade. Supply both, or
|
|
1516
|
+
// neither (reuses the pair saved on this machine). Never one alone —
|
|
1517
|
+
// mixing a fresh key with a stale stored location (or vice versa) would
|
|
1518
|
+
// silently persist a mismatched tuple (Codex-agreed atomic-pair rule).
|
|
1519
|
+
ghl_api_key: import_zod42.z.string().min(10).optional().describe("GHL Private Integration key (starts with 'pit-'). Created INSIDE the sub-account at Settings > Integrations > Private Integrations. OMIT together with ghl_location_id to reuse the pair already saved on this machine (upgrades)."),
|
|
1520
|
+
ghl_location_id: import_zod42.z.string().min(10).optional().describe("GHL Location ID (sub-account ID). Found in your GHL URL: /location/THIS_PART/dashboard. OMIT together with ghl_api_key to reuse the saved pair (upgrades)."),
|
|
1517
1521
|
ghl_company_id: import_zod42.z.string().optional().describe("(Agency only) Company ID for multi-location access."),
|
|
1518
1522
|
// v3.25.0: one-paste shortcut. Run `auto_capture_firebase_script` first;
|
|
1519
1523
|
// it returns a console script that fills the clipboard with this exact
|
|
@@ -1533,7 +1537,38 @@ function registerSetupTool(server2, pkgVersion) {
|
|
|
1533
1537
|
|
|
1534
1538
|
Purchase a license at https://ghlcommand.com \u2014 or get a FREE read-only key instantly at https://ghlcommand.com/free. Stuck? Reply to any email from us or write support@ghlcommand.com.` }], isError: true };
|
|
1535
1539
|
}
|
|
1536
|
-
const
|
|
1540
|
+
const priorForPair = readCredentials();
|
|
1541
|
+
const suppliedApiKey = args.ghl_api_key?.trim();
|
|
1542
|
+
const suppliedLocationId = args.ghl_location_id?.trim();
|
|
1543
|
+
if (suppliedApiKey && !suppliedLocationId || !suppliedApiKey && suppliedLocationId) {
|
|
1544
|
+
return {
|
|
1545
|
+
content: [{
|
|
1546
|
+
type: "text",
|
|
1547
|
+
text: "Provide BOTH ghl_api_key and ghl_location_id, or NEITHER (to reuse the pair already saved on this machine). Mixing one new value with one saved value is not allowed \u2014 they are validated and stored as a pair."
|
|
1548
|
+
}],
|
|
1549
|
+
isError: true
|
|
1550
|
+
};
|
|
1551
|
+
}
|
|
1552
|
+
let ghlApiKey;
|
|
1553
|
+
let ghlLocationId;
|
|
1554
|
+
let usedStoredPair = false;
|
|
1555
|
+
if (suppliedApiKey && suppliedLocationId) {
|
|
1556
|
+
ghlApiKey = suppliedApiKey;
|
|
1557
|
+
ghlLocationId = suppliedLocationId;
|
|
1558
|
+
} else if (priorForPair?.ghl_api_key && priorForPair?.ghl_location_id) {
|
|
1559
|
+
ghlApiKey = priorForPair.ghl_api_key;
|
|
1560
|
+
ghlLocationId = priorForPair.ghl_location_id;
|
|
1561
|
+
usedStoredPair = true;
|
|
1562
|
+
} else {
|
|
1563
|
+
return {
|
|
1564
|
+
content: [{
|
|
1565
|
+
type: "text",
|
|
1566
|
+
text: 'No GHL credentials supplied and none saved on this machine yet. For a first-time setup you need both:\n ghl_api_key \u2014 a Private Integration key (pit-...) created INSIDE your sub-account: Settings > Integrations > Private Integrations (click "Select all" on scopes, copy the WHOLE key)\n ghl_location_id \u2014 the part of your GHL URL after /location/\nFull walkthrough: https://ghlcommand.com/start'
|
|
1567
|
+
}],
|
|
1568
|
+
isError: true
|
|
1569
|
+
};
|
|
1570
|
+
}
|
|
1571
|
+
const ghl = await validateGhl(ghlApiKey, ghlLocationId);
|
|
1537
1572
|
if (!ghl.ok) {
|
|
1538
1573
|
emit("setup_failed", { pkgVersion: setupPkgVersion, reasonCode: ghl.reason });
|
|
1539
1574
|
return { content: [{ type: "text", text: `GHL credential check failed: ${ghl.error}` }], isError: true };
|
|
@@ -1573,21 +1608,34 @@ Purchase a license at https://ghlcommand.com \u2014 or get a FREE read-only key
|
|
|
1573
1608
|
if (!fb.ok) {
|
|
1574
1609
|
workflowBuilderNote = `
|
|
1575
1610
|
|
|
1576
|
-
Note: Firebase credentials rejected (${fb.error})
|
|
1611
|
+
Note: Firebase credentials rejected (${fb.error}).`;
|
|
1577
1612
|
} else {
|
|
1578
1613
|
workflowBuilderEnabled = true;
|
|
1579
1614
|
}
|
|
1580
1615
|
}
|
|
1616
|
+
const prior = priorForPair;
|
|
1617
|
+
const priorFirebase = prior?.ghl_user_id && prior?.ghl_firebase_api_key && prior?.ghl_firebase_refresh_token ? {
|
|
1618
|
+
userId: prior.ghl_user_id,
|
|
1619
|
+
fbApi: prior.ghl_firebase_api_key,
|
|
1620
|
+
fbRefresh: prior.ghl_firebase_refresh_token
|
|
1621
|
+
} : null;
|
|
1622
|
+
const finalFirebase = workflowBuilderEnabled ? { userId: resolvedUserId.trim(), fbApi: resolvedFbApi.trim(), fbRefresh: resolvedFbRefresh.trim() } : priorFirebase;
|
|
1623
|
+
if (!workflowBuilderEnabled && wantsWorkflowBuilder && priorFirebase) {
|
|
1624
|
+
workflowBuilderNote += ` KEPT your existing working Workflow Builder credentials \u2014 nothing was lost. To refresh them later, run capture_firebase_interactive.`;
|
|
1625
|
+
} else if (!workflowBuilderEnabled && wantsWorkflowBuilder) {
|
|
1626
|
+
workflowBuilderNote += ` Saved without Workflow Builder. Run capture_firebase_interactive (one browser login) to finish the install.`;
|
|
1627
|
+
}
|
|
1628
|
+
const builderActive = finalFirebase !== null;
|
|
1581
1629
|
writeCredentials({
|
|
1582
1630
|
license_key: args.license_key.trim(),
|
|
1583
1631
|
email: args.email.trim(),
|
|
1584
1632
|
verified_at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
1585
|
-
ghl_api_key:
|
|
1586
|
-
ghl_location_id:
|
|
1587
|
-
ghl_company_id: args.ghl_company_id?.trim() || void 0,
|
|
1588
|
-
ghl_user_id:
|
|
1589
|
-
ghl_firebase_api_key:
|
|
1590
|
-
ghl_firebase_refresh_token:
|
|
1633
|
+
ghl_api_key: ghlApiKey,
|
|
1634
|
+
ghl_location_id: ghlLocationId,
|
|
1635
|
+
ghl_company_id: args.ghl_company_id?.trim() || prior?.ghl_company_id || void 0,
|
|
1636
|
+
ghl_user_id: finalFirebase?.userId,
|
|
1637
|
+
ghl_firebase_api_key: finalFirebase?.fbApi,
|
|
1638
|
+
ghl_firebase_refresh_token: finalFirebase?.fbRefresh,
|
|
1591
1639
|
// v3.24.0+ attestation. Tied to email + license + device fingerprint;
|
|
1592
1640
|
// verified on every MCP startup. Closes the hand-crafted creds bypass.
|
|
1593
1641
|
signed_attestation: lic.signedAttestation
|
|
@@ -1600,30 +1648,44 @@ Note: Firebase credentials rejected (${fb.error}). Saved without Workflow Builde
|
|
|
1600
1648
|
const telemetryLine = telemetryDisabled(process.env) ? "" : `
|
|
1601
1649
|
|
|
1602
1650
|
${TELEMETRY_DISCLOSURE}`;
|
|
1603
|
-
const
|
|
1604
|
-
const
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
const
|
|
1651
|
+
const finishedCount = isFree ? "107" : "233";
|
|
1652
|
+
const freeTip = isFree ? `
|
|
1653
|
+
|
|
1654
|
+
Free tier: read-only. Write tools stay visible but answer with upgrade info instead of acting. Full version ($97/mo founding rate) upgrades in place \u2014 same install, you only swap the license key: https://ghlcommand.com` : "";
|
|
1655
|
+
const upgradeLine = usedStoredPair && prior && prior.license_key !== args.license_key.trim() ? `License updated \u2014 everything you set up before is kept.
|
|
1656
|
+
` : "";
|
|
1657
|
+
const text = builderActive ? [
|
|
1658
|
+
`Setup complete!`,
|
|
1659
|
+
``,
|
|
1660
|
+
upgradeLine + `License: verified (installs ${lic.installs})${isFree ? " \u2014 FREE read-only tier" : ""}.`,
|
|
1661
|
+
`GHL: connected to "${ghl.locationName}".`,
|
|
1662
|
+
`Workflow Builder: enabled.`,
|
|
1663
|
+
``,
|
|
1664
|
+
`Credentials saved to: ${credentialsPath()}`,
|
|
1665
|
+
``,
|
|
1666
|
+
`**Restart Claude once (quit fully and reopen) to load all ${finishedCount} ${isFree ? "read-only " : ""}tools.**`,
|
|
1667
|
+
``,
|
|
1668
|
+
`After restart, try: "List my GHL contacts" \u2014 or "Audit my workflows" to find what's silently broken.${freeTip}`,
|
|
1669
|
+
workflowBuilderNote,
|
|
1670
|
+
telemetryLine
|
|
1671
|
+
] : [
|
|
1672
|
+
`Step 1 of 2 done \u2014 one more step finishes the install.`,
|
|
1673
|
+
``,
|
|
1674
|
+
upgradeLine + `License: verified (installs ${lic.installs})${isFree ? " \u2014 FREE read-only tier" : ""}.`,
|
|
1675
|
+
`GHL: connected to "${ghl.locationName}".`,
|
|
1676
|
+
`Credentials saved to: ${credentialsPath()}`,
|
|
1677
|
+
``,
|
|
1678
|
+
`**Step 2 \u2014 run \`capture_firebase_interactive\` now.** A Chrome window opens; log into GHL once; the install finishes itself (about 60 seconds). It powers the account auditor${isFree ? "" : " and the workflow/funnel/form builders"} \u2014 the reason you installed this.`,
|
|
1679
|
+
`(No Chrome on this machine? Run \`auto_capture_firebase_script\` for the copy-paste path.)`,
|
|
1680
|
+
``,
|
|
1681
|
+
`**Then restart Claude once** (quit fully and reopen) and all ${finishedCount} ${isFree ? "read-only " : ""}tools load. One restart total \u2014 do step 2 first.`,
|
|
1682
|
+
``,
|
|
1683
|
+
`Checkpoint after restart: ask "Audit my workflows".${freeTip}`,
|
|
1684
|
+
workflowBuilderNote,
|
|
1685
|
+
telemetryLine
|
|
1686
|
+
];
|
|
1608
1687
|
return {
|
|
1609
|
-
content: [{
|
|
1610
|
-
type: "text",
|
|
1611
|
-
text: [
|
|
1612
|
-
`Setup complete!`,
|
|
1613
|
-
``,
|
|
1614
|
-
`License: verified (installs ${lic.installs})${isFree ? " \u2014 FREE read-only tier" : ""}.`,
|
|
1615
|
-
`GHL: connected to "${ghl.locationName}".`,
|
|
1616
|
-
wfLine,
|
|
1617
|
-
``,
|
|
1618
|
-
`Credentials saved to: ${credentialsPath()}`,
|
|
1619
|
-
``,
|
|
1620
|
-
`**Restart Claude (quit fully and reopen) to load all ${toolCount} ${isFree ? "read-only " : ""}tools.**`,
|
|
1621
|
-
``,
|
|
1622
|
-
`After restart, try: "List my GHL contacts" or "Show my pipelines".${wfTip}${freeTip}`,
|
|
1623
|
-
workflowBuilderNote,
|
|
1624
|
-
telemetryLine
|
|
1625
|
-
].join("\n")
|
|
1626
|
-
}]
|
|
1688
|
+
content: [{ type: "text", text: text.join("\n") }]
|
|
1627
1689
|
};
|
|
1628
1690
|
}
|
|
1629
1691
|
);
|
|
@@ -1631,7 +1693,7 @@ Unlock the account auditor next (the free tier's best tool): say "Unlock the Wor
|
|
|
1631
1693
|
function registerEnableWorkflowBuilderTool(server2) {
|
|
1632
1694
|
server2.tool(
|
|
1633
1695
|
"enable_workflow_builder",
|
|
1634
|
-
"Add Firebase credentials to an existing GHL Command install to unlock
|
|
1696
|
+
"Add Firebase credentials to an existing GHL Command install to unlock 52 additional tools across the internal-API modules: workflow builder (create/edit/clone/delete/publish/validate workflows, build_if_else_branch, build_goal_event, get_trigger_registry), funnel + page builder, form builder, pipeline builder, workflow cloner, smart lists, reputation, email campaigns, email templates, and memberships, plus the pre-deploy validator. On the FREE tier this same login unlocks the read-only auditor suite (audit_workflows, validate_workflow, full-detail workflow/funnel/pipeline reads). Requires you've already run setup_ghl_mcp. EASIEST PATH: run `capture_firebase_interactive` instead \u2014 a Chrome window opens, you log into GHL, zero pasting. Use THIS tool when you have JSON from `auto_capture_firebase_script` (console-paste path) to put in `firebase_paste`, or the three manual DevTools fields. Tool count goes from 181 to 233 after the next Claude restart.",
|
|
1635
1697
|
{
|
|
1636
1698
|
// v3.25.0: one-paste path. Tool runs `auto_capture_firebase_script` to
|
|
1637
1699
|
// get the console script; the script returns a JSON object that pastes
|
|
@@ -2792,7 +2854,7 @@ var require_package = __commonJS({
|
|
|
2792
2854
|
"package.json"(exports2, module2) {
|
|
2793
2855
|
module2.exports = {
|
|
2794
2856
|
name: "@elitedcs/ghl-mcp",
|
|
2795
|
-
version: "3.
|
|
2857
|
+
version: "3.60.0",
|
|
2796
2858
|
mcpName: "io.github.drjerryrelth/ghl-command",
|
|
2797
2859
|
description: "GoHighLevel MCP Server for Claude. 233 tools \u2014 full CRM, automation, marketing control, account-wide workflow audit, live funnel-capture verification, and the only programmatic GHL workflow builder, now multi-tenant across client accounts.",
|
|
2798
2860
|
main: "dist/index.js",
|
|
@@ -14734,7 +14796,35 @@ async function fullWorkflowCatalog(builderClient) {
|
|
|
14734
14796
|
return { ids, rows, complete };
|
|
14735
14797
|
}
|
|
14736
14798
|
function registerValidatorTools(server2, client, builderClient) {
|
|
14737
|
-
if (!builderClient)
|
|
14799
|
+
if (!builderClient) {
|
|
14800
|
+
const finishInstallStub = (asked) => ({
|
|
14801
|
+
content: [{
|
|
14802
|
+
type: "text",
|
|
14803
|
+
text: [
|
|
14804
|
+
`\`${asked}\` needs the one-time browser login that finishes your install (step 2 of 2).`,
|
|
14805
|
+
"",
|
|
14806
|
+
'Say: **"Unlock the Workflow Builder"** (or run `capture_firebase_interactive`).',
|
|
14807
|
+
"A Chrome window opens, you log into GHL once, and the install finishes itself \u2014 about 60 seconds.",
|
|
14808
|
+
"Then restart Claude once, and this tool will be live.",
|
|
14809
|
+
"",
|
|
14810
|
+
"No Chrome on this machine? Run `auto_capture_firebase_script` for the copy-paste path instead."
|
|
14811
|
+
].join("\n")
|
|
14812
|
+
}]
|
|
14813
|
+
});
|
|
14814
|
+
server2.tool(
|
|
14815
|
+
"validate_workflow",
|
|
14816
|
+
"Pre-flight ID validation for ONE deployed GHL workflow. [NEEDS INSTALL STEP 2 \u2014 run capture_firebase_interactive (one-time browser login) to activate this tool.]",
|
|
14817
|
+
{ workflowId: import_zod52.z.string().describe("The workflow ID to validate.") },
|
|
14818
|
+
async () => finishInstallStub("validate_workflow")
|
|
14819
|
+
);
|
|
14820
|
+
server2.tool(
|
|
14821
|
+
"audit_workflows",
|
|
14822
|
+
"Account-wide silent-failure audit of every workflow. [NEEDS INSTALL STEP 2 \u2014 run capture_firebase_interactive (one-time browser login) to activate this tool.]",
|
|
14823
|
+
{},
|
|
14824
|
+
async () => finishInstallStub("audit_workflows")
|
|
14825
|
+
);
|
|
14826
|
+
return;
|
|
14827
|
+
}
|
|
14738
14828
|
server2.tool(
|
|
14739
14829
|
"validate_workflow",
|
|
14740
14830
|
"Pre-flight ID validation for ONE deployed GHL workflow. Scans every trigger and action for references to pipelines, pipeline stages, custom fields, users, workflows, forms, calendars, and surveys; verifies each ID exists in the current location. Use BEFORE publish_workflow when a workflow was edited, or when a published workflow stops behaving. Catches the silent-failure bug where invalid IDs make GHL skip all subsequent actions. Never reports a false break \u2014 anything it cannot fully verify is marked 'unverified', not 'error'.",
|
|
@@ -14919,7 +15009,7 @@ function registerDiagnosticTools(server2, installedVersion, client, builderClien
|
|
|
14919
15009
|
})();
|
|
14920
15010
|
const firebasePromise = (async () => {
|
|
14921
15011
|
if (!builderClient) {
|
|
14922
|
-
return { name: "Firebase auth (workflow builder)", status: "skip", detail: "Not configured
|
|
15012
|
+
return { name: "Firebase auth (workflow builder)", status: "skip", detail: "Not configured \u2014 your install is one step from finished. Run capture_firebase_interactive: a Chrome window opens, you log into GHL once, and it captures + verifies everything itself (about 60 seconds). This powers the account auditor and the Firebase-gated tools. No Chrome on this machine? auto_capture_firebase_script is the copy-paste path. Do NOT put Firebase values as env vars in your Claude Desktop config \u2014 that path is unreliable and is the usual reason this still shows skip after a restart." };
|
|
14923
15013
|
}
|
|
14924
15014
|
const result = await builderClient.checkAuth();
|
|
14925
15015
|
const tokenCompany = builderClient.getTokenCompanyId();
|
|
@@ -19288,7 +19378,10 @@ async function resolveAccessAndRegister() {
|
|
|
19288
19378
|
registerSetupTool(server, pkg.version);
|
|
19289
19379
|
registerLeadCaptureTool(server);
|
|
19290
19380
|
registerOutOfBand(
|
|
19291
|
-
[
|
|
19381
|
+
[
|
|
19382
|
+
{ name: "auto_capture_firebase_script", register: () => registerFirebaseCaptureScriptTool(server) },
|
|
19383
|
+
{ name: "capture_firebase_interactive", register: () => registerInteractiveCaptureTool(server) }
|
|
19384
|
+
],
|
|
19292
19385
|
gatingConfig,
|
|
19293
19386
|
outOfBandTracker
|
|
19294
19387
|
);
|
|
@@ -19302,6 +19395,13 @@ async function resolveAccessAndRegister() {
|
|
|
19302
19395
|
// a fresh refresh token when it rotates. Registered on the FREE tier too:
|
|
19303
19396
|
// the Firebase login powers the read-only auditor tools (audit_workflows,
|
|
19304
19397
|
// validate_workflow, *_full reads) — only the write tools stay gated.
|
|
19398
|
+
// v3.60.0: setup_ghl_mcp registers in NORMAL mode too — it is the
|
|
19399
|
+
// ONE-LINE UPGRADE path ("email + new license key, nothing else").
|
|
19400
|
+
// Before this it existed only in bootstrap, so an installed free user
|
|
19401
|
+
// pasting the upgrade line got "Tool setup_ghl_mcp not found" — the
|
|
19402
|
+
// exact audience the upgrade exists for. Caught by the live wire
|
|
19403
|
+
// proof, not by unit tests (the handler worked; registration didn't).
|
|
19404
|
+
{ name: "setup_ghl_mcp", register: () => registerSetupTool(server, pkg.version) },
|
|
19305
19405
|
{ name: "enable_workflow_builder", register: () => registerEnableWorkflowBuilderTool(server) },
|
|
19306
19406
|
{ name: "auto_capture_firebase_script", register: () => registerFirebaseCaptureScriptTool(server) },
|
|
19307
19407
|
// One-click Builder unlock — buyer just logs into a Chrome window the
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elitedcs/ghl-mcp",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.60.0",
|
|
4
4
|
"mcpName": "io.github.drjerryrelth/ghl-command",
|
|
5
5
|
"description": "GoHighLevel MCP Server for Claude. 233 tools — full CRM, automation, marketing control, account-wide workflow audit, live funnel-capture verification, and the only programmatic GHL workflow builder, now multi-tenant across client accounts.",
|
|
6
6
|
"main": "dist/index.js",
|