@elitedcs/ghl-mcp 3.70.0 → 3.71.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 CHANGED
@@ -1,5 +1,26 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.71.0 — a task you can close
4
+
5
+ A subscriber's Claude created a callback task on a contact and, come Monday, could not
6
+ close it. It said so plainly: the server can create tasks but has no way to update or
7
+ complete one, tick it off by hand. It was right. `create_contact_task` and
8
+ `get_contact_tasks` were the whole task surface.
9
+
10
+ **Three tools close the loop.** `complete_contact_task` marks a task done, or reopens it
11
+ with `completed: false`. `update_contact_task` changes a task's title, description, due
12
+ date, assignee or completed state, and sends only the fields you pass, so changing a due
13
+ date never blanks the title; an update with no fields is refused before any request goes
14
+ out. `delete_contact_task` removes a task for good and, like every delete in this server,
15
+ asks for `confirm: "DELETE"`. All three use the routes in
16
+ GoHighLevel's published contacts spec and were proven live before release on a throwaway
17
+ contact in a sandbox account: create, complete, read back completed, update, reopen,
18
+ delete, read back gone, contact removed (`docs/proofs/2026-08-26-task-lifecycle.md`).
19
+
20
+ Counts: 245 tools across 51 modules (was 242). The free read-only tier is unchanged at
21
+ 111; the three new tools are writes and answer with upgrade information there. Restart
22
+ Claude after the update to see them.
23
+
3
24
  ## 3.70.0 — a clean validation now means something
4
25
 
5
26
  A subscriber built an Instagram-comment-to-DM workflow, ran `validate_workflow`, got
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # GHL Command — GoHighLevel MCP Server
2
2
 
3
- **Full GoHighLevel API access for Claude.** 242 tools across 51 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. **Multi-tenant:** one install can run the workflow builder across multiple clients' GHL accounts.
3
+ **Full GoHighLevel API access for Claude.** 245 tools across 51 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. **Multi-tenant:** one install can run the workflow builder across multiple clients' GHL accounts.
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
 
@@ -135,7 +135,7 @@ Run setup_ghl_mcp to activate GHL Command:
135
135
  ghl_location_id: YOUR_LOCATION_ID
136
136
  ```
137
137
 
138
- 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** — the full core toolset is now unlocked (242 tools total with the optional Workflow Builder Firebase add-on).
138
+ 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** — the full core toolset is now unlocked (245 tools total with the optional Workflow Builder Firebase add-on).
139
139
 
140
140
  ### 4. Try it
141
141
 
@@ -175,7 +175,7 @@ https://app.gohighlevel.com/v2/location/YOUR_LOCATION_ID/dashboard
175
175
 
176
176
  ## Enable the Workflow Builder
177
177
 
178
- The 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 187 tools work fine — you just won't have workflow/funnel/form/pipeline editing. This is the flagship feature: do this step.
178
+ The 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 190 tools work fine — you just won't have workflow/funnel/form/pipeline editing. This is the flagship feature: do this step.
179
179
 
180
180
  **One-click capture (v3.49.0+, the supported path):**
181
181
 
@@ -269,7 +269,7 @@ Highlights (full guide: [`docs/HEADLESS.md`](docs/HEADLESS.md)):
269
269
 
270
270
  > **v3.10.0 adds Email Templates** (`list_email_templates`, `create_email_template`, `update_email_template`) — Claude can now create new HTML email templates and save content into them via the public API. Templates power both standalone marketing emails and workflow email actions. Delete + rename remain UI-only (no public-API endpoint exists).
271
271
 
272
- ### CRM & Contacts (15 tools)
272
+ ### CRM & Contacts (18 tools)
273
273
 
274
274
  | Tool | What It Does |
275
275
  |---|---|
@@ -283,6 +283,9 @@ Highlights (full guide: [`docs/HEADLESS.md`](docs/HEADLESS.md)):
283
283
  | `remove_contact_tags` | Remove tags from a contact |
284
284
  | `get_contact_tasks` | List tasks for a contact |
285
285
  | `create_contact_task` | Create a task on a contact |
286
+ | `complete_contact_task` | Mark a task done (or reopen it) |
287
+ | `update_contact_task` | Change a task's title, description, due date, assignee or state |
288
+ | `delete_contact_task` | Delete a task from a contact |
286
289
  | `get_contact_notes` | List notes on a contact |
287
290
  | `create_contact_note` | Add a note to a contact |
288
291
  | `get_contact_appointments` | List a contact's appointments |
@@ -798,7 +801,7 @@ Source repo is private. Contributors need an invitation from `drjerryrelth`. The
798
801
 
799
802
  ### Reducing context / token usage
800
803
 
801
- Every registered MCP tool's schema is shipped to the model on every message. With 242 tools that's a meaningful per-message context cost even in chats that never touch GHL. If you only use a slice of GHL Command, restrict the tool surface with `GHL_ENABLED_MODULES` and/or `GHL_ENABLED_TOOLS`:
804
+ Every registered MCP tool's schema is shipped to the model on every message. With 245 tools that's a meaningful per-message context cost even in chats that never touch GHL. If you only use a slice of GHL Command, restrict the tool surface with `GHL_ENABLED_MODULES` and/or `GHL_ENABLED_TOOLS`:
802
805
 
803
806
  ```jsonc
804
807
  // Claude Desktop config — enable whole modules
package/dist/index.js CHANGED
@@ -2732,6 +2732,15 @@ var init_contact_window = __esm({
2732
2732
  });
2733
2733
 
2734
2734
  // src/tools/contacts.ts
2735
+ function buildUpdateTaskBody(input) {
2736
+ const body = {};
2737
+ if (input.title !== void 0) body.title = input.title;
2738
+ if (input.body !== void 0) body.body = input.body;
2739
+ if (input.dueDate !== void 0) body.dueDate = input.dueDate;
2740
+ if (input.completed !== void 0) body.completed = input.completed;
2741
+ if (input.assignedTo !== void 0) body.assignedTo = input.assignedTo;
2742
+ return Object.keys(body).length === 0 ? null : body;
2743
+ }
2735
2744
  function registerContactTools(server2, client) {
2736
2745
  safeTool(
2737
2746
  server2,
@@ -3012,6 +3021,57 @@ function registerContactTools(server2, client) {
3012
3021
  });
3013
3022
  }
3014
3023
  );
3024
+ safeTool(
3025
+ server2,
3026
+ "complete_contact_task",
3027
+ "Mark a contact's task as done (or reopen it with completed=false). Find the task ID with get_contact_tasks; create_contact_task also returns it. Use this to tick off a task created earlier.",
3028
+ {
3029
+ contactId: import_zod9.z.string().min(1).describe("The ID of the contact the task belongs to."),
3030
+ taskId: import_zod9.z.string().min(1).describe("The ID of the task (from get_contact_tasks or create_contact_task)."),
3031
+ completed: import_zod9.z.boolean().optional().describe("true (default) marks the task completed; false reopens a completed task.")
3032
+ },
3033
+ async ({ contactId, taskId, completed }) => {
3034
+ return client.put(`/contacts/${contactId}/tasks/${taskId}/completed`, {
3035
+ body: { completed: completed ?? true }
3036
+ });
3037
+ }
3038
+ );
3039
+ safeTool(
3040
+ server2,
3041
+ "update_contact_task",
3042
+ "Change an existing task on a contact: title, description, due date, assignee, or completed state. Only the fields you pass are changed. To simply tick a task off, complete_contact_task is the direct route.",
3043
+ {
3044
+ contactId: import_zod9.z.string().min(1).describe("The ID of the contact the task belongs to."),
3045
+ taskId: import_zod9.z.string().min(1).describe("The ID of the task to update (from get_contact_tasks)."),
3046
+ title: import_zod9.z.string().min(1).optional().describe("New title / summary of the task (cannot be blank)."),
3047
+ body: import_zod9.z.string().optional().describe("New detailed description of the task."),
3048
+ dueDate: import_zod9.z.string().refine((d) => !Number.isNaN(Date.parse(d)), "dueDate must be an ISO 8601 date or date-time").optional().describe("New due date in ISO 8601 format (e.g. 2026-08-31T16:00:00.000Z)."),
3049
+ completed: import_zod9.z.boolean().optional().describe("Set the completed state of the task."),
3050
+ assignedTo: import_zod9.z.string().optional().describe("User ID to reassign the task to.")
3051
+ },
3052
+ async ({ contactId, taskId, title, body: taskBody, dueDate, completed, assignedTo }) => {
3053
+ const reqBody = buildUpdateTaskBody({ title, body: taskBody, dueDate, completed, assignedTo });
3054
+ if (!reqBody) {
3055
+ throw new Error(
3056
+ "Nothing to update: pass at least one of title, body, dueDate, completed, assignedTo."
3057
+ );
3058
+ }
3059
+ return client.put(`/contacts/${contactId}/tasks/${taskId}`, { body: reqBody });
3060
+ }
3061
+ );
3062
+ safeTool(
3063
+ server2,
3064
+ "delete_contact_task",
3065
+ "Delete a task from a contact. Permanent. To keep the record and just close it, use complete_contact_task instead.",
3066
+ {
3067
+ contactId: import_zod9.z.string().min(1).describe("The ID of the contact the task belongs to."),
3068
+ taskId: import_zod9.z.string().min(1).describe("The ID of the task to delete (from get_contact_tasks)."),
3069
+ confirm: import_zod9.z.literal("DELETE").describe("Must pass 'DELETE' to confirm this destructive action.")
3070
+ },
3071
+ async ({ contactId, taskId }) => {
3072
+ return client.delete(`/contacts/${contactId}/tasks/${taskId}`);
3073
+ }
3074
+ );
3015
3075
  safeTool(
3016
3076
  server2,
3017
3077
  "get_contact_notes",
@@ -9797,7 +9857,7 @@ Note: Firebase credentials rejected (${fb.error}).`;
9797
9857
  const telemetryLine = telemetryDisabled(process.env) ? "" : `
9798
9858
 
9799
9859
  ${TELEMETRY_DISCLOSURE}`;
9800
- const finishedCount = isFree ? "111" : "242";
9860
+ const finishedCount = isFree ? "111" : "245";
9801
9861
  const freeTip = isFree ? `
9802
9862
 
9803
9863
  Free tier: read-only. Write tools stay visible but answer with upgrade info instead of acting. Full version ($97/mo founding rate) upgrades in place \u2014 same install, you only swap the license key: https://ghlcommand.com` : "";
@@ -9842,7 +9902,7 @@ Free tier: read-only. Write tools stay visible but answer with upgrade info inst
9842
9902
  function registerEnableWorkflowBuilderTool(server2) {
9843
9903
  server2.tool(
9844
9904
  "enable_workflow_builder",
9845
- "Add Firebase credentials to an existing GHL Command install to unlock 55 additional tools across the internal-API modules: workflow builder (create/edit/clone/delete/publish/validate workflows, build_if_else_branch, build_goal_event, get_trigger_registry), funnel + page builder, form builder, pipeline builder, workflow cloner, smart lists, reputation, email campaigns, email templates, and memberships, plus the pre-deploy validator. On the FREE tier this same login unlocks the read-only auditor suite (audit_workflows, validate_workflow, full-detail workflow/funnel/pipeline reads). Requires you've already run setup_ghl_mcp. EASIEST PATH: run `capture_firebase_interactive` instead \u2014 a Chrome window opens, you log into GHL, zero pasting. Use THIS tool when you have JSON from `auto_capture_firebase_script` (console-paste path) to put in `firebase_paste`, or the three manual DevTools fields. Tool count goes from 187 to 242 after the next Claude restart.",
9905
+ "Add Firebase credentials to an existing GHL Command install to unlock 55 additional tools across the internal-API modules: workflow builder (create/edit/clone/delete/publish/validate workflows, build_if_else_branch, build_goal_event, get_trigger_registry), funnel + page builder, form builder, pipeline builder, workflow cloner, smart lists, reputation, email campaigns, email templates, and memberships, plus the pre-deploy validator. On the FREE tier this same login unlocks the read-only auditor suite (audit_workflows, validate_workflow, full-detail workflow/funnel/pipeline reads). Requires you've already run setup_ghl_mcp. EASIEST PATH: run `capture_firebase_interactive` instead \u2014 a Chrome window opens, you log into GHL, zero pasting. Use THIS tool when you have JSON from `auto_capture_firebase_script` (console-paste path) to put in `firebase_paste`, or the three manual DevTools fields. Tool count goes from 190 to 245 after the next Claude restart.",
9846
9906
  {
9847
9907
  // v3.25.0: one-paste path. Tool runs `auto_capture_firebase_script` to
9848
9908
  // get the console script; the script returns a JSON object that pastes
@@ -18968,9 +19028,9 @@ var require_package = __commonJS({
18968
19028
  "package.json"(exports2, module2) {
18969
19029
  module2.exports = {
18970
19030
  name: "@elitedcs/ghl-mcp",
18971
- version: "3.70.0",
19031
+ version: "3.71.0",
18972
19032
  mcpName: "io.github.drjerryrelth/ghl-command",
18973
- description: "GoHighLevel MCP Server for Claude. 242 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.",
19033
+ description: "GoHighLevel MCP Server for Claude. 245 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.",
18974
19034
  main: "dist/index.js",
18975
19035
  bin: {
18976
19036
  "ghl-mcp": "dist/index.js"
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@elitedcs/ghl-mcp",
3
- "version": "3.70.0",
3
+ "version": "3.71.0",
4
4
  "mcpName": "io.github.drjerryrelth/ghl-command",
5
- "description": "GoHighLevel MCP Server for Claude. 242 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.",
5
+ "description": "GoHighLevel MCP Server for Claude. 245 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"