Skip to main content
Glama
GHL Workflow MCP

GHL Workflow MCP

by ampware-io

GHL Workflow MCP

An open-source Model Context Protocol server that lets Claude (or any MCP client) read, create and edit GoHighLevel workflows through your own logged-in Chrome session.

It needs no API key and no marketplace app install. The server attaches to a Chrome window over the DevTools protocol, picks up the session token GoHighLevel already holds, and calls the same endpoints the workflow builder uses.

Status: 0.1.0, early release. The write tools check every step against a strict shape validator before anything is saved, but always review a workflow in the GHL builder before you publish it.

What you get

30 tools, all free:

Area

Tools

Connection

launch_chrome, reconnect, test_connection

Read

list_workflows, get_workflow, read_workflow_outline, read_workflow_step, audit_workflow

Write

create_workflow, update_workflow, patch_workflow, delete_workflow, publish_workflow, clone_workflow

Folders

list_folders, create_folder, rename_folder, delete_folder, move_workflow

Location data

list_tags, create_tag, list_users, list_pipelines, list_custom_fields, list_custom_values, list_associations, list_business_fields, list_forms, list_trigger_links, list_email_templates

patch_workflow applies small edits (insert, update, move or delete one step, or rewire a pointer) without resending the whole workflow. It rewires the step pointers on the server side, and it refuses the write if the workflow changed since you last read it.

Related MCP server: GoHighLevel MCP Server

Requirements

  • Node.js 20 or newer

  • Google Chrome (or Chromium)

  • A GoHighLevel account with access to the sub-account you want to work in

Install

Install from GitHub for now; the npm package follows.

Claude Code

claude mcp add ghl-workflow -- npx -y github:ampware-io/ghl-workflow-mcp-oss#v0.1.1

Claude Desktop, Cursor and other MCP clients

Add this to your client's MCP config (for Claude Desktop that is claude_desktop_config.json):

{
  "mcpServers": {
    "ghl-workflow": {
      "command": "npx",
      "args": ["-y", "github:ampware-io/ghl-workflow-mcp-oss#v0.1.1"]
    }
  }
}

From source

git clone https://github.com/ampware-io/ghl-workflow-mcp-oss.git
cd ghl-workflow-mcp-oss
npm install
npm test
node src/index.js --version

Then point your MCP client at node /path/to/ghl-workflow-mcp/src/index.js.

Connecting to GoHighLevel

  1. Ask Claude to connect to GoHighLevel. It calls launch_chrome, which opens a dedicated Chrome window. The window uses its own profile in ~/.ghl-wkfl-mcp/chrome-profile, so your everyday browser is untouched.

  2. Log in to GoHighLevel in that window and open the sub-account you want.

  3. The server detects the sub-account and connects. test_connection confirms it.

To switch sub-accounts, change sub-account in that window, or call reconnect to pick a different tab.

If you would rather start Chrome yourself, launch it with the debug port:

google-chrome --remote-debugging-port=49222 --user-data-dir="$HOME/.ghl-wkfl-mcp/chrome-profile"

Options

Flag / env var

Default

Purpose

--port <n> / GHL_MCP_CDP_PORT

49222

Chrome DevTools debug port

--no-kill-chrome-on-exit

off

Leave the Chrome window open when the server stops

--verbose

off

Debug logging to stderr

GHL_MCP_CACHE_DIR

~/.ghl-wkfl/cache

Local cache of workflows read by patch_workflow

--version

Print the version and exit

How writes are validated

Every action and trigger in a create, update or patch goes through a strict shape validator (src/utils/action-shape-validator.js). It checks each step against the registry in src/registry/action-shapes.json:

  • Unknown step types are dropped, never sent.

  • Steps whose attributes don't match the expected shape are dropped.

  • Anything dropped is listed in skippedActions[], with a reason, and advisory notes go in warnings[].

  • If anything was dropped, the workflow is saved as a draft, so a half-built workflow is never published.

The validator tells you a step is wrong. It does not tell you what every field means.

The step reference: GHL Workflow Docs MCP

Building a correct workflow needs more than access. You need to know each trigger and action type's JSON shape, its required and optional fields, the allowed values, and how steps link together (next, if/else branches, waits, goto). That reference is published separately as the hosted GHL Workflow Docs MCP (https://workflow-docs.ampware.io/mcp): a step reference, captured from 1,600+ real workflows and being live-verified, with worked examples that your assistant can query while it builds. Connect both servers and Claude gets access plus the knowledge to use it well.

Privacy and safety

  • Everything runs on your machine. The server talks only to Chrome on 127.0.0.1 and to GoHighLevel's own endpoints, as you.

  • No telemetry, no licence check and no phone-home.

  • The session token is read from your browser and is never written to disk. The only local files are the dedicated Chrome profile and the workflow cache described above.

  • The server can do anything your GHL user can do in the workflow builder, including deleting workflows. Use a user with the permissions you're comfortable giving an assistant.

