@elitedcs/ghl-mcp 3.1.0 → 3.1.1
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 +50 -0
- package/README.md +28 -11
- package/dist/index.js +73 -29
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,55 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 3.1.1 — Auto-update visibility
|
|
4
|
+
|
|
5
|
+
**173 tools across 36 modules. Bundle: 249.7 KB.**
|
|
6
|
+
|
|
7
|
+
The v3.0 install email promises the MCP auto-updates on Claude restart, and it does. But the old `checkForUpdates()` only worked for local git-checkout dev installs — for buyers running `npx -y @elitedcs/ghl-mcp@latest` it silently returned. This release makes the upgrade visible and verifiable.
|
|
8
|
+
|
|
9
|
+
### `checkForUpdates` rewritten for the npm install path
|
|
10
|
+
- Queries `registry.npmjs.org/@elitedcs/ghl-mcp/latest` instead of running `git fetch`.
|
|
11
|
+
- Writes a clear stderr line when a newer version is available: `Update available: vX → vY. Fully quit Claude (Cmd+Q on Mac) and reopen to upgrade.`
|
|
12
|
+
- 5 s timeout, non-blocking.
|
|
13
|
+
|
|
14
|
+
### `get_mcp_version` tool (NEW)
|
|
15
|
+
- Returns installed version, latest published version on npm, and the one-line restart instruction if not current.
|
|
16
|
+
- Registered in BOTH bootstrap and normal modes — buyers without configured GHL credentials can still verify their MCP version.
|
|
17
|
+
- Use case: "Hey Claude, check your version" → instant confirmation an upgrade landed.
|
|
18
|
+
|
|
19
|
+
### Version baked into `get_current_location`
|
|
20
|
+
- Adds `MCP version: vX.Y.Z` line to the response so the version surfaces naturally on the first GHL tool call of a session, no separate query needed.
|
|
21
|
+
|
|
22
|
+
### Files changed
|
|
23
|
+
- `src/index.ts` — replaced git-based update check with npm registry check; registers meta tools in both modes; threads version into `registerAllTools`.
|
|
24
|
+
- `src/version-check.ts` — NEW: shared `fetchLatestVersion()` + `getVersionStatus()` used by startup banner and the tool.
|
|
25
|
+
- `src/tools/meta.ts` — NEW: `get_mcp_version` tool.
|
|
26
|
+
- `src/tools/index.ts` — `registerAllTools` accepts optional `mcpVersion` and threads it to the location switcher.
|
|
27
|
+
- `src/tools/location-switcher.ts` — appends `MCP version: vX.Y.Z` to `get_current_location` response.
|
|
28
|
+
|
|
29
|
+
## 3.1.0 — Workflow trigger read-side coverage
|
|
30
|
+
|
|
31
|
+
**172 tools across 35 modules.**
|
|
32
|
+
|
|
33
|
+
GHL ships 57 native trigger types. The MCP previously typed only 4 (`customer_reply`, `appointment`, `contact_tag`, `pipeline_stage_updated`). Workflows using any of the other 53 — `form_submission`, `payment_received`, `opportunity_*`, `inbound_webhook`, etc. — threw Zod errors on `get_workflow_full`. This release unlocks all of them on the read side.
|
|
34
|
+
|
|
35
|
+
### Permissive `WorkflowTriggerSchema`
|
|
36
|
+
- `z.union` of the 4 typed variants plus an `UnknownTriggerSchema` fallback that accepts any string-keyed `type` and a `conditions` array of arbitrary records.
|
|
37
|
+
- Write side is unchanged — typed triggers still get their typed conditions; unknown triggers pass through untouched on save.
|
|
38
|
+
- Defined in BOTH `src/workflow-builder-client.ts` and `src/tools/workflow-builder.ts` (read path + tool input schema).
|
|
39
|
+
|
|
40
|
+
### `get_trigger_registry` tool (NEW)
|
|
41
|
+
- Calls GHL's marketplace endpoint `/marketplace/core/search/module?type=triggers` and returns ~85 third-party apps (Zoom, WooCommerce, Shopify, Monday, etc.) with their available triggers and `customVars`.
|
|
42
|
+
- Use case: discovering which marketplace triggers a sub-account can wire into workflows.
|
|
43
|
+
- `installedOnly` flag defaults to false (full catalogue).
|
|
44
|
+
|
|
45
|
+
### `templates/trigger-schemas.json` reference (dev-side)
|
|
46
|
+
- Full catalogue: 57 native trigger types + 85 marketplace apps + 434 marketplace trigger entries, captured from the workflow-builder JS bundle + the marketplace API.
|
|
47
|
+
- Not shipped to npm consumers (excluded from `package.json` `files[]`) — kept in-repo as the source of truth for future typed-trigger work.
|
|
48
|
+
|
|
49
|
+
### Coverage delta
|
|
50
|
+
- Before: 4 / 57 native trigger types typed (7%).
|
|
51
|
+
- After: 4 typed + 53 reachable via the permissive fallback (100% read coverage).
|
|
52
|
+
|
|
3
53
|
## 2.7.0 — Complete Type Safety (Boris Cherny A+)
|
|
4
54
|
|
|
5
55
|
**171 tools across 35 modules. Bundle: 214KB.**
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# GHL Command — GoHighLevel MCP Server
|
|
2
2
|
|
|
3
|
-
**Full GoHighLevel API access for Claude.**
|
|
3
|
+
**Full GoHighLevel API access for Claude.** 173 tools across 36 modules — manage contacts, conversations, pipelines, calendars, funnels, workflows, invoices, custom objects, webhooks, and more. **Includes full workflow builder, funnel/page editor, form builder, pipeline builder, bulk operations, account export, and workflow cloning** — capabilities no other GHL tool offers.
|
|
4
4
|
|
|
5
5
|
**Distributed via npm as [`@elitedcs/ghl-mcp`](https://www.npmjs.com/package/@elitedcs/ghl-mcp).** Buyers install with one config block — no git, no Node.js setup, no terminal commands. Updates flow automatically (`npx @latest` re-resolves on every Claude restart).
|
|
6
6
|
|
|
@@ -98,7 +98,7 @@ Run setup_ghl_mcp to activate GHL Command:
|
|
|
98
98
|
ghl_location_id: YOUR_LOCATION_ID
|
|
99
99
|
```
|
|
100
100
|
|
|
101
|
-
Approve the tool call. Server validates your license, verifies your GHL credentials, writes them to a per-user config file. **Quit Claude one more time and reopen** — all
|
|
101
|
+
Approve the tool call. Server validates your license, verifies your GHL credentials, writes them to a per-user config file. **Quit Claude one more time and reopen** — all 166 tools are now unlocked.
|
|
102
102
|
|
|
103
103
|
### 4. Try it
|
|
104
104
|
|
|
@@ -138,9 +138,19 @@ https://app.gohighlevel.com/v2/location/YOUR_LOCATION_ID/dashboard
|
|
|
138
138
|
|
|
139
139
|
## Enable Workflow Builder (Optional)
|
|
140
140
|
|
|
141
|
-
The
|
|
141
|
+
The 7 workflow builder tools use GHL'''s internal API and require Firebase credentials. Without them, the other 166 tools work fine — you just won'''t have workflow editing.
|
|
142
142
|
|
|
143
|
-
|
|
143
|
+
Grab the three values from your GHL browser session, then re-run `setup_ghl_mcp` with them:
|
|
144
|
+
|
|
145
|
+
1. Open `app.gohighlevel.com` in Chrome (or any Chromium browser), log in.
|
|
146
|
+
2. Open DevTools (Cmd+Opt+I on Mac, F12 on Windows) → **Application** tab → **IndexedDB** in the left panel.
|
|
147
|
+
3. Expand: `firebaseLocalStorageDb` → `firebaseLocalStorage`.
|
|
148
|
+
4. Find the row whose key starts with `firebase:authUser:`.
|
|
149
|
+
5. The part between `authUser:` and `:[DEFAULT]` is your **ghl_firebase_api_key** (starts with `AIza`).
|
|
150
|
+
6. Inside that row's value object: `uid` is your **ghl_user_id**.
|
|
151
|
+
7. Inside `value.stsTokenManager.refreshToken` is your **ghl_firebase_refresh_token**.
|
|
152
|
+
|
|
153
|
+
Then in Claude:
|
|
144
154
|
|
|
145
155
|
```
|
|
146
156
|
Re-run setup_ghl_mcp with workflow builder:
|
|
@@ -148,16 +158,16 @@ Re-run setup_ghl_mcp with workflow builder:
|
|
|
148
158
|
license_key: YOUR_LICENSE_KEY
|
|
149
159
|
ghl_api_key: YOUR_GHL_API_KEY
|
|
150
160
|
ghl_location_id: YOUR_LOCATION_ID
|
|
151
|
-
ghl_user_id:
|
|
152
|
-
ghl_firebase_api_key:
|
|
153
|
-
ghl_firebase_refresh_token:
|
|
161
|
+
ghl_user_id: FROM_STEP_6
|
|
162
|
+
ghl_firebase_api_key: FROM_STEP_5
|
|
163
|
+
ghl_firebase_refresh_token: FROM_STEP_7
|
|
154
164
|
```
|
|
155
165
|
|
|
156
|
-
> Firebase refresh tokens can rotate. If workflow tools stop working after a few weeks,
|
|
166
|
+
> Firebase refresh tokens can rotate. If workflow tools stop working after a few weeks, repeat steps 1–7 and re-run setup_ghl_mcp with fresh values.
|
|
157
167
|
|
|
158
168
|
---
|
|
159
169
|
|
|
160
|
-
## Tools (
|
|
170
|
+
## Tools (173)
|
|
161
171
|
|
|
162
172
|
### CRM & Contacts (15 tools)
|
|
163
173
|
|
|
@@ -322,7 +332,7 @@ Re-run setup_ghl_mcp with workflow builder:
|
|
|
322
332
|
| `get_subscriptions` | List active subscriptions |
|
|
323
333
|
| `get_transactions` | View transaction history |
|
|
324
334
|
|
|
325
|
-
### Workflow Builder (
|
|
335
|
+
### Workflow Builder (7 tools) — Internal API
|
|
326
336
|
|
|
327
337
|
> **This is the flagship feature.** GHL's public API has **zero** workflow write endpoints. These tools use GHL's internal backend API — the same API their own UI calls — reverse-engineered to give Claude full workflow CRUD. No other GHL integration, Zapier connector, or third-party tool can create or edit workflows programmatically. Requires additional Firebase auth setup (see "Enable Workflow Builder" in Quick Start above).
|
|
328
338
|
|
|
@@ -334,12 +344,13 @@ Re-run setup_ghl_mcp with workflow builder:
|
|
|
334
344
|
| `update_workflow_actions` | Add, edit, or remove actions, triggers, and branches in an existing workflow |
|
|
335
345
|
| `delete_workflow_full` | Permanently delete a workflow |
|
|
336
346
|
| `publish_workflow` | Publish a draft workflow to make it active |
|
|
347
|
+
| `get_trigger_registry` | Discover GHL's marketplace trigger apps (Zoom, WooCommerce, Shopify, etc.) and their available trigger templates |
|
|
337
348
|
|
|
338
349
|
**What you can build:** Complete automation sequences — lead nurture drip campaigns, appointment reminder sequences, onboarding flows, re-engagement workflows, internal notification chains. Tell Claude what you want and it builds the workflow action by action.
|
|
339
350
|
|
|
340
351
|
**Supported action types:** `sms`, `email`, `add_contact_tag`, `remove_contact_tag`, `update_contact_field`, `wait`, `if_else`, `webhook`, `create_opportunity`, `custom_code`, `add_notes`, `internal_notification`, `task-notification`, `remove_from_workflow`, and more.
|
|
341
352
|
|
|
342
|
-
**Supported trigger types:**
|
|
353
|
+
**Supported trigger types:** All 57 native GHL trigger types read cleanly (form_submission, payment_received, opportunity_created/changed/status_changed, inbound_webhook, contact_tag, appointment, customer_reply, and 50 more). 4 are deeply typed; the rest pass through a permissive schema so workflows never fail to read regardless of trigger type. Plus 434 marketplace trigger entries across 85 third-party apps — query them via `get_trigger_registry`.
|
|
343
354
|
|
|
344
355
|
### Pipeline Builder (5 tools) — Internal API
|
|
345
356
|
|
|
@@ -399,6 +410,12 @@ Re-run setup_ghl_mcp with workflow builder:
|
|
|
399
410
|
| `get_template_questionnaire` | Get the questionnaire for a template — present to user conversationally |
|
|
400
411
|
| `deploy_template` | Deploy a complete sub-account setup from a template (tags, fields, pipelines, workflows, forms). Supports dry-run mode. |
|
|
401
412
|
|
|
413
|
+
### Meta (1 tool)
|
|
414
|
+
|
|
415
|
+
| Tool | What It Does |
|
|
416
|
+
|---|---|
|
|
417
|
+
| `get_mcp_version` | Check installed version against the latest published to npm. Confirms an upgrade landed after restarting Claude. Available even before GHL credentials are configured. |
|
|
418
|
+
|
|
402
419
|
### Other Modules
|
|
403
420
|
|
|
404
421
|
| Module | Tools | What It Does |
|
package/dist/index.js
CHANGED
|
@@ -31,8 +31,8 @@ var require_package = __commonJS({
|
|
|
31
31
|
"package.json"(exports2, module2) {
|
|
32
32
|
module2.exports = {
|
|
33
33
|
name: "@elitedcs/ghl-mcp",
|
|
34
|
-
version: "3.1.
|
|
35
|
-
description: "GoHighLevel MCP Server for Claude.
|
|
34
|
+
version: "3.1.1",
|
|
35
|
+
description: "GoHighLevel MCP Server for Claude. 173 tools \u2014 full CRM, automation, marketing control, and the only programmatic GHL workflow builder.",
|
|
36
36
|
main: "dist/index.js",
|
|
37
37
|
bin: {
|
|
38
38
|
"ghl-mcp": "dist/index.js"
|
|
@@ -96,7 +96,6 @@ var require_package = __commonJS({
|
|
|
96
96
|
var dotenv2 = __toESM(require("dotenv"));
|
|
97
97
|
var path5 = __toESM(require("path"));
|
|
98
98
|
var fs5 = __toESM(require("fs"));
|
|
99
|
-
var import_child_process = require("child_process");
|
|
100
99
|
var import_mcp = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
101
100
|
var import_stdio = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
102
101
|
|
|
@@ -4651,10 +4650,12 @@ function withSwitchLock(fn) {
|
|
|
4651
4650
|
switchChain = next.catch(() => void 0);
|
|
4652
4651
|
return next;
|
|
4653
4652
|
}
|
|
4654
|
-
function registerLocationSwitcherTools(server2, client, builderClient, registry2) {
|
|
4653
|
+
function registerLocationSwitcherTools(server2, client, builderClient, registry2, mcpVersion) {
|
|
4654
|
+
const versionLine = mcpVersion ? `
|
|
4655
|
+
MCP version: v${mcpVersion}` : "";
|
|
4655
4656
|
server2.tool(
|
|
4656
4657
|
"get_current_location",
|
|
4657
|
-
"Show which GHL sub-account (location) is currently active, including API key status. All tools use this location by default unless you specify a different one.",
|
|
4658
|
+
"Show which GHL sub-account (location) is currently active, including API key status and installed MCP version. All tools use this location by default unless you specify a different one.",
|
|
4658
4659
|
{},
|
|
4659
4660
|
async () => {
|
|
4660
4661
|
const locId = client.defaultLocationId || "NOT SET";
|
|
@@ -4672,17 +4673,17 @@ ID: ${client.defaultLocationId}
|
|
|
4672
4673
|
API Key: ${client.getApiKeyPrefix()}
|
|
4673
4674
|
Address: ${loc?.address || "N/A"}
|
|
4674
4675
|
Email: ${loc?.email || "N/A"}
|
|
4675
|
-
Token registry: ${registeredCount} location(s) registered`
|
|
4676
|
+
Token registry: ${registeredCount} location(s) registered${versionLine}`
|
|
4676
4677
|
}
|
|
4677
4678
|
]
|
|
4678
4679
|
};
|
|
4679
4680
|
}
|
|
4680
4681
|
return {
|
|
4681
|
-
content: [{ type: "text", text: `No default location set. Pass locationId to tools or use switch_location
|
|
4682
|
+
content: [{ type: "text", text: `No default location set. Pass locationId to tools or use switch_location.${versionLine}` }]
|
|
4682
4683
|
};
|
|
4683
4684
|
} catch (error) {
|
|
4684
4685
|
return {
|
|
4685
|
-
content: [{ type: "text", text: `Current location ID: ${locId} (could not fetch details \u2014 API key may not have access)` }]
|
|
4686
|
+
content: [{ type: "text", text: `Current location ID: ${locId} (could not fetch details \u2014 API key may not have access)${versionLine}` }]
|
|
4686
4687
|
};
|
|
4687
4688
|
}
|
|
4688
4689
|
}
|
|
@@ -5771,7 +5772,7 @@ var publicApiTools = [
|
|
|
5771
5772
|
[registerAccountExportTools, "account-export"],
|
|
5772
5773
|
[registerTemplateDeployerTools, "template-deployer"]
|
|
5773
5774
|
];
|
|
5774
|
-
function registerAllTools(server2, client, registry2) {
|
|
5775
|
+
function registerAllTools(server2, client, registry2, mcpVersion) {
|
|
5775
5776
|
for (const [register] of publicApiTools) {
|
|
5776
5777
|
register(server2, client);
|
|
5777
5778
|
}
|
|
@@ -5781,7 +5782,7 @@ function registerAllTools(server2, client, registry2) {
|
|
|
5781
5782
|
registerFormBuilderTools(server2, builderClient);
|
|
5782
5783
|
registerPipelineBuilderTools(server2, builderClient);
|
|
5783
5784
|
registerWorkflowClonerTools(server2, builderClient);
|
|
5784
|
-
registerLocationSwitcherTools(server2, client, builderClient, registry2);
|
|
5785
|
+
registerLocationSwitcherTools(server2, client, builderClient, registry2, mcpVersion);
|
|
5785
5786
|
}
|
|
5786
5787
|
|
|
5787
5788
|
// src/credentials-store.ts
|
|
@@ -5998,6 +5999,58 @@ Note: Firebase credentials rejected (${fb.error}). Saved without Workflow Builde
|
|
|
5998
5999
|
);
|
|
5999
6000
|
}
|
|
6000
6001
|
|
|
6002
|
+
// src/version-check.ts
|
|
6003
|
+
var REGISTRY_URL = "https://registry.npmjs.org/@elitedcs/ghl-mcp/latest";
|
|
6004
|
+
async function fetchLatestVersion(timeoutMs = 5e3) {
|
|
6005
|
+
try {
|
|
6006
|
+
const response = await fetch(REGISTRY_URL, {
|
|
6007
|
+
headers: { Accept: "application/json" },
|
|
6008
|
+
signal: AbortSignal.timeout(timeoutMs)
|
|
6009
|
+
});
|
|
6010
|
+
if (!response.ok) return null;
|
|
6011
|
+
const body = await response.json();
|
|
6012
|
+
return typeof body.version === "string" ? body.version : null;
|
|
6013
|
+
} catch {
|
|
6014
|
+
return null;
|
|
6015
|
+
}
|
|
6016
|
+
}
|
|
6017
|
+
async function getVersionStatus(installed) {
|
|
6018
|
+
const latest = await fetchLatestVersion();
|
|
6019
|
+
if (latest === null) {
|
|
6020
|
+
return { installed, latest: null, upToDate: null, fetchError: "Could not reach npm registry" };
|
|
6021
|
+
}
|
|
6022
|
+
return { installed, latest, upToDate: installed === latest };
|
|
6023
|
+
}
|
|
6024
|
+
|
|
6025
|
+
// src/tools/meta.ts
|
|
6026
|
+
function registerMetaTools(server2, installedVersion) {
|
|
6027
|
+
server2.tool(
|
|
6028
|
+
"get_mcp_version",
|
|
6029
|
+
"Check the installed version of GHL Command (the GoHighLevel MCP server) against the latest version published to npm. Use this to confirm an upgrade landed after restarting Claude. Returns installed version, latest version, whether up-to-date, and the one-line restart instruction if not.",
|
|
6030
|
+
{},
|
|
6031
|
+
async () => {
|
|
6032
|
+
const status = await getVersionStatus(installedVersion);
|
|
6033
|
+
const lines = [`Installed: v${status.installed}`];
|
|
6034
|
+
if (status.latest === null) {
|
|
6035
|
+
lines.push(`Latest: unknown (${status.fetchError ?? "npm registry unreachable"})`);
|
|
6036
|
+
lines.push(`Cannot confirm whether an update is available.`);
|
|
6037
|
+
} else if (status.upToDate) {
|
|
6038
|
+
lines.push(`Latest: v${status.latest}`);
|
|
6039
|
+
lines.push(`Status: Up to date.`);
|
|
6040
|
+
} else {
|
|
6041
|
+
lines.push(`Latest: v${status.latest}`);
|
|
6042
|
+
lines.push(`Status: UPDATE AVAILABLE.`);
|
|
6043
|
+
lines.push(``);
|
|
6044
|
+
lines.push(`To upgrade: fully quit Claude Desktop (Cmd+Q on Mac, fully exit on Windows) and reopen it.`);
|
|
6045
|
+
lines.push(`The @latest tag in your config fetches the new version on next launch \u2014 no reinstall, no config edit.`);
|
|
6046
|
+
lines.push(``);
|
|
6047
|
+
lines.push(`If a restart doesn't pick up the new version, run this in a terminal once: npx clear-npx-cache`);
|
|
6048
|
+
}
|
|
6049
|
+
return { content: [{ type: "text", text: lines.join("\n") }] };
|
|
6050
|
+
}
|
|
6051
|
+
);
|
|
6052
|
+
}
|
|
6053
|
+
|
|
6001
6054
|
// src/index.ts
|
|
6002
6055
|
var pkg = require_package();
|
|
6003
6056
|
dotenv2.config();
|
|
@@ -6059,17 +6112,18 @@ var server = new import_mcp.McpServer({
|
|
|
6059
6112
|
version: pkg.version
|
|
6060
6113
|
});
|
|
6061
6114
|
var inBootstrapMode = !apiKey || !locationId;
|
|
6115
|
+
registerMetaTools(server, pkg.version);
|
|
6062
6116
|
if (inBootstrapMode) {
|
|
6063
6117
|
process.stderr.write(
|
|
6064
6118
|
`[ghl-mcp] Bootstrap mode: no credentials found.
|
|
6065
6119
|
[ghl-mcp] Looked for env vars (GHL_API_KEY, GHL_LOCATION_ID) and credentials file (${credentialsPath()}).
|
|
6066
|
-
[ghl-mcp] Only
|
|
6120
|
+
[ghl-mcp] Only setup_ghl_mcp and get_mcp_version are available. Run setup_ghl_mcp from Claude with your license + GHL credentials.
|
|
6067
6121
|
`
|
|
6068
6122
|
);
|
|
6069
6123
|
registerSetupTool(server);
|
|
6070
6124
|
} else {
|
|
6071
6125
|
const client = new GHLClient({ apiKey, locationId });
|
|
6072
|
-
registerAllTools(server, client, registry);
|
|
6126
|
+
registerAllTools(server, client, registry, pkg.version);
|
|
6073
6127
|
if (fileCreds && !process.env.GHL_API_KEY) {
|
|
6074
6128
|
process.stderr.write(`[ghl-mcp] Loaded credentials from ${credentialsPath()}
|
|
6075
6129
|
`);
|
|
@@ -6096,24 +6150,14 @@ async function validateApiKey() {
|
|
|
6096
6150
|
} catch {
|
|
6097
6151
|
}
|
|
6098
6152
|
}
|
|
6099
|
-
function checkForUpdates() {
|
|
6100
|
-
const
|
|
6101
|
-
|
|
6102
|
-
|
|
6103
|
-
|
|
6104
|
-
(0, import_child_process.execFile)("git", ["-C", repoDir, "rev-parse", "@{u}"], (__, remoteOut) => {
|
|
6105
|
-
if (!localOut || !remoteOut) return;
|
|
6106
|
-
const local = localOut.toString().trim();
|
|
6107
|
-
const remote = remoteOut.toString().trim();
|
|
6108
|
-
if (local !== remote) {
|
|
6109
|
-
process.stderr.write(
|
|
6110
|
-
`[ghl-mcp] Update available! Run: cd ${repoDir} && git pull && npm run build
|
|
6153
|
+
async function checkForUpdates() {
|
|
6154
|
+
const latest = await fetchLatestVersion();
|
|
6155
|
+
if (latest && latest !== pkg.version) {
|
|
6156
|
+
process.stderr.write(
|
|
6157
|
+
`[ghl-mcp] Update available: v${pkg.version} \u2192 v${latest}. Fully quit Claude (Cmd+Q on Mac) and reopen to upgrade.
|
|
6111
6158
|
`
|
|
6112
|
-
|
|
6113
|
-
|
|
6114
|
-
});
|
|
6115
|
-
});
|
|
6116
|
-
});
|
|
6159
|
+
);
|
|
6160
|
+
}
|
|
6117
6161
|
}
|
|
6118
6162
|
async function main() {
|
|
6119
6163
|
const transport = new import_stdio.StdioServerTransport();
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elitedcs/ghl-mcp",
|
|
3
|
-
"version": "3.1.
|
|
4
|
-
"description": "GoHighLevel MCP Server for Claude.
|
|
3
|
+
"version": "3.1.1",
|
|
4
|
+
"description": "GoHighLevel MCP Server for Claude. 173 tools — full CRM, automation, marketing control, and the only programmatic GHL workflow builder.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
7
7
|
"ghl-mcp": "dist/index.js"
|