GoHighLevel CRM management via MCP tools. Use when the user asks about contacts, pipelines, calendars, messaging, invoicing, workflows, or anything related to GoHighLevel/GHL.
Manage GoHighLevel CRM through 66 MCP tools across 16 categories: contacts, pipelines, calendars, conversations, workflows, funnels, forms, surveys, payments, invoices, products, media, locations, users, blogs, social media, and custom objects.
Alternate expressions and non-obvious activations (primary phrases are matched automatically from the skill description):
These will cause failures if you get them wrong:
html fieldWhen sending email via ghl_send_message with type: "Email":
html (not message) for the email bodysubjectmessage field is for SMS/WhatsApp onlyhtml: "<p>Hello, here is your quote.</p>", subject: "Your Quote"All monetary values in ghl_create_invoice use cents, not dollars:
999925000150000The GHL API cannot create or edit funnel pages. You can only:
Before creating records that reference other objects, fetch the IDs first:
ghl_get_pipelines to get pipelineId and stageIdghl_list_calendars to get calendarIdghl_list_workflows to get workflowIdghl_get_custom_object_schema to get field definitionsAlways use +1 prefix for US numbers: +15551234567
Use ISO 8601 for all dates: 2025-01-15T10:00:00Z
When triggered, this skill:
| Tool | What it does | Key params |
|---|---|---|
ghl_list_contacts | List contacts with search | query (search text), limit, startAfterId |
ghl_get_contact | Get single contact | contactId (required) |
ghl_create_contact | Create new contact | email, phone, firstName, lastName, tags[], customFields[] |
ghl_update_contact | Update contact fields | contactId (required), any field to update |
ghl_delete_contact | Delete contact permanently | contactId (required) |
ghl_search_contacts | Advanced search with filters | filters[] (field, operator, value), sort, sortDirection |
ghl_upsert_contact | Create or update by email/phone | email or phone (required), other fields |
ghl_add_contact_tags | Add tags to contact | contactId (required), tags[] (required) |
ghl_remove_contact_tag | Remove a tag | contactId (required), tag (required) |
| Tool | What it does | Key params |
|---|---|---|
ghl_get_pipelines | List all pipelines & stages | none (call first to get IDs) |
ghl_search_opportunities | Search deals | pipelineId, stageId, status, contactId, query |
ghl_create_opportunity | Create a deal | pipelineId, stageId, name, contactId, monetaryValue |
ghl_update_opportunity | Update deal | opportunityId, stageId, status (open/won/lost/abandoned), monetaryValue |
ghl_delete_opportunity | Delete deal | opportunityId (required) |
| Tool | What it does | Key params |
|---|---|---|
ghl_list_calendars | List calendars | none (call first to get IDs) |
ghl_get_free_slots | Check available time slots | calendarId, startDate, endDate (ISO 8601) |
ghl_list_calendar_events | List appointments | calendarId, startTime, endTime |
ghl_create_appointment | Book appointment | calendarId, contactId, startTime, endTime, title |
ghl_update_appointment | Reschedule or update | eventId, startTime, endTime, status |
ghl_delete_appointment | Cancel appointment | eventId (required) |
| Tool | What it does | Key params |
|---|---|---|
ghl_list_conversations | List message threads | contactId, status |
ghl_get_messages | Get message history | conversationId (required) |
ghl_send_message | Send SMS/Email/WhatsApp | type, contactId, message (SMS) or html+subject (Email) |
ghl_create_conversation | Start new thread | contactId (required) |
| Tool | What it does | Key params |
|---|---|---|
ghl_list_workflows | List automations | none (call first to get IDs) |
ghl_enroll_in_workflow | Enroll contact | contactId, workflowId |
ghl_remove_from_workflow | Remove from workflow | contactId, workflowId |
| Tool | What it does | Key params |
|---|---|---|
ghl_list_funnels | List all funnels | limit, offset |
ghl_get_funnel_pages | Get pages in funnel | funnelId (required) |
ghl_list_funnel_redirects | List URL redirects | funnelId |
ghl_create_funnel_redirect | Create URL redirect | target, action |
| Tool | What it does | Key params |
|---|---|---|
ghl_list_forms | List forms | type (optional filter) |
ghl_get_form_submissions | Get form entries | formId, startAt, endAt, limit |
ghl_list_surveys | List surveys | none |
ghl_get_survey_submissions | Get survey responses | surveyId, startAt, endAt, limit |
| Tool | What it does | Key params |
|---|---|---|
ghl_list_orders | List orders | contactId, status, startAt, endAt |
ghl_get_order | Get order details | orderId (required) |
ghl_list_subscriptions | List subscriptions | contactId, status |
ghl_list_transactions | List payment events | contactId, startAt, endAt |
ghl_list_coupons | List discount codes | none |
| Tool | What it does | Key params |
|---|---|---|
ghl_list_invoices | List invoices | status, contactId, startAt, endAt |
ghl_get_invoice | Get invoice details | invoiceId (required) |
ghl_create_invoice | Create invoice | contactId, name, items[] (amounts in cents), businessDetails |
ghl_send_invoice | Email invoice | invoiceId (required) |
| Tool | What it does | Key params |
|---|---|---|
ghl_list_products | List catalog | limit, offset |
ghl_get_product | Get product details | productId (required) |
ghl_create_product | Create product | name, productType (PHYSICAL/DIGITAL/SERVICE) |
ghl_list_product_prices | Get price variants | productId (required) |
| Tool | What it does | Key params |
|---|---|---|
ghl_list_media | List media files | sortBy, sortOrder, limit |
ghl_upload_media_url | Upload from URL | url, name |
ghl_delete_media | Delete file | fileId (required) |
| Tool | What it does | Key params |
|---|---|---|
ghl_get_location | Get sub-account details | none (uses configured location) |
ghl_list_custom_fields | Get custom field definitions | model (contact/opportunity) |
ghl_list_tags | Get all tags | none |
| Tool | What it does | Key params |
|---|---|---|
ghl_list_users | List team members | none |
ghl_get_user | Get user details | userId (required) |
| Tool | What it does | Key params |
|---|---|---|
ghl_list_blog_posts | List posts | status (published/draft/scheduled), limit |
ghl_create_blog_post | Create post | title, content (HTML), status, categoryId, seoTitle, seoDescription |
ghl_list_blog_categories | List categories | none |
| Tool | What it does | Key params |
|---|---|---|
ghl_list_social_accounts | List connected platforms | none |
ghl_create_social_post | Post or schedule | accountIds[], content, mediaUrls[], scheduledAt |
ghl_list_social_posts | List posts | accountId, status |
| Tool | What it does | Key params |
|---|---|---|
ghl_list_custom_objects | List schemas | none |
ghl_get_custom_object_schema | Get schema with fields | schemaId (required) |
ghl_search_custom_records | Search records | schemaId, query, filters[] |
ghl_create_custom_record | Create record | schemaId, fields (key-value object) |
1. ghl_upsert_contact
- email, firstName, lastName, phone, tags: ["new-lead"]
2. ghl_list_workflows
- Find the nurture workflow ID
3. ghl_enroll_in_workflow
- contactId (from step 1), workflowId (from step 2)
1. ghl_list_calendars
- Get the calendarId
2. ghl_get_free_slots
- calendarId, startDate, endDate
3. ghl_create_appointment
- calendarId, contactId, startTime, endTime, title
1. ghl_get_contact (or ghl_search_contacts)
- Get the contactId
2. ghl_create_invoice
- contactId, name: "Website Design"
- items: [{ name: "Landing Page", amount: 150000, quantity: 1 }]
- (Remember: 150000 = $1,500.00)
3. ghl_send_invoice
- invoiceId (from step 2)
1. ghl_get_pipelines
- Get pipeline stages and their IDs
2. ghl_search_opportunities
- Find the deal by contact or name
3. ghl_update_opportunity
- opportunityId, stageId (new stage), monetaryValue, status
SMS:
ghl_send_message
- type: "SMS", contactId, message: "Your appointment is tomorrow at 2pm"
Email:
ghl_send_message
- type: "Email", contactId
- html: "<h1>Appointment Reminder</h1><p>Your appointment is tomorrow at 2pm.</p>"
- subject: "Appointment Reminder"
WhatsApp:
ghl_send_message
- type: "WhatsApp", contactId, message: "Your appointment is tomorrow at 2pm"
1. ghl_list_blog_categories
- Find or note the categoryId
2. ghl_create_blog_post
- title, content (HTML), status: "published"
- categoryId, seoTitle, seoDescription
1. ghl_list_social_accounts
- Get connected account IDs (Facebook, Instagram, LinkedIn, etc.)
2. ghl_create_social_post
- accountIds: ["acc1", "acc2"], content: "Check out our new feature!"
- mediaUrls: ["https://example.com/image.png"]
- scheduledAt: "2025-01-20T14:00:00Z" (optional, for scheduling)
The API key is invalid or expired. Tell the user to:
GHL_API_KEY environment variableThe MCP server automatically retries with exponential backoff (3 attempts). If it still fails, wait a few seconds and try again.
The API returns field-level details. Common causes:
The ID doesn't exist. Double-check by listing the parent resource first.
See references/api-reference.md for the complete GoHighLevel API documentation including: