ghl-mcp-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GHL_APP_URL | No | The URL you log into (https://app.gohighlevel.com or your white-label domain) for browser transport. | |
| GHL_CDP_URL | No | Chrome DevTools endpoint (browser transport). | http://127.0.0.1:9222 |
| GHL_TIMEOUT | No | Per-request timeout in seconds. | 30 |
| GHL_API_TOKEN | No | Bearer token for the internal API (required for token transport). | |
| GHL_READ_ONLY | No | Set to '1' to disable all write tools. | |
| GHL_TRANSPORT | No | Transport mode: 'browser' or 'token'. Defaults to 'token' if GHL_API_TOKEN is set, else 'browser'. | |
| GHL_COMPANY_ID | No | Agency ID, only for ghl_a2p_registration_status. | |
| GHL_LOCATION_ID | No | Default sub-account ID (recommended). | |
| GHL_STORAGE_STATE | No | Path to your exported Playwright session (headless fallback). |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| ghl_list_workflowsB | List automation workflows and folders of a sub-account. |
| ghl_get_workflowA | Get one workflow in full: triggers, actions (nodes) and branches. |
| ghl_list_number_poolsB | List number pools (dynamic call-tracking numbers shown on websites). |
| ghl_list_phone_numbersC | List the phone numbers provisioned in the sub-account's phone system. |
| ghl_a2p_statusA | Read the phone-system sub-account record, including A2P 10DLC (US SMS) state. Read-only. |
| ghl_a2p_registration_statusA | Read the A2P 10DLC standard registration settings of a sub-account. Never submits anything. |
| ghl_list_formsC | List the forms of a sub-account. |
| ghl_list_funnelsB | List funnels and websites of a sub-account. |
| ghl_list_custom_fieldsB | List custom fields (contact and opportunity models), including their ids and fieldKeys. |
| ghl_list_pipelinesC | List opportunity pipelines and their stages. |
| ghl_create_custom_fieldA | Create a custom field. WRITES to the live account. |
| ghl_update_custom_fieldB | Rename a custom field. WRITES to the live account. |
| ghl_delete_custom_fieldA | Delete a custom field. DESTRUCTIVE: data stored in the field is lost. |
| ghl_create_custom_valueC | Create a custom value (a reusable sub-account variable such as {{custom_values.x}}). WRITES. |
| ghl_create_tagC | Create a contact tag. WRITES to the live account. |
| ghl_create_pipelineC | Create an opportunity pipeline. WRITES to the live account. |
| ghl_create_workflowA | Create an empty draft workflow and return its id. WRITES to the live account. Triggers and actions can then be added with ghl_call (see docs/ENDPOINTS.md). |
| ghl_delete_workflowB | Delete a workflow by UUID. DESTRUCTIVE. |
| ghl_create_formA | Create an empty form and return its id. WRITES to the live account. |
| ghl_create_contactA | Create a contact. WRITES to the live account. Provide at least an email or a phone. |
| ghl_callA | Generic passthrough to any internal endpoint listed in docs/ENDPOINTS.md. Use it for anything without a dedicated tool. Non-GET methods WRITE to the live account and are refused when GHL_READ_ONLY is enabled. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 21 tools
Each tool targets a distinct resource and action—custom fields, workflows, forms, contacts, pipelines, tags, phone numbers, etc. Even the two A2P status tools are clearly separated by their scope (sub-account record vs. registration settings). The generic ghl_call is explicitly marked as a passthrough for anything else, so no ambiguity.
All tools share the ghl_ prefix and follow a verb_noun pattern (create, update, delete, list, get, call). Minor inconsistencies include plural vs. singular nouns (e.g., ghl_list_number_pools vs. ghl_list_forms) and two non-verb tools (ghl_a2p_status, ghl_a2p_registration_status), but the overall convention is predictable and readable.
With 21 tools, the count is slightly above the ideal range, but it is justified by the breadth of the GoHighLevel domain—covering CRM entities, phone systems, funnels, workflows, and more. Each tool serves a distinct purpose, so there is no redundancy; the count feels appropriate for the scope.
The tool surface has notable gaps: contacts only have create (no list/update/delete), tags only have create, custom values only have create, and forms/pipelines lack update/delete. However, the generic ghl_call passthrough provides a fallback for any missing endpoint, so agents are not dead-ended. This makes the set partially complete.