@elitedcs/ghl-mcp 3.67.0 → 3.69.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 CHANGED
@@ -1,5 +1,143 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.69.0 — the cockpit hardened, and the plan you approved is the plan that runs
4
+
5
+ Two items in this release exist because someone tried to break the cockpit
6
+ before a customer did.
7
+
8
+ **The cockpit refuses writes it did not ask for.** Command OS runs a small web
9
+ server on your own machine. It only ever listened on 127.0.0.1, which keeps the
10
+ internet out. It did not keep out a web page you happened to have open in another
11
+ tab, which can post to localhost without asking and without showing you anything.
12
+ Every route that changes something now checks three things before it acts: the
13
+ request came to a host we serve, from an origin we serve (or from no browser at
14
+ all), with a JSON body that a foreign page cannot send without a preflight we
15
+ refuse. Tested against the real exploit shapes, including a plain HTML form with
16
+ no JavaScript. (#17)
17
+
18
+ **An approval is a decision, and decisions do not sync inbound.** The shared board
19
+ mirrors a client's progress into their own sub-account so every seat sees the
20
+ same thing. Progress still merges, last write wins. The human approve gate never
21
+ moves because of anything read back from the client's CRM: their staff, a VA, or
22
+ an ordinary "set custom value" workflow step cannot tick your safety checkbox.
23
+ (#29)
24
+
25
+ **Headless installs stopped burning an install slot on every restart.** An
26
+ env-var install with no credentials file minted a fresh device id each boot and
27
+ locked itself out after three. It now keeps a stable id. Existing installs keep
28
+ their slot. (#33)
29
+
30
+ **The plan you approved is the plan that runs.** `apply_build_plan` saves the
31
+ approved plan on execute and a re-run reuses it with `useSavedPlan`; a new plan
32
+ needs `replaceSavedPlan` and operator approval. A differently named plan while
33
+ one is saved is refused, with the two valid moves named. Why: a re-run that
34
+ re-authored the plan created a second pipeline beside the first. The handoff
35
+ compares what was built against the saved plan. (#45, #51, #55)
36
+
37
+ **`verify_funnel` is a write and leaves the free tier.** It submits the funnel's
38
+ form with a test contact and can fire your automations, so it belongs with the
39
+ writes. Free read-only count 112 → 111; the total is still 242 tools across 51
40
+ modules. (#52)
41
+
42
+ **Command OS, from two timed client builds.**
43
+ - Spec sheets and an inspector for every module: promise, routes, writes,
44
+ verification, with an optional `note` on a step and `needs` on a verification.
45
+ The inspector fails a sheet that lies. (#35, #51)
46
+ - A hard tool boundary for headless stage runs: a stage reaches exactly the
47
+ tools it declares, enforced by a computed deny list. The build stage carries
48
+ the plan guide in its prompt and runs on a 25-minute / 40-turn budget. (#45)
49
+ - The review reads intake answers by contact id, tag, or form name, no more
50
+ search-index lag. (#45)
51
+ - An already-open page notices a running stage and a finished stage on its own;
52
+ no manual reload, and a second seat sees the same. The page never refreshes
53
+ while you are typing. (#37, #46)
54
+ - The handoff document is a designed web page with a print-to-PDF view: a client
55
+ copy and an operator copy, complete sentences, your agency's branding, a real
56
+ footer with page numbers, and unconfirmed items are never written as done.
57
+ (#36–#44, #47, #48)
58
+ - Intake: multi-choice questions are checkboxes and save as a list; the
59
+ prefilled form is keyed the way the form reads it (two answers were silently
60
+ dropped before); values a link cannot carry are listed for the operator to set
61
+ by hand. "Is your sending email / domain set up?" is now "Is your sending
62
+ domain set up?" because browser autofill kept filling it with saved addresses;
63
+ existing installs keep the old field. (#51)
64
+ - The verify stage may list funnels first and says plainly that the funnel check
65
+ submits one test contact. The intake stage may rename questions to the
66
+ agency's wording. (#51)
67
+
68
+ The second-build fixes are unit-tested and were live-probed on the sandbox form.
69
+ The third timed build, the proof that they hold together, has not run yet.
70
+
71
+ **Smaller.** `get_courses` called a route GHL does not have, and the workflow
72
+ builder is now actually watched by the health check (#34). The upgrade nudge no
73
+ longer points at an older version than the one you run (#16, #19). Dependencies:
74
+ zod 4, TypeScript 7, dotenv 17 and the Actions bumps, each built and tested
75
+ before merging (#21–#27). CI: the automated checks were made trustworthy (#18);
76
+ the GHL drift canary says plainly when it is not configured and carries the
77
+ server's own reason instead of a guess (#30), and no longer logs a cache-save
78
+ failure it cannot avoid (#32); each canary now has its own licence secrets after
79
+ the two collided (#54).
80
+
81
+ ## 3.68.0 — the checkup
82
+
83
+ A subscriber asked the question this release is named after: "I'd love for you to
84
+ check my GHL Command to make sure I am using it all and it's all working. Or tell
85
+ me how to check it? Like a checkup from the neckup."
86
+
87
+ `health_check` already answered half of that, the install half: is the license
88
+ valid, is the key good, is the account reachable. It never answered either of the
89
+ questions people actually have.
90
+
91
+ Say "run a checkup" and you get three sections.
92
+
93
+ **Connection** is the old health check, unchanged, folded in so there is one
94
+ thing to run rather than two.
95
+
96
+ **What still works** is new, and it is the part that matters. Every capability
97
+ area gets one real read against your account, right now: contacts, pipelines,
98
+ calendars, workflows, funnels, forms, invoices, social, phone, the lot. The whole
99
+ section turns on a distinction nothing else in the product made: a clean read
100
+ returning nothing means the feature works and you own none of these, while a 404
101
+ means GoHighLevel changed something. Those two look identical from the outside
102
+ and mean opposite things, so they are never merged. A permission gap and a rate
103
+ limit each get their own verdict too, because each has a different fix, and a
104
+ rate limit has none.
105
+
106
+ **What you are not using yet** is worked out from what your account contains, not
107
+ from any record of what you have clicked. Nothing about your usage is collected
108
+ or transmitted, which was true before and stays true. Every line ends with the
109
+ exact sentence to paste back.
110
+
111
+ It is read-only end to end, it works on the free tier, and it is safe to run on a
112
+ live client account.
113
+
114
+ Two things the first live runs changed, both worth knowing.
115
+
116
+ GoHighLevel's `/users/` route answers 401 to a perfectly valid key about one call
117
+ in six. Measured, not guessed: two rejections in twelve back-to-back reads, while
118
+ `/contacts/` was clean twelve out of twelve. A single-shot probe would therefore
119
+ tell a paying customer their API key lacks permission roughly every sixth
120
+ checkup. So no failure is reported until it survives three separate reads. Only
121
+ failures retry, so a healthy account pays nothing for it.
122
+
123
+ And an expired browser login was briefly reported as "Workflow Builder BROKEN,
124
+ send this to support". It is neither broken nor ours, and it has a sixty-second
125
+ fix. A report that cries wolf gets ignored, so token expiry, rate limits, server
126
+ errors and anything else that says nothing about GoHighLevel now say exactly
127
+ that instead of raising an alarm.
128
+
129
+ **The other half of this release does not ship to anyone.** `scripts/ghl-drift-canary.mjs`
130
+ runs on a schedule against our own test sub-account, boots the real server the
131
+ way Claude does, calls the same `run_checkup` tool, and compares every capability
132
+ against a committed baseline. Nothing watched GoHighLevel before this. The test
133
+ suite mocks the API, so a route they move breaks a shipped tool with every test
134
+ still green, and the first signal was always a support email. Now a capability
135
+ that worked yesterday and fails today opens an alert issue. It also reports its
136
+ own blind spots, because a probe baselined in a broken state can never alert
137
+ again and a canary that quietly shrinks is worse than none.
138
+
139
+ New tool: `run_checkup`. 242 tools, 51 modules.
140
+
3
141
  ## 3.67.0 — the offboarding kit
4
142
 
5
143
  Every agency has an onboarding checklist. Almost none have an offboarding one, so
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # GHL Command — GoHighLevel MCP Server
2
2
 
3
- **Full GoHighLevel API access for Claude.** 241 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.
3
+ **Full GoHighLevel API access for Claude.** 242 tools across 51 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
 
@@ -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 (241 tools total with the optional Workflow Builder Firebase add-on).
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 (242 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 186 tools work fine — you just won't have workflow/funnel/form/pipeline editing. This is the flagship feature: do this step.
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 187 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 241 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`:
801
+ Every registered MCP tool's schema is shipped to the model on every message. With 242 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