@elitedcs/ghl-mcp 3.0.0 → 3.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +89 -170
  2. package/dist/index.js +1 -1
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -1,12 +1,14 @@
1
- # Elite DCs GHL MCP Server
1
+ # GHL Command GoHighLevel MCP Server
2
2
 
3
3
  **Full GoHighLevel API access for Claude.** 171 tools across 35 modules — manage contacts, conversations, pipelines, calendars, funnels, workflows, invoices, custom objects, webhooks, and more. **Includes full workflow builder, funnel/page editor, form builder, pipeline builder, bulk operations, account export, and workflow cloning** — capabilities no other GHL tool offers.
4
4
 
5
- **v2.7.0** Production-hardened with automatic retry/backoff, Zod-validated API responses, pre-flight workflow action validation, and type-safe tool registration. Built to share confidently.
5
+ **Distributed via npm as [`@elitedcs/ghl-mcp`](https://www.npmjs.com/package/@elitedcs/ghl-mcp).** Buyers install with one config block — no git, no Node.js setup, no terminal commands. Updates flow automatically (`npx @latest` re-resolves on every Claude restart).
6
6
 
7
7
  Works with **both the Claude Desktop App and Claude Code terminal** — your choice.
8
8
 
9
- Built by [Elite DCs, LLC](https://elitedcs.com) for the Clinic Launch Lab project and beyond.
9
+ **License required.** Buy at [elitedcs.com/ghl-mcp-server](https://elitedcs.com/ghl-mcp-server) one-time $297, three-machine activation, no subscription.
10
+
11
+ Built by [Elite DCs, LLC](https://elitedcs.com).
10
12
 
11
13
  ---
12
14
 
@@ -55,110 +57,68 @@ This MCP (Model Context Protocol) server connects Claude directly to GoHighLevel
55
57
 
56
58
  ---
57
59
 
58
- ## Quick Start
60
+ ## Quick Start (5 minutes)
59
61
 
60
- Choose your path:
62
+ ### 1. Buy a license
61
63
 
62
- ### Path 1: Easy Install (Recommended No Technical Knowledge Needed)
64
+ [elitedcs.com/ghl-mcp-server](https://elitedcs.com/ghl-mcp-server) one-time $297. License key arrives by email within 1-2 minutes.
63
65
 
64
- **What you need first:**
65
- 1. **Claude** — either the [Claude Desktop App](https://claude.ai/download) or [Claude Code](https://claude.ai/code) (or both!)
66
- 2. **Node.js** — download from [nodejs.org](https://nodejs.org) (click the big green "LTS" button and run the installer)
67
- 3. Your **license key** and **purchase email** (sent to you after purchase)
68
- 4. Your **GHL API Key** and **Location ID** (see "Get Your GHL API Key" below)
66
+ ### 2. Install in Claude Desktop App
69
67
 
70
- **Then just do this:**
68
+ Open Claude Desktop. Click **Claude** menu (top-left) → **Settings...** → **Developer** → **Edit Config**. Paste this block (or merge into your existing `mcpServers` if you have other MCP servers):
71
69
 
72
- 1. Open a terminal (on Mac: search "Terminal" in Spotlight) or open Claude Code
73
- 2. Paste this line and press Enter:
74
- ```
75
- cd ~/projects && git clone git@github.com:drjerryrelth/ghl-command-mcp.git && cd ghl-command-mcp && bash setup.sh
70
+ ```json
71
+ {
72
+ "mcpServers": {
73
+ "ghl": {
74
+ "command": "npx",
75
+ "args": ["-y", "@elitedcs/ghl-mcp@latest"]
76
+ }
77
+ }
78
+ }
76
79
  ```
77
- > If running from inside Claude Code, prefix the command with `!`:
78
- > ```
79
- > ! cd ~/projects && git clone git@github.com:drjerryrelth/ghl-command-mcp.git && cd ghl-command-mcp && bash setup.sh
80
- > ```
81
-
82
- > **Note:** This repo is private. You must have an SSH key linked to your GitHub account. See [GitHub SSH setup](https://docs.github.com/en/authentication/connecting-to-github-with-ssh) if you haven't done this before.
83
80
 
84
- 3. The setup wizard opens it will:
85
- - Validate your license key (from your purchase email)
86
- - Ask for your GHL API key (paste it when prompted)
87
- - Ask for your Location ID (paste it when prompted)
88
- - Verify your credentials work
89
- - Optionally enable the workflow builder (you can skip this)
90
- - **Ask which Claude client(s) to register with** — Desktop App, terminal, or both
91
- - Register everything for you automatically
92
- 4. Restart the Claude app (quit fully and reopen) or restart Claude Code
93
- 5. Try it: type `"List my contacts"` — you should see your GHL data
81
+ Save the file. **Quit Claude completely** (Cmd+Q on Mac) and reopen.
94
82
 
95
- **That's it. One command, follow the prompts, done.**
96
-
97
- ---
83
+ > **Claude Code (terminal) instead?** One command:
84
+ > ```
85
+ > claude mcp add --scope user -t stdio ghl -- npx -y @elitedcs/ghl-mcp@latest
86
+ > ```
87
+ > Then restart Claude Code.
98
88
 
99
- ### Path 2: Manual Install (For Developers)
89
+ ### 3. Activate
100
90
 
101
- #### Option A: Claude Code (Terminal)
91
+ After restart, GHL Command is loaded but locked. Type this in Claude (replace the four placeholders with your real values):
102
92
 
103
- ```bash
104
- git clone git@github.com:drjerryrelth/ghl-command-mcp.git
105
- cd ghl-command-mcp
106
- npm install && npm run build
107
- cp start-mcp.example.sh start-mcp.sh
108
- # Edit start-mcp.sh with your API key and Location ID
109
- chmod +x start-mcp.sh
110
- claude mcp add --scope user -t stdio ghl $(pwd)/start-mcp.sh
111
93
  ```
112
-
113
- > **Why a wrapper script?** Claude Code's env injection via MCP config is unreliable. The wrapper script exports env vars directly, guaranteeing they reach the server process. MCP servers must be registered in `~/.claude.json` (via `claude mcp add`), NOT in `~/.claude/mcp.json`.
114
-
115
- #### Option B: Claude Desktop App
116
-
117
- ```bash
118
- git clone git@github.com:drjerryrelth/ghl-command-mcp.git
119
- cd ghl-command-mcp
120
- npm install && npm run build
94
+ Run setup_ghl_mcp to activate GHL Command:
95
+ email: YOUR_PURCHASE_EMAIL
96
+ license_key: YOUR_LICENSE_KEY
97
+ ghl_api_key: YOUR_GHL_API_KEY
98
+ ghl_location_id: YOUR_LOCATION_ID
121
99
  ```
122
100
 
123
- Then add the MCP server to your Claude Desktop config file:
124
-
125
- - **Mac:** `~/Library/Application Support/Claude/claude_desktop_config.json`
126
- - **Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
101
+ Approve the tool call. Server validates your license, verifies your GHL credentials, writes them to a per-user config file. **Quit Claude one more time and reopen** — all 165 tools are now unlocked.
127
102
 
128
- Add a `"ghl"` entry under `"mcpServers"`:
103
+ ### 4. Try it
129
104
 
130
- ```json
131
- {
132
- "mcpServers": {
133
- "ghl": {
134
- "command": "node",
135
- "args": ["/full/path/to/ghl-command-mcp/dist/index.js"],
136
- "env": {
137
- "GHL_API_KEY": "YOUR_API_KEY_HERE",
138
- "GHL_LOCATION_ID": "YOUR_LOCATION_ID_HERE"
139
- }
140
- }
141
- }
142
- }
105
+ ```
106
+ "List my GHL contacts"
107
+ "Show my pipelines"
108
+ "What calendars do I have?"
143
109
  ```
144
110
 
145
- > **Tip:** Replace `/full/path/to/` with the actual path where you cloned the repo (e.g., `/Users/yourname/projects/ghl-command-mcp/dist/index.js`). To add workflow builder support, include `GHL_USER_ID`, `GHL_FIREBASE_API_KEY`, and `GHL_FIREBASE_REFRESH_TOKEN` in the `env` block too.
146
-
147
- Quit the Claude app fully and reopen it. The GHL tools will appear automatically.
148
-
149
- #### Option C: Both
150
-
151
- Run the Easy Install (Path 1) — the setup wizard lets you register with both clients in one step.
111
+ Full step-by-step setup with screenshots: [elitedcs.com/ghl-mcp-setup-guide.html](https://elitedcs.com/ghl-mcp-setup-guide.html)
152
112
 
153
113
  ---
154
114
 
155
- ### Get Your GHL API Key
115
+ ## Get Your GHL API Key
156
116
 
157
117
  > **CRITICAL: Sub-Account Level Only**
158
118
  >
159
119
  > Private Integrations in GHL are **scoped to individual sub-accounts**, NOT to the agency level. You must create a separate Private Integration **inside each sub-account** you want to connect. An API key created in Sub-Account A will return `403 Forbidden` if you try to use it with Sub-Account B's Location ID.
160
120
  >
161
- > **Your API key can only be copied ONCE** — at the moment you create the integration. After you leave that screen, the key is permanently masked and cannot be retrieved. If you lose it, you must delete the integration and create a new one (which generates a new key).
121
+ > **Your API key can only be copied ONCE** — at the moment you create the integration. After you leave that screen, the key is permanently masked and cannot be retrieved. If you lose it, you must delete the integration and create a new one.
162
122
 
163
123
  1. Log into GoHighLevel
164
124
  2. **Switch into the specific sub-account** you want to connect (not the agency view)
@@ -166,54 +126,35 @@ Run the Easy Install (Path 1) — the setup wizard lets you register with both c
166
126
  4. Click **Private Integrations** > **Create Private Integration**
167
127
  5. Name it `Claude Code MCP`
168
128
  6. Enable all scopes/permissions you want Claude to access
169
- 7. **Immediately copy the API Key** and paste it into your config — you will not be able to see it again
170
-
171
- ### Enable Workflow Builder (Optional)
172
-
173
- The workflow builder tools use GHL's internal API and require additional Firebase credentials. Without these, the standard API tools still work — you just won't have workflow editing.
174
-
175
- **Step 1: Get your Firebase credentials from GHL**
176
-
177
- 1. Log into `app.gohighlevel.com` in Chrome
178
- 2. Press **Cmd + Option + I** (Mac) or **F12** (Windows) to open Developer Tools
179
- 3. Go to **Application** tab → **IndexedDB** → expand **firebaseLocalStorageDb** → **firebaseLocalStorage**
180
- 4. Click the entry — you'll see a JSON object with:
181
- - `stsTokenManager.refreshToken` — this is your **Firebase Refresh Token**
182
- - The `fbase_key` contains the **Firebase API Key** (the part between `firebase:authUser:` and `:[DEFAULT]`)
183
- 5. Your **User ID** is in the `uid` field
184
-
185
- **Step 2: Add to your wrapper script**
129
+ 7. **Immediately copy the API Key** and pass it to `setup_ghl_mcp` as `ghl_api_key` — you will not be able to see it again
186
130
 
187
- Add these to `start-mcp.sh` alongside your existing env vars:
131
+ ## Find Your Location ID
188
132
 
189
- ```bash
190
- export GHL_USER_ID="your-user-id"
191
- export GHL_FIREBASE_API_KEY="your-firebase-api-key"
192
- export GHL_FIREBASE_REFRESH_TOKEN="your-firebase-refresh-token"
193
- ```
194
-
195
- Restart Claude Code and the workflow builder tools will be available.
196
-
197
- > **Note:** The Firebase refresh token may rotate periodically. If workflow tools stop working, re-extract the token from your browser using the steps above.
198
-
199
- ### Find Your Location ID
200
-
201
- Your Location ID (sub-account ID) is in the GHL URL when you're inside a sub-account:
133
+ Your Location ID (sub-account ID) is in the GHL URL when you'''re inside a sub-account:
202
134
 
203
135
  ```
204
136
  https://app.gohighlevel.com/v2/location/YOUR_LOCATION_ID/dashboard
205
137
  ```
206
138
 
207
- ### Verify It Works
139
+ ## Enable Workflow Builder (Optional)
208
140
 
209
- Restart the Claude Desktop App (quit fully and reopen) or restart Claude Code, then try:
141
+ The 6 workflow builder tools use GHL'''s internal API and require Firebase credentials. Without them, the other 165 tools work fine — you just won'''t have workflow editing.
142
+
143
+ **The easy way:** [elitedcs.com/ghl-mcp-firebase](https://elitedcs.com/ghl-mcp-firebase) — drag the bookmarklet, click it inside GHL, your three values appear automatically. Then re-run `setup_ghl_mcp` with the extra fields:
210
144
 
211
145
  ```
212
- "List my contacts"
213
- "Show my pipelines"
214
- "What calendars do I have?"
146
+ Re-run setup_ghl_mcp with workflow builder:
147
+ email: YOUR_PURCHASE_EMAIL
148
+ license_key: YOUR_LICENSE_KEY
149
+ ghl_api_key: YOUR_GHL_API_KEY
150
+ ghl_location_id: YOUR_LOCATION_ID
151
+ ghl_user_id: FROM_FIREBASE_CAPTURE
152
+ ghl_firebase_api_key: FROM_FIREBASE_CAPTURE
153
+ ghl_firebase_refresh_token: FROM_FIREBASE_CAPTURE
215
154
  ```
216
155
 
156
+ > Firebase refresh tokens can rotate. If workflow tools stop working after a few weeks, run the capture again and re-run setup_ghl_mcp with the fresh values.
157
+
217
158
  ---
218
159
 
219
160
  ## Tools (171)
@@ -589,17 +530,18 @@ ghl-command-mcp/
589
530
  ├── templates/
590
531
  │ ├── clinic-medspa.json # Clinic/Med Spa blueprint
591
532
  │ └── action-schemas.json # Mandatory workflow action attribute schemas
592
- ├── dist/ # Compiled JavaScript (generated by build)
593
- ├── setup.sh # One-command install + setup wizard
594
- ├── setup-wizard.mjs # Interactive setup wizard (@clack/prompts)
595
- ├── start-mcp.example.sh # Wrapper script template (copy to start-mcp.sh)
596
- ├── package.json
533
+ ├── dist/ # Compiled JavaScript (npm-published bundle)
534
+ ├── bin/ghl-mcp.js # npm bin entry point
535
+ ├── .github/workflows/publish.yml # GitHub Actions npm-publish workflow
536
+ ├── package.json # @elitedcs/ghl-mcp
597
537
  ├── tsconfig.json
598
538
  ├── CLAUDE.md # Claude Code project instructions
599
539
  ├── CHANGELOG.md
600
540
  ├── CONTRIBUTING.md # Contributor guide
601
541
  ├── .gitignore
602
542
  └── README.md
543
+ # Legacy (kept for self-hosted dev workflows; buyers don't need these):
544
+ # setup.sh, setup-wizard.mjs, start-mcp.example.sh
603
545
  ```
604
546
 
605
547
  ---
@@ -632,10 +574,10 @@ This MCP server is safe to share via GitHub.
632
574
 
633
575
  | Concern | How It's Handled |
634
576
  |---|---|
635
- | **API Keys** | Stored in environment variables or wrapper script only. Never in code, never committed. |
636
- | **`.env` & `start-mcp.sh`** | Gitignored. Your credentials never touch version control. |
637
- | **Multi-user** | Each user brings their own API key. Complete account isolation. |
638
- | **Scope** | The server only talks to GHL's API. No filesystem access, no shell commands, no network access beyond GHL. |
577
+ | **API Keys** | Stored in a per-user credentials file (`~/Library/Application Support/elitedcs-ghl-mcp/credentials.json` on Mac) at chmod 0600. Never in code, never committed. |
578
+ | **License validation** | One-time check at `setup_ghl_mcp` against elitedcs.com license server. After activation, no further phone-home. |
579
+ | **Multi-user** | Each user brings their own license key + GHL API key. Complete account isolation. |
580
+ | **Scope** | The server only talks to GHL's API and (once, at setup) the elitedcs.com license server. No filesystem access beyond the credentials file, no shell commands. |
639
581
  | **Permissions** | Controlled by your GHL Private Integration scopes. Disable what you don't need. |
640
582
 
641
583
  ---
@@ -659,52 +601,29 @@ This server has been through a rigorous, multi-pass audit for production reliabi
659
601
 
660
602
  ---
661
603
 
662
- ## Access & Collaboration
663
-
664
- This is a **private repository**. Access is by invitation only, controlled by Elite DCs, LLC.
665
-
666
- ### For the Repo Owner (granting access)
667
-
668
- 1. Get the person's **GitHub username** (they need a free GitHub account at [github.com](https://github.com))
669
- 2. Go to [github.com/drjerryrelth/ghl-command-mcp/settings/access](https://github.com/drjerryrelth/ghl-command-mcp/settings/access)
670
- 3. Click **Add people**
671
- 4. Enter their GitHub username or email
672
- 5. Set role:
673
- - **Read** — for customers (can pull updates, cannot push)
674
- - **Write** — for contributors (can push branches and open PRs)
675
- 6. Click **Add** — they'll receive an email invitation
676
-
677
- > **Security:** Customers get **Read-only** access. Contributors get **Write** access to push branches and open PRs, but should never push directly to `main`. Use branch protection rules to enforce this.
678
-
679
- ### For Contributors (first-time setup)
680
-
681
- **Step 1:** Accept the GitHub invitation from `drjerryrelth` (check your email).
604
+ ## Updates
682
605
 
683
- **Step 2:** Follow **Path 2 (Manual Install)** in the Quick Start section above. You'll need your own GHL API key.
606
+ **Automatic.** Every Claude restart, `npx -y @elitedcs/ghl-mcp@latest` re-resolves the latest published version. When v3.0.1 ships, every buyer is on it next time they reopen Claude. Zero action required.
684
607
 
685
- **Step 3:** Read **[CONTRIBUTING.md](CONTRIBUTING.md)** for branching conventions, how to add tools, and PR guidelines.
608
+ To pin a specific version (e.g. for stability), change `@latest` to `@3.0.0` in your MCP config.
686
609
 
687
- **Step 4:** Create a branch, make your changes, and open a PR against `main`.
688
-
689
- ### For Customers / Invited Users (first-time setup)
690
-
691
- **Step 1:** Accept the GitHub invitation from `drjerryrelth` (check your email).
692
-
693
- **Step 2:** Follow **Path 1 (Easy Install)** or **Path 2 (Manual Install)** in the Quick Start section above. You'll need your own GHL API key — each user connects to their own GHL account.
694
-
695
- **Step 3:** Restart Claude Code and test with `"List my contacts"`
610
+ ---
696
611
 
697
- > **Note:** You have read-only access. You can clone and pull updates, but cannot push changes to the repository.
612
+ ## Contributing
698
613
 
699
- ### Staying Up to Date
614
+ Source repo is private. Contributors need an invitation from `drjerryrelth`. The npm-published artifact is open; the build/source pipeline is not.
700
615
 
701
- ```bash
702
- cd ghl-command-mcp
703
- git pull
704
- npm run build
705
- ```
616
+ **For contributors with repo access:**
706
617
 
707
- Then restart Claude Code. Your settings and API key stay the same.
618
+ 1. Clone the repo, run `npm install`
619
+ 2. For dev work, set env vars in your shell or a wrapper script (env vars take priority over the credentials file — your dev workflow won't conflict with a buyer install on the same machine):
620
+ ```bash
621
+ export GHL_API_KEY=pit-your-dev-key
622
+ export GHL_LOCATION_ID=your-test-location
623
+ node dist/index.js
624
+ ```
625
+ 3. Read **[CONTRIBUTING.md](CONTRIBUTING.md)** for branching conventions, how to add tools, and PR guidelines.
626
+ 4. Create a branch, run `npm run build`, test against a sandbox sub-account, open a PR against `main`.
708
627
 
709
628
  ---
710
629
 
@@ -726,12 +645,12 @@ Then restart Claude Code. Your settings and API key stay the same.
726
645
 
727
646
  | Error | Cause | Fix |
728
647
  |---|---|---|
729
- | MCP tools don't appear (CLI) | Server not registered | Run `claude mcp add --scope user -t stdio ghl /path/to/start-mcp.sh` |
730
- | MCP tools don't appear (CLI) | Wrong config file | Must be in `~/.claude.json` (via `claude mcp add`), NOT `~/.claude/mcp.json` |
731
- | MCP tools don't appear (Desktop App) | Config missing or wrong | Check `~/Library/Application Support/Claude/claude_desktop_config.json` has a `ghl` entry under `mcpServers` |
648
+ | Only `setup_ghl_mcp` shows up; no other tools | Bootstrap mode — credentials not yet activated | Run `setup_ghl_mcp` with all four required fields, then restart Claude |
649
+ | MCP tools don't appear (CLI) | Server not registered | Run `claude mcp add --scope user -t stdio ghl -- npx -y @elitedcs/ghl-mcp@latest` |
650
+ | MCP tools don't appear (Desktop App) | Config missing or wrong | Check `~/Library/Application Support/Claude/claude_desktop_config.json` has a `ghl` entry under `mcpServers` (see Quick Start above for the exact block) |
732
651
  | MCP tools don't appear (Desktop App) | App not restarted | Quit the Claude app completely (Cmd+Q on Mac) and reopen it |
733
- | MCP tools don't appear (Desktop App) | Wrong node path | Make sure `"command": "node"` works in your terminal. If not, use the full path (e.g., `/usr/local/bin/node`) |
734
- | `GHL_API_KEY environment variable is required` | Missing API key | Set it in `start-mcp.sh` or `.env` file |
652
+ | `License key not found` | Wrong email or license_key | Both must match exactly what we have on file. Check spam for the welcome email. |
653
+ | `License key already activated on 3 devices` | Activation limit hit | Email `support@cliniclaunchlab.com` to reset |
735
654
  | `locationId is required` | Tool needs a location ID | Set `GHL_LOCATION_ID` in your env, or tell Claude which location to use |
736
655
  | `GHL API Error 401` | Invalid or expired key | Generate a new API key in GHL > Settings > Integrations |
737
656
  | `GHL API Error 403` | Key from wrong sub-account | Create a new Private Integration **inside the correct sub-account** |
package/dist/index.js CHANGED
@@ -31,7 +31,7 @@ var require_package = __commonJS({
31
31
  "package.json"(exports2, module2) {
32
32
  module2.exports = {
33
33
  name: "@elitedcs/ghl-mcp",
34
- version: "3.0.0",
34
+ version: "3.0.3",
35
35
  description: "GoHighLevel MCP Server for Claude. 171 tools \u2014 full CRM, automation, marketing control, and the only programmatic GHL workflow builder.",
36
36
  main: "dist/index.js",
37
37
  bin: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elitedcs/ghl-mcp",
3
- "version": "3.0.0",
3
+ "version": "3.0.3",
4
4
  "description": "GoHighLevel MCP Server for Claude. 171 tools — full CRM, automation, marketing control, and the only programmatic GHL workflow builder.",
5
5
  "main": "dist/index.js",
6
6
  "bin": {