Skip to main content
Glama
NerdSnipe-Inc

GoHighLevel MCP

GoHighLevel MCP Server

Give any AI agent — Claude, Cursor, Windsurf, or any MCP-compatible client — full access to your GoHighLevel account through natural language.

npm version npm downloads MIT License Node.js MCP GoHighLevel MCP Badge


What is this?

This is a Model Context Protocol (MCP) server that connects your AI tools directly to your GoHighLevel (GHL) sub-account via the GHL API v3.

Once installed, you can talk to your CRM naturally:

"Find all contacts tagged 'cold-lead' and send them an SMS saying we have a new offer" "Book an appointment for Sarah Johnson tomorrow at 2pm on the Discovery calendar" "Move any open opportunities in Stage 1 that haven't been touched in 14 days to 'Lost'" "Create a note on John's contact record and enroll him in the cold call workflow"

401 tools covering the full GHL API:

Category

Tools

Contacts

CRUD, search, upsert, tags, notes, tasks, workflow enrollment, appointments

Conversations & Messaging

Search, send SMS/email/WhatsApp, schedule, message history

Calendars & Appointments

List calendars, check availability, book, reschedule, block slots

Opportunities / Pipeline

Pipelines, deals, stage moves, won/lost/abandoned

Workflows & Campaigns

List workflows and campaigns

Location Settings

Custom fields, custom values, tags, users, templates, forms, surveys

Email Marketing

Email builder templates, email campaigns, scheduling

Funnels

List funnels, pages, page counts

Phone Numbers

List, search, purchase, update, release phone numbers

Payments & Invoices

Orders, transactions, subscriptions, coupons, invoices, payments

Social & Media

Social posts, media library, trigger links

Social Planner

Content queues & scheduling, comment moderation, OAuth account connection, CSV bulk-import posting, post/statistics (see note below)

Knowledge Base, FAQs & Crawler

Create/manage knowledge bases, FAQ pairs, and AI-train websites via crawler

Products, Collections & Reviews

Products, prices, inventory, collections, reviews, store visibility & priority

Store & Shipping

Shipping carriers, zones, rates, and store settings

Affiliates

List affiliates, commissions, and payouts

Email Verification

Single-use email address verification (deliverability check)

Blogs

Authors, categories, sites, posts, slug checks, create/update posts

Courses & Proposals

Import courses; proposal/estimate documents and templates

Brand Boards & Voices

Brand boards (logos/colors/fonts) and brand voices, incl. defaults

Custom Menus

Custom menu links: list, get, create, update, delete

Conversation AI

CRUD conversation AI agents, attach/manage agent actions, follow-up settings, generation

Voice AI

CRUD voice AI agents & actions, call logs

Chat Widget

CRUD chat widgets, clone, config, list

Agent Studio

CRUD Agent Studio agents, versioning, publish, execute

Businesses

CRUD businesses within a location

Associations

CRUD associations and association relations between records

Objects

Get/update custom object schemas, list objects, CRUD & search object records

Facebook Ads

Ad accounts, page/Instagram/integration setup, campaigns, ad sets, ads, custom audiences, pixels, lead & conversation forms, reporting, targeting search (48 tools)

Google Ads

Ad accounts, integration, campaigns, creative assets, keyword ideas, audiences, segments, conversion actions, reporting, targeting search (31 tools)

LinkedIn Ads

Ad accounts, integration, campaign groups, lead forms, reporting, targeting search (16 tools)

Not yet covered: the following GHL API v3 resources require credentials this server doesn't have (agency-level or Marketplace-app-developer identity, not a location-scoped Private Integration Token) and are intentionally left unbuilt:

  • saas — agency-level SaaS mode, rebilling, wallet balances. See docs/superpowers/specs/2026-08-04-v3-phase2a-commerce-design.md.

  • marketplace — app installs/uninstalls, billing-wallet charges, rebilling config. See docs/superpowers/specs/2026-08-04-v3-phase2b-marketing-design.md.

  • companies — agency/company-level account details. Requires agency-level credentials; this server authenticates via a location-scoped PIT token and has no agency-level identity.

  • snapshots — agency-level snapshot push/share/status operations. Same agency-only credential requirement.

  • oauth — Marketplace app installation/token endpoints. Requires a Marketplace-app-developer identity, not a location-scoped PIT token.

If you need any of these and have the right credential type, please open an issue requesting it.

Also not covered (no credential issue — the endpoint doesn't exist): ghl_create_template/ghl_update_template were removed. The v3 (and legacy) /locations/{locationId}/templates resource only exposes GET (list) and DELETE; no POST/PUT operation exists anywhere in the spec for creating or updating a template. This was verified via an exhaustive sweep of every v3 and legacy spec file. ghl_get_templates/ghl_delete_template remain fully supported.


Related MCP server: ghl-mcp

Prerequisites

Before you begin, make sure you have:

  • Node.js 18 or laterdownload here

  • A GoHighLevel account with sub-account access

  • A GHL Private Integration Token (takes ~2 minutes to create — see below)

How to get your GHL credentials

1. Private Integration Token (GHL_PIT_TOKEN)

  1. Log in to GoHighLevel and navigate to your sub-account (not the agency dashboard)

  2. Go to Settings → Private Integrations

  3. Click + Create New Integration

  4. Give it a name (e.g. AI Agent) and select all the scopes you want to grant

  5. Click Create — copy the token that appears (you won't see it again)

⚠️ Keep this token secret. It grants full API access to your sub-account.

2. Location ID (GHL_LOCATION)

Your Location ID is in the URL when you're inside your sub-account:

https://app.gohighlevel.com/location/XXXXXXXXXXXXXXXXXX/dashboard
                                     ^^^^^^^^^^^^^^^^^^
                                     This is your Location ID

Installation

No build step needed. Pass your credentials directly in your AI client config and the server runs on demand.

Use npx, pnpm dlx, or bunx to run the server without installing anything globally:

# npm / npx  (no install required)
npx @nerdsnipe-inc/ghl-mcp-server

# pnpm
pnpm dlx @nerdsnipe-inc/ghl-mcp-server

# bun
bunx @nerdsnipe-inc/ghl-mcp-server

Or install it globally if you prefer:

npm install -g @nerdsnipe-inc/ghl-mcp-server
# then run:
ghl-mcp-server

Connect to your AI tool

Pick your AI client below and follow the instructions.


Connecting to AI Clients

Claude Desktop

Open (or create) your Claude Desktop config file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "ghl": {
      "command": "npx",
      "args": ["-y", "@nerdsnipe-inc/ghl-mcp-server"],
      "env": {
        "GHL_PIT_TOKEN": "your_token_here",
        "GHL_LOCATION": "your_location_id_here"
      }
    }
  }
}

