@elitedcs/ghl-mcp 3.10.0 → 3.10.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 CHANGED
@@ -1,5 +1,36 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.10.1 — `list_message_templates` (SMS / email-snippet / WhatsApp read)
4
+
5
+ **191 tools across 39 modules. Bundle: ~304.7 KB.**
6
+
7
+ Small patch closing the SMS template read gap.
8
+
9
+ ### New tool
10
+
11
+ - `list_message_templates(type?, limit?, skip?, locationId?)` — list snippet-style message templates. `type` filters by `sms` / `email` / `whatsapp`; omit to list all types.
12
+
13
+ ### What this is (and isn't)
14
+
15
+ GHL has **two separate template systems**:
16
+ 1. **Email builders** (drag-and-drop) at `/emails/builder` — already covered by `list_email_templates` + `create_email_template` + `update_email_template` from v3.10.0
17
+ 2. **Snippet templates** (simpler, multi-type) at `/locations/{locationId}/templates` — covered by this new tool
18
+
19
+ This patch closes the **read** side of system #2. The write side is a real wall: `POST /locations/{locationId}/templates` returns 401 *"The token is not authorized for this scope"* with a Private Integration token, regardless of body shape. GHL gates template creation behind a scope (`templates.write` or similar) that PITs don't have. Creating message templates either happens in the GHL UI or requires an OAuth integration. Honest scope documented in the tool description.
20
+
21
+ ### Endpoint discovery story
22
+
23
+ Found in the workflow-builder JS bundle (`templateEndpoint = /locations/${locationId}/templates`). Endpoint accepts `type=sms|email|whatsapp` to filter; without `type` returns all template kinds. Same endpoint serves single-template GET at `/locations/{locationId}/templates/{id}` (`get_message_template_by_id` could be added if a use case emerges; for now, the list returns enough detail).
24
+
25
+ ### Tool count impact
26
+
27
+ - Total: 190 → 191 (+1)
28
+ - Without Firebase: 160 → 161 (public API)
29
+
30
+ ### Files changed
31
+
32
+ - `src/tools/emails.ts` — added `list_message_templates`
33
+
3
34
  ## 3.10.0 — Email Templates (gap-closure round 2)
4
35
 
5
36
  **190 tools across 39 modules. Bundle: 304.6 KB.**
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # GHL Command — GoHighLevel MCP Server
2
2
 
3
- **Full GoHighLevel API access for Claude.** 190 tools across 39 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.
3
+ **Full GoHighLevel API access for Claude.** 191 tools across 39 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
 
@@ -138,7 +138,7 @@ https://app.gohighlevel.com/v2/location/YOUR_LOCATION_ID/dashboard
138
138
 
139
139
  ## Enable Workflow Builder (Optional)
140
140
 
141
- The 30 builder + cloner + validator tools (workflow builder, funnel builder, form builder, pipeline builder, workflow cloner, validate_workflow) use GHL'''s internal API and require Firebase credentials. Without them, the other 160 tools work fine — you just won'''t have workflow/funnel/form/pipeline editing.
141
+ The 30 builder + cloner + validator tools (workflow builder, funnel builder, form builder, pipeline builder, workflow cloner, validate_workflow) use GHL'''s internal API and require Firebase credentials. Without them, the other 161 tools work fine — you just won'''t have workflow/funnel/form/pipeline editing.
142
142
 
143
143
  Grab the three values from your GHL browser session, then re-run `setup_ghl_mcp` with them:
144
144
 
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.10.0",
35
- description: "GoHighLevel MCP Server for Claude. 190 tools \u2014 full CRM, automation, marketing control, and the only programmatic GHL workflow builder.",
34
+ version: "3.10.1",
35
+ description: "GoHighLevel MCP Server for Claude. 191 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"
@@ -3624,6 +3624,25 @@ function registerEmailTools(server2, client) {
3624
3624
  });
3625
3625
  }
3626
3626
  );
