Skip to main content
Glama
nola-repo

ghl-mcp-proxy

by nola-repo

ghl-mcp-proxy

A minimal multi-sub-account MCP proxy for GoHighLevel / LeadConnector. Holds a Private Integration Token (PIT) + Location ID per sub-account and exposes two tools to Claude:

  • list_accounts — shows which sub-accounts are configured

  • ghl_api_request — makes an authenticated call to the LeadConnector REST API on behalf of a chosen account

1. Configure your accounts

Copy .env.example to .env and fill in:

  • PROXY_SHARED_SECRET — a long random string (openssl rand -hex 32). This is the "password" Cowork will send back to this server.

  • GHL_ACCOUNTS_JSON — one entry per sub-account, keyed by a friendly name:

{
  "acme_dental":   { "pit": "pit-xxxxxxxx", "locationId": "loc-xxxxxxxx" },
  "joes_plumbing": { "pit": "pit-yyyyyyyy", "locationId": "loc-yyyyyyyy" }
}

Keep this as valid JSON on one line in the real .env file.

Related MCP server: ghl-mcp

2. Deploy on Hostinger

  1. SSH into your VPS.

  2. Install Node 20+ and git if not already present:

    curl -fsSL https://deb.nodesource.com/setup_20.x | sudo bash -
    sudo apt-get install -y nodejs git
  3. Upload this project (via git clone from your own repo, or scp).

  4. cd ghl-mcp-proxy && cp .env.example .env then edit .env with real values.

  5. Install dependencies and run with a process manager so it survives reboots:

    npm install --omit=dev
    npm install -g pm2
    pm2 start src/server.js --name ghl-mcp-proxy
    pm2 save
    pm2 startup   # follow the printed instructions
  6. Put Nginx in front of it for HTTPS (Hostinger VPS panel can issue a free Let's Encrypt cert). Point a subdomain, e.g. mcp.yourdomain.com, at the VPS, then reverse-proxy port 443 → localhost:8080.

    Minimal Nginx server block:

    server {
        listen 443 ssl;
        server_name mcp.yourdomain.com;
    
        ssl_certificate     /etc/letsencrypt/live/mcp.yourdomain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/mcp.yourdomain.com/privkey.pem;
    
        location / {
            proxy_pass http://localhost:8080;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
  7. Test: curl https://mcp.yourdomain.com/health should return {"ok":true,"accounts":2}.

Option B — Hostinger Node.js App (hPanel, if on a plan that supports it)

  1. In hPanel, create a new Node.js application, point it at this project (upload via File Manager or Git).

  2. Set the entry point to src/server.js.

  3. Add all variables from .env.example under the app's Environment Variables section (do not upload a real .env file to a shared host).

  4. Set the app's port to match what Hostinger assigns via process.env.PORT (already handled in server.js).

  5. Attach your domain/subdomain and enable SSL (Hostinger issues this automatically for most plans).

  6. Restart the app, then test https://your-subdomain/health.

3. Add it as a custom connector in Cowork

  1. In Claude/Cowork: Customize → Connectors → "+".

  2. Name: GoHighLevel Proxy (or anything).

  3. URL: https://mcp.yourdomain.com/mcp

  4. Advanced settings → set a custom header: Authorization: Bearer <your PROXY_SHARED_SECRET>

  5. Click Add, then Connect.

4. Use it

Ask Claude something like:

"List my connected GHL accounts, then for acme_dental find contacts tagged 'hot lead' and summarize what's happening with them."

Claude will call list_accounts, then ghl_api_request with account: "acme_dental" and the right REST path.

Adding more sub-accounts later

Just add another entry to GHL_ACCOUNTS_JSON and restart the app (pm2 restart ghl-mcp-proxy on VPS, or restart via hPanel). No code changes needed.

Security notes

  • This single server holds credentials for all your clients — treat the shared secret and .env file like a master password.

  • Use the narrowest PIT scopes each workflow actually needs.

  • Rotate PITs periodically from GHL Settings → Private Integrations.

  • Never commit .env to git (already covered by .gitignore).

F
license - not found
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

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/nola-repo/nolaweb-ghl-mcp-proxy'

If you have feedback or need assistance with the MCP directory API, please join our Discord server