gohighlevel-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@gohighlevel-mcpFind contact Sarah Johnson and show her upcoming appointments"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
gohighlevel-mcp
An MCP (Model Context Protocol) server that exposes GoHighLevel CRM operations as tools an LLM agent can call: search contacts, get a contact record, list appointments, log a note, and create a new lead.
Why this server
I maintain production GoHighLevel sub-accounts, Vapi voice agents, and website chatbots for three real-estate brands as part of my day job. The recurring pattern in that work is: a caller or website visitor talks to an agent, the agent needs to check if they're already a CRM contact, see their history and upcoming appointments, log what happened, and either update or create their record. This server exposes exactly that loop as MCP tools, so any MCP-compatible agent (Claude, an n8n AI agent node, a custom LangChain agent, etc.) can plug straight into a GoHighLevel sub-account.
Related MCP server: serve7-mcp-connectors
Design choices
Python + FastMCP (
mcp.server.fastmcp) — matches the rest of my stack (FastAPI, Python automation scripts) and gives automatic input validation via Pydantic without hand-rolled JSON schemas.Mock data backend for this build. I don't have a spare GHL sub-account API key to hand over for an evaluation task, so
data_store.pyreads/writes a localmock_data.jsoninstead of callinghttps://services.leadconnectorhq.com. Every method inGHLDataStoreis named and shaped after the real GHL v2 endpoint it stands in for (see the docstring at the top ofdata_store.py), so swapping in anhttpx.AsyncClientwith a real API key is a same-signature change, not a rewrite.Tools, not raw endpoint wrappers.
ghl_search_contacts+ghl_get_contact+ghl_list_appointments+ghl_create_note+ghl_create_contactmap onto real agent tasks (look someone up, check their history, log the outcome), not a 1:1 dump of every GHL API route.Read-only tools are annotated
readOnlyHint: true; the two write tools (ghl_create_note,ghl_create_contact) are not, so a permission-gating layer upstream can treat them differently — which matters a lot once an agent is allowed to touch real CRM data.Errors are actionable, not stack traces. A lookup on an unknown
contact_idreturns{"error": ..., "suggestion": "Use ghl_search_contacts to find the correct contact_id."}instead of crashing the agent's turn.
Project structure
gohighlevel-mcp/
├── server.py # MCP server + tool definitions (FastMCP)
├── data_store.py # Data access layer (mock JSON now, real GHL API later)
├── mock_data.json # Sample CRM data: 3 contacts, 2 appointments
├── test_server.py # End-to-end test: spins up server.py as a real
│ # stdio subprocess and calls every tool through
│ # a proper MCP ClientSession
└── requirements.txtRun it
pip install -r requirements.txt
python server.py # stdio transport, for local MCP clients
python server.py --http # streamable HTTP on :8000, for remote clientsTest it
python test_server.pyThis launches the server as a real subprocess over stdio, connects a
real ClientSession, calls list_tools, then exercises all 5 tools
(search → get → list appointments → add note → handle a bad id
gracefully → create a new lead) and asserts on the results. Not a
mocked client — this is the same protocol path a real agent uses.
What I'd add next
Swap
GHLDataStorefor anhttpx.AsyncClient-backed version that calls the real GHL API with a Location API key from an env var.Pagination cursor support to match GHL's actual cursor-based pagination (this mock uses simple offset/limit for clarity).
A
ghl_update_pipeline_stagetool, since stage changes are the other half of the lead-routing loop I handle day to day.
This server cannot be deployed
Maintenance
Related MCP Connectors
Native MCP access to CRM contacts, organizations, deals and tasks with user permissions.
Discover, plan and run tools across your connected business systems through one OAuth MCP endpoint
Agent-native CRM + get-booked platform. Operate over MCP, or pay per call via x402. No login.
API-first CRM for LLMs - contacts, companies, deals and activities over a native MCP server.
Related MCP Servers
- FlicenseBqualityDmaintenanceExposes Zoho CRM v6 REST API as structured tools for LLM agents via MCP, enabling CRUD operations, search, COQL queries, and more.113-
- FlicenseAqualityCmaintenanceProvides reusable MCP tools for Amazon Connect AI Agents and Bedrock AgentCore to look up customers, manage support tickets, schedule appointments, update CRM records, retrieve knowledge, and create tasks.7-
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to interact with multiple CRM systems through a unified set of MCP tools, such as finding contacts, accounts, and deals, while supporting mock, REST, and vendor-specific backends.MIT
- FlicenseNot gradedqualityBmaintenanceProvides MCP tools that let an agent retrieve customer account, product usage, interaction, and support summaries, and create follow-up tasks after user approval.-