@elitedcs/ghl-mcp 3.72.0 → 3.72.2

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,66 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.72.2 — a form you read back can be saved again
4
+
5
+ A subscriber tried to edit one of her forms the documented way: read it with
6
+ `get_form_full`, change one thing, hand it back to `update_form`. It was refused. She
7
+ tried again from an exact copy of the payload. Refused again. Then she found it herself,
8
+ stripped one key by hand, and the identical edit saved first time.
9
+
10
+ She was right. GoHighLevel's form builder writes every custom field with the field's id
11
+ under two spellings, `Id` and `id`, holding the same value. On her form 42 of 58 fields
12
+ carried the pair; standard fields like name and email never do. Sitting in GoHighLevel it
13
+ is harmless. The trouble starts on the way back out, because editing a form means
14
+ repeating the whole document, and a document that says the same id twice per field, once
15
+ capitalised and once not, is asking to be repeated wrongly.
16
+
17
+ **`get_form_full` now returns one of them, and `update_form` accepts either.** A key is
18
+ dropped only when another key beside it means the same thing in a different case and
19
+ holds exactly the same value, so nothing is lost: the value is still there under the
20
+ name that survives. Where two such keys hold *different* values, both are kept, because
21
+ that is real information and picking one would be a guess. Forms built by the intake
22
+ installer are unaffected; they save by a different route and were never part of this.
23
+
24
+ If you have been working around this by hand, you can stop. Proven before release
25
+ against a real form on a live account: saved with both spellings, saved again with one,
26
+ edit kept, every custom field intact.
27
+
28
+ Counts unchanged: 247 tools, 51 modules, free tier 111.
29
+
30
+ ## 3.72.1 — a client's work stops shipping in the package
31
+
32
+ An audit of the published 3.72.0 tarball found somebody else's proprietary material
33
+ inside it. Not a leak of customer data, and nobody did it on purpose: the packaging
34
+ allow-list named `skills` as a whole directory, so every file that landed in that folder
35
+ published itself along with the release.
36
+
37
+ What was in there. A launch-event preset built from a partner agency's own client
38
+ blueprint, their compliance playbook and a protected live account: ten named workflows,
39
+ twenty-five custom values, an event calendar and the whole compliance handoff chain.
40
+ Three more presets credited real client accounts by name in their provenance lines. The
41
+ compiled bundle carried a real GoHighLevel account id with a label identifying whose it
42
+ was, and one shipped example held a real sandbox id.
43
+
44
+ That preset stays in the source tree, because it is a legitimate tool for the agency that
45
+ wrote it. It is now excluded from what gets published. Every client and partner name is
46
+ out of the published files, and the two account lists that used to be compiled into the
47
+ bundle now come from `account-rules.json` in your own application-support directory. A
48
+ fresh install declares no accounts at all, which is the stricter default: without a
49
+ declared practice account every account needs an explicit recorded approval before
50
+ anything is built, and an account you mark off-limits is refused even when an approval
51
+ exists.
52
+
53
+ Engineering comments recording where a workflow shape was captured are untouched. They
54
+ live in source that is never published, and they are how the next person knows a node
55
+ shape came from a real account rather than a guess.
56
+
57
+ A new check reads the actual file list `npm pack` would publish and fails the build if a
58
+ client name, a real-looking account id, or a file on the never-publish list appears in it.
59
+ It caught two files that a careful pass by hand had already missed.
60
+
61
+ Counts unchanged: 247 tools, 51 modules, free tier 111. No tool behaviour changed.
62
+
63
+
3
64
  ## 3.72.0 — an audit that counts your workflows once
4
65
 
5
66
  A member ran the account audit on a large agency account. The report came back claiming
@@ -2494,7 +2555,7 @@ Two bugs caught when exercising v3.4.0's `health_check` and `validate_workflow`
2494
2555
  Also: `src/index.ts` startup `validateApiKey()` had the same wrong-endpoint bug as `health_check`; fixed for consistency. Buyers will now see "API key validated" or a clear 403 message on startup instead of silent ambiguity.
2495
2556
 
2496
2557
  ### Verified end-to-end
2497
- Re-ran the spawn-handshake test against QA Test Clinic v3:
2558
+ Re-ran the spawn-handshake test against a protected account:
2498
2559
  - `health_check` returns 5/5 PASS ("All systems go.")
2499
2560
  - `validate_workflow` on the CLL Onboarding Form Submitted workflow correctly scans 2 references (form.id + self-referencing workflow.id), reports 0 issues, surfaces the self-reference as an informational note.
2500
2561
 
@@ -2634,7 +2695,7 @@ For Claude that means: when you ask it to read, build, or edit a workflow using
2634
2695
  | v3.2.0 | **13** | **44** | 57 |
2635
2696
 
2636
2697
  ### Round-trip verified
2637
- - Real `form_submission` workflow from QA Test Clinic v3 parses cleanly through the new typed variant.
2698
+ - Real `form_submission` workflow from a protected account parses cleanly through the new typed variant.
2638
2699
  - 8 synthetic typed-trigger samples match their respective variants and are correctly rejected by sibling variants (discrimination works as expected).
2639
2700
 
2640
2701
  ### Files changed