ghl-mcp-server-v2
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GHL_API_KEY | Yes | Private-integration token / OAuth access token. Env-only, never hardcoded. Fallback: HD_GHL_API_KEY. | |
| GHL_BASE_URL | No | Override base URL for testing. Default: https://services.leadconnectorhq.com | |
| GHL_SPECS_DIR | No | Path to spec files (only used for regeneration). | |
| GHL_TIMEOUT_MS | No | Request timeout in milliseconds. Default: 30000 | |
| GHL_ENABLE_WRITES | No | Dry-run safety gate. Set to 'true' or '1' to enable write operations. Default unset = read-only. Fallback: HD_GHL_ENABLE_WRITES. | |
| GHL_ENABLED_DOMAINS | No | Comma-separated spec basenames (e.g., contacts,opportunities,calendars) to expose a subset of tools. Default: all. |
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 | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| ghl_contact_remove_from_all_campaigns_legacyA | Legacy path variant (contacts.json, 2021-07-28) of removing a contact from every campaign. Functionally equivalent to ghl_contact_remove_from_all_campaigns (v3, DELETE /contacts/{contactId}/campaigns/remove-all) — prefer the v3 tool for new integrations. Renamed from the auto-generated name to disambiguate the two distinct-but-similar endpoints (was colliding with the v3 op's derived name, which got an ugly auto '_delete2' suffix). Remove Contact From Every Campaign Endpoint: DELETE /contacts/{contactId}/campaigns/removeAll (Version header: 2021-07-28; source: contacts.json) OAuth scopes: contacts.write |
| ghl_contact_listA | Deprecated by GoHighLevel — prefer ghl_contact_search_advanced (POST /contacts/search) for new integrations. Kept registered for legacy callers. Returns a simple paginated list filtered by an optional free-text query, not the advanced filter/sort search. [DEPRECATED per official docs — prefer the documented replacement if one exists.] Get Contacts Get Contacts Note: This API endpoint is deprecated. Please use the Search Contacts endpoint instead. Endpoint: GET /contacts/ (Version header: 2021-07-28; source: contacts.json) OAuth scopes: contacts.readonly Pagination params: startAfterId, startAfter, limit — pass them to page through full result sets. |
| ghl_conversation_update_custom_subtypeA | Update Custom Subtype Update or archive a custom subtype. Requires agency or account admin role. Endpoint: PUT /conversations/preferences/custom-subtypes/{id} (Version header: 2021-04-15; source: conversations.json) |
| ghl_conversation_list_custom_subtypesB | Get All Custom Subtypes Get all custom subtypes for a location Endpoint: GET /conversations/preferences/custom-subtypes (Version header: 2021-04-15; source: conversations.json) |
| ghl_conversation_create_custom_subtypeA | Create Custom Subtype Create a new custom subtype for a location. Requires agency or account admin role. Endpoint: POST /conversations/preferences/custom-subtypes (Version header: 2021-04-15; source: conversations.json) |
| ghl_conversation_get_contact_unsubscription_statusA | Get Contact Unsubscription Status Get all subscription statuses for a contact (all emails or specific email) Endpoint: GET /conversations/preferences/unsubscriptions/status (Version header: 2021-04-15; source: conversations.json) |
| ghl_conversation_user_subscription_changeA | User Subscription Change Process subscription change initiated by a user (admin/agent). Supports individual custom subscription changes and resub all functionality. Legal forms are automatically created for user-initiated resubscribe actions on custom subscriptions. Endpoint: POST /conversations/preferences/unsubscriptions/user-change (Version header: 2021-04-15; source: conversations.json) |
| ghl_email_builder_template_deleteA | Legacy 'Email Builder' template API (2021-era, distinct from the v3 template family below — different data model, not interchangeable). Delete a template Endpoint: DELETE /emails/builder/{locationId}/{templateId} (Version header: 2021-07-28; source: emails.json) |
| ghl_email_builder_template_updateA | Legacy 'Email Builder' template API (2021-era, distinct from the v3 template family below — different data model, not interchangeable). Update a template Endpoint: POST /emails/builder/data (Version header: 2021-07-28; source: emails.json) OAuth scopes: emails/builder.write |
| ghl_email_builder_template_getA | Legacy 'Email Builder' template API (2021-era, distinct from the v3 template family below — different data model, not interchangeable). Fetch email templates Fetch email templates by location id Endpoint: GET /emails/builder (Version header: 2021-07-28; source: emails.json) OAuth scopes: emails/builder.readonly Pagination params: limit, offset — pass them to page through full result sets. |
| ghl_email_builder_template_createA | Legacy 'Email Builder' template API (2021-era, distinct from the v3 template family below — different data model, not interchangeable). Create a new template Endpoint: POST /emails/builder (Version header: 2021-07-28; source: emails.json) OAuth scopes: emails/builder.write |
| ghl_email_legacy_campaign_listA | Legacy schedule/campaign listing (2021-era, distinct from the v3 campaign family at /emails/locations/{locationId}/campaigns/emails). Supports limit/offset pagination plus status and emailStatus filters. Get Campaigns Endpoint: GET /emails/schedule (Version header: 2021-07-28; source: emails.json) OAuth scopes: emails/schedule.readonly Pagination params: limit, offset — pass them to page through full result sets. |
| ghl_oauth_get_installed_locationB | REQUIRES AN AGENCY-LEVEL (Company) TOKEN — spec security is Agency-Access-Only, no Location-Access alternative. Legacy twin of GET /oauth/installed-locations (v3); prefer the v3 op for new integrations. Get Location where app is installed This API allows you fetch location where app is installed upon Endpoint: GET /oauth/installedLocations (Version header: 2021-07-28; source: oauth.json) OAuth scopes: oauth.readonly Pagination params: skip, limit — pass them to page through full result sets. |
| ghl_oauth_get_location_access_tokenA | REQUIRES AN AGENCY-LEVEL (Company) TOKEN — spec security is Agency-Access-Only. Body is application/x-www-form-urlencoded per spec (companyId, locationId as form fields), not JSON. Legacy twin of POST /oauth/location-token (v3); prefer the v3 op for new integrations. Get Location Access Token from Agency Token This API allows you to generate locationAccessToken from AgencyAccessToken Endpoint: POST /oauth/locationToken (Version header: 2021-07-28; source: oauth.json) OAuth scopes: oauth.write |
| ghl_social_get_facebook_page_groupB | Get facebook pages Endpoint: GET /social-media-posting/oauth/{locationId}/facebook/accounts/{accountId} (Version header: 2021-07-28; source: social-media-posting.json) |
| ghl_social_attach_facebook_page_groupC | Attach facebook pages Endpoint: POST /social-media-posting/oauth/{locationId}/facebook/accounts/{accountId} (Version header: 2021-07-28; source: social-media-posting.json) |
| ghl_social_get_google_locationsB | Get google business locations Endpoint: GET /social-media-posting/oauth/{locationId}/google/locations/{accountId} (Version header: 2021-07-28; source: social-media-posting.json) |
| ghl_social_set_google_locationsC | Set google business locations Endpoint: POST /social-media-posting/oauth/{locationId}/google/locations/{accountId} (Version header: 2021-07-28; source: social-media-posting.json) |
| ghl_social_get_instagram_page_groupB | Get Instagram Professional Accounts Endpoint: GET /social-media-posting/oauth/{locationId}/instagram/accounts/{accountId} (Version header: 2021-07-28; source: social-media-posting.json) |
| ghl_social_attach_instagram_page_groupC | Attach Instagram Professional Accounts Endpoint: POST /social-media-posting/oauth/{locationId}/instagram/accounts/{accountId} (Version header: 2021-07-28; source: social-media-posting.json) |
| ghl_social_get_linkedin_page_profileC | Get Linkedin pages and profile Endpoint: GET /social-media-posting/oauth/{locationId}/linkedin/accounts/{accountId} (Version header: 2021-07-28; source: social-media-posting.json) |
| ghl_social_attach_linkedin_page_profileC | Attach linkedin pages and profile Endpoint: POST /social-media-posting/oauth/{locationId}/linkedin/accounts/{accountId} (Version header: 2021-07-28; source: social-media-posting.json) |
| ghl_social_get_tiktok_business_profileA | Get Tiktok Business profile Endpoint: GET /social-media-posting/oauth/{locationId}/tiktok-business/accounts/{accountId} (Version header: 2021-07-28; source: social-media-posting.json) |
| ghl_social_get_tiktok_profileC | Get Tiktok profile Endpoint: GET /social-media-posting/oauth/{locationId}/tiktok/accounts/{accountId} (Version header: 2021-07-28; source: social-media-posting.json) |
| ghl_social_attach_tiktok_profileC | Attach Tiktok profile Endpoint: POST /social-media-posting/oauth/{locationId}/tiktok/accounts/{accountId} (Version header: 2021-07-28; source: social-media-posting.json) |
| ghl_social_get_twitter_profileB | [DEPRECATED per official docs — prefer the documented replacement if one exists.] Get Twitter profile |
| ghl_social_attach_twitter_profileA | [DEPRECATED per official docs — prefer the documented replacement if one exists.] Attach Twitter profile |
| ghl_user_get_by_locationB | DEPRECATED per spec — superseded by GET /users/search (v3), which supports the same locationId filter plus richer query/paging options.
[DEPRECATED per official docs — prefer the documented replacement if one exists.]
Get User by Location
Deprecated. Use |
| ghl_ad_fb_account_deleteA | Delete ad account Remove a Facebook ad account connection from a location Endpoint: DELETE /ad-publishing/facebook/ad-accounts/{adAccountId} (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_fb_account_getA | Get ad account details Retrieve details of a specific Facebook ad account Endpoint: GET /ad-publishing/facebook/ad-accounts/{adAccountId} (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly |
| ghl_ad_fb_account_listA | Get ad accounts Retrieve Facebook ad accounts available for the connected user Endpoint: GET /ad-publishing/facebook/ad-accounts (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly Pagination params: limit — pass them to page through full result sets. |
| ghl_ad_fb_ad_duplicateB | Duplicate ad Duplicate an existing Facebook ad Endpoint: POST /ad-publishing/facebook/ads/{adId}/duplicate (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_fb_ad_pauseA | Pause ad Pause a running Facebook ad Endpoint: POST /ad-publishing/facebook/ads/{adId}/pause (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_fb_ad_resumeA | Resume ad Resume a paused Facebook ad Endpoint: POST /ad-publishing/facebook/ads/{adId}/resume (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_fb_ad_deleteA | Delete ad Delete a Facebook ad by ID Endpoint: DELETE /ad-publishing/facebook/ads/{adId} (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_fb_adset_duplicateB | Duplicate ad set Duplicate an existing Facebook ad set Endpoint: POST /ad-publishing/facebook/adsets/{adSetId}/duplicate (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_fb_adset_pauseA | Pause ad set Pause a running Facebook ad set Endpoint: POST /ad-publishing/facebook/adsets/{adSetId}/pause (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_fb_adset_resumeA | Resume ad set Resume a paused Facebook ad set Endpoint: POST /ad-publishing/facebook/adsets/{adSetId}/resume (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_fb_adset_deleteA | Delete ad set Delete a Facebook ad set by ID Endpoint: DELETE /ad-publishing/facebook/adsets/{adSetId} (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_fb_adset_upsertB | Upsert adset Create or update a Facebook ad set Endpoint: PUT /ad-publishing/facebook/adsets (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_fb_ad_upsertA | Upsert ad Create or update a Facebook ad Endpoint: PUT /ad-publishing/facebook/ads (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_fb_campaign_getA | Get campaign with linked entities Retrieve a Facebook campaign with its linked adsets and ads Endpoint: GET /ad-publishing/facebook/campaign/{campaignId} (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly |
| ghl_ad_fb_campaign_duplicateA | Duplicate campaign Duplicate an existing Facebook campaign Endpoint: POST /ad-publishing/facebook/campaigns/{campaignId}/duplicate (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_fb_campaign_pauseB | Pause campaign Pause a running Facebook campaign Endpoint: POST /ad-publishing/facebook/campaigns/{campaignId}/pause (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_fb_campaign_publishing_progress_getA | Get campaign publishing progress Returns Redis-backed publish progress for a campaign while it is publishing to Meta. Used by the validation funnel UI to poll step counts and completion state. Endpoint: GET /ad-publishing/facebook/campaigns/{campaignId}/publishing-progress (Version header: v3; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly |
| ghl_ad_fb_campaign_publishA | Publish campaign Publish a Facebook campaign and push it live to Facebook Endpoint: POST /ad-publishing/facebook/campaigns/{campaignId}/publish (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_fb_campaign_resumeA | Resume campaign Resume a paused Facebook campaign Endpoint: POST /ad-publishing/facebook/campaigns/{campaignId}/resume (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_fb_campaign_deleteB | Delete campaign Delete a Facebook campaign by ID Endpoint: DELETE /ad-publishing/facebook/campaigns/{campaignId} (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_fb_campaign_upsertB | Upsert campaign Create or update a Facebook campaign Endpoint: PUT /ad-publishing/facebook/campaigns (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_fb_conversation_form_listB | Get conversation forms Retrieve Facebook conversation lead forms for a location Endpoint: GET /ad-publishing/facebook/conversation-forms (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly |
| ghl_ad_fb_conversation_form_createA | Create conversation form Create a new Facebook conversation lead form Endpoint: POST /ad-publishing/facebook/conversation-forms (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_fb_audience_member_batch_updateA | Batch update audience members Add or remove members in bulk from a Facebook custom audience via CSV or smart lists Endpoint: PUT /ad-publishing/facebook/custom-audience/{audienceId}/member/batch (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_fb_audience_member_removeB | Remove custom audience member Remove a member from a Facebook custom audience Endpoint: DELETE /ad-publishing/facebook/custom-audience/{audienceId}/member (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_fb_audience_member_addA | Add custom audience member Add a member to a Facebook custom audience Endpoint: PUT /ad-publishing/facebook/custom-audience/{audienceId}/member (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_fb_audience_deleteA | Delete custom audience Delete a Facebook custom audience by ID Endpoint: DELETE /ad-publishing/facebook/custom-audience/{audienceId} (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_fb_audience_getA | Get custom audience by ID Retrieve a specific Facebook custom audience by its ID Endpoint: GET /ad-publishing/facebook/custom-audience/{audienceId} (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly |
| ghl_ad_fb_audience_updateA | Update custom audience Update name or description of a Facebook custom audience Endpoint: PUT /ad-publishing/facebook/custom-audience/{audienceId} (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_fb_audience_listB | Get custom audiences Retrieve Facebook custom audiences for a location Endpoint: GET /ad-publishing/facebook/custom-audience (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly |
| ghl_ad_fb_entity_getB | Get entities Retrieve Facebook campaigns, adsets, or ads based on entity type Endpoint: GET /ad-publishing/facebook/entity (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly |
| ghl_ad_fb_integration_deleteA | Delete Facebook integration Remove the Facebook ad integration from a location Endpoint: DELETE /ad-publishing/facebook/integration (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_fb_integration_getA | Get Facebook integration Retrieve the Facebook ad integration details for a location Endpoint: GET /ad-publishing/facebook/integration (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly |
| ghl_ad_fb_integration_createB | Create Facebook integration Create a Facebook ad integration for a location with page and ad account Endpoint: POST /ad-publishing/facebook/integration (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_fb_lead_form_getA | Get lead form by ID Retrieve a specific Facebook lead form by its ID Endpoint: GET /ad-publishing/facebook/lead-form/{leadFormId} (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly |
| ghl_ad_fb_current_user_getA | Get current Facebook user Retrieve the authenticated Facebook user profile for a location Endpoint: GET /ad-publishing/facebook/me (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly |
| ghl_ad_fb_page_lead_form_listB | Get page lead forms Retrieve lead gen forms for a specific Facebook page Endpoint: GET /ad-publishing/facebook/page/{pageId}/forms (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly |
| ghl_ad_fb_page_lead_form_createB | Create page lead form Create a new lead gen form on a Facebook page Endpoint: POST /ad-publishing/facebook/page/{pageId}/forms (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_fb_page_instagram_account_listA | Get Instagram accounts for page Retrieve Instagram accounts linked to a specific Facebook page Endpoint: GET /ad-publishing/facebook/page/{pageId}/instagram (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly |
| ghl_ad_fb_page_set_defaultB | Set default page Set the default Facebook page for a location Endpoint: PUT /ad-publishing/facebook/page/default (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_fb_page_deleteB | Delete page connection Remove a Facebook page connection from a location Endpoint: DELETE /ad-publishing/facebook/page (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_fb_page_listA | Get Facebook pages Retrieve Facebook pages associated with the connected account Endpoint: GET /ad-publishing/facebook/pages (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly |
| ghl_ad_fb_pixel_listA | Get conversion pixels Retrieve Facebook conversion pixels for a location Endpoint: GET /ad-publishing/facebook/pixels (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly |
| ghl_ad_fb_pixel_upsertA | Upsert conversion pixel Create or update a Facebook conversion pixel configuration Endpoint: PUT /ad-publishing/facebook/pixels (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_fb_campaign_reporting_getA | Get campaign reporting Retrieve reporting metrics for a specific Facebook campaign Endpoint: GET /ad-publishing/facebook/reporting/campaign/{campaignId} (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly |
| ghl_ad_fb_reporting_listA | Get reporting list Retrieve a list of Facebook campaigns, adsets, or ads with reporting data Endpoint: GET /ad-publishing/facebook/reporting/list (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly |
| ghl_ad_fb_reporting_getB | Get reporting data Retrieve aggregated Facebook ad reporting metrics for a location Endpoint: GET /ad-publishing/facebook/reporting (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly |
| ghl_ad_fb_targeting_searchA | Search targeting options Search Facebook geo-locations and interests for ad targeting Endpoint: GET /ad-publishing/facebook/targeting/search (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly |
| ghl_ad_google_account_deleteA | Delete ad account Remove a Google Ads account connection from a location Endpoint: DELETE /ad-publishing/google/ad-accounts/{adAccountId} (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_google_account_getA | Get ad account details Retrieve details of a specific Google Ads account Endpoint: GET /ad-publishing/google/ad-accounts/{adAccountId} (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly |
| ghl_ad_google_account_listB | Get Google ad accounts Retrieve Google Ads accounts available for the connected user Endpoint: GET /ad-publishing/google/ad-accounts (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly |
| ghl_ad_google_campaign_publishB | Publish ad Publish a Google ad and push it live Endpoint: POST /ad-publishing/google/ads/{adId}/publish (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_google_campaign_getA | Get Google campaign by ID Retrieve a specific Google Ads campaign by ID Endpoint: GET /ad-publishing/google/ads/{adId} (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly |
| ghl_ad_google_campaign_upsertB | Upsert Google campaign Create or update a full Google Ads campaign structure Endpoint: PUT /ad-publishing/google/ads (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_google_asset_listB | Get assets Retrieve Google Ads creative assets for a location Endpoint: GET /ad-publishing/google/assets (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly |
| ghl_ad_google_asset_upsertA | Upsert assets Create or update Google Ads creative assets Endpoint: POST /ad-publishing/google/assets (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_google_audience_getA | Get audience by ID Retrieve a specific Google Ads combined audience by ID Endpoint: GET /ad-publishing/google/audiences/{audienceId} (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly |
| ghl_ad_google_audience_listB | Get audiences Retrieve Google Ads combined audiences for a location Endpoint: GET /ad-publishing/google/audiences (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly |
| ghl_ad_google_audience_upsertA | Upsert audience Create or update a Google Ads combined audience Endpoint: PUT /ad-publishing/google/audiences (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_google_conversion_goal_listA | Get conversion goals Retrieve Google Ads conversion goals for a location Endpoint: GET /ad-publishing/google/conversion-goals (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly |
| ghl_ad_google_conversion_deleteA | Delete conversion Delete a Google Ads conversion action by ID Endpoint: DELETE /ad-publishing/google/conversions/{conversionId} (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_google_conversion_getA | Get conversion by ID Retrieve a specific Google Ads conversion action by ID Endpoint: GET /ad-publishing/google/conversions/{conversionId} (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly |
| ghl_ad_google_conversion_listB | Get conversions Retrieve Google Ads conversion actions for a location Endpoint: GET /ad-publishing/google/conversions (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly |
| ghl_ad_google_conversion_upsertB | Upsert conversion Create or update a Google Ads conversion action Endpoint: PUT /ad-publishing/google/conversions (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_google_entity_getB | Get entities Retrieve Google campaigns, ad groups, or ads based on entity type Endpoint: GET /ad-publishing/google/entity (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly |
| ghl_ad_google_integration_getA | Get Google integration Retrieve the Google Ads integration details for a location Endpoint: GET /ad-publishing/google/integration (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly |
| ghl_ad_google_integration_createB | Create Google integration Create a Google Ads integration for a location Endpoint: POST /ad-publishing/google/integration (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.write |
| ghl_ad_google_keyword_ideas_getB | Get keyword ideas Retrieve keyword suggestions for Google Ads campaigns Endpoint: POST /ad-publishing/google/keyword-ideas (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly |
| ghl_ad_google_current_user_getA | Get current Google user Retrieve the authenticated Google user info for a location Endpoint: GET /ad-publishing/google/me (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly |
| ghl_ad_google_campaign_reporting_getB | Get campaign reporting Retrieve reporting metrics for a specific Google campaign Endpoint: GET /ad-publishing/google/reporting/campaign/{campaignId} (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly |
| ghl_ad_google_reporting_listB | Get reporting list Retrieve a list of Google campaigns or ad groups with reporting data Endpoint: GET /ad-publishing/google/reporting/list (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly |
| ghl_ad_google_reporting_getB | Get reporting data Retrieve aggregated Google Ads reporting metrics for a location Endpoint: GET /ad-publishing/google/reporting (Version header: 2021-07-28; source: v3/ad-publishing-v3.json) OAuth scopes: adPublishing.readonly |
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 651 tools
The descriptions are individually thorough and explicitly call out deprecated/legacy variants, but the sheer volume of near-duplicate pairs makes selection genuinely ambiguous: legacy and v3 twins (e.g. ghl_saas_bulk_disable vs ghl_saas_bulk_disable_deprecated, ghl_email_builder_template_* vs ghl_email_template_*), two opportunity search tools, multiple overlapping 'get Facebook pages' tools across ghl_social_* and ghl_ad_fb_*, and transcription get vs download. Even with careful prose, an agent facing 651 tools will struggle to pick the right one.
The ghl_<domain>_<resource>_<action> pattern is largely consistent, with sensible domain prefixes (contact, calendar, ad_fb, voice_ai) and helpful suffixes like _deprecated and _legacy. Minor deviations exist: verb-first names (ghl_social_get_posts, ghl_blog_get_all_authors_by_location), mixed edit/update verbs (ghl_social_edit_post vs ghl_social_update_queue_item), and ghl_marketplace_charge which reads ambiguously as verb or noun, but overall the system is quite disciplined.
651 tools is an extreme mismatch for a single MCP server, far beyond the 25+ threshold. While it reflects the breadth of the full GoHighLevel platform, no agent can sanely navigate this surface in one server — it should be split into domain-focused servers (contacts, calendars, ad publishing, payments, SaaS, etc.) to keep tool selection tractable and context overhead manageable.
The surface provides full CRUD and lifecycle coverage across dozens of domains: contacts, calendars, opportunities, invoices, payments, products, emails, social posting, ad publishing, voice/conversation AI, knowledge bases, SaaS, and more. The few known gaps (e.g. ghl_user_delete/update missing a path param, form file upload with no callable schema) are documented tool bugs rather than missing operations; there are no obvious dead ends in the core workflows.