ghl-mcp-remote
ghl-mcp-remote
Удалённый MCP-сервер (Model Context Protocol) для GoHighLevel — multi-tenant, доступный по URL, для использования из Claude или ChatGPT любой агентством, без необходимости каждому запускать что-то локально.
Это отдельный проект от оригинального ghl-mcp (stdio, личное/локальное использование).
Ни один из них не зависит от другого.
Отличие от оригинального ghl-mcp
|
| |
Транспорт | stdio (локальный процесс) | HTTP ( |
Арендаторы | 1 агентство на установку, учётные данные в | Любое количество агентств, изолированных по |
«Вход» |
| Экран авторизации самой GHL, запускаемый Claude/ChatGPT |
Использование | Вы, локально | Любая компания, из Claude.ai/ChatGPT, по URL |
Бизнес-код (инструменты в src/tools/) практически идентичен в обоих — меняется только слой
аутентификации/хранения.
Related MCP server: GoHighLevel MCP Server
Архитектура
Claude/ChatGPT ──(1) descobre──> GET /.well-known/oauth-authorization-server
──(2) registra───> POST /register (DCR, automático)
──(3) pede login─> GET /authorize ──redirect──> tela da GHL (o "login")
<──redirect── GET /oauth/ghl/callback
<──code+state───── (nosso próprio código de autorização)
──(4) troca──────> POST /token ──> access_token + refresh_token nossos
──(5) chama tool─> POST /mcp (Authorization: Bearer <access_token>)«Вход» = авторизация GHL. Здесь нет собственной учётной записи/пароля. Когда администратор агентства одобряет доступ на экране самой GHL, это уже создаёт/обновляет его арендатора (идентифицируемого по
companyIdиз GHL) и завершает вход на стороне MCP.Одно приложение GHL Marketplace (тот же
GHL_CLIENT_ID/GHL_CLIENT_SECRET) обслуживает любое агентство, которое его установит — не нужно создавать приложение для каждого клиента.Каждый вызов инструмента приходит аутентифицированным с Bearer-токеном, выпущенным этим сервером; middleware разрешает этот токен до нужного
companyIdи внедряет это вAsyncLocalStorage(src/tenant-context.ts) — именно так код инструментов (идентичный коду оригинального проекта) остаётся «не знающим» о multi-tenancy.Реализовано на основе того, что сам
@modelcontextprotocol/sdkуже предоставляет для OAuth-серверов (server/auth/router.ts,provider.ts) — см.src/auth/mcp-oauth-provider.ts.
Предварительные требования для запуска где угодно
OAuth-приложение в GHL Marketplace (Developer > ваше приложение), распространение «Agency» или «Agency & Sub-Account»:
Зарегистрированный Redirect URI:
<PUBLIC_URL>/oauth/ghl/callback(должен быть окончательным публичным URL этого сервиса — HTTPS).Scopes: те же, что перечислены в
src/services/scopes.ts.
Postgres (любой — Supabase, Neon, RDS, управляемый Postgres самой хостинг-платформы и т.д.). Выполнить
db/schema.sqlна нём один раз.Node.js 20+ (или Docker-образ этого проекта, который уже включает это).
Переменные окружения
См. .env.example. Кратко:
Переменная | Описание |
| Из OAuth-приложения GHL Marketplace |
| Окончательный публичный URL этого сервиса, без слэша в конце |
| Порт, на котором слушает процесс (многие платформы переопределяют сами) |
| Строка подключения к Postgres |
| 32 байта в base64 — |
Запуск локально (dev)
npm install
npm run build
npm startВозможные проверки без какого-либо публичного домена:
curl localhost:8080/healthz
curl localhost:8080/.well-known/oauth-authorization-serverПолный поток OAuth (реальная авторизация в GHL, получение токена, вызов инструмента) работает
только с реальным PUBLIC_URL (HTTPS), потому что GHL должна иметь возможность перенаправить
браузер администратора агентства обратно сюда — и этот же URL должен быть зарегистрирован
как redirect URI в приложении GHL.
Развёртывание
Этот проект не предполагает конкретную хостинг-платформу — он просто включает
универсальный Dockerfile. Любая платформа, которая запускает Docker-образ (или node dist/index.js
напрямую), подойдёт, при условии:
Предоставляет стабильный публичный HTTPS URL → он становится
PUBLIC_URL.Внедряет переменные окружения из таблицы выше.
Postgres, указанный в
DATABASE_URL, уже выполнилdb/schema.sql.Redirect URI приложения GHL Marketplace обновлён на
<PUBLIC_URL>/oauth/ghl/callbackкак только окончательный URL станет известен.
Подключение к Claude / ChatGPT
После размещения:
Claude.ai / Claude Desktop: Настройки → Connectors → Add custom connector → URL:
https://<ваш-домен>/mcp. Claude автоматически проведёт вас через поток авторизации.ChatGPT: в рабочих пространствах с поддержкой Connectors/удалённого MCP (зависит от тарифа — Team, Enterprise или «Developer mode»), добавьте connector, указывающий на
https://<ваш-домен>/mcp.
Предостережение о ChatGPT: поддержка удалённых MCP-коннекторов с OAuth в ChatGPT зависит от тарифа/рабочего пространства, и некоторые поверхности (например, Deep Research) ограничивают, какие форматы инструментов принимаются (иногда только инструменты в формате «search»/«fetch»). Этот сервер строго следует спецификации авторизации MCP (той же, что использует Claude), что максимизирует совместимость — но стоит реально протестировать, как только он будет размещён, поскольку поведение на стороне ChatGPT вне нашего контроля.
Структура
src/
index.ts App Express: monta o router de OAuth, POST/GET/DELETE /mcp,
GET /oauth/ghl/callback, GET /healthz, CORS.
server.ts createMcpServer() — registra as tools (idêntico ao projeto original).
tenant-context.ts AsyncLocalStorage que carrega o companyId durante cada request.
db/
pool.ts Pool do `pg` a partir de DATABASE_URL.
crypto.ts AES-256-GCM (tokens da GHL em repouso) + SHA-256 (hash dos nossos tokens).
agencies.ts Tokens de agência da GHL por companyId (substitui o antigo token-store.ts).
oauth-store.ts Clients MCP, pending auth, authorization codes, access/refresh tokens.
auth/
ghl-oauth.ts Troca/refresh de tokens com a GHL — equivalente ao oauth-flow.ts original,
mas web-based e por tenant em vez de CLI + arquivo único.
location-tokens.ts Cache de location tokens, agora chaveado por companyId.
mcp-oauth-provider.ts Implementa OAuthServerProvider do SDK — o núcleo do "login = autorizar a GHL".
ghl-callback.ts Handler de GET /oauth/ghl/callback.
services/
constants.ts, scopes.ts, ghl-client.ts Idênticos ao projeto original (só o import de token mudou).
tools/
*.ts Idênticos ao projeto original, exceto locations.ts (cache agora por tenant).
db/
schema.sql DDL do Postgres — rodar uma vez antes do primeiro start.Безопасность
Refresh-токены GHL: зашифрованы в состоянии покоя (AES-256-GCM).
Access/refresh-токены, которые этот сервер выдаёт для Claude/ChatGPT: хранятся только как хэш SHA-256 — никогда в открытом виде, как пароль.
PKCE (S256) обязателен во всём потоке на стороне MCP, проверяется локально (не делегируется GHL).
Никакие учётные данные одного агентства недоступны по токену другого — весь доступ к Postgres фильтруется по
companyId, и это значение вступает в игру только после того, как Bearer-токен проверен.
This server cannot be installed
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
- AlicenseBqualityDmaintenanceMCP server for GoHighLevel API v2 that provides 50+ tools for CRM, billing, marketing, and operations workflows, enabling natural language interaction with contacts, opportunities, conversations, and more.501MIT
- AlicenseBqualityDmaintenanceA Model Context Protocol (MCP) server that provides tools for managing GoHighLevel (GHL) conversations, tasks, and calendar appointments through AI assistants like Claude.2135MIT
- FlicenseNot gradedqualityDmaintenanceMCP server for GoHighLevel sub-accounts, enabling management of CRM contacts, pipelines, calendars, invoices, and more via natural language.
- AlicenseCqualityAmaintenanceA Model Context Protocol (MCP) server for GoHighLevel API v2 — giving any AI agent full access to your GHL location.1001935MIT
Related MCP Connectors
Hosted Amazon Seller Central and Amazon Ads MCP server for Claude, ChatGPT, Cursor, and agents.
Hosted Amazon Seller and Vendor MCP server for Claude, ChatGPT, Cursor, Codex, Gemini, Copilot.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
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/jamersoncalixto/ghl-mcp-remote'
If you have feedback or need assistance with the MCP directory API, please join our Discord server