ghl-pro-mcp
Le das una orden en tu idioma y te monta el embudo entero dentro de GoHighLevel.
«Quiero un embudo para mi clínica de mascotas, y que agende citas»
A partir de ahí, el asistente pregunta lo que le falta —no inventa nada—, investiga el mercado de tu zona, y despliega en tu cuenta: etiquetas, campos personalizados, pipeline con sus etapas, landing con formulario real y el workflow de respuesta y seguimiento. Todo queda en borrador, y se puede deshacer de una pieza.
Esto es un servidor MCP local: funciona con Claude Code, Claude Desktop, Codex, Cursor, Cline, Windsurf o VS Code. Corre en tu ordenador — tus credenciales y los datos de tu CRM no pasan por ningún servidor intermedio.
Por qué este y no otro
| MCP oficial de GHL | Este | |
|---|---|---|
| Leer workflows | Sí | Sí |
| Crear y guardar workflows | No | Sí |
| Crear embudos | No | Sí |
| Guardar y publicar páginas | No | Sí |
| Operaciones de la API pública disponibles | 548 | 548 |
No es una opinión: la API pública de GoHighLevel solo permite leer workflows, embudos y páginas. Es un muro de su API, no de su configuración. Cualquier integración que se apoye solo en la API pública se queda fuera de ahí — y ahí es donde está el trabajo.
Este servidor usa además la vía de sesión para esas tres cosas, que es lo que le deja montar el embudo completo en lugar de limitarse a consultarlo.
El flujo, de principio a fin
«quiero un embudo para mi clínica de mascotas»
│
├─ nuevo_proyecto ──────► crea el brief y devuelve las preguntas
│
├─ responder_brief ─────► se contestan (el asistente pregunta lo que falta)
│
├─ guia_de_investigacion ► qué hay que averiguar del mercado de esa zona
├─ guardar_investigacion ► 3-5 competidores y las palabras que usa su cliente
│
├─ ver_plan_despliegue ──► enseña qué va a crear y qué falta
│
├─ desplegar_plan ───────► LO CREA TODO, en borrador
│
└─ ver_manifiesto ───────► qué se creó, para poder deshacerlo
deshacer_plan ─────► borra lo que creó, y dice lo que no pudo
El brief manda. Sin las respuestas críticas —sector, objetivo, oferta, zona, quién atiende y qué es un buen lead— el despliegue no se ejecuta. Y sin la investigación del mercado tampoco: sin las palabras que usa tu cliente, la landing sale con los tópicos del sector, igual que la de cualquier competidor.
Qué crea el despliegue
- Etiquetas de segmentación, según lo que el negocio necesite
- Campos personalizados — los que tú digas: la fecha de la última visita, la talla, lo que haga falta para el seguimiento. Sin esto no hay recordatorio del próximo servicio, que es la táctica que más dinero devuelve cuando se vende varias veces al mismo cliente
- Pipeline con etapas derivadas del objetivo (no las mismas cinco para todos)
- Landing con formulario nativo de GoHighLevel — se comprueba que capte de verdad
- Workflow: crea la oportunidad en el pipeline, responde al cliente por el canal que tenga, avisa al negocio, espera un día y deja una tarea de repaso
Nada se publica. Los workflows quedan en borrador y la landing sin publicar: publicar es tu decisión.
Nada se duplica. Si despliegas dos veces, reutiliza lo que se llame igual y te dice qué revisar. Y lo que ya tenías no se apunta en el manifiesto, así que deshacer no te borra algo tuyo.
Requisitos
- uv (recomendado), o Python 3.10 o superior.
- Una Private Integration Token de GoHighLevel, creada dentro de la subcuenta que quieras conectar y con los scopes que necesites.
Instalación
No hay que instalar nada a mano. Con uv en el equipo, el cliente MCP se lo baja de
PyPI la primera vez que lo usa:
{
"mcpServers": {
"ghl-pro": {
"command": "uvx",
"args": ["ghl-pro-mcp@latest"],
"env": { "GHL_ENABLE_SESSION": "1" }
}
}
}
Es el equivalente a npx. El @latest comprueba si hay versión nueva cada vez, así que
los arreglos llegan solos.
Los comandos de terminal
El cliente se lo baja solo con uvx, así que no hace falta instalar nada — pero los
comandos de configuración y diagnóstico (setup, doctor) se lanzan igual, con uvx
delante:
uvx ghl-pro-mcp@latest --version # comprobar que arranca
uvx ghl-pro-mcp@latest setup # configurar
uvx ghl-pro-mcp@latest doctor # comprobar contra tu GoHighLevel
Si lo instalas como herramienta (
uv tool install ghl-pro-mcp), eluvxsobra y los comandos quedan comoghl-pro-mcp setupyghl-pro-mcp doctor. Las dos vías valen;uvxno deja nada instalado.
Funciona igual en Windows, macOS y Linux.
Configuración
Un solo comando:
uvx ghl-pro-mcp@latest setup
Te pide el token privado y el Location ID —y te confirma el nombre de la subcuenta antes de guardar nada—, y después te ofrece configurar workflows y embudos: con la extensión de Chrome, a mano, o dejarlo para más tarde.
Hazlo en una terminal, nunca desde el chat de la IA. Lo que se escribe en la conversación acaba en el historial, y el token privado da acceso completo al CRM.
Las credenciales quedan en un único archivo, en tu carpeta de usuario:
| Sistema | Ruta |
|---|---|
| Windows | %LOCALAPPDATA%\ghl-pro-mcp\credentials.env |
| macOS | ~/Library/Application Support/ghl-pro-mcp/credentials.env |
| Linux | ~/.config/ghl-pro-mcp/credentials.env |
Si prefieres decidir tú la ubicación, define GHL_PRO_ENV_PATH y el asistente escribirá
ahí: respeta esa variable, igual que el servidor al leer.
Añádelo a tu cliente
Al terminar, setup te muestra el bloque exacto que necesitas. Es el de arriba.
GHL_ENABLE_SESSION enciende workflows, embudos y páginas. Sin esa línea tendrás las
548 operaciones de la API pública, pero no el extra — y ese extra es la diferencia.
Reinicia tu cliente de IA después de añadirlo.
| Cliente | Dónde va |
|---|---|
| Claude Code | .mcp.json en la raíz de tu proyecto |
| Claude Desktop | %APPDATA%\Claude\claude_desktop_config.json (Windows) · ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) · ~/.config/Claude/claude_desktop_config.json (Linux) |
| Cursor, Cline, Windsurf | Su propio archivo de configuración de MCP |
Hace falta
uv:winget install astral-sh.uv, ocurl -LsSf https://astral.sh/uv/install.sh | sh.
Comprobar que funciona
uvx ghl-pro-mcp@latest doctor
Comprueba la configuración contra tu GoHighLevel real y te dice, una a una, qué funciona y qué no. No modifica nada salvo que se lo pidas expresamente. Y si quieres llegar más lejos, tiene dos banderas que sí escriben, pero que dejan todo como estaba:
uvx ghl-pro-mcp@latest doctor --escritura # crea un workflow de prueba y LO BORRA
uvx ghl-pro-mcp@latest doctor --pagina <pageId> # guarda esa página sin cambiarla
Las 61 herramientas
El flujo — de la orden al embudo montado
| Herramienta | Qué hace |
|---|---|
nuevo_proyecto |
Empieza: crea el brief y devuelve las preguntas que hay que hacer |
responder_brief |
Guarda las respuestas (fusiona, nunca borra lo ya contestado) |
ver_brief |
Cómo va, qué falta, y cuál es el siguiente paso |
listar_proyectos |
Los proyectos empezados y a cuáles les falta información |
guia_de_investigacion |
Qué hay que averiguar del mercado de esa zona, y por qué |
guardar_investigacion |
Guarda competidores, palabras del cliente, objeciones y precios |
ver_plan_despliegue |
Qué va a crear, en qué orden y qué falta |
desplegar_plan |
Lo crea todo, en borrador |
ver_manifiesto |
Qué se creó y con qué id |
deshacer_plan |
Borra lo que creó, y dice lo que no se pudo borrar |
Cuenta y conocimiento
| Herramienta | Qué hace |
|---|---|
get_account_context |
Subcuenta, pipelines con etapas, calendarios y usuarios |
list_playbooks |
Índice de los 20 documentos de conocimiento |
get_playbook |
Devuelve un documento entero, o una sección suya |
Workflows — el foso
| Herramienta | Qué hace |
|---|---|
catalogo_acciones |
Qué acciones puede tener un workflow |
listar_workflows · ver_workflow |
Listar y leer, con sus nodos |
ver_triggers |
Los disparadores de un workflow, con sus filtros |
crear_workflow · guardar_workflow |
Crear y guardar las acciones |
crear_trigger |
Crear un disparador |
publicar_workflow · despublicar_workflow |
Encender y apagar |
borrar_workflow · borrar_workflows_por_nombre |
Borrar |
Embudos y páginas — el foso
| Herramienta | Qué hace |
|---|---|
listar_embudos · ver_pagina |
Listar y leer |
crear_embudo · crear_paso |
Crear la estructura |
guardar_pagina |
Guardar el contenido de una página |
generar_landing_con_ia |
Pedirle la landing a la IA de GoHighLevel, con tu copy |
publicar_pagina |
Publicar (necesita dominio) |
Contactos, CRM y agenda
| Herramienta | Qué hace |
|---|---|
search_contacts · create_contact |
Buscar y crear contactos |
list_tags · ensure_tags |
Etiquetas: listar y crear solo las que falten |
list_pipelines · ver_pipeline · crear_pipeline · borrar_pipeline |
Pipelines |
ver_etapas_del_pipeline |
Las etapas, en orden |
crear_oportunidad · mover_oportunidad · buscar_oportunidades |
El lead en el tablero |
listar_calendarios · ver_huecos_libres · agendar_cita · ver_citas_de_contacto |
Calendario y citas |
listar_campos_personalizados · crear_campos_personalizados |
Los campos del seguimiento |
Mensajes y archivos
| Herramienta | Qué hace |
|---|---|
enviar_email · enviar_sms |
Enviar, pasando antes por el checklist de copy |
estado_de_email |
Comprobar si llegó |
listar_archivos · subir_archivo · borrar_archivo |
Archivos |
listar_caller_ids |
Números verificados |
El resto del catálogo
| Herramienta | Qué hace |
|---|---|
estado_catalogo |
Cuántas operaciones hay y de qué dominios |
buscar_operaciones · describir_operacion · llamar_operacion |
Cualquiera de las 548 operaciones de la API pública |
estado_sesion |
Si la vía de sesión está encendida |
Las escrituras empiezan en seco
Ninguna herramienta escribe a la primera. Unas usan dry_run=true —la primera llamada
enseña lo que haría y no crea nada— y otras usan confirmar=true. En cualquiera de los dos
casos, nada se crea ni se envía sin que lo hayas pedido expresamente.
Y hay reglas que están en el código, no en un documento:
- El copy se revisa antes de enviar o guardar. Un SMS con un hueco sin rellenar, o con urgencia inventada, no sale.
- No se manda SMS sin que lo hayas elegido. Cuesta dinero por mensaje y exige consentimiento.
- Los workflows nacen en borrador y la landing sin publicar.
Lo que todavía NO hace
Preferimos decirlo:
- Recordatorio de cita, petición de reseña y reactivación. El plan monta la respuesta inmediata y el seguimiento; esas tres necesitan disparadores de cita o de tiempo que la API no tiene verificados, y un disparador inventado falla en silencio.
- WhatsApp. Fuera de las 24 horas siguientes al último mensaje del cliente, WhatsApp solo admite plantillas aprobadas por Meta. No se pueden inventar.
- El filtro del disparador por formulario. Se crea sin filtro y el asistente te avisa: hay que ponerlo a mano en la interfaz si la cuenta tiene más de un formulario.
- Publicar una página necesita un dominio en la cuenta.
Dónde se guarda cada cosa
| Qué | Dónde |
|---|---|
| El programa | Dentro del paquete instalado (solo lectura) |
| Tus preferencias, briefs y manifiestos | Directorio de configuración del sistema |
| Tus credenciales | Donde tú decidas, vía GHL_PRO_ENV_PATH |
| Sistema | Preferencias |
|---|---|
| Windows | %LOCALAPPDATA%\ghl-pro-mcp |
| macOS | ~/Library/Application Support/ghl-pro-mcp |
| Linux | ~/.config/ghl-pro-mcp |
Diagnóstico
El servidor nunca escribe en stdout salvo el protocolo: todos los logs van a
stderr. Si algo falla, sube el detalle con:
GHL_PRO_LOG_LEVEL=DEBUG uvx ghl-pro-mcp
Errores frecuentes:
| Síntoma | Causa |
|---|---|
| «Falta configuración: GHL_PRIVATE_TOKEN» | No definiste la variable o el archivo |
| «GHL_PRO_ENV_PATH apunta a un archivo que no existe» | Ruta mal escrita |
| 401 al llamar | El token caducó o se revocó |
| 403 al llamar | Al token le falta el scope de esa operación |
| Faltan datos del catálogo | El paquete se instaló sin la carpeta data/ |
Licencia
Propietaria. Ver el paquete en PyPI.
Metadata
Release files for ghl-pro-mcp 0.1.9
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ghl_pro_mcp-0.1.9-py3-none-any.whl | Python 3 | none | any | Details |
Release files / ghl_pro_mcp-0.1.9-py3-none-any.whl
| Download URL | ghl_pro_mcp-0.1.9-py3-none-any.whl |
|---|---|
| Size | 413.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
53004c74f6dcd6411d17360d2c51b20d4b650c25970bd6bd8325a4611b10348c
|
|
BLAKE2b-256 checksum How to use checksums |
15b7bd92740ab1d1843e83a2cec60498f31446887a2dffb82e0a08b0afcdd67f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|