GHL MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PORT | No | HTTP server port (used when TRANSPORT=http) | |
| TRANSPORT | No | Transport mode: stdio or http | stdio |
| GHL_API_KEY | Yes | Your GoHighLevel private integration token | |
| GHL_LOCATION_ID | Yes | Your GoHighLevel 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_search_contactsA | Search contacts in GoHighLevel by query, tags, filters, or custom fields. Returns paginated results. Args:
Returns: List of contacts with pagination metadata. |
| ghl_get_contactA | Get a single contact by ID with all details including custom fields, tags, and activity. |
| ghl_create_contactA | Create a new contact in GoHighLevel. Args:
Returns: Created contact object with ID. |
| ghl_update_contactA | Update an existing contact. Only pass fields you want to change. |
| ghl_delete_contactA | Permanently delete a contact. This cannot be undone. |
| ghl_upsert_contactA | Create or update a contact by email/phone. If a match is found, updates; otherwise creates new. |
| ghl_add_contact_tagsA | Add one or more tags to a contact. |
| ghl_remove_contact_tagsA | Remove one or more tags from a contact. |
| ghl_get_contact_notesB | Get all notes for a contact. |
| ghl_create_contact_noteA | Add a note to a contact. |
| ghl_delete_contact_noteA | Delete a specific note from a contact. |
| ghl_get_contact_tasksA | Get all tasks for a contact. |
| ghl_create_contact_taskC | Create a task for a contact. |
| ghl_update_contact_taskA | Update an existing task for a contact. |
| ghl_add_contact_to_workflowA | Add a contact to a GHL workflow/automation. |
| ghl_remove_contact_from_workflowA | Remove a contact from a GHL workflow. |
| ghl_search_conversationsA | Search conversations by contact ID, query, or status. Returns threaded conversations with latest message info. |
| ghl_get_conversationA | Get a single conversation by ID with metadata. |
| ghl_get_messagesA | Get messages in a conversation thread. Returns SMS, email, and other message types. |
| ghl_send_messageA | Send a message (SMS, Email, WhatsApp, or other) to a contact via GoHighLevel. Args:
Returns: Sent message object with ID and status. |
| ghl_cancel_scheduled_messageA | Cancel a previously scheduled message. |
| ghl_update_conversationA | Update conversation status (starred, unread, etc.). |
| ghl_list_calendarsB | Get all calendars for the location. |
| ghl_get_calendarB | Get details of a specific calendar. |
| ghl_get_free_slotsA | Get available booking slots for a calendar within a date range. |
| ghl_get_eventsA | Get appointments/events for a location, optionally filtered by calendar, contact, or date range. |
| ghl_create_eventA | Create a new appointment/event on a GHL calendar. |
| ghl_update_eventB | Update an existing appointment/event. |
| ghl_delete_eventB | Delete/cancel an appointment. |
| ghl_create_calendarB | Create a new calendar in GoHighLevel. |
| ghl_search_opportunitiesC | Search opportunities (deals) by pipeline, stage, status, contact, or monetary value. |
| ghl_get_opportunityA | Get details of a specific opportunity/deal. |
| ghl_create_opportunityB | Create a new opportunity/deal in a pipeline. |
| ghl_update_opportunityA | Update an existing opportunity — move stages, change value, update status, etc. |
| ghl_delete_opportunityA | Permanently delete an opportunity. |
| ghl_update_opportunity_statusA | Change the status of an opportunity (open, won, lost, abandoned). |
| ghl_list_pipelinesA | Get all pipelines and their stages for a location. |
| ghl_list_ordersC | Get payment orders for a location. |
| ghl_get_orderA | Get details of a specific payment order. |
| ghl_list_transactionsB | Get payment transactions for a location. |
| ghl_list_subscriptionsA | Get active subscriptions for a location. |
| ghl_list_invoicesB | Get invoices for a location. Filter by status, contact, or date range. |
| ghl_get_invoiceA | Get details of a specific invoice. |
| ghl_create_invoiceA | Create a new invoice for a contact. |
| ghl_send_invoiceB | Send an invoice to the contact via email. |
| ghl_void_invoiceB | Void an existing invoice. |
| ghl_list_workflowsA | Get all workflows/automations for a location. |
| ghl_list_custom_fieldsA | Get all custom fields for contacts in a location. |
| ghl_create_custom_fieldA | Create a new custom field for contacts. |
| ghl_get_locationA | Get details of a GHL location/sub-account including settings, address, and configuration. |
| ghl_get_location_tagsA | Get all tags defined in a location. |
| ghl_create_location_tagB | Create a new tag in the location. |
| ghl_search_usersB | Search for users/team members in a location. |
| ghl_list_formsA | Get all forms for a location. |
| ghl_get_form_submissionsB | Get submissions for forms in a location. |
| ghl_list_surveysA | Get all surveys for a location. |
| ghl_list_campaignsC | Get all campaigns for a location. |
| ghl_list_social_postsC | Get scheduled and published social media posts. |
| ghl_create_social_postA | Schedule or publish a social media post. |
| ghl_list_social_accountsB | Get all connected social media accounts (Facebook, Instagram, Google, etc.). |
| ghl_list_funnelsB | Get all funnels/websites for a location. |
| ghl_list_productsA | Get all products for a location. |
| ghl_list_blogsB | Get all blogs for a location. |
| ghl_list_linksA | Get all trigger links for a location. |
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 64 tools
Most tools follow a clear resource+action pattern making them easy to distinguish, and the ghl_ prefix groups them coherently. The main overlap is ghl_update_opportunity and ghl_update_opportunity_status, since update_opportunity already claims to handle status changes, and the many list_* tools for similar marketing resources (forms, surveys, funnels, blogs) require careful attention.
Every tool uses the ghl_ prefix with a consistent snake_case verb_noun pattern (list, get, create, update, delete, search, send, add, remove). Verbs are used predictably across resource types, with no mixed casing or stylistic deviations.
64 tools is far beyond the range an agent can efficiently navigate, despite the breadth of the GoHighLevel domain. While each tool targets a distinct resource, the sheer size creates significant tool-selection overhead and makes the server unwieldy compared to well-scoped alternatives.
Core lifecycles are well covered: contacts have full CRUD plus tags/notes/tasks/workflow operations, opportunities have complete CRUD plus status updates, and invoices cover list/get/create/send/void. Minor gaps exist such as no delete for contact tasks, no update for contact notes, and list-only access to funnels/blogs/links/products, but agents can work around these.