@elitedcs/ghl-mcp 3.89.0-beta.4 → 3.89.0-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,111 @@
1
1
  # Changelog
2
2
 
3
+ ## 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
4
+
5
+ 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.
6
+
7
+ **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.
8
+
9
+ **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.
10
+
11
+ **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.
12
+
13
+ **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.
14
+
15
+ **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.
16
+
17
+ **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.
18
+
19
+ **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.
20
+
21
+ **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 day-before reminder already asks clients to come 10 minutes early, so the intake's prep question now asks for anything besides that, which stops the reminder saying it twice.
22
+
23
+ **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.
24
+
25
+ **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.
26
+
27
+ **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.
28
+
29
+ **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.
30
+
31
+ **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.
32
+
33
+ **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.
34
+
35
+ **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.
36
+
37
+ **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.
38
+
39
+ **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.
40
+
41
+ **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."
42
+
43
+ **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.
44
+
45
+ **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.
46
+
47
+ **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.
48
+
49
+ **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.
50
+
51
+ **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.
52
+
53
+ **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.
54
+
55
+ **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.
56
+
57
+ **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.
58
+
59
+ **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.
60
+
61
+ **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.
62
+
63
+ **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."
64
+
65
+ **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.
66
+
67
+ **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.
68
+
69
+ **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)".
70
+
71
+ **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.
72
+
73
+ **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.
74
+
75
+ **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.
76
+
77
+ **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.
78
+
79
+ **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.
80
+
81
+ **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.
82
+
83
+ **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.
84
+
85
+ **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.
86
+
87
+ **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.
88
+
89
+ **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.
90
+
91
+ **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.
92
+
93
+ **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.
94
+
95
+ **"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."
96
+
97
+ **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.
98
+
99
+ **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.
100
+
101
+ **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.
102
+
103
+ **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.
104
+
105
+ **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".
106
+
107
+ **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.
108
+
3
109
  ## 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
4
110
 
5
111
  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.
package/README.md CHANGED
@@ -899,7 +899,7 @@ Built by **[Elite DCs, LLC](https://elitedcs.com)** — a digital marketing and
899
899
 
900
900
  **Tech stack:** TypeScript, Node.js, esbuild, MCP SDK, Zod, GHL API v2, Firebase Auth
901
901
 
902
- **Version:** 3.89.0-beta.4
902
+ **Version:** 3.89.0-beta.5
903
903
 
904
904
  ---
905
905