@elitedcs/ghl-mcp 3.60.0 → 3.61.0

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.
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@elitedcs/ghl-mcp",
3
- "version": "3.60.0",
3
+ "version": "3.61.0",
4
4
  "mcpName": "io.github.drjerryrelth/ghl-command",
5
- "description": "GoHighLevel MCP Server for Claude. 233 tools — full CRM, automation, marketing control, account-wide workflow audit, live funnel-capture verification, and the only programmatic GHL workflow builder, now multi-tenant across client accounts.",
5
+ "description": "GoHighLevel MCP Server for Claude. 234 tools — full CRM, automation, marketing control, account-wide workflow audit, live funnel-capture verification, and the only programmatic GHL workflow builder, now multi-tenant across client accounts.",
6
6
  "main": "dist/index.js",
7
7
  "bin": {
8
8
  "ghl-mcp": "dist/index.js"
@@ -0,0 +1,63 @@
1
+ ---
2
+ name: ghl-reports
3
+ description: Answer GoHighLevel data questions — counts, lists, and weekly reports — fast, cheap, and verified. Uses get_contact_count for any "how many contacts" question (one call, GHL's own index, exact window echoed), clean pagination recipes for lists with a CSV deliverable, and get_account_health_summary for composed account reports. Never guesses a number, never paginates to count, always states the exact window and source next to every figure. Triggers on how many contacts, new contacts this week, new leads last 7 days, count my contacts, list my new contacts, contacts added since, weekly report, account report, GHL report, export contacts to CSV.
4
+ compatibility: Claude Code, Claude Cowork, Claude Desktop
5
+ ---
6
+
7
+ # GHL Reports
8
+
9
+ Data questions have exactly three shapes. Pick the shape first — mixing them is what burns
10
+ 50,000 tokens and produces a wrong number.
11
+
12
+ **The three iron rules (they override improvisation every time):**
13
+ 1. **Never guess.** Every number you state comes from a tool response you actually received.
14
+ If a count can't be verified, say so and show the error — an honest "unavailable" beats a
15
+ plausible figure.
16
+ 2. **Count and list are different jobs.** A count is ONE `get_contact_count` call. A list is
17
+ paginated `search_contacts` with a deliverable. Never paginate to produce a count; never
18
+ answer a list request with only a total.
19
+ 3. **Every figure ships with its window and source.** "163 contacts (dateAdded 2026-07-30T07:00Z
20
+ → 2026-08-06T06:59Z, resolved in US/Arizona, via get_contact_count)" — the echo comes back
21
+ from the tool; repeat it.
22
+
23
+ ---
24
+
25
+ ## Shape 1 — "How many …?" → one call
26
+
27
+ Use `get_contact_count`:
28
+ - `from`: "YYYY-MM-DD" (resolves to the START of that day in the location's timezone)
29
+ - `to` (optional): "YYYY-MM-DD" (END of that day, inclusive) — omit for "through now"
30
+ - "last 7 days" = from 7 days ago, `to` omitted. Say the resolved window back to the user,
31
+ because "last 7 days" and "this week" are different windows and the echo settles which one ran.
32
+
33
+ The response is `status: "ok"` with `total` + `window`, or `status: "unavailable"` with a reason.
34
+ Report exactly what it says. Do not retry with pagination; do not estimate.
35
+
36
+ ## Shape 2 — "List them" → paginate with a destination
37
+
38
+ 1. Ask (or infer) the destination first: table in chat (small), CSV file (anything over ~30 rows).
39
+ 2. `search_contacts` sorted by `date_added` desc; walk pages with `startAfter` + `startAfterId`
40
+ (both, together — one alone repeats the page).
41
+ 3. Stop when a page's oldest `dateAdded` is before the window start; drop out-of-window rows
42
+ from the last page.
43
+ 4. For CSV: write the file, state the row count, and reconcile: run `get_contact_count` for the
44
+ same window and confirm the row count matches the total. If they differ, say so and show both
45
+ numbers — do not silently pick one.
46
+
47
+ ## Shape 3 — "How is the account doing?" → composed report
48
+
49
+ `get_account_health_summary` (optionally `windowDays`). Every metric arrives labeled all_time or
50
+ window, with unavailable sections marked. Render it as a short table and KEEP the labels — never
51
+ merge an all-time number and a windowed number into one row without saying which is which.
52
+
53
+ For a recurring weekly report: Shape 3 + a Shape-1 count for the exact 7-day window + anything
54
+ the user asked to track, each figure with its window and source line.
55
+
56
+ ---
57
+
58
+ ## When something fails
59
+
60
+ - `unavailable` with a timezone reason → re-ask with full ISO timestamps (the tool tells you this).
61
+ - `unavailable` with an API error → report the error text as-is. The user would rather see
62
+ "GHL returned 429" than a made-up count.
63
+ - The one thing you never do is fill the gap with an estimate.