Skip to main content
Glama
GHL MCP Server

GHL MCP Server

GHL MCP Server

GoHighLevel MCP Server for Claude, N8N, and Custom AI Agents Built by Saurabh K Shah (https://saurabhshah.com)

A comprehensive Model Context Protocol (MCP) server that connects AI assistants directly to your GoHighLevel CRM. Supports 60+ tools across contacts, conversations, calendars, pipelines, payments, invoices, workflows, custom fields, social media, and more.

Features

  • Contacts: Search, create, update, delete, upsert, tags, notes, tasks, workflow management

  • Conversations & Messaging: SMS, Email, WhatsApp, search threads, send messages, schedule sends

  • Calendars & Appointments: List calendars, get free slots, create/update/delete events

  • Opportunities & Pipelines: Full deal management, stage transitions, pipeline listing

  • Payments & Invoices: Orders, transactions, subscriptions, create/send/void invoices

  • Workflows: List all workflows, add/remove contacts from workflows

  • Custom Fields: List, create custom fields for contacts

  • Locations: Sub-account details, tags management

  • Users: Search team members

  • Forms & Surveys: List forms/surveys, get submissions

  • Campaigns: List all campaigns

  • Social Media: List/create posts, view connected accounts

  • Funnels & Blogs: List funnels, blogs

  • Products: List products and prices

Related MCP server: GoHighLevel MCP Server

Quick Start

1. Get Your GHL Credentials

  1. Log into GoHighLevel → Settings → Private Integrations

  2. Click Create New Integration

  3. Name it (e.g., "Claude MCP Server")

  4. Select all scopes you need (contacts, conversations, calendars, payments, etc.)

  5. Copy the Private Integration Token

  6. Note your Location ID (visible in the URL when viewing any sub-account)

2. Install & Configure

git clone https://github.com/northrosetech/ghl-mcp-server.git
cd ghl-mcp-server
npm install
cp .env.example .env

Edit .env:

GHL_API_KEY=your_private_integration_token_here
GHL_LOCATION_ID=your_location_id_here

Build:

npm run build

3. Connect to Claude Desktop

Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on Mac):

{
  "mcpServers": {
    "ghl": {
      "command": "node",
      "args": ["/absolute/path/to/ghl-mcp-server/dist/index.js"],
      "env": {
        "GHL_API_KEY": "your_private_integration_token",
        "GHL_LOCATION_ID": "your_location_id",
        "TRANSPORT": "stdio"
      }
    }
  }
}

Restart Claude Desktop. You should see GHL tools available.

4. Connect to N8N (HTTP Mode)

Start the server in HTTP mode:

TRANSPORT=http PORT=3001 GHL_API_KEY=your_token GHL_LOCATION_ID=your_id node dist/index.js

In N8N:

  1. Add an MCP Client node

  2. Set URL to http://localhost:3001/mcp

  3. Set transport to HTTP Streamable

  4. Use the GHL tools in your workflows

5. Connect to Claude Code

Add to your project's .mcp.json:

{
  "mcpServers": {
    "ghl": {
      "command": "node",
      "args": ["./ghl-mcp-server/dist/index.js"],
      "env": {
        "GHL_API_KEY": "your_token",
        "GHL_LOCATION_ID": "your_id"
      }
    }
  }
}

Available Tools (60+)

Contacts (15 tools)

Tool

Description

ghl_search_contacts

Search contacts by query, tags, filters

ghl_get_contact

Get contact by ID

ghl_create_contact

Create new contact

ghl_update_contact

Update existing contact

ghl_delete_contact

Delete contact

ghl_upsert_contact

Create or update by email/phone

ghl_add_contact_tags

Add tags to contact

ghl_remove_contact_tags

Remove tags from contact

ghl_get_contact_notes

Get contact notes

ghl_create_contact_note

Add note to contact

ghl_delete_contact_note

Delete a note

ghl_get_contact_tasks

Get contact tasks

ghl_create_contact_task

Create task for contact

ghl_update_contact_task