Development

npm install
npm test        # node --test 'src/**/*.test.js'

The tests run offline. GoHighLevel and Chrome are mocked, and all fixtures are synthetic.

Disclaimer

This is an independent project. It is not affiliated with, endorsed by or supported by HighLevel Inc. It uses the endpoints GoHighLevel's own web app uses, and those can change without notice.

License

MIT

Available Tools

30 tools
audit_workflowA
Read-only

Audit a workflow for broken entity references. Scans all actions and triggers for pipeline, stage, user, custom field, and custom value IDs, then validates each against the location data. Returns which references are valid, which are broken, and suggests replacements.

Inputs: workflowId (required).

clone_workflowA
Destructive

Clone an existing workflow, creating an independent copy on the same location. GHL handles all UUID remapping and action chain wiring server-side. By default the clone is named "Copy - {original name}" — pass a custom name to override. Returns the full cloned workflow object.

Inputs: workflowId (required), name.

create_folderB
Destructive

Create a new workflow folder in the current GHL location. Returns the created folder object.

Inputs: name (required).

create_tagC
Destructive

Create a new tag in the current GoHighLevel location.

Inputs: tagName (required).

create_workflowA
Destructive

Create a new workflow. Action and trigger types must come from the enums in this schema. Use the then/else scaffold for if_else conditions; the verbose three-sibling form is also accepted. Salvage decisions surface in skippedActions[] (HARD drops) and warnings[] (advisory). When any HARD drop occurs, status is forced to draft. For field meanings, allowed values and worked examples for every step type, use the GHL Workflow Docs MCP.

Inputs: name (required), status, actions, timezone, +6 more.

delete_folderA
Destructive

Delete a workflow folder. Any workflows inside the folder are automatically moved to root level by GHL. Cannot be undone.

Inputs: folderId (required).

delete_workflowA
Destructive

Delete a workflow permanently. Returns the deleted workflow name for confirmation. No undo — the workflow is removed from GHL immediately.

Inputs: workflowId (required).

get_workflowA
Read-only

Get a GoHighLevel workflow's structure including actions and triggers. By default returns a summary with action names, types, and ordering (compact). Set includeActionDetails=true for full action attributes (warning: responses can be very large). Call list_workflows first to find workflow IDs.

Inputs: workflowId (required), includeActionDetails.

launch_chromeA

Launch a dedicated Chrome window with GoHighLevel. Call this when test_connection fails because Chrome is not running. First call without confirm returns instructions for the user. Call again with confirm=true after the user agrees to proceed.

Inputs: confirm.

list_associationsA
Read-only

List object associations for contacts in the current GoHighLevel location. Returns association types and cardinality between objects.

Inputs: no named parameters.

list_business_fieldsB
Read-only

List the business object definition and its fields in the current GoHighLevel location. Returns the object metadata and all custom/standard fields.

Inputs: no named parameters.

list_custom_fieldsA
Read-only

List custom fields in the current GoHighLevel location. Requires a model parameter to specify which entity type (contact or opportunity). Contact and opportunity custom fields use different API endpoints internally.

Inputs: model (required).

list_custom_valuesA
Read-only

List custom values (template variables) for conversations in the current GoHighLevel location. Returns system-defined static variables and location-specific custom values.

Inputs: no named parameters.

list_email_templatesA
Read-only

List all email templates in the current GoHighLevel location. Returns template names and IDs for use in workflow email actions.

Inputs: no named parameters.

list_foldersA
Read-only

List all workflow folders in the current GHL location. Returns folder names and IDs. Use folder IDs with move_workflow or list_workflows (folderId param).

Inputs: no named parameters.

list_formsA
Read-only

List all forms in the current GoHighLevel location. Returns form names and IDs.

Inputs: no named parameters.

list_pipelinesA
Read-only

List all opportunity pipelines in the current GoHighLevel location. Returns pipeline names with their stages (name, position).

Inputs: no named parameters.

list_tagsA
Read-only

List all tags in the current GoHighLevel location. Returns tag names and IDs.

Inputs: no named parameters.

list_usersA
Read-only

List all users with access to the current GoHighLevel location. Returns user names, emails, roles, and permissions.

Inputs: no named parameters.

list_workflowsA
Read-only

List all workflows in the current GoHighLevel location. Returns workflow summaries including name, ID, status, and dates. Auto-fetches all pages by default. Optionally pass limit/offset to get a specific page, or sortBy/sortOrder to control ordering.

Inputs: limit, offset, sortBy, folderId, +1 more.

move_workflowA

Move a workflow into a folder, or back to root level. To move to root, omit folderId or pass null.

