@elitedcs/ghl-mcp 3.70.0 → 3.72.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 +55 -0
- package/README.md +8 -5
- package/dist/capture-helper.js +10 -1
- package/dist/index.js +7479 -1552
- package/guide/guide.html +2 -1
- package/package.json +2 -2
- package/skills/blueprint/SKILL.md +2 -0
- package/skills/blueprint/examples/medspa-approval-view.md +58 -53
- package/skills/blueprint/examples/medspa-brief.json +70 -8
- package/skills/blueprint/examples/medspa-build-plan.json +1435 -123
- package/skills/blueprint/examples/medspa-dry-run-report.md +2 -0
- package/skills/blueprint/examples/sample-approval-view.md +20 -61
- package/skills/blueprint/examples/sample-brief.json +95 -7
- package/skills/blueprint/examples/sample-build-plan.json +1448 -119
- package/skills/blueprint/examples/validate-plan.cjs +195 -13
- package/skills/blueprint/presets/clinic-launch-a2p.preset.json +1 -0
- package/skills/blueprint/presets/clinic.md +60 -0
- package/skills/blueprint/presets/clinic.preset.json +1737 -0
- package/skills/blueprint/presets/coach.md +58 -0
- package/skills/blueprint/presets/coach.preset.json +1723 -0
- package/skills/blueprint/presets/ecommerce.md +54 -0
- package/skills/blueprint/presets/ecommerce.preset.json +1287 -0
- package/skills/blueprint/presets/generic-client.md +49 -27
- package/skills/blueprint/presets/generic-client.preset.json +1552 -122
- package/skills/blueprint/presets/local-service.md +58 -0
- package/skills/blueprint/presets/local-service.preset.json +1733 -0
- package/skills/blueprint/presets/med-spa.md +47 -48
- package/skills/blueprint/presets/med-spa.preset.json +1557 -111
- package/skills/blueprint/references/brief-schema.md +48 -1
- package/skills/blueprint/references/build-plan-schema.md +66 -5
- package/skills/blueprint/references/copy-guide.md +167 -0
- package/skills/blueprint/references/intake-question-set.md +64 -3
- package/skills/blueprint/references/preset-format.md +97 -51
- package/templates/action-schemas.json +12 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,60 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 3.72.0 — an audit that counts your workflows once
|
|
4
|
+
|
|
5
|
+
A member ran the account audit on a large agency account. The report came back claiming
|
|
6
|
+
5,000 workflows with six percent of them scanned, printed every single finding three
|
|
7
|
+
times word for word, and closed by advising her to re-run the audit in further batches.
|
|
8
|
+
She did. It ran ninety minutes before she stopped it, with no idea how many tokens it
|
|
9
|
+
was burning.
|
|
10
|
+
|
|
11
|
+
None of those numbers were real. GoHighLevel's workflow list endpoint ignores the `skip`
|
|
12
|
+
parameter: ask it for the second page and it hands back the first one again. The catalog
|
|
13
|
+
builder believed it fifty times over, so one hundred-workflow page became a
|
|
14
|
+
five-thousand-workflow account, the scan list held the same hundred workflows three
|
|
15
|
+
times, and every finding was reported once per copy. There was no next batch to re-run
|
|
16
|
+
for, and there never had been. Accounts under a hundred workflows finish on the first
|
|
17
|
+
page and were never affected, which is why this reached a customer before it reached us.
|
|
18
|
+
|
|
19
|
+
**The audit now counts each workflow once.** A workflow already listed is never listed
|
|
20
|
+
again, so duplicate scans and tripled findings cannot happen whatever the endpoint does.
|
|
21
|
+
The total comes from GoHighLevel's own count, and that count is used carefully: it can
|
|
22
|
+
tell the audit it has seen less than the whole account, never that it has seen all of it.
|
|
23
|
+
Believing it in the other direction would let a stale number turn a workflow reference
|
|
24
|
+
that merely could not be checked into a confident "this is broken", which this audit
|
|
25
|
+
must never say. When the whole account cannot be listed, the report says so in plain
|
|
26
|
+
words, says how many were reached, and no longer sends you round a loop that cannot
|
|
27
|
+
finish.
|
|
28
|
+
|
|
29
|
+
Two things this also fixes, quietly. Workflows past the first hundred were never being
|
|
30
|
+
scanned on any account, while the report implied full coverage. And `validate_workflow`,
|
|
31
|
+
which shares the same catalog, was marking workflow-to-workflow references "unverified"
|
|
32
|
+
on those larger accounts for the same reason.
|
|
33
|
+
|
|
34
|
+
Counts: 247 tools across 51 modules, unchanged. The free read-only tier is unchanged at
|
|
35
|
+
111. Restart Claude after updating.
|
|
36
|
+
|
|
37
|
+
## 3.71.0 — a task you can close
|
|
38
|
+
|
|
39
|
+
A subscriber's Claude created a callback task on a contact and, come Monday, could not
|
|
40
|
+
close it. It said so plainly: the server can create tasks but has no way to update or
|
|
41
|
+
complete one, tick it off by hand. It was right. `create_contact_task` and
|
|
42
|
+
`get_contact_tasks` were the whole task surface.
|
|
43
|
+
|
|
44
|
+
**Three tools close the loop.** `complete_contact_task` marks a task done, or reopens it
|
|
45
|
+
with `completed: false`. `update_contact_task` changes a task's title, description, due
|
|
46
|
+
date, assignee or completed state, and sends only the fields you pass, so changing a due
|
|
47
|
+
date never blanks the title; an update with no fields is refused before any request goes
|
|
48
|
+
out. `delete_contact_task` removes a task for good and, like every delete in this server,
|
|
49
|
+
asks for `confirm: "DELETE"`. All three use the routes in
|
|
50
|
+
GoHighLevel's published contacts spec and were proven live before release on a throwaway
|
|
51
|
+
contact in a sandbox account: create, complete, read back completed, update, reopen,
|
|
52
|
+
delete, read back gone, contact removed (`docs/proofs/2026-08-26-task-lifecycle.md`).
|
|
53
|
+
|
|
54
|
+
Counts: 245 tools across 51 modules (was 242). The free read-only tier is unchanged at
|
|
55
|
+
111; the three new tools are writes and answer with upgrade information there. Restart
|
|
56
|
+
Claude after the update to see them.
|
|
57
|
+
|
|
3
58
|
## 3.70.0 — a clean validation now means something
|
|
4
59
|
|
|
5
60
|
A subscriber built an Instagram-comment-to-DM workflow, ran `validate_workflow`, got
|
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.** 247 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 (247 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 192 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
|
|
|
@@ -269,7 +269,7 @@ Highlights (full guide: [`docs/HEADLESS.md`](docs/HEADLESS.md)):
|
|
|
269
269
|
|
|
270
270
|
> **v3.10.0 adds Email Templates** (`list_email_templates`, `create_email_template`, `update_email_template`) — Claude can now create new HTML email templates and save content into them via the public API. Templates power both standalone marketing emails and workflow email actions. Delete + rename remain UI-only (no public-API endpoint exists).
|
|
271
271
|
|
|
272
|
-
### CRM & Contacts (
|
|
272
|
+
### CRM & Contacts (18 tools)
|
|
273
273
|
|
|
274
274
|
| Tool | What It Does |
|
|
275
275
|
|---|---|
|
|
@@ -283,6 +283,9 @@ Highlights (full guide: [`docs/HEADLESS.md`](docs/HEADLESS.md)):
|
|
|
283
283
|
| `remove_contact_tags` | Remove tags from a contact |
|
|
284
284
|
| `get_contact_tasks` | List tasks for a contact |
|
|
285
285
|
| `create_contact_task` | Create a task on a contact |
|
|
286
|
+
| `complete_contact_task` | Mark a task done (or reopen it) |
|
|
287
|
+
| `update_contact_task` | Change a task's title, description, due date, assignee or state |
|
|
288
|
+
| `delete_contact_task` | Delete a task from a contact |
|
|
286
289
|
| `get_contact_notes` | List notes on a contact |
|
|
287
290
|
| `create_contact_note` | Add a note to a contact |
|
|
288
291
|
| `get_contact_appointments` | List a contact's appointments |
|
|
@@ -798,7 +801,7 @@ Source repo is private. Contributors need an invitation from `drjerryrelth`. The
|
|
|
798
801
|
|
|
799
802
|
### Reducing context / token usage
|
|
800
803
|
|
|
801
|
-
Every registered MCP tool's schema is shipped to the model on every message. With
|
|
804
|
+
Every registered MCP tool's schema is shipped to the model on every message. With 247 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
805
|
|
|
803
806
|
```jsonc
|
|
804
807
|
// Claude Desktop config — enable whole modules
|
package/dist/capture-helper.js
CHANGED
|
@@ -52,7 +52,16 @@ var CredentialsSchema = import_zod.z.object({
|
|
|
52
52
|
/** Stable machine id (2026-07-28). Replaces the hostname-derived
|
|
53
53
|
* fingerprint, which changed with the network on laptops and silently ate
|
|
54
54
|
* install slots. Written once and reused forever. */
|
|
55
|
-
device_id: import_zod.z.string().optional()
|
|
55
|
+
device_id: import_zod.z.string().optional(),
|
|
56
|
+
/** Per-seat cockpit key (2026-08-27, Command OS PRD row 0). The cockpit binds
|
|
57
|
+
* 127.0.0.1, which stops other machines reaching the port but not other
|
|
58
|
+
* PROGRAMS and other browsers on this one — and on a shared team machine that
|
|
59
|
+
* is everybody. Every state-changing cockpit request must carry this value;
|
|
60
|
+
* the served page gets it injected so the operator never types anything.
|
|
61
|
+
* Written once on the first cockpit run, replaced by
|
|
62
|
+
* `ghl-mcp dashboard --rotate-token`. Optional in the schema so files written
|
|
63
|
+
* by earlier versions still parse. NEVER printed, logged or displayed. */
|
|
64
|
+
cockpit_seat_token: import_zod.z.string().optional()
|
|
56
65
|
});
|
|
57
66
|
function appDataDir() {
|
|
58
67
|
const override = process.env.GHL_MCP_CONFIG_DIR?.trim();
|