@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. |
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
} |
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