@elitedcs/ghl-mcp 3.66.0 → 3.66.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 +31 -0
- package/README.md +5 -5
- package/dist/index.js +55 -45
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,36 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 3.66.1 — the tool count was wrong, and so was the thing that checked it
|
|
4
|
+
|
|
5
|
+
GHL Command has served 239 tools since v3.60.0. Every place we stated the number
|
|
6
|
+
said 238, and had done for twelve releases.
|
|
7
|
+
|
|
8
|
+
The cause is worth writing down, because the number was the smaller half of it.
|
|
9
|
+
The count was derived from a total that a person kept up to date by hand, and the
|
|
10
|
+
test that checked our claims derived its answer from that same total. So the
|
|
11
|
+
claim and the check always agreed, and both were wrong together. Nothing in the
|
|
12
|
+
suite could see the gap, because everything in the suite was looking at the same
|
|
13
|
+
number.
|
|
14
|
+
|
|
15
|
+
Three figures were each one low and are now correct: **239 tools**, **184 without
|
|
16
|
+
the optional builder step**, **111 on the free tier**. The upgrade still unlocks
|
|
17
|
+
55 tools; that figure was always right, because the error cancelled out of a
|
|
18
|
+
subtraction.
|
|
19
|
+
|
|
20
|
+
The mechanism is fixed too, which matters more than the digits. The tools counted
|
|
21
|
+
here are now read from the list the server registers them from, so a tool added
|
|
22
|
+
tomorrow changes the number the day it lands rather than the day someone
|
|
23
|
+
remembers. There is also a new release check that starts a real server, asks it
|
|
24
|
+
what tools it has, and compares that to what we advertise. That is the only check
|
|
25
|
+
that could have caught this, because it is the only one that does not get its
|
|
26
|
+
answer from the code it is checking.
|
|
27
|
+
|
|
28
|
+
Earlier entries in this file state counts that were one low at the time. They are
|
|
29
|
+
left as they were written rather than quietly corrected.
|
|
30
|
+
|
|
31
|
+
Also: `update_webhook` now carries the same warning as the other webhook tools
|
|
32
|
+
about `tags` arriving as comma separated text rather than a list.
|
|
33
|
+
|
|
3
34
|
## 3.66.0 — webhooks work now
|
|
4
35
|
|
|
5
36
|
The five webhook tools have never worked for anyone. They called an address
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# GHL Command — GoHighLevel MCP Server
|
|
2
2
|
|
|
3
|
-
**Full GoHighLevel API access for Claude.**
|
|
3
|
+
**Full GoHighLevel API access for Claude.** 239 tools across 50 modules — manage contacts, conversations, pipelines, calendars, funnels, workflows, invoices, custom objects, webhooks, and more. **Includes full workflow builder, funnel/page editor, form builder, pipeline builder, bulk operations, account export, and workflow cloning** — capabilities no other GHL tool offers. **Multi-tenant:** one install can run the workflow builder across multiple clients' GHL accounts.
|
|
4
4
|
|
|
5
5
|
**Distributed via npm as [`@elitedcs/ghl-mcp`](https://www.npmjs.com/package/@elitedcs/ghl-mcp).** Buyers install with one config block — no git, no Node.js setup, no terminal commands. Updates flow automatically (`npx @latest` re-resolves on every Claude restart).
|
|
6
6
|
|
|
@@ -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) —
|
|
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) — 111 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
|
|
|
@@ -135,7 +135,7 @@ Run setup_ghl_mcp to activate GHL Command:
|
|
|
135
135
|
ghl_location_id: YOUR_LOCATION_ID
|
|
136
136
|
```
|
|
137
137
|
|
|
138
|
-
Approve the tool call. Server validates your license, verifies your GHL credentials, writes them to a per-user config file. **Quit Claude one more time and reopen** — the full core toolset is now unlocked (
|
|
138
|
+
Approve the tool call. Server validates your license, verifies your GHL credentials, writes them to a per-user config file. **Quit Claude one more time and reopen** — the full core toolset is now unlocked (239 tools total with the optional Workflow Builder Firebase add-on).
|
|
139
139
|
|
|
140
140
|
### 4. Try it
|
|
141
141
|
|
|
@@ -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 184 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
|
|
|
@@ -798,7 +798,7 @@ Source repo is private. Contributors need an invitation from `drjerryrelth`. The
|
|
|
798
798
|
|
|
799
799
|
### Reducing context / token usage
|
|
800
800
|
|
|
801
|
-
Every registered MCP tool's schema is shipped to the model on every message. With
|
|
801
|
+
Every registered MCP tool's schema is shipped to the model on every message. With 239 tools that's a meaningful per-message context cost even in chats that never touch GHL. If you only use a slice of GHL Command, restrict the tool surface with `GHL_ENABLED_MODULES` and/or `GHL_ENABLED_TOOLS`:
|
|
802
802
|
|
|
803
803
|
```jsonc
|
|
804
804
|
// Claude Desktop config — enable whole modules
|
package/dist/index.js
CHANGED
|
@@ -1648,7 +1648,7 @@ Note: Firebase credentials rejected (${fb.error}).`;
|
|
|
1648
1648
|
const telemetryLine = telemetryDisabled(process.env) ? "" : `
|
|
1649
1649
|
|
|
1650
1650
|
${TELEMETRY_DISCLOSURE}`;
|
|
1651
|
-
const finishedCount = isFree ? "
|
|
1651
|
+
const finishedCount = isFree ? "111" : "239";
|
|
1652
1652
|
const freeTip = isFree ? `
|
|
1653
1653
|
|
|
1654
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` : "";
|
|
@@ -1693,7 +1693,7 @@ Free tier: read-only. Write tools stay visible but answer with upgrade info inst
|
|
|
1693
1693
|
function registerEnableWorkflowBuilderTool(server2) {
|
|
1694
1694
|
server2.tool(
|
|
1695
1695
|
"enable_workflow_builder",
|
|
1696
|
-
"Add Firebase credentials to an existing GHL Command install to unlock 55 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
|
|
1696
|
+
"Add Firebase credentials to an existing GHL Command install to unlock 55 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 184 to 239 after the next Claude restart.",
|
|
1697
1697
|
{
|
|
1698
1698
|
// v3.25.0: one-paste path. Tool runs `auto_capture_firebase_script` to
|
|
1699
1699
|
// get the console script; the script returns a JSON object that pastes
|
|
@@ -1774,7 +1774,7 @@ DevTools steps: https://elitedcs.com/ghl-mcp-firebase`
|
|
|
1774
1774
|
"",
|
|
1775
1775
|
"**You MUST restart Claude before using any workflow-builder tool.** Quit Claude completely (Cmd+Q on Mac, full exit on Windows) and reopen. Without a restart, the workflow builder tools will keep using the OLD Firebase auth from before this call and fail with 401 errors \u2014 even though this tool reported success.",
|
|
1776
1776
|
"",
|
|
1777
|
-
'After restart, all
|
|
1777
|
+
'After restart, all 239 tools load. Try: "List my workflows in full detail" or "Validate workflow <id>".',
|
|
1778
1778
|
"",
|
|
1779
1779
|
"Note: Firebase refresh tokens rotate every few weeks. If workflow tools stop working in a few weeks (run `health_check` to confirm Firebase auth: FAIL), run `auto_capture_firebase_script` for fresh values and re-run this tool with the new firebase_paste."
|
|
1780
1780
|
].join("\n")
|
|
@@ -1870,7 +1870,7 @@ The login in the capture window may belong to the wrong GHL account, or the sess
|
|
|
1870
1870
|
"",
|
|
1871
1871
|
"**You MUST restart Claude before using any workflow-builder tool.** Quit Claude completely (Cmd+Q on Mac, full exit on Windows) and reopen.",
|
|
1872
1872
|
"",
|
|
1873
|
-
'After restart, all
|
|
1873
|
+
'After restart, all 239 tools load. Try: "List my workflows in full detail".',
|
|
1874
1874
|
"",
|
|
1875
1875
|
"Future token rotations re-capture silently \u2014 if workflow tools ever 401, just run capture_firebase_interactive again; no window should appear."
|
|
1876
1876
|
].join("\n")
|
|
@@ -2854,9 +2854,9 @@ var require_package = __commonJS({
|
|
|
2854
2854
|
"package.json"(exports2, module2) {
|
|
2855
2855
|
module2.exports = {
|
|
2856
2856
|
name: "@elitedcs/ghl-mcp",
|
|
2857
|
-
version: "3.66.
|
|
2857
|
+
version: "3.66.1",
|
|
2858
2858
|
mcpName: "io.github.drjerryrelth/ghl-command",
|
|
2859
|
-
description: "GoHighLevel MCP Server for Claude.
|
|
2859
|
+
description: "GoHighLevel MCP Server for Claude. 239 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.",
|
|
2860
2860
|
main: "dist/index.js",
|
|
2861
2861
|
bin: {
|
|
2862
2862
|
"ghl-mcp": "dist/index.js"
|
|
@@ -10292,7 +10292,7 @@ function registerWebhookTools(server2, builderClient) {
|
|
|
10292
10292
|
);
|
|
10293
10293
|
server2.tool(
|
|
10294
10294
|
"update_webhook",
|
|
10295
|
-
"Change a webhook's URL, method, custom data, headers, name, events, or published status. Edits the existing action in place rather than replacing it, so the workflow's history and any other steps around it survive. Only the fields you pass change; everything else is left alone.",
|
|
10295
|
+
"Change a webhook's URL, method, custom data, headers, name, events, or published status. Edits the existing action in place rather than replacing it, so the workflow's history and any other steps around it survive. Only the fields you pass change; everything else is left alone. " + WEBHOOK_PAYLOAD_NOTE,
|
|
10296
10296
|
{
|
|
10297
10297
|
webhookId: import_zod34.z.string().describe("The webhook ID (its workflow ID)."),
|
|
10298
10298
|
url: import_zod34.z.string().optional().describe("New destination URL."),
|
|
@@ -19439,6 +19439,13 @@ init_telemetry_transport();
|
|
|
19439
19439
|
function makeOutOfBandTracker() {
|
|
19440
19440
|
return { registered: /* @__PURE__ */ new Set(), denied: /* @__PURE__ */ new Set() };
|
|
19441
19441
|
}
|
|
19442
|
+
var NORMAL_MODE_OUT_OF_BAND_TOOLS = [
|
|
19443
|
+
"setup_ghl_mcp",
|
|
19444
|
+
"enable_workflow_builder",
|
|
19445
|
+
"auto_capture_firebase_script",
|
|
19446
|
+
"capture_firebase_interactive",
|
|
19447
|
+
"install_skills"
|
|
19448
|
+
];
|
|
19442
19449
|
function registerOutOfBand(entries, config3, tracker, log = (m) => process.stderr.write(m)) {
|
|
19443
19450
|
for (const entry of entries) {
|
|
19444
19451
|
if (isToolDenied(entry.name, "", config3)) {
|
|
@@ -20190,48 +20197,51 @@ async function resolveAccessAndRegister() {
|
|
|
20190
20197
|
} else {
|
|
20191
20198
|
const client = new GHLClient({ apiKey, locationId });
|
|
20192
20199
|
registerAllTools(server, client, registry, pkg.version, process.env, sessionTier, outOfBandTracker);
|
|
20193
|
-
|
|
20194
|
-
|
|
20195
|
-
|
|
20196
|
-
|
|
20197
|
-
|
|
20198
|
-
|
|
20199
|
-
|
|
20200
|
-
|
|
20201
|
-
|
|
20202
|
-
|
|
20203
|
-
|
|
20204
|
-
|
|
20205
|
-
|
|
20206
|
-
|
|
20207
|
-
|
|
20208
|
-
|
|
20209
|
-
|
|
20210
|
-
|
|
20211
|
-
|
|
20212
|
-
|
|
20213
|
-
|
|
20214
|
-
|
|
20215
|
-
|
|
20216
|
-
|
|
20217
|
-
|
|
20218
|
-
|
|
20219
|
-
|
|
20220
|
-
|
|
20221
|
-
|
|
20222
|
-
|
|
20223
|
-
|
|
20224
|
-
|
|
20225
|
-
|
|
20226
|
-
|
|
20200
|
+
const normalModeOutOfBand = {
|
|
20201
|
+
// Available in normal mode so buyers can add Firebase later without
|
|
20202
|
+
// re-running setup_ghl_mcp with all 7 fields, and so they can re-grab
|
|
20203
|
+
// a fresh refresh token when it rotates. Registered on the FREE tier too:
|
|
20204
|
+
// the Firebase login powers the read-only auditor tools (audit_workflows,
|
|
20205
|
+
// validate_workflow, *_full reads) — only the write tools stay gated.
|
|
20206
|
+
//
|
|
20207
|
+
// v3.60.0: setup_ghl_mcp registers in NORMAL mode too — it is the
|
|
20208
|
+
// ONE-LINE UPGRADE path ("email + new license key, nothing else").
|
|
20209
|
+
// Before this it existed only in bootstrap, so an installed free user
|
|
20210
|
+
// pasting the upgrade line got "Tool setup_ghl_mcp not found" — the
|
|
20211
|
+
// exact audience the upgrade exists for. Caught by the live wire
|
|
20212
|
+
// proof, not by unit tests (the handler worked; registration didn't).
|
|
20213
|
+
// The SAME change also went uncounted for twelve releases, which is why
|
|
20214
|
+
// this block is now driven by a list the count guard can read.
|
|
20215
|
+
setup_ghl_mcp: { register: () => registerSetupTool(server, pkg.version) },
|
|
20216
|
+
enable_workflow_builder: { register: () => registerEnableWorkflowBuilderTool(server) },
|
|
20217
|
+
auto_capture_firebase_script: { register: () => registerFirebaseCaptureScriptTool(server) },
|
|
20218
|
+
// One-click Builder unlock — buyer just logs into a Chrome window the
|
|
20219
|
+
// helper opens; also the silent re-capture path for token rotations.
|
|
20220
|
+
capture_firebase_interactive: { register: () => registerInteractiveCaptureTool(server) },
|
|
20221
|
+
// Skills rail (2026-07-28): bundled skills (Blueprint) install themselves
|
|
20222
|
+
// into ~/.claude/skills — subscribers never download anything separately.
|
|
20223
|
+
// Auto-runs on every start (idempotent, never clobbers user edits);
|
|
20224
|
+
// the tool exists for verification/repair. Every tier: local file copy
|
|
20225
|
+
// only. Denying install_skills also skips the auto-install — a buyer who
|
|
20226
|
+
// gated it clearly doesn't want this server writing files into ~/.claude.
|
|
20227
|
+
install_skills: {
|
|
20228
|
+
register: () => registerSkillsTool(server, pkg.version, __dirname),
|
|
20229
|
+
deniedNote: "bundled-skills auto-install skipped too",
|
|
20230
|
+
sideEffect: () => {
|
|
20231
|
+
try {
|
|
20232
|
+
const skillsResult = installBundledSkills({ packageVersion: pkg.version, baseDir: __dirname });
|
|
20233
|
+
const line = summarizeInstall(skillsResult);
|
|
20234
|
+
if (line) process.stderr.write(`[ghl-mcp] ${line}
|
|
20227
20235
|
`);
|
|
20228
|
-
|
|
20229
|
-
|
|
20236
|
+
} catch (e) {
|
|
20237
|
+
process.stderr.write(`[ghl-mcp] Skills install skipped: ${String(e).slice(0, 120)}
|
|
20230
20238
|
`);
|
|
20231
|
-
}
|
|
20232
20239
|
}
|
|
20233
20240
|
}
|
|
20234
|
-
|
|
20241
|
+
}
|
|
20242
|
+
};
|
|
20243
|
+
registerOutOfBand(
|
|
20244
|
+
NORMAL_MODE_OUT_OF_BAND_TOOLS.map((name) => ({ name, ...normalModeOutOfBand[name] })),
|
|
20235
20245
|
gatingConfig,
|
|
20236
20246
|
outOfBandTracker
|
|
20237
20247
|
);
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elitedcs/ghl-mcp",
|
|
3
|
-
"version": "3.66.
|
|
3
|
+
"version": "3.66.1",
|
|
4
4
|
"mcpName": "io.github.drjerryrelth/ghl-command",
|
|
5
|
-
"description": "GoHighLevel MCP Server for Claude.
|
|
5
|
+
"description": "GoHighLevel MCP Server for Claude. 239 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.",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"bin": {
|
|
8
8
|
"ghl-mcp": "dist/index.js"
|