@nightsquawktech/gohighlevel-mcp-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GHL_BASE_URL | No | Optional, default https://services.leadconnectorhq.com. | https://services.leadconnectorhq.com |
| GHL_API_TOKEN | Yes | Private Integration Token or OAuth sub-account access token. | |
| GHL_TIMEOUT_MS | No | Optional, default 30000. | 30000 |
| GHL_API_VERSION | No | Optional, default 2021-07-28. | 2021-07-28 |
| GHL_LOCATION_ID | Yes | Default sub-account/location ID. |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| ghl_list_custom_fieldsB | List custom fields for a GoHighLevel location from /locations/{locationId}/customFields. |
| ghl_get_custom_fieldA | Get one custom field for a GoHighLevel location from /locations/{locationId}/customFields/{id}. |
| ghl_create_custom_fieldB | Create a custom field for a GoHighLevel location. Write operation: do not run against live data without explicit approval. |
| ghl_update_custom_fieldA | Update a custom field through the current location-scoped API: PUT /locations/{locationId}/customFields/{id}. Write operation: do not run against live data without explicit approval. |
| ghl_delete_custom_fieldA | Delete a custom field from /locations/{locationId}/customFields/{id}. Requires confirm: true and owner approval before live execution. |
| ghl_list_custom_fields_v2A | List Custom Fields V2 fields/folders by object key with GET /custom-fields/object-key/{objectKey}. Supports Custom Objects and Company/Business per HighLevel docs. |
| ghl_get_custom_field_v2A | Get a Custom Fields V2 field or folder by ID with GET /custom-fields/{id}. |
| ghl_create_custom_field_v2A | Create a Custom Fields V2 field with POST /custom-fields/. Write operation: do not run against live data without explicit approval. |
| ghl_update_custom_field_v2C | Update a Custom Fields V2 field with PUT /custom-fields/{id}. Write operation: do not run against live data without explicit approval. |
| ghl_delete_custom_field_v2A | Delete a Custom Fields V2 field with DELETE /custom-fields/{id}. Requires confirm: true and owner approval before live execution. |
| ghl_create_custom_field_folderA | Create a Custom Fields V2 folder with POST /custom-fields/folder. Write operation: do not run against live data without explicit approval. |
| ghl_update_custom_field_folderA | Update a Custom Fields V2 folder name with PUT /custom-fields/folder/{id}. Write operation: do not run against live data without explicit approval. |
| ghl_delete_custom_field_folderA | Delete a Custom Fields V2 folder with DELETE /custom-fields/folder/{id}. Requires confirm: true and owner approval before live execution. |
| ghl_list_custom_valuesB | List custom values for a GoHighLevel location from /locations/{locationId}/customValues. |
| ghl_get_custom_valueB | Get one custom value from /locations/{locationId}/customValues/{id}. |
| ghl_create_custom_valueB | Create a custom value for a GoHighLevel location. Write operation: do not run against live data without explicit approval. |
| ghl_update_custom_valueA | Update a custom value from /locations/{locationId}/customValues/{id}. Write operation: do not run against live data without explicit approval. |
| ghl_delete_custom_valueA | Delete a custom value from /locations/{locationId}/customValues/{id}. Requires confirm: true and owner approval before live execution. |
| ghl_search_contactsA | Search contacts with POST /contacts/search. This is the preferred read path over deprecated GET /contacts/. |
| ghl_get_contactB | Get one GoHighLevel contact from /contacts/{contactId}. |
| ghl_create_contactA | Create a contact with POST /contacts/. Write operation: do not run against live data without explicit approval. |
| ghl_update_contactA | Update a contact with PUT /contacts/{contactId}. Write operation: do not run against live data without explicit approval. |
| ghl_upsert_contactC | Create or update a contact with POST /contacts/upsert. Write operation: do not run against live data without explicit approval. |
| ghl_delete_contactA | Delete one GoHighLevel contact from /contacts/{contactId}. Requires confirm: true and owner approval before live execution. |
| ghl_merge_contacts_delete_loserA | Preview or execute a guarded contact merge workaround: read both contacts, check loser history, delete loser, then update survivor with loser email. Requires confirm: true to execute. |
| ghl_add_contact_tagsB | Add tags to a contact with POST /contacts/{contactId}/tags. Write operation: do not run against live data without explicit approval. |
| ghl_remove_contact_tagsA | Remove tags from a contact with DELETE /contacts/{contactId}/tags. Requires confirm: true and owner approval before live execution. |
| ghl_add_contact_to_workflowA | Add a contact to a workflow with POST /contacts/{contactId}/workflow/{workflowId}. Write operation: do not run against live data without explicit approval. |
| ghl_remove_contact_from_workflowA | Remove a contact from a workflow with DELETE /contacts/{contactId}/workflow/{workflowId}. Requires confirm: true and owner approval before live execution. |
| ghl_get_contact_notesB | List notes for a contact from /contacts/{contactId}/notes. |
| ghl_create_contact_noteA | Create a note for a contact with POST /contacts/{contactId}/notes. Write operation: do not run against live data without explicit approval. |
| ghl_get_contact_tasksA | List tasks for a contact from /contacts/{contactId}/tasks. |
| ghl_create_contact_taskA | Create a task for a contact with POST /contacts/{contactId}/tasks. Write operation: do not run against live data without explicit approval. |
| ghl_list_tagsA | List tags for a GoHighLevel location from /locations/{locationId}/tags. |
| ghl_get_tagC | Get one tag from /locations/{locationId}/tags/{id}. |
| ghl_create_tagA | Create a location tag. Write operation: do not run against live data without explicit approval. |
| ghl_update_tagA | Update a location tag. Write operation: do not run against live data without explicit approval. |
| ghl_delete_tagA | Delete a location tag. Requires confirm: true and owner approval before live execution. |
| ghl_search_opportunitiesB | Search opportunities with GET /opportunities/search using GoHighLevel server-side filters. |
| ghl_get_pipelinesA | List opportunity pipelines with GET /opportunities/pipelines?locationId={locationId}. |
| ghl_get_opportunityA | Get one opportunity with GET /opportunities/{id}. |
| ghl_create_opportunityA | Create an opportunity with POST /opportunities/. Write operation: do not run against live data without explicit approval. |
| ghl_update_opportunityA | Update an opportunity with PUT /opportunities/{id}. Write operation: do not run against live data without explicit approval. |
| ghl_update_opportunity_statusA | Update opportunity status with PUT /opportunities/{id}/status. Write operation: do not run against live data without explicit approval. |
| ghl_delete_opportunityA | Delete an opportunity with DELETE /opportunities/{id}. Requires confirm: true and owner approval before live execution. |
| ghl_search_conversationsC | Search conversations with GET /conversations/search. |
| ghl_get_conversation_messagesA | List messages for a conversation with GET /conversations/{conversationId}/messages. |
| ghl_send_messageB | Send an outward-facing message with POST /conversations/messages. Requires confirm: true and owner approval before live execution. |
| ghl_list_calendarsB | List calendars with GET /calendars/?locationId={locationId}. |
| ghl_get_calendar_eventsB | List calendar events with GET /calendars/events. |
| ghl_get_free_slotsB | Get free slots for a calendar with GET /calendars/{id}/free-slots. |
| ghl_create_appointmentC | Create an appointment with POST /calendars/events/appointments. Write operation: do not run against live data without explicit approval. |
| ghl_update_appointmentA | Update an appointment with PUT /calendars/events/appointments/{id}. Write operation: do not run against live data without explicit approval. |
| ghl_delete_appointmentA | Delete a calendar event with DELETE /calendars/events/{id}. Requires confirm: true and owner approval before live execution. |
| ghl_get_locationA | Get one GoHighLevel location/sub-account with GET /locations/{locationId}. |
| ghl_list_usersB | List users for a location with GET /users/?locationId={locationId}. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/NightSquawk/gohighlevel-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server