@elitedcs/ghl-mcp 3.74.0 → 3.75.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/guide/guide.html CHANGED
@@ -4,7 +4,7 @@
4
4
  <meta charset="utf-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
6
  <title>GHL Command — User Guide</title>
7
- <!-- guides-hash: 2e657aa65ae89172 -->
7
+ <!-- guides-hash: a867c296d4cc8d65 -->
8
8
  <style>
9
9
  /* Deliberately light in every environment, including a dark-mode OS. This is a
10
10
  reference document people read at length, print, and save to PDF, and a page
@@ -313,6 +313,8 @@ Do not change anything. This is a read.</p></div>
313
313
  <li>Snapshots are how you carry a whole account setup to a new client. Claude can list what you have and create a share link for one.</li>
314
314
  <li>Creating and deleting sub-accounts is switched off by default, on purpose. It stays off unless you deliberately turn it on.</li>
315
315
  <li>Needs the full license. Reading users and numbers is free.</li>
316
+ <li><b>Destructive actions ask before they act.</b> Twelve of them did not until 31 August, including deleting a custom field, which erases that field on every contact, and deleting or voiding an invoice.</li>
317
+ <li><b>Changing a sub-account's business details is refused if Claude cannot read the account first.</b> Those are the details your text-message registration is filed against, and a check that could not run is not a check that passed. Timezone and other settings are unaffected.</li>
316
318
  </ul>
317
319
  </div>
318
320
  <div class="gsec"><h2>Where people go wrong</h2>
@@ -837,6 +839,7 @@ Do not change any contact, and do not delete any list that is already there.</p>
837
839
  <li>Saved lists are built from conditions, not from a frozen set of names. Tag somebody tomorrow and they appear in the list on their own.</li>
838
840
  <li>Saving lists needs version 3.65.0 or later. In every version before it, the list tools reported success and quietly created nothing, so if you tried this before and found nothing in GHL, that is why. Ask Claude &quot;what version are you running&quot; if you are not sure.</li>
839
841
  <li>Bulk changes need the full license. The Free plan can find and count the group, but not change it.</li>
842
+ <li><b>A bulk update with nothing in it is refused.</b> It used to report every contact as updated while changing nothing at all.</li>
840
843
  </ul>
841
844
  </div>
842
845
  <div class="gsec"><h2>Where people go wrong</h2>
@@ -1008,6 +1011,7 @@ When it saves, read the form back to me question by question, and tell me exactl
1008
1011
  <li>Wire the answers to contact fields. That is what lets you tag, segment, and branch on them later.</li>
1009
1012
  <li>Attach the form to a page in a funnel, or send the form link directly. Both work.</li>
1010
1013
  <li>Submissions can be read on the Free plan. Building and changing forms needs the full license.</li>
1014
+ <li><b>Reading submissions with no other instruction works from 31 August.</b> It used to fail unless you happened to name a page size, and the error blamed a number you never gave it.</li>
1011
1015
  </ul>
1012
1016
  </div>
1013
1017
  <div class="gsec"><h2>Where people go wrong</h2>
@@ -1074,6 +1078,8 @@ Read them back to me afterwards with their exact names and types, and tell me wh
1074
1078
  <li>Renaming a field is safe. Deleting one is not: anything pointing at it goes quiet. If a field is retired, leave it and stop using it.</li>
1075
1079
  <li>Custom objects are for things that are not people. Most accounts never need one, and that is fine.</li>
1076
1080
  <li>Needs the full license. Reading the field list is free.</li>
1081
+ <li><b>Deleting a custom field now asks you to confirm.</b> It takes the stored value on every contact with it, which is not something you can undo, and until 31 August it happened from a single instruction with no check.</li>
1082
+ <li><b>Searching, editing and deleting custom object records works from 31 August.</b> All three were aimed at addresses GoHighLevel does not answer on, so none of them did anything.</li>
1077
1083
  </ul>
1078
1084
  </div>
1079
1085
  <div class="gsec"><h2>Where people go wrong</h2>
@@ -1131,10 +1137,11 @@ Then tell me which ones I should chase, in order.</p></div>
1131
1137
  <li>GHL hands documents over in modest batches, so on a busy account a full read takes a few passes. Claude will say when it is still fetching.</li>
1132
1138
  <li>A document sent to the wrong contact cannot be unsent. Say the full name or the email in the ask.</li>
1133
1139
  <li>Needs the full license.</li>
1140
+ <li><b>A contract built from a template is prepared as a draft.</b> It is only sent when you say to send it. Before 31 August it went out to the customer the moment it was created, which is not something you can take back.</li>
1134
1141
  </ul>
1135
1142
  </div>
1136
1143
  <div class="gsec"><h2>Where people go wrong</h2>
1137
- <div style="overflow-x:auto"><table class="wrongtbl"><tr><th>What happened</th><th>The fix</th></tr><tr><td>&quot;It sent to the wrong Dana.&quot;</td><td>Two contacts, same first name. Give the email address and Claude confirms the match before sending.</td></tr><tr><td>&quot;The template list is missing one.&quot;</td><td>It exists in a different sub-account. Confirm which account you are in first.</td></tr><tr><td>&quot;The client says the document is blank.&quot;</td><td>The template has no signature or content blocks filled in. That is fixed in the GHL template editor, then resent.</td></tr></table></div>
1144
+ <div style="overflow-x:auto"><table class="wrongtbl"><tr><th>What happened</th><th>The fix</th></tr><tr><td>&quot;It sent to the wrong Dana.&quot;</td><td>Two contacts, same first name. Give the email address and Claude confirms the match before sending.</td></tr><tr><td>&quot;The template list is missing one.&quot;</td><td>It exists in a different sub-account. Confirm which account you are in first.</td></tr><tr><td>&quot;The client says the document is blank.&quot;</td><td>The template has no signature or content blocks filled in. That is fixed in the GHL template editor, then resent.</td></tr><tr><td>&quot;I only wanted to see what it would look like, and the client got it.&quot;</td><td>That was the old behaviour and it changed on 31 August. Creating from a template now leaves the contract as a draft, and sending is a separate instruction.</td></tr></table></div>
1138
1145
  </div>
1139
1146
  <div class="gsec"><h2>Related guides</h2>
1140
1147
  <ul>
@@ -1286,10 +1293,16 @@ Do not send it. I will send it myself once I have read it.</p></div>
1286
1293
  <li>Coupons need a code, a type (percentage or fixed) and an amount. Without all three GHL rejects it.</li>
1287
1294
  <li>&quot;What was I paid&quot; is a different question from &quot;what did I invoice&quot;. Ask for transactions or orders for money that actually moved, and for invoices for money you asked for.</li>
1288
1295
  <li>Invoicing needs the full license. The Free plan can read invoices and payments but not raise them.</li>
1296
+ <li><b>Estimates and quotes work from 31 August.</b> Before that they failed outright, you could not create one, list them, or delete one. If you tried earlier and gave up, try again.</li>
1297
+ <li><b>Invoice dates now follow the sub-account's timezone.</b> An invoice raised late in the evening used to be dated the next day, because the date was worked out in UTC.</li>
1298
+ <li><b>Deleting or voiding an invoice now asks you to confirm.</b> Voiding asks you to say VOID rather than DELETE, so the word matches what you are actually doing.</li>
1299
+ <li><b>Estimate dates are plain calendar dates.</b> Give them as year-month-day. A full timestamp is refused rather than quietly shifted by a day when it is converted back.</li>
1300
+ <li><b>Renaming an invoice and sending one both work from 31 August.</b> Neither did before: an edit was rejected outright, and a send was refused for missing details the tool never supplied. If you gave up on either, try again.</li>
1301
+ <li><b>Recording a payment is final.</b> Once an invoice has a payment against it, GoHighLevel will not let it be voided or deleted, by us or by anyone. Take the payment when you mean it.</li>
1289
1302
  </ul>
1290
1303
  </div>
1291
1304
  <div class="gsec"><h2>Where people go wrong</h2>
1292
- <div style="overflow-x:auto"><table class="wrongtbl"><tr><th>What happened</th><th>The fix</th></tr><tr><td>&quot;Creating an invoice used to just fail.&quot;</td><td>It did, for everyone, until 3.65.2. The call was missing six fields GHL requires and crashed its server rather than telling us. Update and it works.</td></tr><tr><td>&quot;It sent before I was ready.&quot;</td><td>Say &quot;do not send it&quot; in the ask. Sending is the only step here that reaches a customer.</td></tr><tr><td>&quot;The invoice shows the wrong name or no email.&quot;</td><td>Those come from the contact record, not the invoice. Fix the contact first, then raise the invoice.</td></tr><tr><td>&quot;My revenue number looks too low.&quot;</td><td>You are reading invoices, which is money requested. Ask for transactions instead, which is money received.</td></tr><tr><td>&quot;The promo code was rejected.&quot;</td><td>A coupon needs all three of code, type and amount. Percentage discounts take a number like 10, not &quot;10%&quot;.</td></tr></table></div>
1305
+ <div style="overflow-x:auto"><table class="wrongtbl"><tr><th>What happened</th><th>The fix</th></tr><tr><td>&quot;Creating an invoice used to just fail.&quot;</td><td>It did, for everyone, until 3.65.2. The call was missing six fields GHL requires and crashed its server rather than telling us. Update and it works.</td></tr><tr><td>&quot;It sent before I was ready.&quot;</td><td>Say &quot;do not send it&quot; in the ask. Sending is the only step here that reaches a customer.</td></tr><tr><td>&quot;The invoice shows the wrong name or no email.&quot;</td><td>Those come from the contact record, not the invoice. Fix the contact first, then raise the invoice.</td></tr><tr><td>&quot;My revenue number looks too low.&quot;</td><td>You are reading invoices, which is money requested. Ask for transactions instead, which is money received.</td></tr><tr><td>&quot;The promo code was rejected.&quot;</td><td>A coupon needs all three of code, type and amount. Percentage discounts take a number like 10, not &quot;10%&quot;.</td></tr><tr><td>&quot;An invoice is dated tomorrow.&quot;</td><td>Fixed on 31 August. Dates are now taken from the sub-account's own timezone rather than UTC. Invoices raised before then may carry the wrong day; check any that were created late in the evening.</td></tr></table></div>
1293
1306
  </div>
1294
1307
  <div class="gsec"><h2>Related guides</h2>
1295
1308
  <ul>
@@ -1447,10 +1460,11 @@ Do not reply to anyone. This is a read.</p></div>
1447
1460
  <li>Timezone comes from the sub-account. On a new client account, confirm it once, because everything downstream inherits it.</li>
1448
1461
  <li>Booking, moving, and cancelling appointments need the full license. Reading them is free.</li>
1449
1462
  <li>Appointment totals are deliberately left out of the weekly account report. Ask for them here instead, where the window is explicit.</li>
1463
+ <li><b>Booking and moving now insist on knowing which 2pm you mean.</b> If you say &quot;book Dana at 2pm&quot;, Claude works that out against the sub-account's timezone before it books. Until 31 August a bare time was read as UTC, so a 2pm booking could land at 7am.</li>
1450
1464
  </ul>
1451
1465
  </div>
1452
1466
  <div class="gsec"><h2>Where people go wrong</h2>
1453
- <div style="overflow-x:auto"><table class="wrongtbl"><tr><th>What happened</th><th>The fix</th></tr><tr><td>&quot;The times look an hour off.&quot;</td><td>The sub-account timezone is set to the wrong city. Fix it in GHL once and every reading is right afterwards.</td></tr><tr><td>&quot;It missed an appointment I know about.&quot;</td><td>It is on a calendar you did not name. Ask &quot;list every calendar in this account&quot; and then ask across all of them.</td></tr><tr><td>&quot;I asked for today and got this week.&quot;</td><td>Say the word today on its own. Claude prints the window it used, so you can spot it immediately.</td></tr></table></div>
1467
+ <div style="overflow-x:auto"><table class="wrongtbl"><tr><th>What happened</th><th>The fix</th></tr><tr><td>&quot;The times look an hour off.&quot;</td><td>The sub-account timezone is set to the wrong city. Fix it in GHL once and every reading is right afterwards.</td></tr><tr><td>&quot;It missed an appointment I know about.&quot;</td><td>It is on a calendar you did not name. Ask &quot;list every calendar in this account&quot; and then ask across all of them.</td></tr><tr><td>&quot;I asked for today and got this week.&quot;</td><td>Say the word today on its own. Claude prints the window it used, so you can spot it immediately.</td></tr><tr><td>&quot;It says the slot is not available, but the diary is empty.&quot;</td><td>That was usually the time, not the diary. A time with no timezone on it was read as UTC and landed outside opening hours, and GHL reported it as an availability problem. It is now caught and explained before anything is booked. If you still see this, the slot really is outside the calendar's open hours.</td></tr></table></div>
1454
1468
  </div>
1455
1469
  <div class="gsec"><h2>Related guides</h2>
1456
1470
  <ul>
@@ -1561,10 +1575,12 @@ Before you send: confirm the exact contact you matched, show me their phone numb
1561
1575
  <li>One-off messages are for one person. For a sequence to many people, build a nurture instead so replies stop it automatically.</li>
1562
1576
  <li>Compliance stays yours. Business hours, opt-out language, and consent are your responsibility, not the tool's.</li>
1563
1577
  <li>Needs the full license.</li>
1578
+ <li><b>Every send now tells you whether it actually went.</b> GHL accepting a message is not the same as delivering it: on an account whose text registration is not approved, messages sit queued for ever and nothing looks wrong. You now get told which of those happened.</li>
1579
+ <li><b>&quot;Delivered&quot; is the carrier's word, not proof somebody read it.</b> It is right nearly always, and it is not a receipt. For anything that matters, confirm with the person.</li>
1564
1580
  </ul>
1565
1581
  </div>
1566
1582
  <div class="gsec"><h2>Where people go wrong</h2>
1567
- <div style="overflow-x:auto"><table class="wrongtbl"><tr><th>What happened</th><th>The fix</th></tr><tr><td>&quot;The text says sent but never arrived.&quot;</td><td>The sub-account is not fully registered for texting. Check A2P status in GHL. This is the most common cause by far.</td></tr><tr><td>&quot;It went to the wrong person.&quot;</td><td>Two contacts share a first name. Always give the full name or email and read the match Claude shows you.</td></tr><tr><td>&quot;I meant to send twenty of these.&quot;</td><td>Twenty one-off sends is a sequence in disguise. Build a nurture; it stops on reply and keeps you out of trouble.</td></tr></table></div>
1583
+ <div style="overflow-x:auto"><table class="wrongtbl"><tr><th>What happened</th><th>The fix</th></tr><tr><td>&quot;The text says sent but never arrived.&quot;</td><td>The sub-account is not fully registered for texting. Check A2P status in GHL. This is the most common cause by far.</td></tr><tr><td>&quot;It went to the wrong person.&quot;</td><td>Two contacts share a first name. Always give the full name or email and read the match Claude shows you.</td></tr><tr><td>&quot;I meant to send twenty of these.&quot;</td><td>Twenty one-off sends is a sequence in disguise. Build a nurture; it stops on reply and keeps you out of trouble.</td></tr><tr><td>&quot;We texted them and they say they never got it.&quot;</td><td>Check what the send reported. If it says queued, the account's text registration is almost certainly not approved and the message never left. Before 31 August this looked identical to a successful send.</td></tr></table></div>
1568
1584
  </div>
1569
1585
  <div class="gsec"><h2>Bulk campaigns</h2>
1570
1586
  <p class="gpara">Individual messages are one thing; a campaign is the older bulk-send layer sitting alongside your workflows.</p>
@@ -1686,6 +1702,8 @@ This is a read. Do not apply anything.</p></div>
1686
1702
  <li>Imported snapshots are somebody else's work and can change out from under you. If a template matters to your business, build your own from an account you control.</li>
1687
1703
  <li>Applying a snapshot is an agency-level action. Reading the list works with your agency key; the rollout itself happens in the GHL agency view.</li>
1688
1704
  <li>Needs the full license.</li>
1705
+ <li><b>A cloned automation is checked after it is copied.</b> You are told how many steps and triggers actually landed, and whether anything in the copy still points back at the original.</li>
1706
+ <li><b>This mattered:</b> until 31 August a cloned automation could still enrol people into the workflow it was copied from. Clone a nurture sequence for a new client and their leads went into the previous client's automation, while the copy reported itself perfect.</li>
1689
1707
  </ul>
1690
1708
  </div>
1691
1709
  <div class="gsec"><h2>Where people go wrong</h2>
@@ -1743,6 +1761,8 @@ Then confirm back to me, one line each, that every post saved as a draft and whi
1743
1761
  <li>Images are not written by this. Attach them in the planner, or ask Claude to build an image separately and add it.</li>
1744
1762
  <li>Publishing straight from the chat is possible, and this guide deliberately does not teach it. A misfired post on a client's real page is not a mistake you can quietly fix.</li>
1745
1763
  <li>Needs the full license.</li>
1764
+ <li><b>A scheduled post has to say which hour it means.</b> A time with no timezone on it is read as UTC, so a post set for 9am would go out at 2am, publicly, on the client's own accounts, with nothing to undo. Claude now catches that before anything is scheduled.</li>
1765
+ <li><b>Asking for scheduled posts now really gives you only scheduled posts.</b> Until 31 August the filter was advertised and never applied, so a request for one queue came back with published and failed posts mixed in.</li>
1746
1766
  </ul>
1747
1767
  </div>
1748
1768
  <div class="gsec"><h2>Where people go wrong</h2>
@@ -1807,10 +1827,11 @@ Do not add any contacts or deals to it yet.</p></div>
1807
1827
  <li>Fewer stages is better. Six is plenty. Ten stages means nobody keeps the board clean.</li>
1808
1828
  <li>Keep the pipeline. When stages change, ask Claude to update the pipeline in place. Deleting and recreating gives every stage a new ID, and every workflow that referenced the old ones goes silently dead.</li>
1809
1829
  <li>Needs the full license.</li>
1830
+ <li><b>Editing stages is all-or-nothing, and that is now enforced.</b> Sending only the stage you are renaming used to delete every other stage, and the deals sitting in them were cut loose. Claude now refuses that and tells you which stages were at risk.</li>
1810
1831
  </ul>
1811
1832
  </div>
1812
1833
  <div class="gsec"><h2>Where people go wrong</h2>
1813
- <div style="overflow-x:auto"><table class="wrongtbl"><tr><th>What happened</th><th>The fix</th></tr><tr><td>&quot;I recreated the pipeline and all my automations stopped.&quot;</td><td>Recreating changes every stage ID. Say &quot;update the existing pipeline&quot; instead, and Claude keeps the IDs alive.</td></tr><tr><td>&quot;A workflow that moves deals does nothing.&quot;</td><td>It is pointing at a stage that no longer exists. Run a workflow audit; this is the single most common find.</td></tr><tr><td>&quot;The stage order came out wrong.&quot;</td><td>Say the stages in order in one line and ask for the read-back. The read-back shows you the true order.</td></tr></table></div>
1834
+ <div style="overflow-x:auto"><table class="wrongtbl"><tr><th>What happened</th><th>The fix</th></tr><tr><td>&quot;I recreated the pipeline and all my automations stopped.&quot;</td><td>Recreating changes every stage ID. Say &quot;update the existing pipeline&quot; instead, and Claude keeps the IDs alive.</td></tr><tr><td>&quot;A workflow that moves deals does nothing.&quot;</td><td>It is pointing at a stage that no longer exists. Run a workflow audit; this is the single most common find.</td></tr><tr><td>&quot;The stage order came out wrong.&quot;</td><td>Say the stages in order in one line and ask for the read-back. The read-back shows you the true order.</td></tr><tr><td>&quot;I renamed one stage and the others disappeared.&quot;</td><td>That was possible until 31 August. The stage list replaces the whole board, so anything left out was deleted. It is now refused unless you explicitly say you mean to remove those stages.</td></tr></table></div>
1814
1835
  </div>
1815
1836
  <div class="gsec"><h2>Related guides</h2>
1816
1837
  <ul>
@@ -1924,6 +1945,7 @@ Do not move anything. This is a read.</p></div>
1924
1945
  <li>Won and lost are a different thing from stages. A deal can sit in &quot;Treatment Scheduled&quot; and be marked won. Ask for both when you want the true picture.</li>
1925
1946
  <li>If a deal you expect is missing, it may live on a different pipeline in the same account. Ask &quot;which pipelines exist here&quot; first.</li>
1926
1947
  <li>Needs the full license. The Free plan can read the board but not move deals.</li>
1948
+ <li><b>Moving a deal to a stage from another pipeline is refused by GHL</b>, and it names the stages that are valid. Checked on 31 August, this one was already safe.</li>
1927
1949
  </ul>
1928
1950
  </div>
1929
1951
  <div class="gsec"><h2>Where people go wrong</h2>
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@elitedcs/ghl-mcp",
3
- "version": "3.74.0",
3
+ "version": "3.75.0",
4
4
  "mcpName": "io.github.drjerryrelth/ghl-command",
5
- "description": "GoHighLevel MCP Server for Claude. 247 tools \u2014 full CRM, automation, marketing control, account-wide workflow audit, live funnel-capture verification, and the only programmatic GHL workflow builder, now multi-tenant across client accounts.",
5
+ "description": "GoHighLevel MCP Server for Claude. 248 tools full CRM, automation, marketing control, account-wide workflow audit, live funnel-capture verification, and the only programmatic GHL workflow builder, now multi-tenant across client accounts.",
6
6
  "main": "dist/index.js",
7
7
  "bin": {
8
8
  "ghl-mcp": "dist/index.js"
@@ -10,7 +10,6 @@
10
10
  "files": [
11
11
  "dist/index.js",
12
12
  "dist/capture-helper.js",
13
- "dist/assessment.html",
14
13
  "templates/action-schemas.json",
15
14
  "templates/clinic-medspa.json",
16
15
  "templates/trigger-schemas.json",
@@ -28,6 +27,7 @@
28
27
  "build": "esbuild src/index.ts --bundle --platform=node --target=node20 --format=cjs --outfile=dist/index.js --packages=external && esbuild src/capture-helper.ts --bundle --platform=node --target=node20 --format=cjs --outfile=dist/capture-helper.js --packages=external && node src/command-os/assessment/build-app.mjs && cp src/command-os/assessment/app.html dist/assessment.html",
29
28
  "setup": "node setup-wizard.mjs",
30
29
  "catalogue": "node scripts/export-command-os-catalogue.mjs",
30
+ "manifest:write": "node scripts/write-package-manifest.mjs",
31
31
  "start": "node dist/index.js",
32
32
  "dev": "tsc --watch",
33
33
  "test": "vitest run",
@@ -59,7 +59,7 @@
59
59
  },
60
60
  "bugs": {
61
61
  "url": "https://github.com/drjerryrelth/ghl-command-feedback/issues",
62
- "email": "support@cliniclaunchlab.com"
62
+ "email": "support@ghlcommand.com"
63
63
  },
64
64
  "publishConfig": {
65
65
  "access": "public"
@@ -1,6 +1,6 @@
1
1
  # Copy Guide — every email and text the Blueprint sends
2
2
 
3
- STATUS: v1, 2026-08-26. Owner: Command OS. Read by the build stage before it writes a single template, and by anyone editing a preset.
3
+ STATUS: v1, 2026-08-26. Read by the build stage before it writes a single template, and by anyone editing a preset.
4
4
 
5
5
  Why this exists, in the owner's words after inspecting a real build: "If we provide everything generic, our users will not be impressed and will not stay with us long." The workflows are only as good as the words inside them. This guide is the standard every message is written to and rewritten to.
6
6