3627
+ safeTool(
3628
+ server2,
3629
+ "list_message_templates",
3630
+ "List snippet-style message templates in a location. Covers SMS, email snippets, and WhatsApp templates \u2014 pass the `type` param to filter. Different from `list_email_templates` (which returns drag-and-drop email-builder templates from a separate system). NOTE: This tool is READ-ONLY by design. Creating/updating/deleting templates at this endpoint requires a scope (`templates.write`) that GHL doesn't grant to Private Integration tokens. Buyers create message templates via the GHL UI (Conversations \u2192 Templates) or via an OAuth integration. This list endpoint works on a standard sub-account Private Integration key.",
3631
+ {
3632
+ type: import_zod24.z.enum(["sms", "email", "whatsapp"]).optional().describe("Filter by template type. Omit to list all template types in one response. SMS templates are quick-reply text snippets used in the conversations composer. Email here means HTML-snippet templates (NOT email-builder drag-and-drop templates \u2014 those are listed via `list_email_templates`). WhatsApp templates are pre-approved message templates registered with Meta."),
3633
+ limit: import_zod24.z.number().optional().describe("Max templates to return. Defaults to 1000."),
3634
+ skip: import_zod24.z.number().optional().describe("Skip this many for pagination."),
3635
+ locationId: import_zod24.z.string().optional().describe("Location ID. Falls back to GHL_LOCATION_ID env var.")
3636
+ },
3637
+ async ({ type, limit, skip, locationId: locationId2 }) => {
3638
+ const resolvedLocationId = client.resolveLocationId(locationId2);
3639
+ const params = {};
3640
+ if (type) params.type = type;
3641
+ if (limit !== void 0) params.limit = limit;
3642
+ if (skip !== void 0) params.skip = skip;
3643
+ return client.get(`/locations/${resolvedLocationId}/templates`, { params });
3644
+ }
3645
+ );
3627
3646
  safeTool(
3628
3647
  server2,
3629
3648
  "update_email_template",
@@ -7021,7 +7040,7 @@ async function validateFirebase(firebaseKey, refreshToken) {
7021
7040
  function registerSetupTool(server2) {
7022
7041
  server2.tool(
7023
7042
  "setup_ghl_mcp",
7024
- "First-run setup for GHL Command MCP. Validates your license and GHL credentials, then writes them to a per-user credentials file. Restart Claude after this completes to load all 190 tools (160 if you skip the optional Firebase fields; add Firebase later with enable_workflow_builder).",
7043
+ "First-run setup for GHL Command MCP. Validates your license and GHL credentials, then writes them to a per-user credentials file. Restart Claude after this completes to load all 191 tools (161 if you skip the optional Firebase fields; add Firebase later with enable_workflow_builder).",
7025
7044
  {
7026
7045
  email: import_zod43.z.string().email().describe("Email used at purchase."),
7027
7046
  license_key: import_zod43.z.string().min(20).describe("License key from your purchase email."),
@@ -7076,7 +7095,7 @@ Note: Firebase credentials rejected (${fb.error}). Saved without Workflow Builde
7076
7095
  ghl_firebase_api_key: workflowBuilderEnabled ? args.ghl_firebase_api_key?.trim() : void 0,
7077
7096
  ghl_firebase_refresh_token: workflowBuilderEnabled ? args.ghl_firebase_refresh_token?.trim() : void 0
7078
7097
  });
7079
- const toolCount = workflowBuilderEnabled ? "190" : "160";
7098
+ const toolCount = workflowBuilderEnabled ? "191" : "161";
7080
7099
  const wfLine = workflowBuilderEnabled ? "Workflow Builder: enabled." : "Workflow Builder: not configured (optional).";
7081
7100
  const wfTip = workflowBuilderEnabled ? "" : "\nTo enable Workflow Builder later (8 extra tools): run enable_workflow_builder with your three Firebase values. No need to re-enter license/API key/location ID.";
7082
7101
  return {
@@ -7104,7 +7123,7 @@ Note: Firebase credentials rejected (${fb.error}). Saved without Workflow Builde
7104
7123
  function registerEnableWorkflowBuilderTool(server2) {
7105
7124
  server2.tool(
7106
7125
  "enable_workflow_builder",
7107
- "Add Firebase credentials to an existing GHL Command install to unlock 30 additional tools across 6 modules: workflow builder (create/edit/clone/delete/publish/validate workflows, build_if_else_branch, build_goal_event, get_trigger_registry), funnel + page builder (10 tools), form builder (5 tools), pipeline builder (5 tools), and workflow cloning. Requires you've already run setup_ghl_mcp. Capture the three Firebase values from your GHL browser session \u2014 see elitedcs.com/ghl-mcp-firebase for step-by-step DevTools instructions. Tool count goes from 160 to 190 after the next Claude restart.",
7126
+ "Add Firebase credentials to an existing GHL Command install to unlock 30 additional tools across 6 modules: workflow builder (create/edit/clone/delete/publish/validate workflows, build_if_else_branch, build_goal_event, get_trigger_registry), funnel + page builder (10 tools), form builder (5 tools), pipeline builder (5 tools), and workflow cloning. Requires you've already run setup_ghl_mcp. Capture the three Firebase values from your GHL browser session \u2014 see elitedcs.com/ghl-mcp-firebase for step-by-step DevTools instructions. Tool count goes from 161 to 191 after the next Claude restart.",
7108
7127
  {
7109
7128
  ghl_user_id: import_zod43.z.string().min(10).describe("Firebase User ID (uid). DevTools \u2192 Application \u2192 IndexedDB \u2192 firebaseLocalStorageDb \u2192 firebaseLocalStorage \u2192 the value.uid field of the firebase:authUser row."),
7110
7129
  ghl_firebase_api_key: import_zod43.z.string().min(10).describe("Firebase API Key starting with 'AIza'. The string between 'firebase:authUser:' and ':[DEFAULT]' in the row's Key column."),
@@ -7151,7 +7170,7 @@ DevTools steps: https://elitedcs.com/ghl-mcp-firebase`
7151
7170
  "",
7152
7171
  "Firebase credentials verified and saved.",
7153
7172
  "",
7154
- "**Restart Claude (quit fully and reopen) to load the workflow builder + funnel builder + pipeline builder + form builder + workflow cloner tools (190 total).**",
7173
+ "**Restart Claude (quit fully and reopen) to load the workflow builder + funnel builder + pipeline builder + form builder + workflow cloner tools (191 total).**",
7155
7174
  "",
7156
7175
  'After restart, try: "List my workflows in full detail" or "Validate workflow <id>".',
7157
7176
  "",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@elitedcs/ghl-mcp",
3
- "version": "3.10.0",
4
- "description": "GoHighLevel MCP Server for Claude. 190 tools — full CRM, automation, marketing control, and the only programmatic GHL workflow builder.",
3
+ "version": "3.10.1",
4
+ "description": "GoHighLevel MCP Server for Claude. 191 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"