@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 +138 -0
- package/README.md +4 -4
- package/dist/index.js +15199 -13772
- package/guide/guide.html +52 -2
- package/package.json +12 -7
- package/skills/blueprint/SKILL.md +1 -0
- package/skills/blueprint/references/intake-question-set.md +1 -1
- package/templates/action-schemas.json +2 -2
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.**
|
|
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 (
|
|
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
|
|
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
|
|
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
|