Inputs: workflowId (required), folderId.

patch_workflowA
Destructive

Apply an ordered list of patch operations to a workflow with deterministic server-side pointer rewiring. Ops: insert_after / update_step / delete_step / move / rewire_step (plus add_trigger / update_trigger / remove_trigger). Param roles — step_id = the SUBJECT the op acts on (update_step/delete_step/move/rewire_step); after_step_id = the ANCHOR to position after (insert_after/move); next = the target pointer for rewire_step (a step ID or null to terminate); trigger_id = the subject trigger. insert_after also accepts step_id as an alias for after_step_id. rewire_step overwrites a non-branched step scalar next in place (no splice, no reorder) — it does NOT validate for cycles or orphaned downstream steps; the caller owns flow correctness. All-or-nothing: any op failure aborts before any GHL write. Detects external workflow changes via the version field. Use after read_workflow_outline + read_workflow_step. For whole-workflow rewrites or branched-step splices, fall back to update_workflow. For field meanings, allowed values and worked examples for every step type, use the GHL Workflow Docs MCP.

Inputs: operations (required), workflowId (required).

publish_workflowA
Destructive

Publish a draft workflow, changing its status to published. The workflow will become active and start processing contacts when triggered. Returns the full workflow object after publishing.

Inputs: workflowId (required).

read_workflow_outlineA
Read-only

(FREE) Cheap targeted read — returns workflow metadata + step IDs/types/names/order/next/parentKey only (no attributes). Prefer this as the FIRST read when editing a workflow; follow with read_workflow_step for any step you intend to mutate.

Inputs: workflowId (required).

read_workflow_stepA
Read-only

(FREE) Returns one step's full JSON for a given workflow + step ID. Use after read_workflow_outline to inspect a specific step before patching it. Returns a structured step_not_found error with valid_step_ids when the step does not exist.

Inputs: stepId (required), workflowId (required).

reconnectA

Re-scan Chrome for GoHighLevel tabs and switch to a different tab or location. Use this to change locations without restarting the server. If called with no targetId, lists available GHL tabs. If called with a targetId, switches to that tab.

Inputs: targetId.

rename_folderA

Rename an existing workflow folder.

Inputs: name (required), folderId (required).

test_connectionA
Read-only

Verify Chrome is reachable, GHL tab is found, and Firebase token is extractable. Call this first to confirm the MCP server can communicate with GoHighLevel.

Inputs: no named parameters.

update_workflowA
Destructive

Update an existing workflow with partial changes. Action and trigger types must come from the enums in this schema. Use the then/else scaffold for if_else; verbose three-sibling form also accepted. Pass only fields you want to change. Salvage decisions surface in skippedActions[] and warnings[]. When any HARD drop occurs, status is forced to draft. For field meanings, allowed values and worked examples for every step type, use the GHL Workflow Docs MCP.

Inputs: workflowId (required), name, status, actions, +7 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.7/5.0

    Scored across 30 tools

    Disambiguation5/5

    Each tool has a clearly distinct purpose, with descriptions explicitly guiding when to use which tool (e.g., get_workflow vs read_workflow_outline vs read_workflow_step, and update_workflow vs patch_workflow). The list_* tools are separated by entity type, and connection tools are unique. No two tools appear to do the same thing.

    Naming Consistency5/5

    All tool names follow a consistent snake_case verb_noun pattern (e.g., list_tags, create_workflow, read_workflow_step, patch_workflow). The few single-verb names like reconnect and launch_chrome are still clear and consistent with the overall style.

    Tool Count3/5

    With 30 tools, the set is heavy, but the server covers a broad GoHighLevel domain including many entity types needed for workflow construction. Each tool serves a distinct purpose, though some consolidation (e.g., a generic list tool with a type parameter) could reduce the count without losing functionality.

    Completeness4/5

    The server provides comprehensive CRUD and lifecycle coverage for workflows (create, read, update, delete, publish, clone, patch) and folders, plus all the list operations needed to reference GHL entities. Minor gaps exist, such as no update or delete for tags, but these are not critical for core workflow management.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Connects Claude Desktop to GoHighLevel CRM, providing 269+ tools across 19 categories for complete contact management, messaging, sales, marketing, e-commerce, and business operations through AI automation.
      14 npm
      196
      ISC
    • A
      license
      A
      quality
      C
      maintenance
      GoHighLevel MCP server for Claude. 212 tools across 43 modules, including the only programmatic GHL workflow builder (private API, reverse-engineered), funnel + page editor, form builder, pipeline builder, pre-deploy validator, multi-sub-account switching, bulk operations, and full account export. $97 one-time, lifetime updates.
      4
      1
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables Claude to manage GoHighLevel CRM contacts, pipelines, and workflows through natural language commands.
      112 npm
      MIT