GoHighLevel MCP Server
Model Context Protocol server for GoHighLevel. It exposes GHL API operations as MCP tools over stdio, Streamable HTTP, and legacy SSE.
Current API Coverage
- Official GHL endpoints parsed:
590 - Official endpoint coverage:
590 / 590 - Generated official endpoint tools:
238 - MCP tools in registry:
848(816raw API tools plus32curated agent workflow tools) - Local-only endpoint references tracked for review:
253 - Daily GitHub Actions refresh opens a PR when the official GHL API docs change.
Coverage artifacts:
docs/GHL-API-COVERAGE-REPORT.mddocs/GHL-LOCAL-ENDPOINT-CLASSIFICATION.mddocs/api-sources.lock.jsondocs/ghl-api-coverage.jsondocs/API-DASHBOARD.mddocs/tool-inventory.json
Companion Tooling
The MCP server stays focused on MCP transports and GHL tool execution. Companion tooling lives beside it for setup, inspection, updates, and examples.
npm run tools:doctor # Check build output, env, and API coverage health
npm run tools:list # Browse the registered MCP tool inventory
npm run tools:report # Regenerate the API dashboard and tool inventory JSON
npm run tools:explorer # Print the local static tool explorer path
npm run tools:configure # Print a Codex-compatible MCP config snippet
npm run tools:update-api # Refresh official GHL API coverage and generated tools
Direct CLI usage:
npx ghl-mcp doctor
npx ghl-mcp list-tools --search ads
npx ghl-mcp configure codex
npx ghl-mcp test-tool search_contacts '{"locationId":"your_location_id","pageLimit":1}'
See docs/TOOLING.md for the full tooling map.
Contributors
See CONTRIBUTORS.md for contributor acknowledgements.
Agent Tool Profiles
By default, the server exposes the full tool surface: raw endpoint tools plus the curated CRM workflow layer. Agents that work better with fewer, higher-level actions or stricter stability boundaries can use:
GHL_TOOL_PROFILE=curated npm run start:stdio
GHL_TOOL_PROFILE=stable npm run start:stdio
GHL_TOOL_PROFILE=official npm run start:stdio
Profiles:
full- default; exposes all848tools.curated- exposes only the32agent workspace tools, such ascrm_prepare_lead_intake,crm_prepare_conversation_reply,crm_prepare_appointment_booking, andcrm_location_health_check.raw- exposes only the original816endpoint-level tools.official- exposes explicit official OpenAPI and live-docs supplemental tools only.stable- exposes official, live-docs supplemental, curated, and legacy-compatible tools while hiding deprecated and private/unstable surfaces.
Every tool inventory entry includes a stability tier: official, live-docs-supplemental, legacy-compatible, private-or-unstable, or deprecated.
The curated tools return structured confirmation queues for writes. They stage the exact raw tool calls an agent should execute after the user confirms, instead of making outbound messages, billing, workflow enrollment, stage moves, or snapshot pushes feel like one ambiguous API call.
Recipes And Agent Starters
The examples/ directory turns the tool surface into practical MCP workflows:
examples/recipes/— structured JSON recipes for lead intake, appointment booking, pipeline follow-up, ads reporting, review requests, location health checks, and more.examples/agents/— starter assistant prompts for CRM, appointment setting, pipeline management, ads reporting, and agency operations.docs/tool-explorer.html— static browser explorer fordocs/tool-inventory.json.
Recipes use real MCP tool names and include confirmation points for actions like outbound messages, appointment creation, workflow enrollment, deletes, and snapshot pushes.
MCP Apps
mcp-apps/ contains companion MCP Apps for hosts that support interactive MCP resources. They run as a separate app server so the core MCP API server stays lean.
MCP Apps require Node 20+ because they use @modelcontextprotocol/ext-apps.
The apps are wired to the curated CRM workflow tools first, so buttons like "Prepare lead intake," "Prepare booking," and "Prepare snapshot rollout" produce confirmation-gated action plans for ChatGPT, Codex, or another MCP host.
npm run build
npm run apps:install
npm run apps:build
npm run apps:start:stdio
Included app tools:
show_ghl_tool_explorer_appshow_ghl_contact_workspace_appshow_ghl_lead_intake_appshow_ghl_conversation_inbox_appshow_ghl_pipeline_board_appshow_ghl_appointment_desk_appshow_ghl_automation_launcher_appshow_ghl_reputation_center_appshow_ghl_ads_dashboard_appshow_ghl_billing_commerce_appshow_ghl_agency_admin_app
See mcp-apps/README.md for host config and HTTP mode.
For a normal browser preview:
npm run apps:start:http
Open http://localhost:3001/preview. The tool explorer links to every CRM workspace preview.
Transports
npm run start:stdio— stdio MCP server for desktop MCP clients.npm run start:http— Streamable HTTP server at/mcp.npm run start:legacy— legacy SSE server at/sse.
The HTTP server also exposes:
GET /healthGET /capabilitiesGET /toolsPOST /executePOST /tools/call
Setup
npm install
cp .env.example .env
Set:
GHL_API_KEY=your_private_integration_api_key
GHL_LOCATION_ID=your_location_id
GHL_BASE_URL=https://services.leadconnectorhq.com
GHL_API_VERSION=2023-02-21
Build and run:
npm run build
npm run start:stdio
Verification
npm run scan:ghl-api
npm run validate:api-lock
npm test
docs/api-sources.lock.json records the official docs commit, expected endpoint counts, live-docs supplemental Email V2 pages, and acceptance gates verified on June 10, 2026. CI fails if generated coverage no longer matches this lock.
For HTTP:
npm run start:http
MCP Client Config
Example stdio config:
{
"mcpServers": {
"ghl": {
"command": "node",
"args": ["/absolute/path/to/Go-High-Level-MCP-2026-Complete/dist/server.js"],
"env": {
"GHL_API_KEY": "your_private_integration_api_key",
"GHL_LOCATION_ID": "your_location_id",
"GHL_BASE_URL": "https://services.leadconnectorhq.com",
"GHL_API_VERSION": "2023-02-21"
}
}
}
}
Scripts
npm run build # Compile server files to dist/
npm run lint # Fast TypeScript syntax/transpile check
npm test # Jest tests
npm run scan:ghl-api # Refresh official GHL API coverage and generated tools
npm run ci:ghl-api-drift # Fail if generated API artifacts are stale
npm run smoke:ghl-live # Optional read-only live checks when GHL env vars are set
npm run tools:doctor # Check local MCP setup
npm run tools:report # Generate API dashboard and tool inventory
npm run tools:explorer # Show the static tool explorer file path
Daily API Refresh
.github/workflows/ghl-api-drift.yml runs daily. It:
- Pulls the latest official
GoHighLevel/highlevel-api-docssnapshot. - Regenerates coverage docs and generated official endpoint tools.
- Opens a PR if any generated artifacts changed.
PRs and pushes also run drift checks so stale generated files do not silently land.
Project Layout
src/
clients/ GHL API clients
tools/ MCP tool modules
types/ shared TypeScript types
main.ts Streamable HTTP MCP server
server.ts stdio MCP server
http-server.ts legacy SSE MCP server
scripts/ API scanner, generator, build, smoke test
docs/ generated API coverage reports
examples/ MCP recipes and starter agent templates
mcp-apps/ companion MCP Apps server and bundled UI
tests/ Jest tests
Notes
src/tools/official-spec-tools.tsandsrc/tools/official-spec-endpoints.jsonare generated. Do not edit them by hand.- Run
npm run scan:ghl-apiafter GHL API docs change. - The live smoke test is opt-in and only runs when
GHL_API_KEYandGHL_LOCATION_IDare present.