@elitedcs/ghl-mcp 3.66.1 → 3.66.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +32 -0
- package/dist/index.js +51 -35
- package/guide/guide.html +67 -6
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,37 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 3.66.2 — an export could describe the wrong client
|
|
4
|
+
|
|
5
|
+
If you asked for one client's account and the server had been started pointing at
|
|
6
|
+
another, part of the report came from the other account. Not an error, not a
|
|
7
|
+
warning: the workflows and funnels of a different business, sitting under the
|
|
8
|
+
name of the one you asked about.
|
|
9
|
+
|
|
10
|
+
It happened because the export asked two different places for "which account",
|
|
11
|
+
and only one of them listened to the account you named. That is now a single
|
|
12
|
+
answer. If the two ever disagree, the export refuses those sections and tells you
|
|
13
|
+
which account it is actually holding and how to switch, rather than answering for
|
|
14
|
+
the wrong one. Everything else in the report was always correct.
|
|
15
|
+
|
|
16
|
+
Every section also explains itself when it fails now. They used to all say
|
|
17
|
+
"Error fetching", which told you nothing and hid a real permissions error behind
|
|
18
|
+
what looked like a hiccup.
|
|
19
|
+
|
|
20
|
+
**New guide: Clone and rebrand a site.** Point Claude at a page you have the
|
|
21
|
+
rights to, and get it rebuilt for your client with their name, colours and
|
|
22
|
+
contact details, plus a review list of everything still belonging to whoever
|
|
23
|
+
owned the original: where the leads and payments still go, other people's
|
|
24
|
+
testimonials, claims that came along with the copy. Proven against a real site
|
|
25
|
+
before it was written.
|
|
26
|
+
|
|
27
|
+
That guide is deliberately separate from building a page inside GHL. Cloning an
|
|
28
|
+
existing page and composing a new one are different jobs that fail in different
|
|
29
|
+
ways, and one guide covering both served neither.
|
|
30
|
+
|
|
31
|
+
**Blog guide parked.** Reading a list of blog posts does not work — the address
|
|
32
|
+
it calls does not exist, on any account. Rather than ship a guide that depends on
|
|
33
|
+
it, the blog tools are marked as not guide material until that is fixed.
|
|
34
|
+
|
|
3
35
|
## 3.66.1 — the tool count was wrong, and so was the thing that checked it
|
|
4
36
|
|
|
5
37
|
GHL Command has served 239 tools since v3.60.0. Every place we stated the number
|
package/dist/index.js
CHANGED
|
@@ -2854,7 +2854,7 @@ var require_package = __commonJS({
|
|
|
2854
2854
|
"package.json"(exports2, module2) {
|
|
2855
2855
|
module2.exports = {
|
|
2856
2856
|
name: "@elitedcs/ghl-mcp",
|
|
2857
|
-
version: "3.66.
|
|
2857
|
+
version: "3.66.2",
|
|
2858
2858
|
mcpName: "io.github.drjerryrelth/ghl-command",
|
|
2859
2859
|
description: "GoHighLevel MCP Server for Claude. 239 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.",
|
|
2860
2860
|
main: "dist/index.js",
|
|
@@ -13691,8 +13691,22 @@ var import_zod46 = require("zod");
|
|
|
13691
13691
|
function delay2(ms) {
|
|
13692
13692
|
return new Promise((resolve8) => setTimeout(resolve8, ms));
|
|
13693
13693
|
}
|
|
13694
|
-
function
|
|
13695
|
-
|
|
13694
|
+
function builderSectionAvailability(builderLocationId, requestedLocationId) {
|
|
13695
|
+
if (!builderLocationId) {
|
|
13696
|
+
return {
|
|
13697
|
+
usable: false,
|
|
13698
|
+
reason: "Not read: the workflow builder is not connected. Run enable_workflow_builder to add Firebase credentials, then export again."
|
|
13699
|
+
};
|
|
13700
|
+
}
|
|
13701
|
+
if (builderLocationId !== requestedLocationId) {
|
|
13702
|
+
return {
|
|
13703
|
+
usable: false,
|
|
13704
|
+
reason: `Not read: the workflow builder is connected to a DIFFERENT sub-account (${builderLocationId}), not the one being exported (${requestedLocationId}). Reading it would describe the wrong account. Run switch_location to ${requestedLocationId} and export again.`
|
|
13705
|
+
};
|
|
13706
|
+
}
|
|
13707
|
+
return { usable: true };
|
|
13708
|
+
}
|
|
13709
|
+
function registerAccountExportTools(server2, client, registry2, builderClient) {
|
|
13696
13710
|
server2.tool(
|
|
13697
13711
|
"export_account",
|
|
13698
13712
|
"Export a complete inventory of the GHL sub-account: location info, contacts (count + sample), pipelines with stages, workflows (with full actions if builder auth is configured), funnels with pages, forms, custom fields, custom values, tags, calendars, and users. Returns a comprehensive JSON report for auditing or backup.",
|
|
@@ -13709,8 +13723,8 @@ function registerAccountExportTools(server2, client, registry2) {
|
|
|
13709
13723
|
};
|
|
13710
13724
|
try {
|
|
13711
13725
|
report.location = await client.get(`/locations/${locId}`);
|
|
13712
|
-
} catch {
|
|
13713
|
-
report.location =
|
|
13726
|
+
} catch (e) {
|
|
13727
|
+
report.location = `Error fetching: ${errorMessage(e)}`;
|
|
13714
13728
|
}
|
|
13715
13729
|
await delay2(100);
|
|
13716
13730
|
try {
|
|
@@ -13724,36 +13738,38 @@ function registerAccountExportTools(server2, client, registry2) {
|
|
|
13724
13738
|
total: typeof meta.total === "number" ? meta.total : contactList.length,
|
|
13725
13739
|
sample: includeContacts ? contactList : contactList.slice(0, 1)
|
|
13726
13740
|
};
|
|
13727
|
-
} catch {
|
|
13728
|
-
report.contacts =
|
|
13741
|
+
} catch (e) {
|
|
13742
|
+
report.contacts = `Error fetching: ${errorMessage(e)}`;
|
|
13729
13743
|
}
|
|
13730
13744
|
await delay2(100);
|
|
13731
13745
|
try {
|
|
13732
13746
|
report.pipelines = await client.get("/opportunities/pipelines", {
|
|
13733
13747
|
params: { locationId: locId }
|
|
13734
13748
|
});
|
|
13735
|
-
} catch {
|
|
13736
|
-
report.pipelines =
|
|
13749
|
+
} catch (e) {
|
|
13750
|
+
report.pipelines = `Error fetching: ${errorMessage(e)}`;
|
|
13737
13751
|
}
|
|
13738
13752
|
await delay2(100);
|
|
13739
13753
|
try {
|
|
13740
13754
|
report.workflows = await client.get("/workflows/", {
|
|
13741
13755
|
params: { locationId: locId }
|
|
13742
13756
|
});
|
|
13743
|
-
} catch {
|
|
13744
|
-
report.workflows =
|
|
13757
|
+
} catch (e) {
|
|
13758
|
+
report.workflows = `Error fetching: ${errorMessage(e)}`;
|
|
13745
13759
|
}
|
|
13746
13760
|
await delay2(100);
|
|
13747
|
-
|
|
13761
|
+
const builderUse = builderSectionAvailability(builderClient?.locationId, locId);
|
|
13762
|
+
if (builderUse.usable && builderClient) {
|
|
13748
13763
|
try {
|
|
13749
|
-
|
|
13750
|
-
|
|
13751
|
-
|
|
13752
|
-
report.workflowsFull = "Error fetching (builder auth may have expired)";
|
|
13764
|
+
report.workflowsFull = await builderClient.listWorkflows(50, 0);
|
|
13765
|
+
} catch (e) {
|
|
13766
|
+
report.workflowsFull = `Error fetching: ${errorMessage(e)}`;
|
|
13753
13767
|
}
|
|
13754
13768
|
await delay2(100);
|
|
13769
|
+
} else {
|
|
13770
|
+
report.workflowsFull = builderUse.reason;
|
|
13755
13771
|
}
|
|
13756
|
-
if (builderClient) {
|
|
13772
|
+
if (builderUse.usable && builderClient) {
|
|
13757
13773
|
try {
|
|
13758
13774
|
const headers = await builderClient.buildHeaders();
|
|
13759
13775
|
const res = await fetch(
|
|
@@ -13761,9 +13777,9 @@ function registerAccountExportTools(server2, client, registry2) {
|
|
|
13761
13777
|
{ headers }
|
|
13762
13778
|
);
|
|
13763
13779
|
if (res.ok) report.funnels = await res.json();
|
|
13764
|
-
else report.funnels =
|
|
13765
|
-
} catch {
|
|
13766
|
-
report.funnels =
|
|
13780
|
+
else report.funnels = `Error fetching: builder returned HTTP ${res.status}`;
|
|
13781
|
+
} catch (e) {
|
|
13782
|
+
report.funnels = `Error fetching: ${errorMessage(e)}`;
|
|
13767
13783
|
}
|
|
13768
13784
|
await delay2(100);
|
|
13769
13785
|
} else {
|
|
@@ -13771,50 +13787,50 @@ function registerAccountExportTools(server2, client, registry2) {
|
|
|
13771
13787
|
report.funnels = await client.get("/funnels/", {
|
|
13772
13788
|
params: { locationId: locId }
|
|
13773
13789
|
});
|
|
13774
|
-
} catch {
|
|
13775
|
-
report.funnels =
|
|
13790
|
+
} catch (e) {
|
|
13791
|
+
report.funnels = `Error fetching: ${errorMessage(e)}`;
|
|
13776
13792
|
}
|
|
13777
13793
|
}
|
|
13778
13794
|
try {
|
|
13779
13795
|
report.forms = await client.get("/forms/", {
|
|
13780
13796
|
params: { locationId: locId }
|
|
13781
13797
|
});
|
|
13782
|
-
} catch {
|
|
13783
|
-
report.forms =
|
|
13798
|
+
} catch (e) {
|
|
13799
|
+
report.forms = `Error fetching: ${errorMessage(e)}`;
|
|
13784
13800
|
}
|
|
13785
13801
|
await delay2(100);
|
|
13786
13802
|
try {
|
|
13787
13803
|
report.customFields = await client.get("/locations/" + locId + "/customFields");
|
|
13788
|
-
} catch {
|
|
13789
|
-
report.customFields =
|
|
13804
|
+
} catch (e) {
|
|
13805
|
+
report.customFields = `Error fetching: ${errorMessage(e)}`;
|
|
13790
13806
|
}
|
|
13791
13807
|
await delay2(100);
|
|
13792
13808
|
try {
|
|
13793
13809
|
report.customValues = await client.get("/locations/" + locId + "/customValues");
|
|
13794
|
-
} catch {
|
|
13795
|
-
report.customValues =
|
|
13810
|
+
} catch (e) {
|
|
13811
|
+
report.customValues = `Error fetching: ${errorMessage(e)}`;
|
|
13796
13812
|
}
|
|
13797
13813
|
await delay2(100);
|
|
13798
13814
|
try {
|
|
13799
13815
|
report.tags = await client.get("/locations/" + locId + "/tags");
|
|
13800
|
-
} catch {
|
|
13801
|
-
report.tags =
|
|
13816
|
+
} catch (e) {
|
|
13817
|
+
report.tags = `Error fetching: ${errorMessage(e)}`;
|
|
13802
13818
|
}
|
|
13803
13819
|
await delay2(100);
|
|
13804
13820
|
try {
|
|
13805
13821
|
report.calendars = await client.get("/calendars/", {
|
|
13806
13822
|
params: { locationId: locId }
|
|
13807
13823
|
});
|
|
13808
|
-
} catch {
|
|
13809
|
-
report.calendars =
|
|
13824
|
+
} catch (e) {
|
|
13825
|
+
report.calendars = `Error fetching: ${errorMessage(e)}`;
|
|
13810
13826
|
}
|
|
13811
13827
|
await delay2(100);
|
|
13812
13828
|
try {
|
|
13813
13829
|
report.users = await client.get("/users/", {
|
|
13814
13830
|
params: { locationId: locId }
|
|
13815
13831
|
});
|
|
13816
|
-
} catch {
|
|
13817
|
-
report.users =
|
|
13832
|
+
} catch (e) {
|
|
13833
|
+
report.users = `Error fetching: ${errorMessage(e)}`;
|
|
13818
13834
|
}
|
|
13819
13835
|
return jsonResponse(report);
|
|
13820
13836
|
} catch (error) {
|
|
@@ -19411,7 +19427,7 @@ function registerAllTools(server2, client, registry2, mcpVersion, env = process.
|
|
|
19411
19427
|
() => buildGatingReport(config3, KNOWN_MODULES, attemptedTools, registeredTools, outOfBand)
|
|
19412
19428
|
);
|
|
19413
19429
|
registerSnapshotTools(wrap(SNAPSHOTS_MODULE), client, registry2);
|
|
19414
|
-
registerAccountExportTools(wrap(ACCOUNT_EXPORT_MODULE), client, registry2);
|
|
19430
|
+
registerAccountExportTools(wrap(ACCOUNT_EXPORT_MODULE), client, registry2, builderClient);
|
|
19415
19431
|
registerLocationSwitcherTools(
|
|
19416
19432
|
wrap(LOCATION_SWITCHER_MODULE),
|
|
19417
19433
|
client,
|
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: eb1eef4169720b47 -->
|
|
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
|
|
@@ -226,7 +226,7 @@ body.app.reading #indexview{display:none}
|
|
|
226
226
|
<p class="eyebrow">GHL Command</p>
|
|
227
227
|
<h1>What do you want to get done?</h1>
|
|
228
228
|
<p class="sub">Every guide is a job, in plain English: open one, copy a prompt, paste it to Claude. A job is not a button, so one guide usually puts a dozen of GHL Command's tools to work at once. Every prompt marked "Proven live" was run against a real GoHighLevel account before it shipped.</p>
|
|
229
|
-
<div class="badges"><span class="badge on">
|
|
229
|
+
<div class="badges"><span class="badge on">29 guides</span><span class="badge">10 categories</span><span class="badge">Updates with the product</span></div>
|
|
230
230
|
</div></section>
|
|
231
231
|
<div class="shell">
|
|
232
232
|
<main>
|
|
@@ -247,10 +247,10 @@ body.app.reading #indexview{display:none}
|
|
|
247
247
|
<a class="card pub" href="#g-invoices-and-payments" data-k="invoice bill billing payment paid product price coupon promo code discount transactions orders revenue estimate"><h3>Bill a client and see what you were paid</h3><p>Products, invoices, coupons, and the money reads, without opening the billing screen.</p><div class="meta"><span class="pill full">Full license</span><span class="time">~5 minutes</span><span class="open">Open guide →</span></div></a>
|
|
248
248
|
<a class="card pub" href="#g-stand-up-a-pipeline" data-k="pipeline stages create new client setup opportunity sales process deal stages"><h3>Stand up a pipeline</h3><p>Stages, fields, and tags for a new client in one conversation.</p><div class="meta"><span class="pill full">Full license</span><span class="time">~10 minutes</span><span class="open">Open guide →</span></div></a>
|
|
249
249
|
<a class="card pub" href="#g-track-and-move-opportunities" data-k="opportunities deals move stage track stuck value won lost pipeline board"><h3>Track and move opportunities</h3><p>Move deals between stages, update values, and see what is stuck.</p><div class="meta"><span class="pill full">Full license</span><span class="time">~1 minute</span><span class="open">Open guide →</span></div></a></div></div>
|
|
250
|
-
<div class="catsec" id="cat-client-builds-and-pages"><h2>Client builds and pages</h2><div class="cards"><a class="card pub" href="#g-
|
|
250
|
+
<div class="catsec" id="cat-client-builds-and-pages"><h2>Client builds and pages</h2><div class="cards"><a class="card pub" href="#g-clone-and-rebrand-a-site" data-k="clone site copy rebrand landing page existing url duplicate make one like this mirror"><h3>Clone and rebrand a site</h3><p>Rebuild an existing page for a new client, with a rights check and a review report.</p><div class="meta"><span class="pill full">Full license</span><span class="time">~30 minutes</span><span class="open">Open guide →</span></div></a>
|
|
251
|
+
<a class="card pub" href="#g-snapshots-and-reusing-a-build" data-k="snapshot template reuse clone account new client share link import rollout onboarding"><h3>Reuse a build across client accounts</h3><p>Find your snapshots, share one, and know exactly what does not travel with it.</p><div class="meta"><span class="pill full">Full license</span><span class="time">~5 minutes</span><span class="open">Open guide →</span></div></a>
|
|
251
252
|
<button class="card locked" type="button" data-k="blueprint client account build intake onboarding new complete template" data-toast="This guide arrives in a product update — your install picks it up automatically." title="Coming in a product update." aria-label="The Blueprint: build a client account. Coming in a product update."><h3>The Blueprint: build a client account</h3><p>From intake form to a complete, reviewed account build you approve before it runs.</p><div class="meta"><span class="pill full">Full license</span><span class="time">~1 hour</span><span class="applabel">Coming in an update</span></div></button>
|
|
252
|
-
<button class="card locked" type="button" data-k="page studio compose website landing pages funnel" data-toast="This guide arrives in a product update — your install picks it up automatically." title="Coming in a product update." aria-label="Page Studio: pages and sites. Coming in a product update."><h3>Page Studio: pages and sites</h3><p>Compose landing pages and full sites that render correctly in GHL.</p><div class="meta"><span class="pill full">Full license</span><span class="time">~20 min</span><span class="applabel">Coming in an update</span></div></button>
|
|
253
|
-
<button class="card locked" type="button" data-k="clone site copy rebrand landing page existing url" data-toast="This guide arrives in a product update — your install picks it up automatically." title="Coming in a product update." aria-label="Clone and rebrand a site. Coming in a product update."><h3>Clone and rebrand a site</h3><p>Rebuild an existing page for a new client, with a rights check and a review report.</p><div class="meta"><span class="pill full">Full license</span><span class="time">~30 min</span><span class="applabel">Coming in an update</span></div></button></div></div>
|
|
253
|
+
<button class="card locked" type="button" data-k="page studio compose website landing pages funnel" data-toast="This guide arrives in a product update — your install picks it up automatically." title="Coming in a product update." aria-label="Page Studio: pages and sites. Coming in a product update."><h3>Page Studio: pages and sites</h3><p>Compose landing pages and full sites that render correctly in GHL.</p><div class="meta"><span class="pill full">Full license</span><span class="time">~20 min</span><span class="applabel">Coming in an update</span></div></button></div></div>
|
|
254
254
|
<div class="catsec" id="cat-booking-and-calendars"><h2>Booking and calendars</h2><div class="cards"><a class="card pub" href="#g-see-and-manage-appointments" data-k="appointments today schedule upcoming who is booked list no show cancel reschedule diary"><h3>See and manage appointments</h3><p>Who is booked today, this week, or for a specific client, in one ask.</p><div class="meta"><span class="pill free">Free plan</span><span class="time">~10 seconds</span><span class="open">Open guide →</span></div></a>
|
|
255
255
|
<a class="card pub" href="#g-set-up-a-booking-calendar" data-k="calendar create booking consult slots availability buffer appointment types schedule daily limit notice same day"><h3>Set up a booking calendar</h3><p>A consult calendar with the right slots, buffers, and the right person attached.</p><div class="meta"><span class="pill full">Full license</span><span class="time">~10 minutes</span><span class="open">Open guide →</span></div></a></div></div>
|
|
256
256
|
<div class="catsec" id="cat-email-and-sms"><h2>Email and SMS</h2><div class="cards"><a class="card pub" href="#g-build-email-templates" data-k="email template design create campaign builder reusable branded rename archive"><h3>Build email templates</h3><p>Reusable, branded templates created and edited without the GHL editor.</p><div class="meta"><span class="pill full">Full license</span><span class="time">~10 minutes</span><span class="open">Open guide →</span></div></a>
|
|
@@ -262,7 +262,7 @@ body.app.reading #indexview{display:none}
|
|
|
262
262
|
<div class="catsec" id="cat-forms-and-reviews"><h2>Forms and reviews</h2><div class="cards"><a class="card pub" href="#g-create-forms-and-read-submissions" data-k="form create intake survey fields submissions responses questions who filled in"><h3>Create forms and read submissions</h3><p>Intake forms built to spec, and submissions pulled into a clean summary.</p><div class="meta"><span class="pill full">Full license</span><span class="time">~10 minutes</span><span class="open">Open guide →</span></div></a>
|
|
263
263
|
<a class="card pub" href="#g-trigger-links" data-k="trigger links tracking click automations tracked link who clicked interest"><h3>Trigger links</h3><p>Create tracked links that fire automations when clicked.</p><div class="meta"><span class="pill full">Full license</span><span class="time">~2 minutes</span><span class="open">Open guide →</span></div></a>
|
|
264
264
|
<a class="card pub" href="#g-watch-your-reviews" data-k="reviews reputation ratings google stars new review negative feedback review link"><h3>Watch your reviews</h3><p>See new reviews across clients without logging into each account.</p><div class="meta"><span class="pill free">Free plan</span><span class="time">~30 seconds</span><span class="open">Open guide →</span></div></a></div></div>
|
|
265
|
-
<div class="catsec" id="cat-account-admin"><h2>Account admin</h2><div class="cards"><a class="card pub" href="#g-account-admin-basics" data-k="users phone numbers media export snapshot
|
|
265
|
+
<div class="catsec" id="cat-account-admin"><h2>Account admin</h2><div class="cards"><a class="card pub" href="#g-account-admin-basics" data-k="users phone numbers media export snapshot admin settings who has access compare"><h3>Account admin basics</h3><p>Users, phone numbers, media, and account exports without hunting through menus.</p><div class="meta"><span class="pill full">Full license</span><span class="time">~1 minute</span><span class="open">Open guide →</span></div></a>
|
|
266
266
|
<a class="card pub" href="#g-custom-fields-and-objects" data-k="custom fields objects records associations create field dropdown date field niche"><h3>Custom fields and objects</h3><p>The fields and records your niche needs, created correctly the first time.</p><div class="meta"><span class="pill full">Full license</span><span class="time">~5 minutes</span><span class="open">Open guide →</span></div></a></div></div>
|
|
267
267
|
<div class="noresults" id="noresults"><p><b>No guides match that yet.</b> Try a different word, like "contacts" or "workflow".</p></div>
|
|
268
268
|
</main>
|
|
@@ -817,6 +817,67 @@ Do not change any contact, and do not delete any list that is already there.</p>
|
|
|
817
817
|
</main></div>
|
|
818
818
|
</section>
|
|
819
819
|
|
|
820
|
+
<section class="gpage" id="g-clone-and-rebrand-a-site">
|
|
821
|
+
<div class="hero"><div class="hero-in">
|
|
822
|
+
<p class="eyebrow">GHL Command User Guide</p>
|
|
823
|
+
<h1>Clone and rebrand a site</h1>
|
|
824
|
+
<p class="sub">Rebuild an existing page for a new client, with a rights check and a review report.</p>
|
|
825
|
+
<div class="badges"><span class="badge on">Full license</span><span class="badge">~30 minutes</span><span class="badge">Client builds and pages</span></div>
|
|
826
|
+
</div></div>
|
|
827
|
+
<div class="shell"><main class="gview">
|
|
828
|
+
<a class="back" href="#top">← All guides</a>
|
|
829
|
+
<div class="gsec"><h2>What you'll get</h2>
|
|
830
|
+
<ul>
|
|
831
|
+
<li>A page rebuilt for your client from a page you point at, with their name, colours, contact details, and copy.</li>
|
|
832
|
+
<li>A rights question at the start that decides how the rebuild is done, and an honest answer either way.</li>
|
|
833
|
+
<li>A review report at the end listing everything that still belongs to whoever owned the original.</li>
|
|
834
|
+
</ul>
|
|
835
|
+
</div>
|
|
836
|
+
<div class="gsec"><h2>Say this</h2>
|
|
837
|
+
<div class="prompt"><q>Clone this page for my client: [paste the URL].</q><button class="copy" type="button">Copy</button></div>
|
|
838
|
+
<div class="prompt"><q>Rebuild this landing page for Radiance Med Spa.</q><button class="copy" type="button">Copy</button></div>
|
|
839
|
+
<div class="prompt"><q>What is left over from the original on this clone?</q><button class="copy" type="button">Copy</button></div>
|
|
840
|
+
</div>
|
|
841
|
+
<div class="gsec"><h2>The pro prompt</h2>
|
|
842
|
+
<div class="pro"><div class="pro-head"><b>The exact ask we run on real client accounts</b><span class="pill full">Proven live</span><button class="copy" type="button">Copy</button></div><p class="pro-body">Clone [https://example.com/their-landing-page] for my client [Radiance Med Spa].
|
|
843
|
+
My rights to that page: [I built it for a previous client of mine and reuse the layout].
|
|
844
|
+
Rebrand it: company name [Radiance Med Spa], phone [512-555-0100], email [hello@radiance.example], colours [deep green and cream].
|
|
845
|
+
Leave the page's words alone for now. I will ask for a rewrite separately.
|
|
846
|
+
Point the form and any booking button at my [MCP Testing] account, not at whatever it points at now.
|
|
847
|
+
When you are done, give me the review list of everything still belonging to the original owner: names, testimonials, photos of their people, any claim I cannot back up, and anywhere a lead or a payment would still go to them.</p></div>
|
|
848
|
+
<p class="gpara">Everything in [brackets] is yours to change. Answer the rights question honestly. It changes what gets built, and getting it wrong is your problem, not the tool's.</p>
|
|
849
|
+
</div>
|
|
850
|
+
<div class="gsec"><h2>What happens when you ask</h2>
|
|
851
|
+
<ol class="steps">
|
|
852
|
+
<li>Claude asks what rights you have to the page, and records your answer.</li>
|
|
853
|
+
<li>With rights, it makes a faithful rebuild. Without them, it takes the design system, meaning the layout logic, spacing, and type scale, and builds a fresh page on it instead of copying the original.</li>
|
|
854
|
+
<li>It swaps in your client's brand: name, contact details, colours. It does NOT rewrite the page's words.</li>
|
|
855
|
+
<li>It hands you a review list: everything it found that still belongs to the original owner and everything it could not be sure about.</li>
|
|
856
|
+
</ol>
|
|
857
|
+
</div>
|
|
858
|
+
<div class="gsec"><h2>Good to know</h2>
|
|
859
|
+
<ul>
|
|
860
|
+
<li><b>Changing the colours is riskier than it sounds.</b> A palette is a set of relationships, not a list of hex codes. Swap a dark background for a light one and text that was white for the dark background is now white on light, and invisible. Nothing checks this for you. After any colour change, look at the page before you show anyone.</li>
|
|
861
|
+
<li><b>A clone copies. It does not rewrite.</b> When it finishes, the layout and brand are your client's and every word is still the original's, so the page still reads as the other business. Rewriting is a second ask, on purpose: a clone that paraphrases as it copies is the one that comes back "not even close".</li>
|
|
862
|
+
<li>Read the review list. It exists because some things cannot be caught by find and replace: a brand name split across styled text, a logo inside an image, branding baked into a booking widget, another business's testimonials.</li>
|
|
863
|
+
<li>Lead and payment destinations are the dangerous ones. A cloned page that still posts leads to the original owner is worse than no page.</li>
|
|
864
|
+
<li>Regulated claims travel with the copy. If the original made a medical or income claim, it is now on your client's page and it is now your client's liability.</li>
|
|
865
|
+
<li>Needs the full license.</li>
|
|
866
|
+
</ul>
|
|
867
|
+
</div>
|
|
868
|
+
<div class="gsec"><h2>Where people go wrong</h2>
|
|
869
|
+
<div style="overflow-x:auto"><table class="wrongtbl"><tr><th>What happened</th><th>The fix</th></tr><tr><td>"The clone still has the other company's name in one spot."</td><td>That is what the review list catches, usually a name split across styled text. Fix the items it names before you show the client.</td></tr><tr><td>"A booking button still goes to the original business."</td><td>Say which account and which calendar the buttons should point at, in the ask. Then check every button on the live page.</td></tr><tr><td>"The new colours made half the page unreadable."</td><td>Text colours were not swapped alongside the backgrounds they sit on. Caught live: a navy-to-cream background left white headings invisible. Change colours only if you will check the result by eye, or leave them alone and clone exactly.</td></tr><tr><td>"The header still showed the old brand after a clean replace."</td><td>A two-tone brand mark is split across markup, so no find-and-replace can reach it. It is caught and listed for a hand edit. The proving run had exactly two.</td></tr><tr><td>"The logo still says the other company."</td><td>The brand is inside the image file. Pixels cannot be substituted; the review list names the files so you can swap the artwork.</td></tr><tr><td>"It refused to make an exact copy."</td><td>You said you have no rights to the page. That answer routes you to a rebuild on the design system instead, which is the version you can actually ship.</td></tr></table></div>
|
|
870
|
+
</div>
|
|
871
|
+
<div class="gsec"><h2>Related guides</h2>
|
|
872
|
+
<ul>
|
|
873
|
+
<li>page-studio-pages-and-sites</li>
|
|
874
|
+
<li>create-forms-and-read-submissions</li>
|
|
875
|
+
</ul>
|
|
876
|
+
</div>
|
|
877
|
+
<p class="gfoot">Works in Claude Desktop and Claude Code. Stuck? Email support@ghlcommand.com and a human answers.</p>
|
|
878
|
+
</main></div>
|
|
879
|
+
</section>
|
|
880
|
+
|
|
820
881
|
<section class="gpage" id="g-count-and-report-contacts">
|
|
821
882
|
<div class="hero"><div class="hero-in">
|
|
822
883
|
<p class="eyebrow">GHL Command User Guide</p>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elitedcs/ghl-mcp",
|
|
3
|
-
"version": "3.66.
|
|
3
|
+
"version": "3.66.2",
|
|
4
4
|
"mcpName": "io.github.drjerryrelth/ghl-command",
|
|
5
5
|
"description": "GoHighLevel MCP Server for Claude. 239 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",
|