Update task

ghl_add_contact_to_workflow

Add contact to workflow

ghl_remove_contact_from_workflow

Remove from workflow

Conversations & Messaging (6 tools)

Tool

Description

ghl_search_conversations

Search conversation threads

ghl_get_conversation

Get conversation details

ghl_get_messages

Get messages in a thread

ghl_send_message

Send SMS/Email/WhatsApp/etc.

ghl_cancel_scheduled_message

Cancel scheduled message

ghl_update_conversation

Update conversation status

Calendars & Appointments (8 tools)

Tool

Description

ghl_list_calendars

List all calendars

ghl_get_calendar

Get calendar details

ghl_get_free_slots

Get available booking slots

ghl_get_events

Get appointments/events

ghl_create_event

Create appointment

ghl_update_event

Update appointment

ghl_delete_event

Delete appointment

ghl_create_calendar

Create new calendar

Opportunities & Pipelines (7 tools)

Tool

Description

ghl_search_opportunities

Search deals

ghl_get_opportunity

Get deal details

ghl_create_opportunity

Create new deal

ghl_update_opportunity

Update deal / move stages

ghl_delete_opportunity

Delete deal

ghl_update_opportunity_status

Change deal status

ghl_list_pipelines

List pipelines & stages

Payments & Invoices (9 tools)

Tool

Description

ghl_list_orders

List payment orders

ghl_get_order

Get order details

ghl_list_transactions

List transactions

ghl_list_subscriptions

List subscriptions

ghl_list_invoices

List invoices

ghl_get_invoice

Get invoice details

ghl_create_invoice

Create invoice

ghl_send_invoice

Email invoice to contact

ghl_void_invoice

Void an invoice

Other Tools (15+ tools)

Tool

Description

ghl_list_workflows

List all workflows

ghl_list_custom_fields

List custom fields

ghl_create_custom_field

Create custom field

ghl_get_location

Get location details

ghl_get_location_tags

Get location tags

ghl_create_location_tag

Create new tag

ghl_search_users

Search team members

ghl_list_forms

List forms

ghl_get_form_submissions

Get form submissions

ghl_list_surveys

List surveys

ghl_list_campaigns

List campaigns

ghl_list_social_posts

List social posts

ghl_create_social_post

Create/schedule social post

ghl_list_social_accounts

List connected social accounts

ghl_list_funnels

List funnels/websites

ghl_list_products

List products

ghl_list_blogs

List blogs

ghl_list_links

List trigger links

Architecture

ghl-mcp-server/
├── src/
│   ├── index.ts              # Entry point (stdio + HTTP transport)
│   ├── constants.ts          # All GHL API endpoints & config
│   ├── types.ts              # TypeScript interfaces
│   ├── services/
│   │   └── api-client.ts     # Auth, rate limiting, error handling
│   └── tools/
│       ├── contacts.ts       # Contact management tools
│       ├── conversations.ts  # Messaging tools
│       ├── calendars.ts      # Calendar & appointment tools
│       ├── opportunities.ts  # Pipeline & deal tools
│       └── business.ts       # Payments, invoices, workflows, etc.
├── dist/                     # Compiled JS
├── package.json
├── tsconfig.json
└── .env.example

Rate Limits

The server includes built-in rate limiting matching GHL's limits:

  • Burst: 100 requests per 10 seconds

  • Daily: 200,000 requests per day

The server automatically queues and retries when limits are approached.

Error Handling

All tools return actionable error messages with hints:

  • 401: Check your API key (must be Private Integration Token)

  • 403: Missing scopes — edit your Private Integration in GHL Settings

  • 404: Resource not found — check the ID

  • 422: Validation error with details

  • 429: Rate limit — automatic retry

License

