@elitedcs/ghl-mcp 3.88.3 → 3.89.0-beta.10

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,12 +1,272 @@
1
1
  # Changelog
2
2
 
3
- ## 3.88.3: tools reach public web addresses only
3
+ ## 3.89.0-beta.10: tools reach public web addresses only
4
+
5
+ This is a beta, for testers only. It is everything in 3.89.0-beta.9, plus the changes below.
4
6
 
5
7
  **Security fix: every tool that opens a web address you or Claude give it now reaches public addresses only.** That covers extract_brand, verify_design, check_page_theme, verify_funnel, Workflow Audit Pro, install_ghl_template, the build's email previews and the cockpit's handoff page checks. An address on your own computer or office network is refused with one sentence saying why.
6
8
 
7
9
  **verify_design and extract_brand open pages in a fresh browser** with no saved logins. verify_design renders a local page only from your project folder or your brand folder. To use another folder, set GHL_MCP_DESIGN_DIR to it.
8
10
 
9
- **The cockpit intake no longer reads a link.** Open the page, copy its text, and paste it into Paste a transcript.
11
+ **The Secret Shopper is being rebuilt and returns in a coming release.** It is not available in this beta.
12
+
13
+ ## 3.89.0-beta.9: your license is checked while you work
14
+
15
+ This is a beta, for testers only. Everything in 3.89.0-beta.8, plus the changes below. Installing this beta does not change anyone's plan: what each person can use is decided by their license.
16
+
17
+ **Your license is checked while you work.** GHL Command asks the license server again every 4 hours, not only when it starts, and the license server's answer is the only one that counts. If a membership ends or a computer is taken off the license, the tools stop at the next check with a sentence saying why. Nothing in any account is changed when that happens.
18
+
19
+ **Setup gives advice that fits.** At your computer limit, it tells you how to free a computer on your license. If a membership has ended, it says how to renew. Only a key we do not recognize is pointed at getting one.
20
+
21
+ **A tool your license does not include says so plainly,** in one sentence, and changes nothing. Everything your license includes works exactly as before.
22
+
23
+ **Smaller fixes.** The Health page and the handoff box count confirmed items in the same sentence as step 10. A retry test that could fail about once in a thousand runs is now steady.
24
+
25
+ ## 3.89.0-beta.8: build a client account in twelve steps, with nothing switched on and an undo that puts things back
26
+
27
+ This is a beta, for testers only. Tested on wellness clinics: a tester who had never seen the cockpit took a red light therapy clinic through all twelve steps to Sign-Off twice, an agency owner did it once clicking every step himself, and each build was then undone and the account read back as it started. The other industries use the same steps but have not been taken to Sign-Off on a real account yet.
28
+
29
+ **Build a client account is twelve numbered steps on one page.** Register, account type, industry, Assessment, intake, Brief, staff, Approve, Build, Verify, manual tasks and Sign-Off, always in that order, with the step to do now marked. A client part way through its steps is shown first, with a button that takes you to the step it is on.
30
+
31
+ **Nothing is written before you have seen the list.** Before Build writes anything, it stops and shows what it will create, what already in the account it will use, and what it would change. Each change has its own box and is left alone unless you tick it.
32
+
33
+ **Nothing is switched on.** Every automation Build makes is a draft. No text or email goes out unless you click a button that says it will.
34
+
35
+ **Sign-Off says what to switch on, and when.** Step 12 lists the automations that send no texts, to switch on now, and the ones that send texts, to switch on only after your text-messaging registration (A2P) is approved. Anything held back for its own reason, such as a payment automation with no product filter, says why.
36
+
37
+ **Every count agrees.** Step 10, step 11, the Work queue and Health and handoff use the same sentence: GoHighLevel confirms this many items, you confirmed this many yourself, and how many jobs are left before sign-off.
38
+
39
+ **Two kinds of job, and each says which it is.** A job GoHighLevel can show, such as the phone number or the trial price, clears when the check reads it in the account. A job it cannot show says "GoHighLevel cannot show it, so your tick is the record." Only a job's own box ticks it. A deposit of the whole price with no balance clears the price check, and the business phone no longer has to be the account's texting number. A booking link that is a GoHighLevel booking page must open a calendar in the client's own account.
40
+
41
+ **The undo puts things back.** Undoing a build removes only what it created, and puts back a custom value you allowed it to change, the way it was when you confirmed. A value someone has changed by hand since the build is left alone and listed. The undo waits while a step is running for that client, and the cockpit stops updating its progress record once a build is undone.
42
+
43
+ **Known limits.** Hours typed like "M-F 9am-6pm" are not read yet: the calendar keeps its starting hours and a job asks you to set them. The Approve button appears only after you save what the client bought. The client handoff document does not yet print with page breaks.
44
+
45
+ ## 3.89.0-beta.7: the intake fills what your notes say, and the cockpit shows you where to start
46
+
47
+ Found by clicking through a full client build in the cockpit.
48
+
49
+ **Filling the intake from a document you added twice works again.** Adding a document with the same name as one already saved, such as updated notes, stores it as a second copy, and filling the intake from that copy always failed. It now reads. When filling the intake does fail, a Details line under the message says why.
50
+
51
+ **Complete the intake takes you there.** Clicking Complete the intake in the Next step box now scrolls the page to the intake it opens.
52
+
53
+ **Brief tells you how to fill the intake.** If you run Brief before the intake is in, it now says "First complete the intake. It fills most answers from a call or your notes." with a Complete the intake button that opens the intake and takes you to it. It used to say only to open the real form, with no link.
54
+
55
+ **The intake is right under the steps when it is next.** While Brief is the next step and no intake is in, the Next step box says to complete the intake first and has a Complete the intake button, and the intake opens right under the steps instead of far down the page. It stays there while it is open.
56
+
57
+ **Typing on Build a client account is kept.** A sub-account id or client detail you type while the page is still reading your accounts is no longer cleared when it finishes. For your security, the key is never kept.
58
+
59
+ **Filling the intake from your notes fills what your notes say.** Answers your notes state plainly are now filled in, such as business hours, staff, team size, the trial price, deposit and balance, the trial length and how many trials fit in a day. An answer is filled only when the exact words it came from give it; anything worked out from other facts is left as a suggestion. Yes or no answers always wait for your click.
60
+
61
+ **Use all suggestions.** A new button above the suggestions takes every suggestion that would not replace an answer you already have. Any that would replace one stay beside their field for you to decide, and so do the answers about trial spots running out and a 72-hour program price, because they decide what your texts may promise.
62
+
63
+ **Clearer intake counts.** After filling from a call or notes, the intake says how many answers were filled, how many are suggestions waiting for your click, and which questions your notes did not answer, by name.
64
+
65
+ **A quieter Verify report.** The line about check notes that did not match the account is now a small note at the end of the report instead of in its headline.
66
+
67
+ **Smaller fixes.** The light and dark switch in the account menu is read out as "Color theme".
68
+
69
+ ## 3.89.0-beta.6: Build only states what the account shows, and calendars open when the client is open
70
+
71
+ This is a beta, for testers only. Found by running a full Wellness clinic client build in the cockpit.
72
+
73
+ **Calendars open when the client is open.** The calendars Build creates now take their hours from the intake's Business Hours answer, for example Monday to Thursday 9am to 7pm, Friday 9am to 5pm and Saturday 9am to 1pm, instead of the template's Monday to Friday, 9am to 5pm. When the answer can be read more than one way, the calendars keep the template hours and the Build card says so. On a round-robin calendar, including one with a single person on it, GoHighLevel only offers a time when the person assigned is also available then, so the Build card reminds you to check each person's availability. When a calendar with the same name is already in the account, its hours are left as they are and the Build card says when they differ from the intake's.
74
+
75
+ **The Build card only states what the account shows.** Build no longer calls someone on your staff list "a placeholder" because of their name: the people the staff step found in the account are treated as real, and a sentence saying otherwise is taken out. Build also no longer says a custom value is empty when it was filled: after building, it reads the account's custom values and lists only the ones that really are still empty, such as the business phone and the review link.
76
+
77
+ **Brief no longer shows a clean check as a warning.** When the Brief's own check finds nothing wrong, nothing is shown and nothing is counted as an issue.
78
+
79
+ **Verify's jobs use plain names.** Manual actions name custom values the way a person reads them, with the name GoHighLevel lists beside it, such as "Business phone (business_phone)" and "Owner first name (owner_first_name)", instead of the bare business_phone and owner_first_name. When Verify leaves out something the check said because the account shows otherwise, it now says that in a plain sentence.
80
+
81
+ **Smaller fixes.** The client card no longer counts a step as done while it is still running. Two joined sentences in the Blueprint Review no longer show a double full stop. On "Build a client account", pressing Enter in the sub-account id or key field registers it, the same as clicking Register. The readiness check no longer lists "No Anthropic key saved" under "Needs you", since nothing is needed. The Wellness clinic question "How should clients prepare for the visit?" now says that its answer takes the place of the day-before reminder's usual "Please come about 10 minutes early" line, and that the booking confirmation already asks clients to come 10 minutes early.
82
+
83
+ ## 3.89.0-beta.5: Build starts when you approve, Build reads its whole report, the handoff matches what was built, and honest win-back texts
84
+
85
+ This is a beta, for testers only. Everything below is new since beta.4, found by running a full client build in the cockpit. Jobs you ticked on the Manual tasks list before this update may need ticking once more, because their wording changed.
86
+
87
+ **Build reads its whole build report, and issue lines stop getting the wrong fix.** On a large build, such as the new Wellness clinic template with 19 automations and 37 message templates, the build report was too long for the Build step to read, so the Build card said the build was not confirmed complete and that the calendars and message copy could not be checked. Long build reports now come back in a short form that keeps everything the Build step reports on: what was made in each group, anything that was not made cleanly, the calendars with the ids read back from the account, steps still missing, calendars paused for staff, staff notifications with nobody to send to, and your jobs; the rest can still be read a piece at a time. Build can also read the account's calendars directly. Separately, an issue on the Build or Brief card no longer gets a "what to do next" line about something else: a Stripe deposit or a calendar note is no longer told to connect Google or Outlook, and a report that could not be read is no longer told to add a staff member. When there is no clear next step, the line just says what is wrong.
88
+
89
+ **Fill the intake from this no longer fails now and then with a JSON error.** Reading a transcript or document into the intake could stop with "Unexpected non-whitespace character after JSON" when Claude added a short note after its answer, and trying again usually worked. The cockpit now reads only Claude's answer itself and ignores anything written after it. The same fix applies to the Blueprint Review, every build step's result, the handoff checks and the plain-English rewrites.
90
+
91
+ **Approving the plan starts Build.** After you approve the plan in step 3, Build now starts on its own, and the approval panel says so. It starts exactly as if you had pressed Run Build, with the same checks: if another step is still running, nothing starts and a line under Run Build says to run it when that step finishes; if Build cannot start, the reason appears under the button as usual. It starts once, however often the page redraws, and nothing starts when the approval itself is refused.
92
+
93
+ **Installing with --beta or --latest now switches an older GHL Command entry, and says so.** Running `npx -y @elitedcs/ghl-mcp@beta cli install --beta` on a Claude app that already had an older GHL Command entry, such as one named "ghl" that runs a local start-mcp.sh, renamed the entry but left it running the old copy, without a word. Now the entry runs the channel you asked for afterwards, whatever it ran before (a local start-mcp.sh, a node path to a local copy, or the other channel), and the reply names what it ran before and what it runs now. Your other tools and the entry's own settings are kept, and a backup of the file is saved first as always. `cli install --latest` moves it back to the normal release. If a local copy kept its settings in its own script and setup has never been run for the npx copy, the reply says to run setup with your license key after reopening Claude. If the entry cannot be switched, the command says so in one sentence and changes nothing. A plain `--force` without a channel still leaves a local start-mcp.sh alone. Adding GHL Command to Claude Code with `cli install --claude-code --beta` or `--latest` now switches a local copy the same way, instead of leaving it as it was, and only when it can put the old one back exactly; if adding the new one fails, the old one is put back by itself. Replies that name what an entry ran before hide any setting that looks like a key, token or password.
94
+
95
+ **Keep current puts a suggestion away.** In the intake, when a suggested answer asks "Replace this answer?" and you choose Keep current, the suggestion and its Use it button now go away for that answer instead of staying on offer.
96
+
97
+ **Wellness clinic: What they bought names the program follow-up.** For a Wellness clinic client, the quote follow-up item in What they bought now says it builds the Program follow-up (72 hours), the same name the client's handoff page uses. The client document says the same. Nothing about what gets built or approved changes.
98
+
99
+ **The client handoff describes the review request the way it was built, in the client's own time.** The handoff page used to say review requests go out "after each visit" for every client. That is only true when the review request starts from a visit marked as showed. For a Wellness clinic it now says "A review request two weeks into their program, with your link", because the build asks two weeks after a program is sold and never after a trial alone. Where the review request starts when your team marks the work done, the page says so, and where the timing cannot be read it says "A review request, with your link". Dates and times on the handoff and on your agency detail page are now shown in the client's time zone from the intake, to the minute, for example "September 29, 2026 at 10:49 PM CDT", instead of UTC with milliseconds.
100
+
101
+ **Wellness clinic texts say spots are limited only when the clinic said so.** The first win-back text told past leads they were "hearing about this before anyone else" and that "a small number" of trial spots had opened, even when the intake answered No to "Do trial spots really run out most weeks?". That wording now goes out only on a Yes. A No, or no answer, gets a plain version that still says who is texting, why they are hearing from the clinic, and the offer, with YES and N on their own lines. The second no-show text no longer says times were kept open. The intake's prep question now says its answer takes the place of the day-before reminder's usual line about arriving early, so include arriving early in the answer if you want the reminder to say it; that stops the reminder saying it twice.
102
+
103
+ **Checking a workflow now catches what a message says and when it runs, not only broken ids.** In the rehearsal build, checking every workflow found nothing wrong, yet ten would have misfired. validate_workflow, the check that runs before every publish, and the account-wide audit the Verify step runs now also warn when: a message uses a custom value such as the booking link that is missing or still empty, so it would go out blank; a workflow a contact can trigger more than once (a reply, a missed call, an appointment change, a payment) only lets each contact through the first time; a Payment Received workflow has nothing saying which payment it is for, so it runs on every payment; a message sent when someone books says their payment or deposit was received. The account-wide audit also compares the workflows with each other: it warns when a message says "Reply YES" and no workflow answers a YES, and when a message promises "Reply N to opt out" but replying N does not stop the texts. A task step with nobody assigned now gets a warning too, telling you to add a staff member and pick them on that step. None of these block publishing, and when the check cannot read what it needs, it says so instead of guessing.
104
+
105
+ **The Brief no longer calls a calendar one-on-one that Build then calls round-robin.** When the calendar answer names one person and no type, such as "Intro Trial and Regular Session. Both with Test Provider.", the Brief used to warn that each calendar "has no recognizable type" and was "assumed to be one-on-one", and Build then described the same calendars as round-robin. A calendar with one named person is now simply booked with that person, with no warning. When two or more people are named without a type, the Brief says once that they take turns, which is what Build does. When nobody is named, it says once that no one is assigned yet.
106
+
107
+ **A deposit or daily limit written into the calendar answer is used, not just noted.** When the calendar answer says something like "Intro Trial (90 min, $19 deposit, max 6 per day)", the Brief used to keep the deposit and the daily limit only as a note to review. For a Wellness clinic, the first calendar's deposit and daily limit now fill the intake's own deposit and "most trial visits in one day" answers when those were left blank. When those questions already say the same thing, the Brief says nothing more. When they disagree, the Brief says once which one the build uses.
108
+
109
+ **Wellness clinic is a Business Type.** The intake's Business Type question had no Wellness clinic choice, so a wellness clinic had to pick "Clinic / practice". Wellness clinic is now one of the choices. When the client's industry is Wellness clinic, a blank Business Type is filled in to match, and an intake form installed before this change, which still lacks the new choice, has "Clinic / practice" read as Wellness clinic.
110
+
111
+ **Staff typed without commas are no longer dropped.** A staff line written as "Name - email - role", "Name (email)" or "Name email role" used to be skipped with a message saying it had no email address, which was not true. The email address is now found wherever it is in the line, the name is taken from the text before it, and the role and mobile number from the text after it. Lines written with commas read exactly as before.
112
+
113
+ **A 555-01xx test phone number no longer stops the intake form from submitting.** GoHighLevel's form refuses phone numbers in the 555-0100 to 555-0199 range, which are often used in practice data. The prepared form now leaves the phone blank for such a number, and the cockpit says why and asks you to type a real number or leave it empty.
114
+
115
+ **A note-taker connector with a hyphen in its name works for Fill the intake from this.** When the connector you use for call recordings had a hyphen in its name, the intake reader was given a permission that did not match it, so it could not reach the recording. The permission now keeps the hyphen, the way Claude names the connector's tools.
116
+
117
+ **Fill the intake from this can only read from your note-taker, never change anything in it.** When the intake reads a call from a connected note-taker, it is now allowed only that note-taker's reading tools, such as searching, listing, getting and downloading recordings and transcripts, each named exactly. Any tool that creates, changes, deletes, sends, shares, schedules or uploads is blocked, and so is every other connector you have, so words spoken or pasted into a meeting cannot make it act in your Zoom or any other account. A connector counts as a note-taker only when its name has the note-taker's name as a whole word, so "zoom-mcp" and "otter-ai" count and "zoomer-crm" does not. If none of a connected note-taker's tools can be confirmed as reading tools, the intake says so and asks you to paste the transcript instead.
118
+
119
+ **Fill the intake from this reads only what you give it.** A pasted transcript or a saved document is read with no connectors and no web access, so nothing in it can make Claude visit an address or use any of your connectors, and your own Claude settings and hooks no longer apply to these reads. Reading from a link is not available in this beta: open the page, copy its text, and paste it into Paste a transcript. Reading from a note-taker first checks your list of connectors, and if that list cannot be read, the intake says so and does not use the note-taker.
120
+
121
+ **A Word or PDF file gets a clear instruction.** The intake's notes reader reads text files and transcripts only. Choosing a Word or PDF file now says: "Word and PDF files can't be read yet. Open the file, copy the text, and paste it into Paste a transcript."
122
+
123
+ **More intake answers carry into the prepared GoHighLevel form.** Answers with a plus sign had to be typed into the form by hand, because GoHighLevel's form turns a plus sign in the link into a space. A plus sign is now written out where that cannot change the meaning: "6+ sessions" arrives as "6 or more sessions" and "Botox + filler" as "Botox and filler", and those answers no longer need retyping. A plus sign next to a price or between numbers, such as "$60+ tax" or "$19 deposit + $60 at visit", is left for you to type. Email addresses with a plus sign, such as name+clinic@gmail.com, cannot be carried and are listed for you to type, including the contact's own email, which could otherwise arrive with a space in it. Several picks on a multiple-choice question, such as social platforms, still have to be ticked in the form, because GoHighLevel's form cannot take more than one choice from a link. A question renamed to your own wording now fills in correctly too.
124
+
125
+ **The workflow builder sign-in is checked for real, and says the right thing when it fails.** Check readiness now renews the workflow builder's GoHighLevel sign-in instead of trusting a saved copy, so a sign-in that has stopped working is caught before Build starts, not part-way through it. Build also renews the sign-in up front when less than 30 minutes are left on it. When the sign-in really has stopped working, the message now says the workflow builder is not unlocked and how to unlock it, instead of "GoHighLevel did not answer". When GoHighLevel's sign-in service is only busy, readiness and the account checkup say to wait a minute and check again rather than asking you to unlock again or calling the builder broken, and the sign-in now waits up to about 45 seconds before giving up. Readiness checks the same saved sign-in that Build uses, and unlocking the workflow builder also replaces any older saved copy. During Build, if saving one automation gets a brief error from GoHighLevel, Build reads that automation back and saves it once more only if the first save did not go through, instead of stopping the whole build. Build also spaces out its changes slightly when it sends many at once.
126
+
127
+ **Verify no longer lists switched-off automations as problems.** The automations a build makes stay switched off until texting is registered and the client goes live, and that is how it should be. Verify used to list every one of them under "What is not right" ("Workflows: 19 of 19 need attention"). It now says it in one plain line instead, "19 automations are built and switched off until texting is registered and you go live", and keeps "What is not right" for real problems: an automation that is missing, broken or could not be read still shows there.
128
+
129
+ **Verify's headline counts the jobs that come before go-live.** After a large build, Verify used to say "42 jobs are waiting for you", counting every automation's switch-on and jobs that only matter later. It now leads with the jobs that must be done before go-live and counts the rest after them, for example "21 jobs must be done before go-live. Also on the Manual tasks list: 19 automations to switch on when you go live, and 3 jobs for later." Every job is still on the Manual tasks list.
130
+
131
+ **Verify stops mentioning a test lead it never meant to send.** Builds from the cockpit make no pages, and every Verify still ended its headline with "Live proof is not applicable: this build made no pages, so no test lead was sent." That line is gone when no pages were planned. A build that does have pages still reports its test lead as before.
132
+
133
+ **Register tells you what to do next.** After you register a sub-account, the cockpit used to say only "Registered" with the client's name and its long account id. It now says "Registered <client>. Next: choose the industry and add staff in Client builds.", with Client builds as a link and an "Open Client builds" button that go straight to that client's card. The account id is no longer shown there.
134
+
135
+ **The cockpit's background refresh cannot get stuck or go backwards.** The cockpit refreshes itself in the background. If one of those refreshes never got an answer, newly submitted intakes stopped showing until you reloaded the page, and when two refreshes overlapped the older one could be drawn last. A background refresh now gives up after 20 seconds and tries again later, only the newest answer is drawn, and an intake saved while a refresh was running is kept.
136
+
137
+ **Issue lines get their right next step back.** The rehearsal fix that stopped issue lines getting a hint about something else also stopped some right ones. "19 workflows were created as drafts" gets the publish hint again, an empty recipient or a staff user that could not be created gets the add-staff hint, and "does not have a phone number" gets the phone number hint. An issue that mentions Stripe still gets no payments hint, but a second problem in the same issue, such as notification steps with no recipient, now gets its own hint.
138
+
139
+ **Escape means Keep current.** In the intake, pressing Escape on a "Replace this answer?" panel now does the same as Keep current: your answer stays and the suggestion goes away. It used to close the panel but leave the suggestion on offer.
140
+
141
+ **Claims kept out of a plan show where you review the plan.** When an intake answer makes a claim, such as a trial named "Inch Loss Trial", the build sets it back to the template's wording or leaves it blank for you to fill in. That used to be said only in Claude's reply. The client's card now shows a "Claims kept out of this plan" box beside the plan, listing each one, so you can check them with the client.
142
+
143
+ **Verify says when the workflow builder needs unlocking again, or when GoHighLevel is just busy.** When the workflow builder's saved sign-in had run out, Verify said GoHighLevel did not answer and told you to run the check again, which could never fix it. It now shows the same unlock instructions the install guide uses. When GoHighLevel was only busy or slow, it now says "GoHighLevel is busy and did not return the workflow list; check again in a minute."
144
+
145
+ **Small intake helps.** Each answer you have to type into the form yourself, such as a staff email with a plus sign, has a Copy button beside it.
146
+
147
+ **Going live waits only on the jobs that come before go-live.** Signing a client live used to wait on every job on the Manual tasks list, including the automations that going live itself switches on and jobs that only matter later, such as moving a card after a visit or warming the number before a bulk send. Now only the jobs before go-live hold it up, by the same rule Verify's headline uses, so the two always agree. The Manual tasks list shows every job in three groups: Before go-live, Switched on when you go live, and For later. A tick on a job for later stays ticked after the next check (a problem the check finds is never a job for later, and a bought item still waits for your tick), and a note such as "How Review Request starts" can be marked as read.
148
+
149
+ **Verify lists each message template once, and Build's waiting reasons say what they wait for.** Verify used to list every text and email template twice. It now lists each once. And a Build result that said automations were "gated by handoff.phone_number and handoff.a2p" now names the jobs themselves, such as "Get a phone number in GoHighLevel" and "Register A2P 10DLC (so texts can send)".
150
+
151
+ **A passing GoHighLevel error no longer sends a message template to your jobs list.** When GoHighLevel answers a build with a one-off server error (such as a 520) or asks it to slow down, Build now tries again, up to twice, with a short wait. Saving an email's text is simply sent again. Creating something new is only sent again when GoHighLevel asked Build to slow down, and only after Build has checked the account for about six seconds and found it is not there. After a server error or a dropped connection, where the first attempt may still have landed, Build only checks and never sends it again, so a retry cannot make a duplicate.
152
+
153
+ **Build's report stays readable for bigger teams.** With four staff and four calendars, the build report for most templates was still too long for the Build step to read in one piece. When a report is still too long after the extra notes are left out, Build now shortens the parts it does not report on (the list of automations, the setup jobs, who each staff notification goes to) to counts, says which ones it shortened, and keeps everything it reports on exactly as it was. A dry run's report no longer lists fields only a real build has. When two clients share one GoHighLevel account, each client's full report is kept separately, so reading more of one can never show the other's.
154
+
155
+ **Build and Brief describe a one-person calendar the same way.** A one-on-one calendar with one named person is built in GoHighLevel as a round-robin with just that person on it, because GoHighLevel drops named people from a one-on-one calendar. Build used to warn that it was a round-robin while Brief called it one-on-one. Build no longer warns about a one-person calendar: it is one-on-one, booked with that person, exactly as Brief says, and it books exactly like one-on-one. A one-on-one calendar that names two or more people gets one plain line saying it is shared by them.
156
+
157
+ **The intake asks when to ask for a review, and Build follows the answer.** Wellness clinic and clinic intakes now ask "When should we ask for a review?". A wellness clinic can choose two weeks into a program (as before), a few hours after a visit is marked showed, the day after, or when the team marks the work done. A clinic can choose a few hours after each visit (as before), the day after, or when the team marks the work done. Build starts the review request from that moment, and the client's handoff page describes the timing that was built, for example "A review request the day after each visit, with your link". Left unanswered, nothing changes.
158
+
159
+ **Wellness clinic win-back texts are their own.** The win-back sequence used to repeat three texts from the lead follow-up word for word, so someone who went through both heard them twice. Win-back now has its own price text, check-in text and last text, written the same way (who is texting, the offer, one question, and how to stop), with scarcity only when the clinic said trial spots really run out.
160
+
161
+ **Your client's sales stages are matched more carefully.** A stage list that starts with its closing stage no longer gets an extra stage put in front of it, and new leads land on the first stage that is still open. A stage called "Won't answer" is no longer mistaken for a won deal. Stages called "Working" and "Consultation" are now recognized, so Build uses them instead of adding its own "Contacted" or booked stage beside them, and "Consultation completed" is read as a completed visit, not a booking.
162
+
163
+ **Handoff times use the client's time zone even when the intake says "Central".** The handoff page now understands time zones the way clients type them, such as Central, CST, Chicago, Eastern, EST, Mountain, MST, Arizona, Pacific, Alaska and Hawaii. A time zone for another part of the world, such as Central European Time, is never mistaken for a US one. When the intake gives nothing usable, it uses the time zone set on the client's GoHighLevel account instead of UTC.
164
+
165
+ **Review request wording fits the business.** For an online store, the client's handoff page now says the review request goes out once an order has arrived. For a general business it says the review request goes out whenever they choose to ask. Service businesses still read that it goes out once they mark the work done.
166
+
167
+ **Automations now run again for the same contact when they should.** Every automation Build made let a contact through only once, ever, so only a contact's first reply reached your team, only the first missed call got a text back, and a client who missed a visit and rebooked got no confirmation or reminders the second time. Build now sets this for each automation: replies, missed calls, bookings, reminders, no-shows, cancellations, payments and follow-ups run every time; the first response to a new lead, the month-long lead follow-up, the win-back sequence and the review request run once per contact.
168
+
169
+ **No automation is switched on while a link or detail its messages use is still blank.** Texts and emails that include the booking link, review link, balance payment link or clinic address used to be ready to go out with a blank where the link or address should be. Build now keeps any automation that uses one of those details as a draft until the detail is filled in, and says which one. The clinic address is also filled in from the intake when the intake gave a street address.
170
+
171
+ **Booking confirmations no longer claim a deposit was paid.** A Wellness clinic's booking confirmation said "we've received your deposit" and tagged the contact as paid on every booking, even with no payment set up. The confirmation now gives the time, address and visit length only, and payment receipts come from GoHighLevel itself once payments are connected.
172
+
173
+ **The Trial Balance Paid automation is never switched on by Build.** Its payment trigger has no product filter yet, so it would run on every payment, including the deposit. Build now always leaves it as a draft, even when the setup job is ticked, and the job says to add the product filter and then switch it on yourself.
174
+
175
+ **"Reply YES" now does what the text says.** Wellness clinic texts asked leads to "Reply YES", but nothing answered a YES, and the automation that sends the booking link only listened for BOOK, which no text mentioned. A YES now sends the booking link straight away (BOOK still works too), and the texts say "Reply YES for the booking link."
176
+
177
+ **Replying N now stops the follow-up texts, as the texts promise.** Wellness clinic texts said "Reply N to opt out", but an N only added a label. The texts now say "Reply N to stop these texts", and an N takes the person out of every follow-up sequence (speed to lead, missed call, lead follow-up, win-back, no-show, program follow-up and the review request) so none of those texts go out. Appointment texts still go out, and STOP still turns texting off completely.
178
+
179
+ **Cancelled visits stop their reminders, and a booking stops the missed-call text.** When a Wellness clinic visit is cancelled, the person is now taken out of the reminder texts for it. When anyone books, in any template, they are also taken out of the missed-call text-back and the no-show follow-up, so they are not sent a booking link or a "we missed you" text after booking.
180
+
181
+ **Staff instructions use your client's own stage names.** Tasks and notes for staff, such as "Move their card to Program Sold or to No Program Yet - Follow Up", named the template's stages even when the client's pipeline called them something else. They now name the client's stages, for example "Move their card to Package sold or to No sale, follow up", so the move starts the right follow-up.
182
+
183
+ **Messages are signed by the owner, not the front desk.** Texts and emails are signed with a first name, and Build used the person who gets new-lead alerts, so a clinic's texts could read "this is Front at ..." from a front desk login. Build now uses the staff member listed as the owner, or the first provider when no owner is listed, and leaves it for you to fill in when neither is clear.
184
+
185
+ **The day-before reminder says "arrive early" once, and the balance text fits its timing.** The Wellness clinic reminder added "Please come about 10 minutes early" in front of the clinic's own preparation note, which usually said the same thing. The clinic's note now replaces that line, and the usual line is used only when there is no note. The balance text goes out after the visit is marked as attended, so it now thanks the client for coming in instead of saying "before your visit starts".
186
+
187
+ **One automation hitting a passing GoHighLevel error no longer stops the rest of the build.** If GoHighLevel briefly refuses to create or save one automation, Build checks whether it was made, tries again when creating only when GoHighLevel asked it to slow down, and otherwise carries on with every other automation, then tells you which ones to finish by running Build again. Any automation that depends on the missing one waits with it. If three things in a row fail this way, Build stops creating for this run instead of spending its time waiting on GoHighLevel, and lists what is left for the next run. When you asked Build to switch automations on, it now does so only after every automation is built; if any is missing, none are switched on yet, so no live automation can send someone to an empty one. Running Build again also fills in an empty draft automation that an earlier Build left behind, instead of asking you to delete it first, and fills in an email template an earlier Build left empty. A template with any text in it is left exactly as it is.
188
+
189
+ ## 3.89.0-beta.4: a two-page client handoff, no pop-up boxes left in the intake, Brief waits for GoHighLevel on its own, and text templates confirmed properly
190
+
191
+ This is a beta, a test build for members who want the next release early. Everything below is new since 3.89.0-beta.3.
192
+
193
+ **The client handoff is now two pages a business owner can read.** The handoff page a client receives used to list every tag, custom field and automation as its own heading, open with counts and GoHighLevel menu paths, and mix your jobs with theirs; for a full build that came to about ten printed pages. It is now one short page under your agency's name and colour, "Prepared for" the client with the date: what their new system does for the business, the problems they told you about and what you built for each (from an attached Assessment with its dollar figures, else the Blueprint Review, else their intake answers, and nothing when none of those says anything), what happens to a new lead (only the steps that were actually built), their team, their sales stages, what they bought (built, and being set up next), and at most five things only the owner can do before switch-on, in plain words with no menu paths, taken only from your jobs that are still open ("Nothing needed from you right now" when none are). Nothing the client typed in the intake is ever quoted on the page; their answers only pick from a fixed set of plainly worded problems. An automation the latest check found missing is left off, and a large team, a long list of stages or many calendars are shortened so the page still fits. It says the system is working only once every automation is confirmed switched on; until then it says "Once it is switched on". It prints to two US Letter pages without splitting a row or a step across pages, keeps the Print / save PDF button, and still rewrites itself after every Verify. The copy published to the client's GoHighLevel page carries the same short page. Everything technical (tags, fields, custom values, workflow names and states, record ids, the latest check's findings and your jobs with their click paths) moved to a new page for you, "Account detail, for your agency", opened from the handoff panel in the cockpit and never linked from the client's page.
194
+
195
+ **No pop-up boxes left in the intake.** Every question the intake used to ask in a browser pop-up is now a small panel in the page, right under the button you pressed. That covers replacing an answer you already had with a suggested one (Replace or Keep current, shown under that answer with the current and proposed wording), sending the questionnaire, a transcript over the 60,000-character limit, going to the real form with required answers still missing, and going back to the base question set. When your browser will not let the cockpit copy the blank form link, the link now appears in a box that selects itself so you can copy it. A stray key no longer answers a question for you. Add them for me, which creates GoHighLevel logins for your staff before a build, asks the same way, and what GoHighLevel answers (including any one-time password) stays on the page until you press Done.
196
+
197
+ **A step that cannot start says why under its button.** When Brief, Build or Verify cannot start, the reason now appears in a line right under the Run button instead of a pop-up, and it stays there until you press Run again.
198
+
199
+ **Brief waits for GoHighLevel by itself.** Right after a client submits the intake form, GoHighLevel can take a minute to attach the answers to the contact. Running Brief in that minute used to stop with a message telling you to try again. Now the cockpit says "Waiting for GoHighLevel to attach the answers to the contact…", checks every 10 seconds for up to 2 minutes, and runs Brief on its own as soon as the answers are there. If another step is still running, it keeps waiting until it can start. A Stop waiting link ends the wait, and if GoHighLevel refuses the account's key the wait stops at once and says so. If the answers are still not there after 2 minutes, it shows the same message as before, under the button.
200
+
201
+ **Text templates made by a build are confirmed properly.** A build could report a text template as possibly not saved when it had been saved. GoHighLevel answers a new text template with its id, and the build now uses that id first, then the exact name, and gives GoHighLevel three looks over about six seconds before saying anything. If GoHighLevel said it saved the template but its list has not caught up yet, the template counts as made and the build asks you to glance at it once, instead of saying it may not have saved.
202
+
203
+ **Texting rules and a claims guard in every build template.** Lessons from real clinic accounts now apply to every industry template and to every Blueprint build. Texts use plain characters only: a curly quote, long dash, one-character ellipsis or emoji switches a whole text to the expensive Unicode kind (70 characters per part instead of 160), and on one live account a single long dash took each contact from 22 billed parts to 47. The build now swaps those characters for plain ones, including in intake answers such as an owner's name or offer with a curly apostrophe, and says which text it changed; validate_workflow and the workflow audit warn about them in live workflows too. The first text of every nurture and win-back sequence now has "Reply STOP to opt out." on a line of its own. Reply keywords such as STOP, N, YES and TEAM are matched exactly, never "contains", because a "contains STOP" rule opted out a patient who asked "when should I stop eating"; keyword triggers in the templates say so, and a "contains" match on a reply word is flagged. New claims guard: a text or email built from a template can no longer carry a health or results claim (pain, sleep, inflammation, cures, weight or inch loss, guaranteed results, numbers like "lose 10 pounds") or a named result like "Sarah lost 3 inches", unless it is a size or weight result the client gave with consent (a testimonial marked with consent, or an offer claim) and the message says "results vary". Consent to use a testimonial covers the person's words and name, not a claim inside it, and a health claim (pain, sleep, inflammation, cures) is never sent, even with consent. Pure praise with consent, such as "the team was so kind", goes out as written. When a rewritten message or an intake answer brings in a claim without consent, that message goes back to the template's own wording, whole, with a warning naming the message and the claim; nothing is cut out of the middle of a sentence. A message with no clean wording to go back to is left out of the build and becomes a job to write it without the claim, and a template whose own copy makes a claim stops the build until it is rewritten. Describing a service is not a claim: "We treat sports injuries", "Dr. Patel treats migraines", "reminder", "treatment plan" and "pain-free booking" are not flagged. Links in texts are left exactly as written, and when a custom value used in texts is changed to plain characters, the warning says it changes everywhere that value is used.
204
+
205
+ **The claims guard also checks intake answers that become custom values, and a few texting rules are tighter.** An intake answer that becomes an account-wide custom value, such as a trial named "Inch Loss Trial" or a program named "Lose 10 pounds program", reaches every text through that value, so it is now checked too: a value that makes a claim goes back to the template's default (for example "Intro Trial"), or is left blank for you to fill without the claim when there is no default, with a warning and a line on the claims review job. The business name is never replaced; a claim in it is flagged for you to check with the client. In the Wellness clinic template a client quote is never put into a message, even through rewritten copy that adds "results vary": that message goes back to the template's wording. When a template already has its own claims review job, the list of messages and values the build changed is added to it. An opt-out now counts only when the opt-out words are in the same sentence as the reply keyword, so "Reply N for next steps. We won't text you after 8pm." is not an opt-out line, and "Reply STOP to unsubscribe" is. A build plan whose reply trigger lists both a single keyword and a keyword list is refused with a message saying to use the list. On the client's handoff page, the Wellness clinic's follow-up after a visit is called Program follow-up, not Quote follow-up.
206
+
207
+ This is a beta, a test build for members who want the next release early. Everything below is new since 3.89.0-beta.3.
208
+
209
+ **A new industry: Wellness clinic (cockpit plan and Blueprint).** For red light, body contouring, IV, peptide, longevity and recovery clinics that sell a paid first-visit trial and then a program. Choose "Wellness clinic" as the client's industry and the intake asks what the build needs: the trial's name and price, the deposit and the balance, how long the visit is, how many trial visits fit in a day, the programs and their prices, who should not book, how to prepare, an optional comparison price, an optional client quote with a separate yes or no for written permission, and which services the clinic offers. The build then makes a trial-to-program account: a 10-stage patient pipeline (or the client's own stages, with every automation pointed at the right one), a trial calendar with 24 hours' notice, one visit per slot, the daily limit and the clinic's screening note, a trial form with an optional phone number and two separate, unticked texting consent boxes, and 19 workflows. The new lead gets the booking link within seconds, with follow-ups at 4 and 24 hours; then a 30-day nurture, a 30-day win-back, booking confirmation and reminders, the balance on arrival, cancel and no-show texts, a 72-hour program follow-up after the visit, a program confirmation, and a review request two weeks into a program. A booking stops the lead's follow-up texts, and a program sale stops the post-visit follow-up. Replies of N, STOP, TEAM or BOOK are matched on the exact word, so "when should I stop eating" is never an opt-out, a plain "No" to a question is never an opt-out either, and STOP turns off texting without moving the client's card. A deposit or balance of 0 counts as none, so those clinics get texts with no deposit in them, and a free trial gets free-trial wording. The messages follow what works in wellness accounts running today, written fresh, and the ones with no working example are marked as new. No text makes a health, pain, sleep or weight claim, a client quote is never put into a text by the build (even with written permission, a person reads it first and adds it by hand), every marketing text carries its own "Reply N to opt out" line, no text contains a long dash or curly quotes (these can double what a text costs), and no program is ever sold through a text link. Things to know: the "balance paid" thank-you stays switched off until you limit its payment trigger to the balance product, as the build's checklist explains.
210
+
211
+ ## 3.89.0-beta.3: one list of what the client bought, one approve button, no pop-up boxes on the client build path, and a cleaner read of intake answers
212
+
213
+ This is a beta, a test build for members who want the next release early. Everything below is new since 3.89.0-beta.2.
214
+
215
+ **One list of what the client bought (cockpit plan).** The Blueprint Review now has one list of the fourteen things a client can buy, the same fourteen the Assessment uses, from Call answering to Reporting. Each one says in a line what it means for the client and what happens when it is ticked for this client's industry: built automatically, always built, a job for you in the account, separate work, or something Claude does for you. If the build does not make one for this client's industry, it says so. Everything starts ticked, so you untick what the client did not buy; if an attached Assessment recorded what they bought, those are ticked instead. "Everything in the plan" is now "Tick everything", and the separate "Bought in the Assessment" checklist is gone. Above the list, the cockpit asks whether you have run the Assessment for this client: attach it, run it first, or build without one. Approve waits for that answer, and changing the answer or the ticks after approving withdraws the approval, the same way a changed selection always has. Every ticked item that is not built automatically becomes one line in Your jobs in the account, and ticking that line off counts as done, since no check can see it in the account; Claude's suggested next steps (an AI voice agent to answer calls live, a weekly client report) are listed beside your jobs without holding anything up, and the client document shows what was bought, what was built, what is still to do, and whether an Assessment was run.
216
+
217
+ **One way to approve a plan (part of the cockpit plan).** Step 3 used to show up to three approve buttons, and one of them only ticked the step, so Build then said "Approve building before running Build." Now there is one action, "Approve this plan". It sits in the next step and, when the Blueprint Review is open, in the review too; both do exactly the same thing. It approves the plan and any live workflow repairs listed with it in one go.
218
+
219
+ **No more pop-up boxes when you approve or mark a step (part of the cockpit plan).** Approving a plan opens a small panel right under the button with two boxes, "Your name" (filled in with the name you used last time) and "Type the client name to confirm", plus Approve and Cancel. A stray key no longer throws away what you typed, and if something is wrong the reason appears in the panel instead of a pop-up. Running Intake, marking a step done, and changing the name that goes on hand marks work the same way.
220
+
221
+ **"Not saved yet" goes away after you save (part of the cockpit plan).** In What they bought, the "Not saved yet" label now disappears once Save what they bought goes through.
222
+
223
+ **A slow moment is no longer called a broken key (part of the cockpit plan).** When GoHighLevel was slow or busy while the intake was open, the cockpit said it could not read the client's account and to paste its key again, even though the key was fine. That message now appears only when GoHighLevel actually refuses the key. A passing hiccup shows a quiet "Could not refresh just now; retrying." that clears by itself on the next good read, and the answers already on screen stay put. It stops trying after ten attempts and offers Refresh status. If the form shows a submission but no answers can be found, the cockpit now says so and what to do, instead of retrying forever.
224
+
225
+ **Intake answers are read the way the client wrote them.** Staff written on one line with a semicolon between people ("name, email, role; name, email, role") are read as separate people instead of one merged person. Sales stages written one per line keep their own commas, so "No sale, follow up" stays one stage. Pain points and objections are never cut at a comma. A calendar answer like "Intro Trial (90 min, $19 deposit, max 6 per day) and Regular Session (60 min). Both with Test Provider." now gives two clean calendars with their lengths and the provider on both, and keeps the deposit and daily cap as a note to review. A price like "Intro Trial (90 min) $79 ($19 deposit + $60 at visit)" now keeps its $79 price instead of coming back blank.
226
+
227
+ ## 3.89.0-beta.2: test build with safer workflow changes, one-click fixes, branded reports and a cockpit build that runs start to finish
228
+
229
+ This is a beta, a test build for members who want the next release early. It is published under the "beta" label, so a normal install stays on 3.88.2 until the full release. Everything below is new since 3.88.2.
230
+
231
+ **How to try the beta.** Paste this in a terminal: `npx -y @elitedcs/ghl-mcp@beta cli install --beta`, then quit Claude fully and open it again. If you build client accounts from the cockpit, also paste `npx -y @elitedcs/ghl-mcp@beta cli install --claude-code --beta` (it switches an existing GHL Command entry in Claude Code to the beta and says what it changed). To go back to the normal release, paste `npx -y @elitedcs/ghl-mcp@beta cli install --latest`, which points the Claude app back at the normal release and keeps your settings. If you added the beta to Claude Code, also paste `claude mcp remove ghl -s user` and then `claude mcp add --scope user -t stdio ghl -- npx -y @elitedcs/ghl-mcp@latest`. If you installed the cockpit's desktop launcher from the beta, run `npx -y @elitedcs/ghl-mcp@latest install-launcher` once so it falls back to the normal release too. When the full release comes out, a beta install does not move to it by itself: it stays on the beta until you run those go-back lines. Asking Claude for the GHL Command version on a beta says whether you are ahead of the normal release or whether a full release is out, and gives the go-back line.
232
+
233
+ **Switching a workflow on is checked first.** Before a workflow goes live, GHL Command runs the same checks as validate_workflow on exactly the version that would go live. If any check finds an error, nothing is switched on and each error is named. Changes to a workflow that is already live get the same check before they are saved, so a broken step never reaches real contacts. Warnings never block.
234
+
235
+ **A workflow update can no longer delete steps by accident.** When Claude saves a workflow's steps, the list it sends replaces the whole workflow. If that list would remove steps that are there now, the save is refused and the steps are listed, unless the exact number being removed is confirmed. A save also keeps the workflow's sender phone number, which some saves used to clear.
236
+
237
+ **Webhook keys stay hidden.** Any reply that shows a workflow now hides the keys, tokens and passwords inside its webhook steps, showing only the last four characters. Sending that workflow back unchanged keeps the real keys, and a hidden key pasted anywhere else is refused.
238
+
239
+ **Reports can carry your brand.** Each report can show your agency's name, colour and logo, a neutral look, or the GHL Command look, and the choice is remembered for each client. Your logo can be a file on your computer, so it prints and travels with a saved copy.
240
+
241
+ **Secret Shopper for prospects (part of the cockpit plan).** Ask Claude to "run the Secret Shopper on" a prospect's website and it builds a one-page sales report: what a visitor would find missing, scored the same way every time. Gaps are pitched only under services you say you sell, and the report can end with a "Book the walkthrough" button that opens your own booking link, set in your agency profile.
242
+
243
+ **One-click fixes on the Workflow Audit Pro report (part of the cockpit plan).** Some problems on the report now have a fix button, for example a message that greets a lead with a blank name. The button shows the exact change first and writes nothing until you approve. After you approve, it writes the change, reads it back from GoHighLevel to check it held, and offers Undo. If leads are waiting at that step, the fix stops and tells you why. On a live workflow, a fix is refused only if it would add a new problem; problems that were already there are listed as "already there, not changed by this fix" and do not block it.
244
+
245
+ **Add your staff first (part of the cockpit plan).** Each client card now has an "Add your staff" step before Intake. List who works at the client; the cockpit checks the account's users by email, and Intake and Build wait until everyone listed is there, saying who is missing. With an agency key, "Add them for me" adds them; otherwise the step shows exactly where to add them in GoHighLevel. When a calendar is held back because its people are missing, the build says so in one plain sentence instead of building it with a blank name.
246
+
247
+ **Clearer first steps for new members (part of the cockpit plan).** The cockpit's readiness check now also checks that GHL Command is added to Claude Code, which every client-build stage runs through, and `npx -y @elitedcs/ghl-mcp@beta cli install --claude-code --beta` adds it during the beta (on the full release it is the same line with `@latest` and without `--beta`). Every place that tells you where to find the Private Integration key, the Location ID or the staff page now gives the same directions, checked on a real GoHighLevel screen. A missing workflow builder login now says "Unlock the Workflow Builder", and the Verify step says it only reads, since builds no longer make pages.
248
+
249
+ **Only what the client bought gets built (part of the cockpit plan).** Before you approve a build, the cockpit now asks what the client bought, and only those parts are built. Choose Everything in the plan to build it all.
250
+
251
+ **Zoom in the cockpit (part of the cockpit plan).** Zoom is now on the Connections page. It reads only, and your recent recordings show in the daily brief.
252
+
253
+ **Your client's sales stages, exactly.** When a client lists their own sales stages, the build now uses exactly their stages and points the automations at the matching ones, instead of adding template stages after Lost. For example, the booking automation moves the card to their "Trial booked" stage, and No-Show Rescue moves it to their "No show" stage when they have one. Each match is listed in the build notes. If no stage of theirs fits, the one missing stage is added just before their closing stages, never after Lost.
254
+
255
+ **Two clinics in one sub-account.** Blueprint can build a second clinic into a sub-account that already holds one. Each clinic's records carry its own short prefix, the cockpit keeps each clinic's records apart, and a build never changes the other clinic's live workflows.
256
+
257
+ **The workflow builder no longer looks locked when many steps run at once.** The cockpit's readiness check and builds no longer briefly report the workflow builder as not unlocked when many steps run at once. GHL Command now signs in to the workflow builder once and reuses that sign-in, instead of signing in again for every check, which Google limits per minute. If Google does ask it to slow down, it waits a few seconds and tries again before saying anything is wrong.
258
+
259
+ **Builds and intake reading no longer fail at the finish line.** Runs started by the cockpit ignore your own Claude Code hooks, so a hook can no longer end a build step early, and intake reading keeps the run's real answer instead of failing with "no result line". A step that runs out of time is now always reported as not finished.
260
+
261
+ **Fewer workflow builder sign-ins across windows.** The Claude app and every cockpit step now share one workflow builder sign-in on this computer, kept in a private file next to your credentials, so opening several at once no longer trips Google's per-minute limit. If GoHighLevel refuses a sign-in, it is thrown away everywhere and a fresh one is made.
262
+
263
+ **Every calendar the client described is built.** When the client's calendars were recorded in a slightly different place in the brief, the brief check said no calendar was described and the build made only one. Both now read them, so two described calendars become two calendars.
264
+
265
+ **Smaller changes.** Claude Desktop's menu now lists the server as GHL Command, and running the installer again renames an old entry instead of adding a second one. get_custom_values and export_account now show each custom value's value. The clinic preset says privacy instead of naming a specific privacy law.
266
+
267
+ **The cockpit keeps up while you work (part of the cockpit plan).** A step that finishes while the intake is open now shows as finished straight away, instead of looking like it is still running. Sections you open on the Client builds page now stay open while the page refreshes.
268
+
269
+ **What to try:** switch on a workflow that has a known error and see it named; ask Claude to change one step of a live workflow; run Workflow Audit Pro on a sandbox client and try a fix, then Undo; pick a brand for a report and save it as a PDF; ask Claude to run the Secret Shopper on a prospect's site; add a client's staff from the new step before Intake.
10
270
 
11
271
  ## 3.88.2: a workflow waiting on a calendar is never switched on
12
272
 
package/README.md CHANGED
@@ -113,7 +113,7 @@ Open Claude Desktop → **Settings...** → **Developer** → **Edit Config**. T
113
113
  ```json
114
114
  {
115
115
  "mcpServers": {
116
- "ghl": {
116
+ "GHL Command": {
117
117
  "command": "npx",
118
118
  "args": ["-y", "@elitedcs/ghl-mcp@latest"]
119
119
  }
@@ -121,7 +121,9 @@ Open Claude Desktop → **Settings...** → **Developer** → **Edit Config**. T
121
121
  }
122
122
  ```
123
123
 
124
- If it already has other tools in it, do **not** paste over them — add only the `"ghl": { ... }` entry inside your existing `"mcpServers"` object. Save, then fully quit and reopen Claude. (Unsure? Run `npx -y @elitedcs/ghl-mcp@latest cli install --dry-run` to preview exactly what would change, or `--print-only` to get the merged file printed for you.)
124
+ Older installs show it as ghl; that is the same thing.
125
+
126
+ If it already has other tools in it, do **not** paste over them — add only the `"GHL Command": { ... }` entry inside your existing `"mcpServers"` object. Save, then fully quit and reopen Claude. (Unsure? Run `npx -y @elitedcs/ghl-mcp@latest cli install --dry-run` to preview exactly what would change, or `--print-only` to get the merged file printed for you.)
125
127
 
126
128
  </details>
127
129
 
@@ -448,7 +450,7 @@ Highlights (full guide: [`docs/HEADLESS.md`](docs/HEADLESS.md)):
448
450
  | `create_workflow` | Create a new workflow from scratch (starts as draft) |
449
451
  | `update_workflow_actions` | Add, edit, or remove actions, triggers, and branches in an existing workflow |
450
452
  | `delete_workflow_full` | Permanently delete a workflow |
451
- | `publish_workflow` | Publish a draft workflow to make it active |
453
+ | `publish_workflow` | Publish a draft workflow to make it active. Runs the `validate_workflow` checks on the live version first and refuses if they find any error |
452
454
  | `get_trigger_registry` | Discover GHL's marketplace trigger apps (Zoom, WooCommerce, Shopify, etc.) and their available trigger templates |
453
455
  | `validate_workflow` | Pre-flight validation: scans every action and trigger for references to pipelines, stages, custom fields, users, and other workflows; verifies each ID exists. Catches the silent-failure bug where invalid IDs make GHL skip subsequent actions |
454
456
  | `build_goal_event` | Build a correctly-shaped goal-event node. Goals sit inline in the action chain — when the goal condition fires (e.g., review_request_clicked), the configured action runs (default: exit the workflow). Returns a `workflow_goal` node ready to wire into your actions array |
@@ -878,12 +880,12 @@ How the deny-list behaves:
878
880
  |---|---|---|
879
881
  | Only `setup_ghl_mcp` shows up; no other tools | Bootstrap mode — credentials not yet activated | Run `setup_ghl_mcp` with all four required fields, then restart Claude |
880
882
  | MCP tools don't appear (CLI) | Server not registered | Run `claude mcp add --scope user -t stdio ghl -- npx -y @elitedcs/ghl-mcp@latest` |
881
- | MCP tools don't appear (Desktop App) | Config missing or wrong | Check `~/Library/Application Support/Claude/claude_desktop_config.json` has a `ghl` entry under `mcpServers` (see Quick Start above for the exact block) |
883
+ | MCP tools don't appear (Desktop App) | Config missing or wrong | Check `~/Library/Application Support/Claude/claude_desktop_config.json` has a `GHL Command` entry under `mcpServers` (see Quick Start above for the exact block) |
882
884
  | MCP tools don't appear (Desktop App) | App not restarted | Quit the Claude app completely (Cmd+Q on Mac) and reopen it |
883
885
  | `License key not found` | Wrong email or license_key | Both must match exactly what we have on file. Check spam for the welcome email. |
884
886
  | `License key already activated on 3 devices` | Activation limit hit | Email `support@ghlcommand.com` to reset |
885
887
  | `locationId is required` | Tool needs a location ID | Set `GHL_LOCATION_ID` in your env, or tell Claude which location to use |
886
- | `GHL API Error 401` | Invalid or expired key | Generate a new API key in GHL > Settings > Integrations |
888
+ | `GHL API Error 401` | Invalid or expired key | Create a new key in the sub-account at Settings → Private Integrations (under Other settings) → Create New Integration |
887
889
  | `GHL API Error 403` | Key from wrong sub-account | Create a new Private Integration **inside the correct sub-account** |
888
890
  | `GHL API Error 403` (alt) | Missing permission scope | Edit your Private Integration in GHL and enable the required scope |
889
891
  | `GHL API Error 422` | Invalid request data | Check the error message for which field is wrong |
@@ -897,7 +899,7 @@ Built by **[Elite DCs, LLC](https://elitedcs.com)** — a digital marketing and
897
899
 
898
900
  **Tech stack:** TypeScript, Node.js, esbuild, MCP SDK, Zod, GHL API v2, Firebase Auth
899
901
 
900
- **Version:** 3.88.3
902
+ **Version:** 3.89.0-beta.10
901
903
 
902
904
  ---
903
905