@elitedcs/ghl-mcp 3.70.0 → 3.72.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +55 -0
- package/README.md +8 -5
- package/dist/capture-helper.js +10 -1
- package/dist/index.js +7479 -1552
- package/guide/guide.html +2 -1
- package/package.json +2 -2
- package/skills/blueprint/SKILL.md +2 -0
- package/skills/blueprint/examples/medspa-approval-view.md +58 -53
- package/skills/blueprint/examples/medspa-brief.json +70 -8
- package/skills/blueprint/examples/medspa-build-plan.json +1435 -123
- package/skills/blueprint/examples/medspa-dry-run-report.md +2 -0
- package/skills/blueprint/examples/sample-approval-view.md +20 -61
- package/skills/blueprint/examples/sample-brief.json +95 -7
- package/skills/blueprint/examples/sample-build-plan.json +1448 -119
- package/skills/blueprint/examples/validate-plan.cjs +195 -13
- package/skills/blueprint/presets/clinic-launch-a2p.preset.json +1 -0
- package/skills/blueprint/presets/clinic.md +60 -0
- package/skills/blueprint/presets/clinic.preset.json +1737 -0
- package/skills/blueprint/presets/coach.md +58 -0
- package/skills/blueprint/presets/coach.preset.json +1723 -0
- package/skills/blueprint/presets/ecommerce.md +54 -0
- package/skills/blueprint/presets/ecommerce.preset.json +1287 -0
- package/skills/blueprint/presets/generic-client.md +49 -27
- package/skills/blueprint/presets/generic-client.preset.json +1552 -122
- package/skills/blueprint/presets/local-service.md +58 -0
- package/skills/blueprint/presets/local-service.preset.json +1733 -0
- package/skills/blueprint/presets/med-spa.md +47 -48
- package/skills/blueprint/presets/med-spa.preset.json +1557 -111
- package/skills/blueprint/references/brief-schema.md +48 -1
- package/skills/blueprint/references/build-plan-schema.md +66 -5
- package/skills/blueprint/references/copy-guide.md +167 -0
- package/skills/blueprint/references/intake-question-set.md +64 -3
- package/skills/blueprint/references/preset-format.md +97 -51
- package/templates/action-schemas.json +12 -0
package/guide/guide.html
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta charset="utf-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
6
|
<title>GHL Command — User Guide</title>
|
|
7
|
-
<!-- guides-hash:
|
|
7
|
+
<!-- guides-hash: b9bdfc633583b466 -->
|
|
8
8
|
<style>
|
|
9
9
|
/* Deliberately light in every environment, including a dark-mode OS. This is a
|
|
10
10
|
reference document people read at length, print, and save to PDF, and a page
|
|
@@ -671,6 +671,7 @@ When it saves, list the templates in the account so I can see it landed, and tel
|
|
|
671
671
|
<div class="gsec"><h2>Good to know</h2>
|
|
672
672
|
<ul>
|
|
673
673
|
<li>Templates and workflow emails are different things. A template is a reusable asset. A workflow email is written into a specific step. Ask for a template when several sequences will use the same email.</li>
|
|
674
|
+
<li>Templates are created in the editor's own format (vibe-editor) so they open and edit in Marketing → Emails → Templates. A template made the old way (type "html") looks fine in its preview but shows GHL's sample when opened, and opening it replaces the saved copy with that sample.</li>
|
|
674
675
|
<li>Claude writes the email in your voice if you give it one. Paste an email you have actually sent and say "write like this".</li>
|
|
675
676
|
<li>Actually sending a campaign to a list is done in GHL. What you get here is the writing, the template, and the housekeeping.</li>
|
|
676
677
|
<li>Archiving beats deleting. An archived template stops cluttering the list without breaking anything that referenced it.</li>
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elitedcs/ghl-mcp",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.72.0",
|
|
4
4
|
"mcpName": "io.github.drjerryrelth/ghl-command",
|
|
5
|
-
"description": "GoHighLevel MCP Server for Claude.
|
|
5
|
+
"description": "GoHighLevel MCP Server for Claude. 247 tools \u2014 full CRM, automation, marketing control, account-wide workflow audit, live funnel-capture verification, and the only programmatic GHL workflow builder, now multi-tenant across client accounts.",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"bin": {
|
|
8
8
|
"ghl-mcp": "dist/index.js"
|
|
@@ -134,6 +134,8 @@ For each external funnel, run the lane in `references/external-funnel.md` after
|
|
|
134
134
|
- Do not clone or redistribute Agency OS / Business OS. Detect, integrate, credit.
|
|
135
135
|
- **Re-runs reuse the saved plan.** `apply_build_plan` `mode:"execute"` saves the approved plan for that sub-account on the operator's machine. To re-run (after a halt, or to finish what a first pass skipped), call `apply_build_plan` with `useSavedPlan:true` and NO `plan` — never re-author a plan for an account that already has one: a differently named plan is refused, because never-clobber binds what matches by name and CREATES everything else (a second pipeline beside the first). Only when the operator has approved a genuinely new plan for that account, pass the new plan with `replaceSavedPlan:true`.
|
|
136
136
|
- The plan never executes itself. Stop at approval. After approval, GHL-native staging runs only via `apply_build_plan` (confirm the account first); the external funnel lane (STEP 10) runs only on an informed yes through the capability gate.
|
|
137
|
+
- **A gap never closes itself.** `apply_build_plan` answers with `missingSteps` whenever a step the plan asks for is not in a workflow that already existed — most often a step an earlier run could not build (an "Assign to user" step, which GoHighLevel refuses until a real staff member exists). Blueprint never adds a step to a workflow that already exists, so the operator adds it in the Workflow Builder. Report every entry, every run, and never say a build is complete while `missingSteps` has anything in it: a re-run that says "refreshed in place" has NOT closed a gap an earlier run reported.
|
|
138
|
+
- **A build can be undone.** Every `mode:"execute"` is recorded and answers with a `runId`. If a build went to the wrong sub-account, or the client cancels mid-onboarding, `revert_build` removes what that run CREATED and only that — anything the build bound to (a pipeline, tag, calendar or workflow that was already in the account) is never touched. Run it with no `confirm` first: it writes nothing and returns a plain-English list of exactly what would go. Show that list to the operator, and only on their explicit yes run it again with `confirm:"DELETE"`. Staff users and text-message templates are never removed automatically — the report says where to remove them by hand. Never offer the undo unprompted after a build that worked; it is a deliberate move, not a cleanup habit.
|
|
137
139
|
- **External funnels are customer-managed, zero product involvement in their accounts.** The product generates, scaffolds, hands over verified wiring, and verifies — it never deploys for the user, never asks for or stores their token, never touches their host/GHL account beyond what the operator's own session does. The user owns hosting, the secret, uptime, and DNS.
|
|
138
140
|
- **External forms send verified GHL custom-field IDs, never name-guessed keys** (the silent-drop class). A funnel is not "done" until `verify_funnel` passes on the real branded production URL plus a burner booking — never on a thank-you page.
|
|
139
141
|
|
|
@@ -1,92 +1,97 @@
|
|
|
1
1
|
# Build Plan — Glow Aesthetics
|
|
2
2
|
|
|
3
|
-
A full lead-to-member account for your med spa: a pipeline that follows your own sales
|
|
4
|
-
stages, the fields and tags to track every lead, a booking calendar, an A2P-compliant
|
|
5
|
-
inquiry form and funnel, and a complete email + text follow-up system that stops the
|
|
6
|
-
moment a client replies. Below is what GHL Command builds for you automatically, and the
|
|
7
|
-
short list of things only you can do, in order.
|
|
3
|
+
A full lead-to-member account for your med spa, at Tier 1 v2 depth: your staff as users, a pipeline that follows your own sales stages, the fields and tags to track every lead, a booking calendar assigned to a real person, an A2P-compliant inquiry form and funnel, 32 send-ready messages in your voice, and eight workflows that keep working for 60 days without anyone touching them. Below is what GHL Command builds for you automatically, and the short list of things only you can do, in order.
|
|
8
4
|
|
|
9
|
-
Generated from the **Med Spa** preset (
|
|
5
|
+
Generated from the **Med Spa** preset (v2.0.0) · brief source: intake_form · schema v0.1.
|
|
10
6
|
This is a plan for your review. Nothing is built yet. Edit anything below, then approve.
|
|
11
7
|
|
|
12
|
-
>
|
|
13
|
-
> dry_run → 40 objects, 28 actions auto-built, 0 needing copy, 0 needing a manual GHL step,
|
|
14
|
-
> every workflow trigger auto-built. See [`medspa-dry-run-report.md`](medspa-dry-run-report.md).
|
|
8
|
+
> Validated 2026-08-26: `validate_build_plan` (v2 rules) → valid, 137 refs, 0 errors, 0 warnings; `examples/validate-plan.cjs` → valid. A live `apply_build_plan` dry-run of the v2 plan has not been captured yet; the v1 proof is in [`medspa-dry-run-report.md`](medspa-dry-run-report.md).
|
|
15
9
|
|
|
16
10
|
---
|
|
17
11
|
|
|
18
12
|
## 1. GHL Command will build this automatically (once you approve)
|
|
19
13
|
|
|
14
|
+
**Users (2)** — from your staff answers
|
|
15
|
+
- Dana Reyes (admin) — gets every new-lead alert and every call task; on the consult calendar.
|
|
16
|
+
- Priya Nair (user).
|
|
17
|
+
|
|
20
18
|
**Pipeline**
|
|
21
|
-
-
|
|
19
|
+
- "Glow Aesthetics Patient Journey" with 7 stages: New Lead → Contacted → Consult Booked → Showed → Treated → Member / Rebooked → Lost.
|
|
22
20
|
|
|
23
|
-
**Custom fields (
|
|
24
|
-
- Lead Source (dropdown)
|
|
25
|
-
- Service Interest (multi-select: Injectables / Tox, Dermal Filler, Facials / Skin, Membership, Weight / Body)
|
|
26
|
-
- Appointment Date (date)
|
|
27
|
-
- Consult Deposit Paid (checkbox)
|
|
28
|
-
- Estimated Lifetime Value (monetary)
|
|
21
|
+
**Custom fields (6)**
|
|
22
|
+
- Lead Source (dropdown), Service Interest (multi-select), Top Concern (text, filled by staff from the first reply), Appointment Date, Consult Deposit Paid (checkbox), Estimated Lifetime Value (monetary).
|
|
29
23
|
|
|
30
|
-
**Tags (
|
|
31
|
-
- Source:
|
|
32
|
-
- Lifecycle:
|
|
33
|
-
-
|
|
24
|
+
**Tags (24)**
|
|
25
|
+
- Source: website, instagram, facebook, google, referral, phone, other.
|
|
26
|
+
- Lifecycle: new-lead, contacted, nurturing, booked, showed, treated, member, lapsed, lost.
|
|
27
|
+
- Hand-off triggers: nurture-start, winback-start, missed-call, no-show.
|
|
28
|
+
- Interest: injectables, filler, facials, membership.
|
|
34
29
|
|
|
35
|
-
**Custom values (
|
|
36
|
-
-
|
|
30
|
+
**Custom values (4)** — every message reads from these, so the copy stays right when details change
|
|
31
|
+
- business_name (Glow Aesthetics), business_phone (filled once your number exists), owner_first_name (Dana), booking_link (filled after you connect your calendar).
|
|
37
32
|
|
|
38
33
|
**Calendar**
|
|
39
|
-
- "
|
|
34
|
+
- "Consultation" (round-robin, Mon-Fri 9-5 default, 30-minute slots) assigned to Dana Reyes.
|
|
40
35
|
|
|
41
36
|
**Form**
|
|
42
37
|
- "Glow Aesthetics New Client Inquiry": First name, Last name, Email, Phone (required), plus Service Interest mapped to the custom field.
|
|
43
38
|
|
|
44
39
|
**Funnel**
|
|
45
|
-
- "Glow Aesthetics Lead Funnel": a Free Skin Assessment opt-in page (→ the inquiry form, with the A2P-compliant consent block) and a Thank You page (booking
|
|
46
|
-
|
|
47
|
-
**
|
|
48
|
-
-
|
|
49
|
-
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
-
|
|
53
|
-
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
- "
|
|
57
|
-
|
|
58
|
-
|
|
40
|
+
- "Glow Aesthetics Lead Funnel": a Free Skin Assessment opt-in page (→ the inquiry form, with the A2P-compliant consent block) and a Thank You page (booking widget). Page content is yours to fill from the funnel template — see Part 2.
|
|
41
|
+
|
|
42
|
+
**Message templates (15 emails + 17 texts)** — complete, send-ready, editable in GHL without opening a workflow
|
|
43
|
+
- Speed to Lead: instant email + text, 20-minute text, 3-hour email, next-day text.
|
|
44
|
+
- Missed call: instant text-back, 1-hour text.
|
|
45
|
+
- Lead Nurture: 6 emails + 5 texts across 31 days (refreshed vs overdone, what happens at the first visit, why we treat less, about the price, what waiting costs, the decision sheet; one-word question texts in between).
|
|
46
|
+
- Win-back: 3 emails + 2 texts across 31 days.
|
|
47
|
+
- Consult: confirmation email + text, 24-hour text + prep email, 2-hour text; no-show text + email, next-day text, day-4 email.
|
|
48
|
+
- _(Texts will not send until you have a number and A2P is approved — steps 1 and 4 below.)_
|
|
49
|
+
|
|
50
|
+
**Workflows (8)** _(all build DRAFT; you choose when to publish)_
|
|
51
|
+
- "Speed to Lead" (14 actions) — on inquiry → tag new lead, create the opportunity, assign the contact to Dana, instant text + email, alert Dana, create a "call now" task, wait 20 min → text, wait 3 h → email, wait 1 day → text, note, then hand off to Lead Nurture with the nurture-start tag. _(stops on reply)_
|
|
52
|
+
- "Missed Call Text-Back" (7 actions) — on an unanswered inbound call → text back within seconds, tag, alert Dana, call-back task, wait 1 h → text. _(stops on reply)_
|
|
53
|
+
- "Lead Nurture (30 days)" (28 actions, 11 touches, 31 days of waits) — give, give, ask; ends by tagging lapsed and handing off to Win-back. _(stops on reply)_
|
|
54
|
+
- "Replied - Stop & Route" (9 actions) — the moment a lead replies → pull them out of every sequence, note it, tag contacted, alert Dana, create a 15-minute reply task.
|
|
55
|
+
- "Win-back (30 days)" (13 actions, 5 touches, 31 days of waits) — one reason to come back per message; ends by tagging lost. _(stops on reply)_
|
|
56
|
+
- "Consult Booked - Confirm & Move" (8 actions) — on a confirmed consult → stop every sequence, tag booked, alert Dana, confirmation email + text, then move the opportunity to Consult Booked (create it there if none exists).
|
|
57
|
+
- "Consult Reminders" (5 actions) — 24 h before: text + prep email; 2 h before: text.
|
|
58
|
+
- "No-Show Rescue" (14 actions, 4 touches over 7 days) — on a no-show → tag, alert Dana, call task, same-day text + email, next-day text, day-4 email, then hand off to Win-back and move the card back to Contacted.
|
|
59
|
+
|
|
60
|
+
_Total: 99 workflow actions, 32 customer touches from inquiry to lost before the consult sequences. Every alert and task points at a named person._
|
|
59
61
|
|
|
60
62
|
---
|
|
61
63
|
|
|
62
64
|
## 2. You must do these yourself, in this order
|
|
63
65
|
|
|
64
|
-
1. **
|
|
65
|
-
- What:
|
|
66
|
-
- Why now:
|
|
66
|
+
1. **Get a phone number in GoHighLevel** — **You (in GHL)**
|
|
67
|
+
- What: Settings > Phone Numbers > Add Number, then paste it into the business_phone custom value.
|
|
68
|
+
- Why now: every text step and the missed-call text-back wait for it, and A2P registration needs it.
|
|
69
|
+
- Done when: a number shows under Phone Numbers and business_phone matches it.
|
|
70
|
+
|
|
71
|
+
2. **Confirm your business details** — **You (in GHL)**
|
|
72
|
+
- What: Settings > Custom Values: owner_first_name is pre-filled as "Dana"; confirm it and business_phone.
|
|
73
|
+
- Done when: neither value is blank.
|
|
74
|
+
|
|
75
|
+
3. **Connect your calendar (Google / Outlook)** — **You (in GHL)**
|
|
76
|
+
- What: open the Consultation calendar > Connections and authorize Google or Outlook, then copy the booking link into the booking_link custom value.
|
|
77
|
+
- Why now: a login only you can approve; every email and text with a booking link reads this value.
|
|
67
78
|
- Done when: the calendar shows a connected account and the booking link resolves.
|
|
68
79
|
|
|
69
|
-
|
|
80
|
+
4. **Register A2P 10DLC (so texts can send)** — **You (external: carrier)**
|
|
70
81
|
- What: submit your A2P brand and campaign through the GHL Trust Center. Save your submission package first.
|
|
71
|
-
- Why now: the
|
|
82
|
+
- Why now: the seven SMS-bearing workflows stay DRAFT and their texts stay dark until A2P is approved (7-14 day review).
|
|
72
83
|
- Done when: the A2P campaign shows submitted/approved.
|
|
73
84
|
|
|
74
|
-
|
|
75
|
-
- What: fill the opt-in and thank-you page content from the funnel template
|
|
76
|
-
- Why now: GHL Command builds the funnel and named steps; the page content and design are yours (and the A2P consent block must be present before A2P review).
|
|
85
|
+
5. **Design + populate your funnel pages** — **You (in GHL)**
|
|
86
|
+
- What: fill the opt-in and thank-you page content from the funnel template. The opt-in page MUST carry the A2P consent checkbox (not pre-checked), your legal business name + mailing address, and Privacy/Terms links.
|
|
77
87
|
- Done when: both pages are published with the required A2P, SEO, and FAQ elements.
|
|
78
88
|
|
|
79
|
-
|
|
89
|
+
6. **Connect Stripe (to take payment)** — **You (external: Stripe)**
|
|
80
90
|
- What: connect Stripe in Payments > Integrations and create your consult-deposit and membership products.
|
|
81
|
-
- Why now: the funnel is built, but the money connection is yours to authorize.
|
|
82
91
|
- Done when: Stripe shows connected and your products exist.
|
|
83
92
|
|
|
84
|
-
_Not included (not needed for this build): an
|
|
93
|
+
_Not included (not needed for this build): an add-staff step (two staff came from your intake), an email-domain step (email sending is already set up)._
|
|
85
94
|
|
|
86
95
|
---
|
|
87
96
|
|
|
88
|
-
|
|
89
|
-
`apply_build_plan` (confirm the account first). Each manual step is verified before the steps
|
|
90
|
-
that depend on it run, so nothing is ever wired to something that does not exist yet. You
|
|
91
|
-
will be asked, before any workflow goes live, whether to publish now or leave them DRAFT for
|
|
92
|
-
review — they default to DRAFT._
|
|
97
|
+
_When you approve, the automatic list above is staged via `apply_build_plan` (dry run first, then execute; confirm the account first). Each manual step is verified before the steps that depend on it run. You will be asked, before any workflow goes live, whether to publish now or leave them DRAFT for review — they default to DRAFT. The 32 messages are yours to edit in Marketing > Templates and Conversations > Snippets before you publish; the workflows read them by name._
|
|
@@ -16,21 +16,44 @@
|
|
|
16
16
|
"offer": {
|
|
17
17
|
"summary": "Injectables, dermal filler, and medical facials for first-time and returning clients, plus a membership for regulars.",
|
|
18
18
|
"pricePoints": [
|
|
19
|
-
{
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
{
|
|
20
|
+
"name": "New client consult",
|
|
21
|
+
"price": "19"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"name": "Tox session",
|
|
25
|
+
"price": "350"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"name": "Glow Membership",
|
|
29
|
+
"price": "149/mo"
|
|
30
|
+
}
|
|
22
31
|
],
|
|
23
32
|
"leadMagnet": "Free skin assessment",
|
|
24
33
|
"avgDealValue": "350"
|
|
25
34
|
},
|
|
26
35
|
"audience": {
|
|
27
36
|
"ideal": "Women 30-55 in North Scottsdale who want to look refreshed, not overdone",
|
|
28
|
-
"painPoints": [
|
|
29
|
-
|
|
37
|
+
"painPoints": [
|
|
38
|
+
"early signs of aging",
|
|
39
|
+
"not knowing who to trust with their face"
|
|
40
|
+
],
|
|
41
|
+
"objections": [
|
|
42
|
+
"price",
|
|
43
|
+
"fear of looking overdone or fake"
|
|
44
|
+
]
|
|
30
45
|
},
|
|
31
46
|
"goal": {
|
|
32
47
|
"primary": "book appointments",
|
|
33
|
-
"salesStages": [
|
|
48
|
+
"salesStages": [
|
|
49
|
+
"New Lead",
|
|
50
|
+
"Contacted",
|
|
51
|
+
"Consult Booked",
|
|
52
|
+
"Showed",
|
|
53
|
+
"Treated",
|
|
54
|
+
"Member / Rebooked",
|
|
55
|
+
"Lost"
|
|
56
|
+
],
|
|
34
57
|
"bookingNeeded": true,
|
|
35
58
|
"followUpStyle": "high-touch"
|
|
36
59
|
},
|
|
@@ -40,7 +63,11 @@
|
|
|
40
63
|
"a2pStatus": "not started",
|
|
41
64
|
"payment": "Stripe not connected",
|
|
42
65
|
"calendarConnected": false,
|
|
43
|
-
"social": [
|
|
66
|
+
"social": [
|
|
67
|
+
"instagram",
|
|
68
|
+
"facebook"
|
|
69
|
+
],
|
|
70
|
+
"hasPhoneNumber": "no"
|
|
44
71
|
},
|
|
45
72
|
"assets": {
|
|
46
73
|
"existingPipeline": "no",
|
|
@@ -48,5 +75,40 @@
|
|
|
48
75
|
"brand": "logo + navy/gold palette, domain ready",
|
|
49
76
|
"notes": "Solo operator for now; wants speed-to-lead and a no-show win-back."
|
|
50
77
|
},
|
|
51
|
-
"flags": [
|
|
78
|
+
"flags": [
|
|
79
|
+
"needs_a2p",
|
|
80
|
+
"stripe_not_connected",
|
|
81
|
+
"calendar_oauth_needed",
|
|
82
|
+
"phone_number_needed"
|
|
83
|
+
],
|
|
84
|
+
"team": {
|
|
85
|
+
"staff": [
|
|
86
|
+
{
|
|
87
|
+
"name": "Dana Reyes",
|
|
88
|
+
"email": "dana@example.com",
|
|
89
|
+
"role": "Owner / Injector",
|
|
90
|
+
"mobile": "555-010-0100"
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"name": "Priya Nair",
|
|
94
|
+
"email": "priya@example.com",
|
|
95
|
+
"role": "Front desk"
|
|
96
|
+
}
|
|
97
|
+
],
|
|
98
|
+
"notifyName": "Dana Reyes",
|
|
99
|
+
"callsName": "the owner"
|
|
100
|
+
},
|
|
101
|
+
"calendars": [
|
|
102
|
+
{
|
|
103
|
+
"name": "Consultation",
|
|
104
|
+
"type": "round_robin",
|
|
105
|
+
"staffNames": [
|
|
106
|
+
"Dana Reyes"
|
|
107
|
+
]
|
|
108
|
+
}
|
|
109
|
+
],
|
|
110
|
+
"voice": {
|
|
111
|
+
"threeWords": "warm, direct, unhurried",
|
|
112
|
+
"signatureLine": "You will never look overdone here."
|
|
113
|
+
}
|
|
52
114
|
}
|