MIT — Built by Saurabh K Shah (https://saurabhshah.com)

Available Tools

64 tools
ghl_add_contact_tagsAdd Tags to ContactA
Idempotent

Add one or more tags to a contact.

Inputs: tags (required), contactId (required).

ghl_add_contact_to_workflowAdd Contact to WorkflowA
Idempotent

Add a contact to a GHL workflow/automation.

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

ghl_cancel_scheduled_messageCancel Scheduled MessageA
Idempotent

Cancel a previously scheduled message.

Inputs: messageId (required).

ghl_create_calendarCreate GHL CalendarB

Create a new calendar in GoHighLevel.

Inputs: name (required), slug, locationId, description, +1 more.

ghl_create_contactCreate GHL ContactA

Create a new contact in GoHighLevel.

Args:

  • firstName, lastName, email, phone (strings): Basic contact info

  • tags (string[]): Tags to apply

  • source (string): Lead source

  • customFields (array): Custom field values as [{id, field_value}]

  • locationId (string): Location ID (uses default if omitted)

Returns: Created contact object with ID.

Inputs: dnd, city, name, tags, +14 more.

ghl_create_contact_noteCreate Contact NoteA

Add a note to a contact.

Inputs: body (required), contactId (required), userId.

ghl_create_contact_taskCreate Contact TaskC

Create a task for a contact.

Inputs: title (required), contactId (required), body, dueDate, +2 more.

ghl_create_custom_fieldCreate Custom FieldA

Create a new custom field for contacts.

Inputs: name (required), dataType (required), options, locationId, +1 more.

ghl_create_eventCreate Calendar EventA

Create a new appointment/event on a GHL calendar.

Inputs: endTime (required), contactId (required), startTime (required), calendarId (required), +7 more.

ghl_create_invoiceCreate InvoiceA

Create a new invoice for a contact.

Inputs: name (required), items (required), contactId (required), dueDate, +2 more.

ghl_create_location_tagCreate Location TagB

Create a new tag in the location.

Inputs: name (required), locationId.

ghl_create_opportunityCreate GHL OpportunityB

Create a new opportunity/deal in a pipeline.

Inputs: name (required), contactId (required), pipelineId (required), pipelineStageId (required), +6 more.

ghl_create_social_postCreate Social Media PostA

Schedule or publish a social media post.

Inputs: content (required), accountIds (required), mediaUrls, locationId, +1 more.

ghl_delete_contactDelete GHL ContactA
Destructive

Permanently delete a contact. This cannot be undone.

Inputs: contactId (required).

ghl_delete_contact_noteDelete Contact NoteA
Destructive

Delete a specific note from a contact.

Inputs: noteId (required), contactId (required).

ghl_delete_eventDelete Calendar EventB
Destructive

Delete/cancel an appointment.

Inputs: eventId (required).

ghl_delete_opportunityDelete GHL OpportunityA
Destructive

Permanently delete an opportunity.

Inputs: opportunityId (required).

ghl_get_calendarGet GHL CalendarB
Read-onlyIdempotent

Get details of a specific calendar.

Inputs: calendarId (required).

ghl_get_contactGet GHL ContactA
Read-onlyIdempotent

Get a single contact by ID with all details including custom fields, tags, and activity.

Inputs: contactId (required).

ghl_get_contact_notesGet Contact NotesB
Read-onlyIdempotent

Get all notes for a contact.

Inputs: contactId (required).

ghl_get_contact_tasksGet Contact TasksA
Read-onlyIdempotent

Get all tasks for a contact.

Inputs: contactId (required).

ghl_get_conversationGet GHL ConversationA
Read-onlyIdempotent

Get a single conversation by ID with metadata.

Inputs: conversationId (required).

ghl_get_eventsGet Calendar EventsA
Read-onlyIdempotent

Get appointments/events for a location, optionally filtered by calendar, contact, or date range.

Inputs: userId, endTime, contactId, startTime, +2 more.

ghl_get_form_submissionsGet Form SubmissionsB
Read-onlyIdempotent

Get submissions for forms in a location.

Inputs: limit, formId, locationId.

ghl_get_free_slotsGet Calendar Free SlotsA
Read-onlyIdempotent

Get available booking slots for a calendar within a date range.

Inputs: endDate (required), startDate (required), calendarId (required), timezone.

ghl_get_invoiceGet InvoiceA
Read-onlyIdempotent

Get details of a specific invoice.

Inputs: invoiceId (required).

ghl_get_locationGet Location DetailsA
Read-onlyIdempotent

Get details of a GHL location/sub-account including settings, address, and configuration.

Inputs: locationId.

ghl_get_location_tagsGet Location TagsA
Read-onlyIdempotent

Get all tags defined in a location.

Inputs: locationId.

ghl_get_messagesGet Conversation MessagesA
Read-onlyIdempotent

Get messages in a conversation thread. Returns SMS, email, and other message types.

Inputs: conversationId (required), type, limit.

ghl_get_opportunityGet GHL OpportunityA
Read-onlyIdempotent

Get details of a specific opportunity/deal.

Inputs: opportunityId (required).

ghl_get_orderGet Payment OrderA
Read-onlyIdempotent

Get details of a specific payment order.

Inputs: orderId (required).

ghl_list_blogsList BlogsB
Read-onlyIdempotent

Get all blogs for a location.

Inputs: locationId.

ghl_list_calendarsList GHL CalendarsB
Read-onlyIdempotent

Get all calendars for the location.

Inputs: locationId.

ghl_list_campaignsList CampaignsC
Read-onlyIdempotent

Get all campaigns for a location.

Inputs: locationId.

ghl_list_custom_fieldsList Custom FieldsA
Read-onlyIdempotent

Get all custom fields for contacts in a location.

Inputs: locationId.

ghl_list_formsList FormsA
Read-onlyIdempotent

Get all forms for a location.

Inputs: locationId.

ghl_list_funnelsList FunnelsB
Read-onlyIdempotent

Get all funnels/websites for a location.

Inputs: locationId.

ghl_list_invoicesList InvoicesB
Read-onlyIdempotent

Get invoices for a location. Filter by status, contact, or date range.

Inputs: limit, status, contactId, locationId.

ghl_list_ordersList Payment OrdersC
Read-onlyIdempotent

Get payment orders for a location.

Inputs: limit, offset, locationId.

ghl_list_pipelinesList GHL PipelinesA
Read-onlyIdempotent

Get all pipelines and their stages for a location.

Inputs: locationId.

ghl_list_productsList ProductsA
Read-onlyIdempotent

Get all products for a location.

Inputs: locationId.

ghl_list_social_accountsList Connected Social AccountsB
Read-onlyIdempotent

Get all connected social media accounts (Facebook, Instagram, Google, etc.).

Inputs: locationId.

ghl_list_social_postsList Social Media PostsC
Read-onlyIdempotent

Get scheduled and published social media posts.

Inputs: limit, locationId.

ghl_list_subscriptionsList SubscriptionsA
Read-onlyIdempotent

Get active subscriptions for a location.

Inputs: limit, locationId.

ghl_list_surveysList SurveysA
Read-onlyIdempotent

Get all surveys for a location.

Inputs: locationId.

ghl_list_transactionsList TransactionsB
Read-onlyIdempotent

Get payment transactions for a location.

Inputs: limit, offset, locationId.

ghl_list_workflowsList GHL WorkflowsA
Read-onlyIdempotent

Get all workflows/automations for a location.

Inputs: locationId.

ghl_remove_contact_from_workflowRemove Contact from WorkflowA
Idempotent

Remove a contact from a GHL workflow.

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

ghl_remove_contact_tagsRemove Tags from ContactA
Idempotent

Remove one or more tags from a contact.

Inputs: tags (required), contactId (required).

ghl_search_contactsSearch GHL ContactsA
Read-onlyIdempotent

Search contacts in GoHighLevel by query, tags, filters, or custom fields. Returns paginated results.

Args:

  • query (string): Search term (name, email, phone)

  • locationId (string): Location ID (uses default if omitted)

  • limit (number): Results per page (1-100, default 20)

  • filters (object): Advanced filters like tags, date ranges, custom fields

Returns: List of contacts with pagination metadata.

Inputs: limit, query, filters, locationId, +2 more.

ghl_search_conversationsSearch GHL ConversationsA
Read-onlyIdempotent

Search conversations by contact ID, query, or status. Returns threaded conversations with latest message info.

Inputs: limit, query, status, contactId, +1 more.

ghl_search_opportunitiesSearch GHL OpportunitiesC
Read-onlyIdempotent

Search opportunities (deals) by pipeline, stage, status, contact, or monetary value.

Inputs: limit, query, status, contactId, +5 more.

ghl_search_usersSearch GHL UsersB
Read-onlyIdempotent

Search for users/team members in a location.

Inputs: query, locationId.

ghl_send_invoiceSend InvoiceB

Send an invoice to the contact via email.

Inputs: invoiceId (required).

ghl_send_messageSend Message via GHLA

Send a message (SMS, Email, WhatsApp, or other) to a contact via GoHighLevel.

Args:

  • type: "SMS", "Email", "WhatsApp", "GMB", "IG", "FB", "Custom", "Live_Chat"

  • contactId: The recipient contact ID

  • message: The message body (text for SMS/WhatsApp, HTML for email)

  • subject: Email subject (required for Email type)

  • emailFrom: Sender email (for Email type)

  • html: HTML body (for Email type, alternative to message)

  • scheduledTimestamp: ISO timestamp to schedule future send

Returns: Sent message object with ID and status.

Inputs: type (required), contactId (required), html, message, +6 more.

ghl_update_contactUpdate GHL ContactA
Idempotent

Update an existing contact. Only pass fields you want to change.

Inputs: contactId (required), dnd, city, tags, +12 more.

ghl_update_contact_taskUpdate Contact TaskA
Idempotent

Update an existing task for a contact.

Inputs: taskId (required), contactId (required), body, title, +3 more.

ghl_update_conversationUpdate GHL ConversationA
Idempotent

Update conversation status (starred, unread, etc.).

Inputs: conversationId (required), starred, unreadCount.

ghl_update_eventUpdate Calendar EventB
Idempotent

Update an existing appointment/event.

Inputs: eventId (required), notes, title, status, +5 more.

ghl_update_opportunityUpdate GHL OpportunityA
Idempotent

Update an existing opportunity — move stages, change value, update status, etc.

Inputs: opportunityId (required), name, source, status, +4 more.

ghl_update_opportunity_statusUpdate Opportunity StatusA
Idempotent

Change the status of an opportunity (open, won, lost, abandoned).

Inputs: status (required), opportunityId (required).

ghl_upsert_contactUpsert GHL ContactA
Idempotent

Create or update a contact by email/phone. If a match is found, updates; otherwise creates new.

Inputs: tags, email, phone, source, +5 more.

ghl_void_invoiceVoid InvoiceB
DestructiveIdempotent

Void an existing invoice.

Inputs: invoiceId (required).

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    B3.4/5.0

    Scored across 64 tools

    Disambiguation4/5

    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.

    Naming Consistency5/5

    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.

    Tool Count2/5

    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.

    Completeness4/5

    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.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      D
      maintenance
      MCP server for GoHighLevel API v2 that provides 50+ tools for CRM, billing, marketing, and operations workflows, enabling natural language interaction with contacts, opportunities, conversations, and more.
      50
      1
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Connects AI assistants to GoHighLevel CRM via MCP, enabling full sub-account automation with 269+ tools for contacts, messaging, sales, marketing, and more.
      15 npm
      ISC
    • A
      license
      Not graded
      quality
      D
      maintenance
      An MCP server for GoHighLevel with 82 live-tested tools, enabling CRM operations like contact management, appointments, invoices, and workflows via natural language.
      115 npm
      MIT
    • F
      license
      Not graded
      quality
      D
      maintenance
      MCP server for GoHighLevel sub-accounts, enabling management of CRM contacts, pipelines, calendars, invoices, and more via natural language.
      -