Restart Claude Desktop. You should see a hammer icon (🔨) in the chat input — that means MCP tools are active.


Claude Code (CLI)

Run this from your terminal to add the server to your Claude Code config:

claude mcp add ghl npx -- -y @nerdsnipe-inc/ghl-mcp-server \
  -e GHL_PIT_TOKEN=your_token_here \
  -e GHL_LOCATION=your_location_id_here

Or add it manually to ~/.claude/mcp_servers.json (or your project's .mcp.json):

{
  "mcpServers": {
    "ghl": {
      "command": "npx",
      "args": ["-y", "@nerdsnipe-inc/ghl-mcp-server"],
      "env": {
        "GHL_PIT_TOKEN": "your_token_here",
        "GHL_LOCATION": "your_location_id_here"
      }
    }
  }
}

Project-scoped tip: Add a .mcp.json in your project root so everyone on the team picks it up automatically — no local install required. Add .mcp.json to .gitignore so tokens aren't committed. If you store credentials in a .env file you can omit the env block entirely.


Cursor

  1. Open Cursor Settings → MCP (or press Cmd+Shift+P → "Open MCP Settings")

  2. Click Add Server and fill in:

{
  "name": "ghl",
  "command": "npx",
  "args": ["-y", "@nerdsnipe-inc/ghl-mcp-server"],
  "env": {
    "GHL_PIT_TOKEN": "your_token_here",
    "GHL_LOCATION": "your_location_id_here"
  }
}
  1. Save and restart Cursor.


Windsurf

Open ~/.codeium/windsurf/mcp_config.json and add:

{
  "mcpServers": {
    "ghl": {
      "command": "npx",
      "args": ["-y", "@nerdsnipe-inc/ghl-mcp-server"],
      "env": {
        "GHL_PIT_TOKEN": "your_token_here",
        "GHL_LOCATION": "your_location_id_here"
      }
    }
  }
}

Any other MCP-compatible client

This server uses stdio transport — the standard for local MCP servers. Your client needs:

  • Command: npx

  • Args: ["-y", "@nerdsnipe-inc/ghl-mcp-server"]

  • Env: GHL_PIT_TOKEN and GHL_LOCATION

Refer to your client's MCP documentation for exact config syntax.


Running from source (contributors)

If you've cloned the repo and want to run directly from TypeScript without a build step:

git clone https://github.com/Nerdsnipe-Inc/ghl-mcp-server.git
cd ghl-mcp-server
npm install

Then point your MCP client at the source via tsx:

{
  "command": "npx",
  "args": ["tsx", "/absolute/path/to/ghl-mcp-server/src/index.ts"]
}

Or build first for production use:

npm run build
# then run:
node dist/index.js

All 401 Tools — Full Reference

Contacts

Tool

Description

ghl_get_contact

Get a single contact by ID

ghl_create_contact

Create a new contact

ghl_update_contact

Update contact fields

ghl_upsert_contact

Create or update by email/phone (prevents duplicates)

ghl_delete_contact

Permanently delete a contact

ghl_search_contacts

Advanced search with filter conditions

ghl_add_contact_tags

Add tags to a contact

ghl_remove_contact_tags

Remove tags from a contact

ghl_get_contact_notes

List all notes on a contact

ghl_create_contact_note

Add a note to a contact

ghl_update_contact_note

Update an existing note

ghl_delete_contact_note

Delete a note

ghl_get_contact_tasks

List tasks for a contact

ghl_create_contact_task

Create a task for a contact

ghl_update_contact_task

Update a task (status, due date, etc.)

ghl_delete_contact_task

Delete a task

ghl_add_contact_to_workflow

Enroll a contact in a workflow/automation

ghl_remove_contact_from_workflow

Remove a contact from a workflow

ghl_get_contact_appointments

Get all appointments for a contact

Conversations & Messaging

Tool

Description

ghl_search_conversations

Search conversations by contact, status, or channel

ghl_get_conversation

Get a conversation by ID

ghl_create_conversation

Open a new conversation thread

ghl_get_messages

List messages in a conversation

ghl_send_message

Send SMS, email, WhatsApp, or other channel message

ghl_send_email

Send an email within an existing conversation

ghl_update_message_status

Mark messages read/unread/delivered

ghl_cancel_scheduled_message

Cancel a scheduled (future) message

ghl_add_inbound_message

Inject an inbound message (testing/simulation)

Calendars & Appointments

Tool

Description

ghl_get_calendars

List all calendars

ghl_get_calendar

Get a calendar by ID

ghl_get_free_slots

Check available appointment slots in a date range

ghl_get_calendar_events

Get events/appointments in a date range

ghl_create_appointment

Book an appointment

ghl_get_appointment

Get an appointment by event ID

ghl_update_appointment

Reschedule, change status, or add notes

ghl_delete_calendar_event

Delete an event or appointment

ghl_create_block_slot

Block a time period on a calendar

ghl_get_calendar_groups

List calendar groups

Opportunities / Pipeline

Tool

Description

ghl_get_pipelines

List all pipelines and their stages

ghl_search_opportunities

Search deals by contact, stage, pipeline, or status

ghl_get_opportunity

Get a single opportunity

ghl_create_opportunity

Create a new deal

ghl_update_opportunity

Update deal fields (stage, value, assignee)

ghl_update_opportunity_status

Quickly mark a deal won/lost/abandoned

ghl_upsert_opportunity

Create or update a deal

ghl_delete_opportunity

Delete a deal

Workflows & Campaigns

Tool

Description

ghl_get_workflows

List all workflows (use to discover workflow IDs)

ghl_get_campaigns

List all campaigns

Enrolling contacts in workflows is done via ghl_add_contact_to_workflow.

Email Marketing

Tool

Description

ghl_get_email_builder_templates

List all email builder templates in the location

ghl_get_email_builder_template

Get a single email builder template by ID

ghl_create_email_builder_template

Create a new email builder template with HTML content

ghl_update_email_builder_template

Update an existing email builder template's HTML content

ghl_delete_email_builder_template

Delete an email builder template by ID

ghl_get_email_campaigns

List all email campaigns in the location

ghl_get_email_campaign

Get details of a single email campaign by ID

ghl_create_email_campaign

Create a new email campaign as a draft (v3 does not accept subject/scheduledAt in this call); pair with ghl_schedule_email_campaign to set the subject, recipients, and send time; userId is required

ghl_schedule_email_campaign

Schedule (or immediately send) a draft campaign — sets subject, sender, recipients, and send timing (immediate, scheduled, batch, rss, or smart_send)

ghl_delete_email_campaign

Delete an email campaign by ID

Funnels

Tool

Description

ghl_get_funnels

List all funnels in the location

ghl_get_funnel_pages

List all pages in a specific funnel

ghl_get_funnel_page_count

Get the total count of pages in a funnel

Phone Numbers

Tool

Description

ghl_get_phone_numbers

List all purchased/active phone numbers in the location

ghl_search_available_phone_numbers

Search for available numbers to purchase (filter by area code, country, type)

ghl_purchase_phone_number

Purchase a phone number for the location (E.164 format, e.g. +16135550100)

ghl_update_phone_number

Update settings for a phone number (assignment, call forwarding)

ghl_release_phone_number

Release (delete) a phone number from the location

Surveys

Tool

Description

ghl_get_surveys

List all surveys created in the location

ghl_get_survey_submissions

Get submissions for a survey, with optional filters

Location Settings

Tool

Description

ghl_get_location

Get location/sub-account details

ghl_get_location_tags

List all tags in the location

ghl_create_location_tag

Create a new tag

ghl_delete_location_tag

Delete a tag

ghl_get_custom_fields

List custom contact fields

ghl_create_custom_field

Create a custom field

ghl_update_custom_field

Update a custom field

ghl_delete_custom_field

Delete a custom field

ghl_get_custom_values

List custom values (location-level variables)

ghl_create_custom_value

Create a custom value

ghl_update_custom_value

Update a custom value

ghl_delete_custom_value

Delete a custom value by ID

ghl_get_users

List all team members

ghl_search_users

Search users by name or email

ghl_get_user

Get a single team member by user ID

ghl_create_user

Create a new team member in the location

ghl_update_user

Update an existing team member

ghl_delete_user

Remove a team member from the location

ghl_get_templates

List SMS/email/WhatsApp templates

ghl_delete_template

Delete a template by ID

ghl_get_forms

List all forms

ghl_get_form_submissions

Get form submissions

Payments & Invoices

Tool

Description

ghl_get_orders

List payment orders

ghl_get_order

Get a single order

ghl_get_transactions

List payment transactions

ghl_get_subscriptions

List active subscriptions

ghl_get_coupons

List coupons

ghl_create_coupon

Create a discount coupon

ghl_get_invoices

List invoices

ghl_get_invoice

Get a single invoice

ghl_create_invoice

Create a new invoice

ghl_send_invoice

Email an invoice to the contact

ghl_void_invoice

Void (cancel) an invoice

ghl_record_invoice_payment

Record a manual payment on an invoice

Social & Media

These 4 ghl_*_social_*/media/trigger-link tools were built in Phase 1 against a small slice of the /social-media-posting/ resource. The Social Planner sections below (Phase 2e) cover the other 41 operations on that same resource — content queues, comment moderation, OAuth account connection, CSV bulk-import, and the remaining post/statistics endpoints. The two use different naming conventions (social.ts vs. social_planner_*.ts) because they were designed in separate phases; together they cover all 45 social-planner-v3.json operations.

Tool

Description

ghl_get_social_accounts

List connected social media accounts

ghl_get_social_posts

List scheduled or published posts

ghl_create_social_post

Schedule or publish a social media post

ghl_delete_social_post

Delete a scheduled post

ghl_get_media_files

List files in the media library

ghl_delete_media_file

Delete a file from the media library

ghl_get_trigger_links

List trigger links

ghl_create_trigger_link

Create a trigger link

ghl_delete_trigger_link

Delete a trigger link

Social Planner Queues

Content queue creation/configuration, queue items, edit sessions, calendar views, and slots (Phase 2e — see note above).

Tool

Description

ghl_create_social_queue

Create a content queue for a social media category

ghl_get_social_queue_categories

List social media categories available for creating queues

ghl_list_social_queues

List content queues for the location

ghl_get_social_queue_calendar

Fetch a calendar view of queued posts

ghl_delete_social_queue_active_post

Delete the currently active queue post and schedule the next one

ghl_get_social_queue

Get a content queue by ID

ghl_update_social_queue

Update a content queue

ghl_create_social_queue_item

Create a new item in a content queue

ghl_get_social_queue_edit_calendar

Fetch a calendar view of an active edit session

ghl_discard_social_queue_edit

Discard an active queue edit session

ghl_save_social_queue_edit

Save an active queue edit session

ghl_start_social_queue_edit

Start a new edit session for a content queue

ghl_get_social_queue_items

List items in a content queue

ghl_delete_social_queue_item

Delete an item from a content queue

ghl_update_social_queue_item

Update an item in a content queue

ghl_clone_social_queue_item

Clone an item in a content queue

ghl_reset_social_queue_item

Reset an item in a content queue back to its original state

ghl_get_social_queue_slots

List available posting slots for a content queue

Social Planner Comments

Comment moderation on social media posts (Phase 2e — see note above).

Tool

Description

ghl_create_social_comment

Create a new comment on a social media post

ghl_list_social_comments

List comments for one or more social media posts

ghl_like_social_comment

Like a social media comment

ghl_unlike_social_comment

Unlike a social media comment

Social Planner Accounts

OAuth account connection flow, plus account/category/tag management (Phase 2e — see note above).

Tool

Description

ghl_start_social_oauth

Step 1 of 3: start OAuth for a social platform

ghl_get_social_oauth_accounts

Step 2 of 3: list the pages/channels/locations available to connect

ghl_connect_social_oauth_account

Step 3 of 3: connect the account/page selected in step 2 to this location

ghl_delete_social_account

Delete a connected social media account (and remove it from its group)

ghl_set_social_accounts

Associate connected social accounts with an already-uploaded CSV bulk-import job

ghl_get_social_categories

List social media categories for this location

ghl_get_social_category

Get a single social media category by ID

ghl_get_social_tags

List social media tags for this location

ghl_get_social_tags_by_ids

Get multiple social media tags by their IDs

Social Planner Posts

CSV bulk-import posting, remaining post operations, and statistics (Phase 2e — see note above).

Tool

Description

ghl_upload_social_csv

Step 1 of the CSV bulk-import flow: upload a CSV file of social media posts

ghl_get_social_csv_upload_status

List CSV bulk-import jobs (uploads) for this location

ghl_get_social_csv_post

Get the parsed rows/posts of a single CSV bulk-import job by ID

ghl_finalize_social_csv

Finalize (commit) a CSV bulk-import job, scheduling/publishing its parsed posts

ghl_delete_social_csv

Delete a CSV bulk-import job entirely (all its parsed posts)

ghl_delete_social_csv_post

Delete a single post row from a CSV bulk-import job

ghl_bulk_delete_social_posts

Delete multiple social media posts by ID in a single request

ghl_get_social_post

Get a single social media post by ID

ghl_update_social_post

Update an existing social media post (content, schedule, status, media, etc.)

ghl_get_social_statistics

Get engagement/analytics statistics for connected social accounts

Knowledge Bases

Tool

Description

ghl_list_knowledge_bases

List all knowledge bases for the location with cursor-based pagination

ghl_get_knowledge_base

Get a single knowledge base by ID — includes metadata counts (FAQs, URLs, files)

ghl_create_knowledge_base

Create a new knowledge base (max 15 per location)

ghl_update_knowledge_base

Update the name or description of an existing knowledge base

ghl_delete_knowledge_base

Permanently delete a knowledge base and all its content (FAQs, trained URLs, etc.)

FAQs

Tool

Description

ghl_list_faqs

List all FAQ question/answer pairs for a knowledge base with cursor-based pagination

ghl_create_faq

Add a new FAQ question and answer to a knowledge base

ghl_update_faq

Update the question and answer text of an existing FAQ

ghl_delete_faq

Permanently delete an FAQ by ID

Web Crawler

Use the crawler to discover and ingest website pages as AI training data for a knowledge base. The typical flow is: discover → check status → train.

Tool

Description

ghl_discover_website

Start crawling a website to discover pages. Choose scope: Exact (one URL), Path (sub-paths), or Domain (all). Returns an operationId

ghl_get_crawler_status

Check progress of a crawl job by operationId — returns per-URL status (Pending, Successful, Failed, etc.)

ghl_list_crawler_urls

List all trained page links for a knowledge base. Use to retrieve urlIds for training or deletion

ghl_train_crawler_urls

Ingest discovered pages into the knowledge base for AI training using urlIds from the crawler

ghl_delete_crawler_urls

Remove previously trained page URLs from a knowledge base by urlIds

Products, Collections & Reviews

Tool

Description

ghl_get_products

List/search products in the location

ghl_get_product

Get a single product by ID

ghl_create_product

Create a new product

ghl_update_product

Update an existing product

ghl_delete_product

Delete a product

ghl_bulk_update_products

Bulk-update multiple products (price, availability, etc.) — also supports bulk-delete

ghl_bulk_edit_product_prices

Bulk-edit prices across multiple products

ghl_get_product_prices

List prices for a product

ghl_get_product_price

Get a single price by ID

ghl_create_product_price

Add a new price to a product

ghl_update_product_price

Update an existing price

ghl_delete_product_price

Delete a price

ghl_get_product_inventory

Get inventory levels for products

ghl_update_product_inventory

Update inventory counts for products

ghl_get_product_collections

List product collections

ghl_get_product_collection

Get a single collection by ID

ghl_create_product_collection

Create a new product collection

ghl_update_product_collection

Update a product collection

ghl_delete_product_collection

Delete a product collection

ghl_get_product_reviews

List reviews for a product

ghl_get_product_review_count

Get the total review count (with optional filters)

ghl_bulk_update_product_reviews

Bulk-update review status (e.g. publish/hide) across reviews

ghl_update_product_review

Update a single review

ghl_delete_product_review

Delete a review

ghl_set_product_store_visibility

Show/hide a product in the storefront

ghl_update_product_store_priority

Change a product's sort priority in the storefront

ghl_get_product_store_stats

Get storefront stats for products

Store & Shipping

Tool

Description

ghl_get_shipping_carriers

List shipping carriers configured for the store

ghl_create_shipping_carrier

Add a new shipping carrier

ghl_get_shipping_carrier

Get a single shipping carrier by ID

ghl_update_shipping_carrier

Update a shipping carrier

ghl_delete_shipping_carrier

Delete a shipping carrier

ghl_get_shipping_zones

List shipping zones

ghl_create_shipping_zone

Create a new shipping zone

ghl_get_shipping_zone

Get a single shipping zone by ID

ghl_update_shipping_zone

Update a shipping zone

ghl_delete_shipping_zone

Delete a shipping zone

ghl_get_available_shipping_rates

Get rates available for a given shipment

ghl_get_shipping_rates

List configured shipping rates

ghl_create_shipping_rate

Create a new shipping rate

ghl_get_shipping_rate

Get a single shipping rate by ID

ghl_update_shipping_rate

Update a shipping rate

ghl_delete_shipping_rate

Delete a shipping rate

ghl_get_store_settings

Get store-wide settings

ghl_update_store_settings

Update store-wide settings

Affiliates

Tool

Description

ghl_get_affiliates

List affiliates in the location

ghl_get_affiliate

Get a single affiliate by ID

ghl_get_affiliate_commissions

List commissions earned by affiliates

ghl_get_affiliate_payouts

List payouts made to affiliates

Email Verification

Tool

Description

ghl_verify_email

Verify an email address's deliverability (single-use ISV check)

Blogs

Tool

Description

ghl_get_blog_authors

List blog authors for the location

ghl_get_blog_categories

List blog categories for the location

ghl_get_blogs

List blog sites for the location

ghl_get_blog_posts

List posts for a blog, with search and status filtering

ghl_check_blog_url_slug

Check whether a URL slug is already in use by another blog post

ghl_create_blog_post

Create a new blog post

ghl_update_blog_post

Update an existing blog post

Courses & Proposals

Tool

Description

ghl_import_courses

Import courses with lessons and modules from product objects

ghl_get_proposal_documents

List proposal/estimate documents, with status/date/search filtering

ghl_send_proposal_document

Send a proposal/estimate document to a client

ghl_get_proposal_templates

List proposal/estimate document templates

ghl_send_proposal_template

Send a proposal/estimate document template to a client contact

Brand Boards & Voices

Tool

Description

ghl_create_brand_board

Create a brand board (logos, colors, fonts) — blank, from template, snapshot, or extracted from a URL

ghl_get_brand_boards

List brand boards for the location

ghl_get_brand_board

Get a single brand board by ID

ghl_update_brand_board

Update a brand board by ID

ghl_delete_brand_board

Delete a brand board by ID

ghl_get_brand_voices

List brand voices for the location

ghl_create_brand_voice

Create a brand voice

ghl_get_brand_voice

Get a brand voice by ID

ghl_update_brand_voice

Update a brand voice by ID

ghl_delete_brand_voice

Delete a brand voice by ID

ghl_set_default_brand_voice

Set a brand voice as the default for the location

Custom Menus

Tool

Description

ghl_get_custom_menus

List custom menu links, with search, pagination, and agency filter

ghl_get_custom_menu

Get a single custom menu link by ID

ghl_create_custom_menu

Create a custom menu link

ghl_update_custom_menu

Update a custom menu link by ID

ghl_delete_custom_menu

Delete a custom menu link by ID

Conversation AI

Tool

Description

ghl_create_conversation_ai_agent

Create a new Conversation AI agent (name, personality, goal, instructions)

ghl_search_conversation_ai_agents

Search Conversation AI agents by name, with pagination

ghl_get_conversation_ai_agent

Get a Conversation AI agent by ID

ghl_update_conversation_ai_agent

Update a Conversation AI agent's configuration

ghl_delete_conversation_ai_agent

Delete a Conversation AI agent by ID

ghl_attach_conversation_ai_action

Attach a new action (workflow trigger, field update, booking, etc.) to an agent

ghl_list_conversation_ai_agent_actions

List all actions attached to a Conversation AI agent

ghl_get_conversation_ai_agent_action

Get a single action attached to a Conversation AI agent

ghl_update_conversation_ai_agent_action

Update an existing action attached to a Conversation AI agent

ghl_remove_conversation_ai_agent_action

Remove an action from a Conversation AI agent

ghl_update_conversation_ai_followup_settings

Update the follow-up settings (channel switching, working hours) for an agent

ghl_get_conversation_ai_generation

Get an AI-generated message for a conversation or workflow message

Voice AI

Tool

Description

ghl_create_voice_ai_action

Create a new Voice AI action attached to an agent

ghl_update_voice_ai_action

Update a Voice AI action

ghl_get_voice_ai_action

Get a single Voice AI action by ID

ghl_delete_voice_ai_action

Delete a Voice AI action

ghl_create_voice_ai_agent

Create a new Voice AI agent (greeting, prompt, voice, working hours, etc.)

ghl_get_voice_ai_agents

List Voice AI agents for the location, with search and pagination

ghl_update_voice_ai_agent

Update a Voice AI agent's configuration

ghl_get_voice_ai_agent

Get a Voice AI agent by ID

ghl_delete_voice_ai_agent

Delete a Voice AI agent by ID

ghl_get_voice_ai_call_logs

Get the Voice AI call-log dashboard, with filters and pagination

ghl_get_voice_ai_call_log

Get a single Voice AI call log entry by call ID

Chat Widget

Tool

Description

ghl_create_chat_widget

Create a new chat widget for the sub-account

ghl_clone_chat_widget

Create a copy of an existing chat widget in the same sub-account

ghl_get_chat_widget

Get a single chat widget by ID

ghl_update_chat_widget

Full update (PUT) of a chat widget resource

ghl_patch_chat_widget

Partial update (PATCH) of a chat widget resource

ghl_list_chat_widgets

List chat widgets for the sub-account, with pagination and filters

ghl_get_chat_widget_config

Get a widget's display/behavior configuration by ID

ghl_delete_chat_widget

Soft-delete a chat widget

Agent Studio

Tool

Description

ghl_create_agent_studio_agent

Create a new Agent Studio agent with an initial staging version

ghl_list_agent_studio_agents

List Agent Studio agents for the sub-account, with pagination

ghl_get_agent_studio_agent

Get a single Agent Studio agent by ID, including its non-deleted versions

ghl_update_agent_studio_agent_metadata

Update an agent's top-level metadata (name, description, status)

ghl_delete_agent_studio_agent

Delete an Agent Studio agent and all of its versions

ghl_update_agent_studio_agent_version

Update a version's workflow definition (nodes, edges, variables)

ghl_publish_agent_studio_agent

Promote a draft version to production, publishing it

ghl_execute_agent_studio_agent

Execute an Agent Studio agent and get a non-streaming JSON response

Businesses

Tool

Description

ghl_get_businesses

List businesses for a location

ghl_get_business

Get a specific business by ID

ghl_create_business

Create a new business

ghl_update_business

Update an existing business

ghl_delete_business

Delete a business

Associations

Tool

Description

ghl_create_association_relation

Create a relation between two records for an association

ghl_get_association_relations

List relations for a record

ghl_delete_association_relation

Delete a relation between two records

ghl_get_association_by_key

Get an association by its key name

ghl_get_association_by_object_key

Get an association by its object key

ghl_create_association

Create a new association

ghl_get_association

Get a specific association by ID

ghl_update_association

Update an association's object labels

ghl_delete_association

Delete an association

ghl_list_associations

List associations for a location

Objects

Tool

Description

ghl_get_object_schema

Get a custom or standard object schema by key

ghl_update_object_schema

Update a custom object schema

ghl_get_objects

List all objects (standard and custom) for the location

ghl_get_object_record

Get a single custom object record by ID

ghl_update_object_record

Update a custom object record

ghl_delete_object_record

Delete a custom object record

ghl_create_object_record

Create a new custom object record

ghl_search_object_records

Search custom object records

Facebook Accounts

Note: all ad-publishing operations hit paths under /ad-publishing/<platform>/.... Despite the ad-publishing-v3.json spec filename, 94 of these 95 operations declare a legacy Version: 2021-07-28 header rather than a v3 header — the sole exception is ghl_get_facebook_campaign_publishing_progress, which uses v3. See src/client.ts's GHL_VERSION_LEGACY/GHL_VERSION_V3 and the in-file code comments in each src/tools/facebook_*.ts / google_*.ts / linkedin.ts module for details.

Tool

Description

ghl_get_facebook_ad_accounts

List Facebook ad accounts connected to a location

ghl_get_facebook_ad_account

Get a single Facebook ad account by ID

ghl_delete_facebook_ad_account

Delete a Facebook ad account

ghl_create_facebook_integration

Create a Facebook ad-publishing integration for a location

ghl_get_facebook_integration

Get the Facebook ad-publishing integration for a location

ghl_delete_facebook_integration

Delete the Facebook ad-publishing integration for a location

ghl_get_facebook_me

Get the Facebook identity (user/page) tied to the location's integration

ghl_get_facebook_entity

List Facebook ad entities (campaigns, ad sets, or ads)

ghl_get_facebook_pages

List Facebook pages available to a location

ghl_delete_facebook_page

Disconnect a Facebook page from a location

ghl_set_default_facebook_page

Set the default Facebook page for a location

ghl_get_facebook_page_forms

List lead forms for a Facebook page

ghl_create_facebook_page_form

Create a Facebook lead form on a page

ghl_get_facebook_page_instagram_accounts

List Instagram accounts linked to a Facebook page

Facebook Campaigns

Tool

Description

ghl_get_facebook_campaign

Get a single Facebook campaign by ID

ghl_upsert_facebook_campaign

Create or update a Facebook campaign — pass id to update, omit to create

ghl_delete_facebook_campaign

Delete a Facebook campaign

ghl_duplicate_facebook_campaign

Duplicate a Facebook campaign

ghl_pause_facebook_campaign

Pause a Facebook campaign

ghl_publish_facebook_campaign

Publish a Facebook campaign

ghl_get_facebook_campaign_publishing_progress

Get the publishing progress of a Facebook campaign

ghl_resume_facebook_campaign

Resume a paused Facebook campaign

ghl_upsert_facebook_adset

Create or update a Facebook ad set — pass id to update, omit to create

ghl_delete_facebook_adset

Delete a Facebook ad set

ghl_duplicate_facebook_adset

Duplicate a Facebook ad set

ghl_pause_facebook_adset

Pause a Facebook ad set

ghl_resume_facebook_adset

Resume a paused Facebook ad set

ghl_upsert_facebook_ad

Create or update a Facebook ad — pass id to update, omit to create

ghl_delete_facebook_ad

Delete a Facebook ad

ghl_duplicate_facebook_ad

Duplicate a Facebook ad

ghl_pause_facebook_ad

Pause a Facebook ad

ghl_resume_facebook_ad

Resume a paused Facebook ad

Facebook Audiences

Tool

Description

ghl_get_facebook_custom_audiences

Get Facebook custom audiences for a location

ghl_delete_facebook_custom_audience

Delete a Facebook custom audience

ghl_update_facebook_custom_audience

Update a Facebook custom audience's name and description

ghl_get_facebook_custom_audience

Get a single Facebook custom audience by ID

ghl_add_facebook_custom_audience_member

Add a contact to a Facebook custom audience

ghl_remove_facebook_custom_audience_member

Remove a contact from a Facebook custom audience

ghl_batch_update_facebook_custom_audience_members

Batch add/remove members of a Facebook custom audience via CSV, smartlists, or dynamic audience

ghl_get_facebook_pixels

Get Facebook conversion pixels for a location

ghl_upsert_facebook_pixel

Create or update a Facebook conversion pixel

ghl_get_facebook_conversation_forms

Get Facebook conversation forms for a location

ghl_create_facebook_conversation_form

Create a Facebook conversation form

ghl_get_facebook_lead_form

Get a single Facebook lead form by ID

Facebook Reporting

Tool

Description

ghl_get_facebook_reporting

Get Facebook ad reporting data with aggregation

ghl_get_facebook_campaign_reporting

Get reporting data for a specific Facebook campaign

ghl_get_facebook_reporting_list

Get a list of Facebook reporting data (campaigns, ad sets, or ads)

ghl_search_facebook_targeting

Search Facebook targeting options (interests, behaviors, demographics)

Google Accounts

Tool

Description

ghl_get_google_ad_accounts

List Google ad accounts connected to a location

ghl_get_google_ad_account

Get a single Google ad account by ID

ghl_delete_google_ad_account

Delete a Google ad account

ghl_create_google_integration

Create a Google ad-publishing integration for a location

ghl_get_google_integration

Get the Google ad-publishing integration for a location

ghl_get_google_me

Get the Google identity tied to the location's integration

ghl_get_google_entity

List Google ad entities (campaigns, ad groups, or ads)

Google Campaigns

Tool

Description

ghl_upsert_google_campaign

Create or update a Google Ads campaign — pass id to update, omit to create

ghl_get_google_campaign

Get a single Google Ads campaign by ID

ghl_publish_google_campaign

Publish a Google Ads campaign and push it live

ghl_get_google_assets

List Google Ads creative assets

ghl_upsert_google_assets

Create or update a Google Ads creative asset (call, sitelink, or lead form)

ghl_get_google_keyword_ideas

Get Google Ads keyword ideas for a target URL

Google Audiences

Tool

Description

ghl_upsert_google_audience

Create or update a Google Ads audience — pass resourceName to update, omit to create

ghl_get_google_audiences

List Google Ads audiences for the location

ghl_get_google_audience

Get a single Google Ads audience by ID

ghl_get_google_segments

List Google Ads segments for the location

ghl_upsert_google_segment

Create or update a Google Ads segment — pass id to update, omit to create

ghl_create_google_offline_user_list_job

Create a Google Ads offline user list upload job

ghl_delete_google_segment

Delete a Google Ads segment

ghl_get_google_segment

Get a single Google Ads segment by ID

ghl_get_google_conversions

List Google Ads conversion actions for the location

ghl_upsert_google_conversion

Create or update a Google Ads conversion action — pass conversionId to update

ghl_get_google_conversion

Get a single Google Ads conversion action by ID

ghl_delete_google_conversion

Delete a Google Ads conversion action

ghl_get_google_conversion_goals

List Google Ads conversion goals for the location

ghl_get_google_target_interests

Search Google Ads target interest categories

Google Reporting

Tool

Description

ghl_get_google_reporting

Get Google Ads reporting data with aggregation

ghl_get_google_campaign_reporting

Get reporting data for a specific Google Ads campaign

ghl_get_google_reporting_list

Get a list of Google Ads reporting data (e.g. campaigns)

ghl_search_google_targeting

Search Google Ads targeting options (e.g. geolocation)

LinkedIn

Tool

Description

ghl_get_linkedin_ad_account

Get a connected LinkedIn ad account

ghl_delete_linkedin_ad_account

Delete a connected LinkedIn ad account

ghl_get_linkedin_ad_accounts

List connected LinkedIn ad accounts for the location

ghl_create_linkedin_integration

Create a LinkedIn ad account integration for the location

ghl_get_linkedin_integration

Get the LinkedIn ad account integration for the location

ghl_get_linkedin_me

Get the authenticated LinkedIn member profile for the location's integration

ghl_upsert_linkedin_campaign

Create or update a LinkedIn ad campaign group — pass adCampaignGroupId to update

ghl_get_linkedin_campaign

Get a single LinkedIn ad campaign group by ID

ghl_publish_linkedin_campaign

Publish a LinkedIn ad campaign group to LinkedIn

ghl_update_linkedin_ad_status

Update the status (paused, archived, resume) of a LinkedIn ad entity

ghl_create_linkedin_lead_form

Create a LinkedIn lead-gen form for an ad account

ghl_get_linkedin_lead_forms

List LinkedIn lead-gen forms for an ad account

ghl_get_linkedin_reporting

Get LinkedIn ad reporting analytics

ghl_get_linkedin_campaign_group_reporting

Get LinkedIn ad reporting analytics for a specific campaign group

ghl_get_linkedin_reporting_list

Get a LinkedIn reporting list for a campaign within a campaign group

ghl_search_linkedin_targeting

Search LinkedIn targeting facets (e.g. locations, industries, job titles)


Example Prompts

Here are some things you can say to your AI once connected:

"Find all contacts tagged 'new-lead' added this week and send them a welcome SMS"

"What appointments are booked on the Discovery calendar this Friday?"

"Check Sarah Johnson's conversation history and summarize the last 5 messages"

"Create a note on contact ID abc123 saying 'Called, left voicemail' and mark the task as complete"

"Move all open opportunities in the Onboarding pipeline older than 30 days to 'Lost'"

"Book an appointment for john@example.com tomorrow at 3pm on calendar XYZ"

"Enroll contact ID abc123 in the cold call workflow"

"Show me all unpaid invoices over 30 days old"

"List all users/team members in this location"

"What workflows do we have? Show me the names and IDs"

"Create a knowledge base called 'Product FAQ' and add 5 FAQs covering our pricing, refund policy, and onboarding steps"

"Crawl https://example.com and train our support knowledge base on every page under /docs"

"List all the FAQs in our knowledge base and update any that mention the old pricing"

"Show me the status of the last website crawl and train on all successfully discovered pages"

Environment Variables Reference

Variable

Required

Description

GHL_PIT_TOKEN

✅ Yes

Your GHL Private Integration Token

GHL_LOCATION

✅ Yes

Your sub-account location ID

That's it — just two variables. Workflow IDs, pipeline IDs, calendar IDs, and all other GHL resource identifiers are passed directly as parameters when you call the relevant tools. This keeps the server generic and usable across any project or use case.


Development

# Install dependencies
npm install

# Run in development mode (no build step needed)
npm run dev

# Type-check without building
npm run typecheck

# Build for production
npm run build

# Watch mode (rebuilds on file changes)
npm run build:watch

Project Structure

ghl-mcp-server/
├── src/
│   ├── index.ts          # MCP server entry point — registers all tools
│   ├── client.ts         # GHL HTTP client (auth, request helper, error handling)
│   └── tools/
│       ├── contacts.ts       # 21 contact tools
│       ├── conversations.ts  #  9 conversation & messaging tools
│       ├── calendars.ts      # 10 calendar & appointment tools
│       ├── opportunities.ts  #  8 pipeline & deal tools
│       ├── workflows.ts      #  2 workflow & campaign tools
│       ├── locations.ts      # 16 location settings tools
│       ├── payments.ts       # 12 payment & invoice tools
│       ├── social.ts         #  8 social, media & trigger link tools
│       ├── emails.ts         #  9 email builder & campaign tools
│       ├── funnels.ts        #  3 funnel tools
│       ├── phone_numbers.ts  #  5 phone number tools
│       ├── surveys.ts        #  2 survey tools
│       ├── knowledge_base.ts # 14 knowledge base, FAQ & web crawler tools
│       ├── products.ts       # 14 product, price & inventory tools
│       ├── product_collections.ts #  5 product collection tools
│       ├── product_reviews.ts #  5 product review tools
│       ├── product_store.ts  #  3 storefront visibility & stats tools
│       ├── store.ts          # 18 shipping & store settings tools
│       ├── affiliate_manager.ts #  4 affiliate tools
│       └── email_isv.ts      #  1 email verification tool
├── dist/                 # Compiled output (generated by npm run build)
├── .env.example          # Environment variable template
├── package.json
├── tsconfig.json
└── README.md

Adding a new tool

  1. Find the relevant module in src/tools/

  2. Add a new entry to the exported array following the existing pattern:

    {
      name: "ghl_your_tool_name",
      description: "What this tool does and when to use it",
      inputSchema: z.object({
        param: z.string().describe("Description of this parameter"),
      }),
      handler: async (args, config) => {
        try {
          const result = await ghlRequest("GET", "/your/endpoint", {
            token: config.token,
            params: { locationId: config.locationId, ...args },
          });
          return JSON.stringify(result, null, 2);
        } catch (e) {
          return formatError(e);
        }
      },
    }
  3. Run npm run typecheck to verify no type errors

  4. Submit a PR!


Troubleshooting

The server isn't showing up in my AI client

  • Make sure you ran npm run build and the dist/ folder exists

  • Double-check the absolute path to dist/index.js in your config

  • Restart your AI client after changing MCP config

Getting "GHL_PIT_TOKEN is not set" errors

  • Verify your .env file exists in the ghl-mcp-server/ directory

  • Or pass the env vars directly in your MCP client config (see setup instructions above)

Getting 401 Unauthorized from the API

  • Your PIT token may have expired or been revoked — generate a new one in GHL Settings → Private Integrations

  • Make sure the token is for the correct sub-account

Getting 422 or 400 errors

  • Check the details field in the error response — GHL usually explains what's wrong

  • Common causes: missing required fields, invalid phone number format (use E.164: +15551234567), invalid date format (use ISO 8601)

Rate limit errors (429)

  • GHL enforces 100 requests per 10 seconds

  • For bulk operations, add a small delay between calls or process in batches


Contributing

Pull requests are welcome! Please:

  1. Fork the repo

  2. Create a feature branch (git checkout -b feature/my-new-tool)

  3. Make your changes and run npm run typecheck

  4. Commit and push, then open a PR

When adding new tools, follow the existing patterns in src/tools/ and keep the tool names prefixed with ghl_.


License

MIT © Business AI Specialist


Install Server
A
license - permissive license
C
quality
A
maintenance

Maintenance

Maintainers
Response time
Release cycle
1Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    A comprehensive MCP server that connects AI assistants to GoHighLevel CRM, enabling management of contacts, conversations, calendars, pipelines, payments, and more through 60+ tools.
    64
    39
    MIT
  • 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
  • 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.

View all related MCP servers

Related MCP Connectors

  • A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…

  • LeadConnector / GoHighLevel MCP Pack — wraps the GoHighLevel CRM for AI agents.

  • A Model Context Protocol server for Wix AI tools

View all MCP Connectors

Latest Blog Posts

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/NerdSnipe-Inc/ghl-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server