@elitedcs/ghl-mcp 3.34.1 → 3.34.3

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,33 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.34.3 — Audit catches dead workflow hand-offs + get_social_posts 422 fix
4
+
5
+ - **`audit_workflows` / `validate_workflow` now scan `add_to_workflow` targets.**
6
+ Only `remove_from_workflow` was scanned before, so a step that hands a contact
7
+ off to a workflow that was later deleted (the classic cleanup/snapshot mistake)
8
+ went undetected — exactly the silent-skip the audit exists to catch. GHL drops
9
+ the hand-off and every action after it with no error. Now flagged like any
10
+ other dead reference; deduped so the same id in `workflowId` and
11
+ `workflow_id[]` reports once. Still never false-alarms: valid targets pass, and
12
+ a self-reference is a warning, not an error. (4 regression tests added.)
13
+ - **`get_social_posts`:** fixed the GHL 422 ("skip/limit must be a number
14
+ string"; "status should not exist"). `skip`/`limit` are now sent as strings and
15
+ `status` is no longer placed in the request body.
16
+
17
+ Known gap (queued, deferred to avoid false alarms): a custom field deleted or
18
+ renamed but still referenced only through a `{{contact.x}}` merge tag in message
19
+ copy is not yet flagged. That renders blank rather than killing the action, and
20
+ catching it safely needs a key-aware, standard-field-allowlisted pass so the
21
+ audit keeps its never-false-alarm guarantee.
22
+
23
+ ## 3.34.2 — Docs: launch pricing + the task-notification trap
24
+
25
+ - README pricing updated for launch: $97/mo at ghlcommand.com, unlimited
26
+ sub-accounts on 3 machines, first-month-back guarantee.
27
+ - Workflow docs corrected: the task action type is `task-notification`
28
+ (hyphen). The underscore form saves and validates but is silently
29
+ skipped at runtime — live-verified. Validator enforcement ships next.
30
+
3
31
  ## 3.34.1 — CLI list-locations shows companyId
4
32
 
5
33
  `ghl-mcp cli list-locations` now includes each location's `companyId` (same as
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  Works with **both the Claude Desktop App and Claude Code terminal** — your choice.
8
8
 
9
- **License required.** Buy at [elitedcs.com/ghl-mcp-server](https://elitedcs.com/ghl-mcp-server?utm_source=npm&utm_medium=readme) — one-time $97, three-machine activation, no subscription. **30-day time-back guarantee**: save 5+ hours on one client build or refund.
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
11
  Built by [Elite DCs, LLC](https://elitedcs.com).
12
12
 
@@ -79,7 +79,7 @@ This MCP (Model Context Protocol) server connects Claude directly to GoHighLevel
79
79
 
80
80
  ### 1. Buy a license
81
81
 
82
- [elitedcs.com/ghl-mcp-server](https://elitedcs.com/ghl-mcp-server?utm_source=npm&utm_medium=readme) — one-time $97. License key arrives by email within 1-2 minutes.
82
+ [ghlcommand.com](https://ghlcommand.com?utm_source=npm&utm_medium=readme) — $97/mo, every sub-account you manage. License key arrives by email within 1-2 minutes.
83
83
 
84
84
  ### 2. Install in Claude Desktop App
85
85
 
package/dist/index.js CHANGED
@@ -31,7 +31,7 @@ var require_package = __commonJS({
31
31
  "package.json"(exports2, module2) {
32
32
  module2.exports = {
33
33
  name: "@elitedcs/ghl-mcp",
34
- version: "3.34.1",
34
+ version: "3.34.3",
35
35
  mcpName: "io.github.drjerryrelth/ghl-command",
36
36
  description: "GoHighLevel MCP Server for Claude. 218 tools \u2014 full CRM, automation, marketing control, account-wide workflow audit, and the only programmatic GHL workflow builder, now multi-tenant across client accounts.",
37
37
  main: "dist/index.js",
@@ -3979,9 +3979,9 @@ function registerSocialPlannerTools(server2, client) {
3979
3979
  if (fromDate !== void 0) body.fromDate = fromDate;
3980
3980
  if (toDate !== void 0) body.toDate = toDate;
3981
3981
  if (includeUsers !== void 0) body.includeUsers = includeUsers;
3982
- if (status !== void 0) body.status = status;
3983
- body.skip = skip ?? 0;
3984
- body.limit = limit ?? 20;
3982
+ void status;
3983
+ body.skip = String(skip ?? 0);
3984
+ body.limit = String(limit ?? 20);
3985
3985
  return client.post(`/social-media-posting/${resolvedLocationId}/posts/list`, { body });
3986
3986
  }
3987
3987
  );
@@ -8610,11 +8610,19 @@ function extractFromAction(action, refs) {
8610
8610
  refs.push({ kind: "user", id: attr.assignedTo, where: `${where} \u2192 assignedTo` });
8611
8611
  break;
8612
8612
  }
8613
- // ── Workflow refs ──
8613
+ // ── Workflow refs — add_to_workflow AND remove_from_workflow both carry a target ──
8614
+ // Both shapes hold the target workflow as a `workflowId` string and/or a `workflow_id`
8615
+ // array. A dead target (e.g. the linked workflow was deleted in a cleanup or snapshot)
8616
+ // is the classic silent-skip: GHL drops the hand-off and every action after it, no error.
8617
+ // Previously only remove_from_workflow was scanned, so add_to_workflow → deleted workflow
8618
+ // went undetected. Dedup so the same id in both fields is reported once.
8619
+ case "add_to_workflow":
8614
8620
  case "remove_from_workflow": {
8615
- if (typeof attr.workflowId === "string") refs.push({ kind: "workflow", id: attr.workflowId, where: `${where} \u2192 workflowId` });
8621
+ const targetIds = /* @__PURE__ */ new Set();
8622
+ if (typeof attr.workflowId === "string") targetIds.add(attr.workflowId);
8616
8623
  const arr = Array.isArray(attr.workflow_id) ? attr.workflow_id : [];
8617
- for (let i = 0; i < arr.length; i++) if (typeof arr[i] === "string") refs.push({ kind: "workflow", id: arr[i], where: `${where} \u2192 workflow_id[${i}]` });
8624
+ for (const v of arr) if (typeof v === "string") targetIds.add(v);
8625
+ for (const id of targetIds) refs.push({ kind: "workflow", id, where: `${where} \u2192 workflow target` });
8618
8626
  break;
8619
8627
  }
8620
8628
  // ── Opportunity refs — FOUR distinct shapes ──
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elitedcs/ghl-mcp",
3
- "version": "3.34.1",
3
+ "version": "3.34.3",
4
4
  "mcpName": "io.github.drjerryrelth/ghl-command",
5
5
  "description": "GoHighLevel MCP Server for Claude. 218 tools — full CRM, automation, marketing control, account-wide workflow audit, and the only programmatic GHL workflow builder, now multi-tenant across client accounts.",
6
6
  "main": "dist/index.js",
@@ -130,7 +130,7 @@
130
130
  "title": "Task Title",
131
131
  "dueDate": "1",
132
132
  "body": "Task description text",
133
- "type": "task_notification",
133
+ "type": "task-notification",
134
134
  "__customInputs__": {}
135
135
  },
136
136
  "notes": "dueDate is days from now as string. assignedTo is a user ID."