Claude Desktop
The bundle
A packaged .mcpb extension. Double-click,
point it at your account, done. No terminal, no Node, no path juggling.
Docs
71 command groups, 609 unique endpoints, a local SQLite mirror with full-text search, and an MCP surface of exactly two tools. This is the connector that runs our own accounts, and the one every bridge we build eventually writes into.
Private beta. Access comes with a bridge or a partner agreement.
A Go command line tool generated from the 41 official GoHighLevel OpenAPI specifications, plus a slim MCP server in front of it. The CLI is the surface a human uses; the MCP server is the surface an agent uses. They are the same binary family and the same credentials.
sync populates SQLite, search then runs full-text offline with no API calls.Everything an agent can do goes through one of these. Endpoint-level tools are hidden deliberately: the search tool is how the agent finds the operation, the execute tool is how it runs it.
| Tool | What it does |
|---|---|
| gohighlevel_search | Finds the right operation across all 71 groups and returns its parameters and shape. Read-only. This is what replaces thirty tool descriptions in the session prompt. |
| gohighlevel_execute | Runs one operation. Supports a dry run that exercises the whole path without writing. Writes are followed by a read-back of the live resource, compared field by field against what was sent. |
# the config, once you have access
{
"mcpServers": {
"gohighlevel": {
"command": "gohighlevel-pp-mcp",
"args": ["--location", "<account>"]
}
}
}
# no token in this file. The wrapper reads it
# per call from the secrets manager.
$ gohighlevel-pp-cli doctor
auth ok · config ok · api reachable
Install
Claude Desktop
A packaged .mcpb extension. Double-click,
point it at your account, done. No terminal, no Node, no path juggling.
Claude Code / any MCP client
Add gohighlevel-pp-mcp to your MCP config as
a stdio server, as in the snippet above. It speaks standard MCP; nothing about the
client needs to know it is ours.
Humans and scripts
The same operations as a command per endpoint, with
--dry-run,
--compact and
--select for when you want the output small
enough to read.
It is not on npm and there is no public download, on purpose. Access ships with a bridge build or a partner agreement, because the connector on its own is not the thing that is worth money. The maintenance is. Ask on the list and say what you would connect it to.
Directory listings
There is a second MCP server behind this: a hosted one that exposes finished business output (a hosted demo site for a lead, a ready-to-import CRM snapshot, a DNS record) as five tools mirroring a REST API one to one. Free dry runs by default, credits charged only when a live job completes.
| Directory | Status | What is blocking it |
|---|---|---|
| Smithery | Listing written, not submitted | Remote servers are published by URL. Ours has no public URL yet: the platform is built and its 123 tests run green, but it is not deployed on a public domain with TLS. |
| Glama | Listing written, not submitted | Same blocker. The remote-connector route needs a live endpoint and a throwaway free-tier tenant for their health check. |
| Anthropic connectors directory | Not eligible today | It requires OAuth 2.0 for authenticated services and submission from a Team or Enterprise organisation. We authenticate with a per-call key, so this one needs code changes before it is even worth queueing. |
The five hosted tools, for reference: catalog, submit_job, job_status, me and ledger. Every request defaults to a dry run. A failed job is never charged. Tenant isolation is enforced at the data layer and covered by a test suite that tries to break it on purpose.
The engineering note worth stealing
This API has answered 201 Created while silently discarding the prompt, the voice and the language of an agent, keeping only the greeting. The greeting was in Spanish, so every dashboard looked right, and 422 of 433 deployed agents were quietly running an English template underneath. Every gate was green for three months.
So the rule, in every tool we ship: after a write, re-read the live resource and compare it field by field against what was sent. Read where the value actually lives, not where the list endpoint summarises it. If it does not match, fail loudly: a half-written resource that looks fine is worse than one that never existed.
Counting is not verifying either. A gate that asks "are there six agents?" passes happily while all six are wrong.
Technical questions
Because tool descriptions are a tax you pay before any work happens. The stock GoHighLevel MCP loads more than thirty tool descriptions into every session, roughly 5-10K tokens spent before the first question, and it still only reaches about nine of the API domains. Two tools, one to search the catalogue and one to execute, cover all 71 command groups and cost almost nothing per session.
Never in the config file and never in the repository. The CLI reads a private integration token per location from a secrets manager at call time and injects the location id itself. If you fork this pattern, keep it: an MCP config file ends up in screen shares and version control more often than anyone expects.
No. It is private beta today: the code stays with us and access comes with a bridge or a partner agreement. If you are evaluating whether to build your own, the architecture notes on this page are the useful part and they are free.
Because the hosted platform is built but not deployed on a public domain. The Smithery and Glama listings are written and waiting on exactly that. We would rather have an empty directory entry than a listing pointing at a URL that does not answer.
After any write, the tool re-reads the live resource and compares it field by field against what was sent. It exists because this API has returned 201 while silently discarding half the payload, once across 422 deployed agents with every gate green. A status code is not evidence that anything was stored.
Something not covered here? [email protected]. Answers come from whoever wrote the thing.