GoHighLevel MCP Server
GoHighLevel MCP Server
Ein Model Context Protocol-Server, der einem LLM-Agenten operative Kontrolle über eine GoHighLevel-CRM gibt – 114 Tools in 24 Modulen, die Kontakte, Pipelines, Kalender, Messaging, Rechnungsstellung und Zahlungen über die GoHighLevel-API v2 abdecken.
Das Problem
GoHighLevel ist das System of Record für eine kleine Agentur: jeder Kunde, jede Buchung, jede Rechnung. Die Arbeit, die den Tag wirklich auffrisst, ist keine einzelne CRM-Aktion, sondern das Verknüpfen zwischen ihnen – ein Shooting wird bestätigt, also muss jemand die Opportunity anlegen, sie in die richtige Pipeline-Phase verschieben, den Kalenderslot für den richtigen Kontakt buchen, die Rechnung entwerfen und eine Notiz verfassen. Jede Schritt für sich ist ein dreißig Sekunden langes Klicken, und die Sequenz läuft mehrere Male pro Woche.
Genau diese Sequenz kann ein Agent ausführen, wenn er auf das CRM zugreifen kann. Dieser Server ist genau dieser Zugriff: Er macht GoHighLevel als typisierte, mit Annotationen versehene Tools verfügbar, sodass ein Agent die gesamte Kette aus einem einzigen Anweisungssatz heraus ausführen kann, während die destruktiven und nach außen gerichteten Schritte für die Bestätigung sichtbar bleiben.
Related MCP server: GoHighLevel MCP Server
Architektur
24 Tool-Module registrieren sich über stdio bei einem McpServer. Der gesamte Datenverkehr läuft über eine einzige ghlRequest()-Funktion, die Authentifizierung, den obligatorischen Version-Header, die Query-String-Assemblierung und das Formen von Fehlern übernimmt. Module lassen sich beim Start über GHL_DISABLED_MODULES ein- und ausschalten – das ist wichtiger, als es klingen mag, denn 114 Tool-Definitionen bedeuten einen erheblichen Teil des Kontextfensters eines Agenten, bevor auch nur ein einziges Wort der Benutzeranfrage gelesen wurde. Ein Deployment, das nur Buchungen verarbeitet, kann sechs Module registrieren und den Rest überspringen.
MCP host (Claude Desktop / Claude Code)
| stdio (JSON-RPC)
+-------v--------------------------------------------+
| index.ts MODULES registry, GHL_DISABLED_MODULES |
+-------+--------------------------------------------+
|
+-------v-----+ +---------------+ +-----------+ ...... 24 modules
| contacts | | opportunities | | invoices |
+-------+-----+ +-------+-------+ +-----+-----+
| | |
| | +-----v--------------+
| | | billing-helpers.ts |
| | | businessDetails |
| | | contactDetails |
| | | sender resolution |
| | +-----+--------------+
+-------+-------+---------------+
|
+---------v----------------------------+
| client.ts ghlRequest() |
| Bearer token + Version header |
| status-specific error hints |
+---------+----------------------------+
|
services.leadconnectorhq.comJedes Schreib-Tool trägt MCP-Annotationen – 17 sind als destructiveHint markiert, und ghl_send_message / ghl_send_invoice sind als nach außen gerichtet gekennzeichnet, weil sie echte Kunden erreichen. Der Host zeigt diese Markierungen an, bevor er einen Aufruf genehmigt – das ist der Unterschied zwischen einem Agenten, der eine Rechnung entwirft, und einem Agenten, der versehentlich eine an einen Kunden schickt.
Der wirklich harte Teil
Eine Rechnung zu erstellen. Der Endpunkt erwartet businessDetails- und contactDetails-Blöcke, und die Dokumentation untertreibt beides: Wenn man versucht, eine contactId und ein paar Positionen wie in der Dokumentation beschrieben zu übermitteln, kommt der Fehler zurück, der kein Feld benennt. Beide Blöcke müssen vollständig angegeben werden, und businessDetails.phoneNo und contactDetails.phoneNo sind Pflichtfelder – ein Kontakt mit E-Mail-Adresse und ohne Telefonnummer kann überhaupt nicht in Rechnung gestellt werden.
Noch schlimmer ist, dass die Werte mit dem übereinstimmen müssen, was die UI erzeugt, sonst sehen per API erstellte Rechnungen anders aus als handgefertigte Rechnungen – anderes Logo, fehlende Konditionen, falsche Nummerierung. Diese Standardwerte stehen nicht in dem Standortprofil, wo man sie erwartet; sie liegen hinter GET /invoices/settings, also derselben Quelle, aus der auch die UI ihre Vorbelegung nimmt.
src/tools/billing-helpers.ts löst beide Blöcke auf, sodass die Tools nur eine contactId benötigen. Für Geschäftsdaten durchlaufen vier Ebenen: Argument beim Aufruf, GHL_BUSINESS_*-Umgebungsvariable, gespeicherte Rechnungseinstellung, Standortprofil – jede Ebene füllt nur das auf, was die darüber liegende leer ließ. Kontaktdienste werden abgerufen und zusammengesetzt; für name gibt es die Rückfallebenen vollständiger Name, Vor– und Nachname, Name des Unternehmens, E-Mail und zuletzt Telefon, weil GoHighLevel leere Namen ablehnt und echte CRM-Angaben häufig keinen Namen haben. Beide Pfade werfen eine Meldung, die das fehlende Feld und die Möglichkeit benennt, es bereitzustellen, statt GHLs undurchschautes 422 an die Oberfläche zu bringen. Jede Abfrage wird pro Standort zwischengespeichert, sodass ein Stapel aus zehn Rechnungen einen Abruf der Einstellungen kostet, nicht zehn.
Was ich anders machen würde
Keine Tests. 4.000 Zeilen und keine. Die Fallback-Kette in
billing-helpersist pure Logik über Fixture-Daten – die einfachste Sache im Repository, um sie gegen Dinge, und gleichzeitig die teuerste Fehlerquelle, denn Fehlerformat ist eine falsch formatierte Rechnung, die an eine Kund spurllt.Kein Retry bei 429.
ghlRequestteilt dem Aufrufer mit, dass „rate limited; retry in nach kurzer Verzögerung“ vor, und dann wird nicht erneut versucht. Backoff gehört in den Client und nicht in das Urteilsvermögen des Agenten.Die Caches sind Modul-Level-Maps mit ohne LeitungsInvalidierung. Für einen stdio-Server, den der Host normalerweise beim Start einfach neu startet, ist das richtig; falsch wird es, sobald dieser Prozess über einen längeren Zeitraum läuft und eine Änderung des Business-Profi none get wird.
Antworten sind durchgängig
Record<string, unknown>. GoHighLevel stellt eine OpenAPI-Spezifikation bereit; würd gewinnen, würde es eine Klasse von Laufwert-Begehen er Zeit in Compile-Fehler er verwandeln.114 Tools in einem Server sind zu viele. Modul-Toggles sind ein Workaround, keine Lösung. Es ist besser, eine kleine Gruppe von Tools und einen Mechanismum für die Entdeckung zu haben, damit der Agent nur zahlt, was er auch nutzt.
Einrichtung
Sie benötigen Node.js 20+ sowie ein GoHighLevel-Konto.
1. Ein Private-Integration-Token erstellen
Einstellungen → Private Integrationen → Neue Integration erstellen. Aktivieren Sie die Bereiche, die zu den Projektionswerkzeugen passen, die Sie verwenden möchten; mindestens:
contacts.readonly, contacts.write, opportunities.readonly,
opportunities.write, calendars.readonly, calendars/events.write,
conversations.readonly, conversations/message.write, invoices.readonly,
invoices.write, products.readonly, products.write,
locations/customFields.readonly, workflows.readonly
Kopieren Sie das Token – es beginnt mit pit-.
2. Finden Sie Ihre Standort-ID
Einstellungen → Unternehmensprofil, oder lesen Sie diese direkt aus der Dashboard-URL ab:
.../location/<LOCATION_ID>/...
3. Erstellen
git clone <this-repo>
cd ghl-mcp
npm install
npm run build4. An einem MCP-Host registrieren
{
"mcpServers": {
"gohighlevel": {
"command": "node",
"args": ["/absolute/path/to/ghl-mcp/dist/index.js"],
"env": {
"GHL_API_KEY": "pit-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"GHL_LOCATION_ID": "your-location-id"
}
}
}
}Starten Sie den Host neu. Eine Liste aller unterstützten Variablen finden Sie in .env.example, einschließlich des Rechnungs-Business-Blocks und der Modul-Schalter.
Um den Server ohne Host zu testen:
GHL_API_KEY=pit-... GHL_LOCATION_ID=... npm run inspectEin Hinweis zum Thema „Automationen erstellen“
Die GoHighLevel-API kann keine Workflow-Logik erstellen – das visuelle Konstrukt ist rein für die Benutzeroberfläche. Das unterstützte Muster ist: einen Workflow einmalig in der UI zu erstellen, seine ID mit ghl_list_workflows zu ermitteln und Kontakte mit ghl_add_contact_to_workflow einzuschreiben.
Tool-Referenz
Bereich | Tools |
Kontakte |
|
Verkaufschancen / Pipelines |
|
Kalender / Termine |
|
Gespräche / Messaging |
|
Rechnungen |
|
Angebote |
|
Produkte |
|
Benutzerdefinierte Felder |
|
Aufgaben |
|
Notizen |
|
Workflows (Automationen) |
|
Zahlungen |
|
Formulare & Umfragen |
|
Benutzer & Teams |
|
Kalenderereignisse |
|
Social Planner |
|
Medienbibliothek |
|
Kampagnen & Links |
|
Tags |
|
Benutzerdefinierte Werte |
|
Unternehmen |
|
Benutzerdefinierte Objekte |
|
Verknüpfungen |
|
Funnels |
|
Lizenz
MIT – siehe LICENSE. Nicht verbunden mit oder unterstützt von GoHighLevel.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to perform CRM operations like creating contacts, managing deals, and updating leads through natural language using the Model Context Protocol.4
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to directly interact with the entire GoHighLevel CRM via 563+ tools across 44 categories, allowing natural language control for contacts, messaging, opportunities, calendars, and more.231ISC
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to interact with a CRM covering companies, people, leads, deals, and more, with role checks, scoped agent keys, approval gates, and a shared audit trail.AGPL 3.0
- FlicenseNot gradedqualityCmaintenanceAn MCP-native CRM backend for AI agents, enabling customer, opportunity, note, follow-up, and pipeline health management through 15 MCP tools.
Related MCP Connectors
Agent-native CRM. 25 tools — contacts, deals, sequences, enrichment waterfall, audit log.
SaaS intelligence for AI agents. 5 unified tools cover 1,000+ services with 91-96% token savings.
See, price, and control every tool call your AI agents make: policy checks, cost, and audit tools.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/vmproductions631-tech/gohighlevel-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server