@kivimedia/kmhub 2.0.0 → 2.9.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.
Files changed (55) hide show
  1. package/README.md +6 -5
  2. package/bin/kmhub.mjs +20 -7
  3. package/coach-book-output-guard.mjs +760 -0
  4. package/index.mjs +2 -0
  5. package/package.json +8 -3
  6. package/prompts/briefing.md +29 -0
  7. package/prompts/luxury.md +70 -0
  8. package/prompts/play.md +49 -0
  9. package/prompts/run.md +36 -0
  10. package/prompts/setup.md +33 -0
  11. package/prompts/vs-booked.md +46 -0
  12. package/prompts/what-can-you-do.md +40 -0
  13. package/prompts.mjs +109 -0
  14. package/read-only-tools.json +142 -0
  15. package/remote.mjs +815 -99
  16. package/tools/balloon-costing.mjs +80 -0
  17. package/tools/booking-equipment.mjs +110 -0
  18. package/tools/bridges.mjs +54 -0
  19. package/tools/calendar.mjs +9 -0
  20. package/tools/capabilities.mjs +155 -0
  21. package/tools/catalog.mjs +288 -0
  22. package/tools/clubs.mjs +176 -0
  23. package/tools/coach.mjs +771 -0
  24. package/tools/compare.mjs +76 -0
  25. package/tools/core.mjs +21 -0
  26. package/tools/crm.mjs +12 -3
  27. package/tools/dubsado.mjs +137 -0
  28. package/tools/exports.mjs +128 -0
  29. package/tools/fact-review.mjs +125 -0
  30. package/tools/flows.mjs +261 -0
  31. package/tools/forms.mjs +158 -0
  32. package/tools/gols.mjs +134 -0
  33. package/tools/hr.mjs +162 -0
  34. package/tools/knowledge.mjs +4 -3
  35. package/tools/marketing.mjs +396 -0
  36. package/tools/meta.mjs +2 -2
  37. package/tools/military.mjs +244 -0
  38. package/tools/outreach.mjs +27 -4
  39. package/tools/pending.mjs +122 -0
  40. package/tools/photos.mjs +140 -0
  41. package/tools/plays.mjs +1 -1
  42. package/tools/profile.mjs +118 -0
  43. package/tools/radar.mjs +173 -0
  44. package/tools/recurring-invoices.mjs +149 -0
  45. package/tools/reengage.mjs +434 -0
  46. package/tools/schedules.mjs +55 -0
  47. package/tools/setup.mjs +168 -0
  48. package/tools/sops-bridges.mjs +86 -0
  49. package/tools/sops.mjs +314 -0
  50. package/tools/sourcing.mjs +50 -2
  51. package/tools/strategy.mjs +146 -0
  52. package/tools/studio.mjs +132 -0
  53. package/tools/venueradar.mjs +151 -0
  54. package/tools/voice.mjs +134 -0
  55. package/tools.mjs +70 -12
package/README.md CHANGED
@@ -61,6 +61,7 @@ profile loads only the families you want:
61
61
  | `outreach` | `core` + the outreach families |
62
62
  | `money` | `core` + the billing families |
63
63
  | `content` | `core` + the content families |
64
+ | `coach` | Fully Booked Coach operations, client delivery, acquisition, and content requests |
64
65
  | `full` | everything (**default**) |
65
66
 
66
67
  `full` is the default, so nothing changes for an existing connection. An unknown profile name
@@ -111,19 +112,19 @@ No local install for the user - they point their client at the hosted VPS endpoi
111
112
  authenticate with their own KM Hub key as a header. One server process serves every org;
112
113
  each request is scoped to the token it carries. Operators: see
113
114
  [DEPLOY-VPS.md](./DEPLOY-VPS.md) (pm2 `kmhub-mcp`, port `8830`,
114
- `https://kmhub-mcp.104-200-30-37.sslip.io/mcp`).
115
+ `https://mcp.kivimedia.co/mcp`).
115
116
 
116
117
  Claude Code (one command):
117
118
 
118
119
  ```bash
119
- claude mcp add --transport http kmhub https://kmhub-mcp.104-200-30-37.sslip.io/mcp \
120
+ claude mcp add --transport http kmhub https://mcp.kivimedia.co/mcp \
120
121
  --header "Authorization: Bearer kmh_live_xxxxxxxx"
121
122
  ```
122
123
 
123
124
  Add `?profile=core` to the URL to load a smaller tool set:
124
125
 
125
126
  ```bash
126
- claude mcp add --transport http kmhub "https://kmhub-mcp.104-200-30-37.sslip.io/mcp?profile=core" \
127
+ claude mcp add --transport http kmhub "https://mcp.kivimedia.co/mcp?profile=core" \
127
128
  --header "Authorization: Bearer kmh_live_xxxxxxxx"
128
129
  ```
129
130
 
@@ -134,7 +135,7 @@ Claude Desktop / config-file clients:
134
135
  "mcpServers": {
135
136
  "kmhub": {
136
137
  "type": "streamable-http",
137
- "url": "https://kmhub-mcp.104-200-30-37.sslip.io/mcp",
138
+ "url": "https://mcp.kivimedia.co/mcp",
138
139
  "headers": {
139
140
  "Authorization": "Bearer kmh_live_xxxxxxxx",
140
141
  "X-KMHub-Profile": "full"
@@ -144,7 +145,7 @@ Claude Desktop / config-file clients:
144
145
  }
145
146
  ```
146
147
 
147
- Health check (no auth): `GET https://kmhub-mcp.104-200-30-37.sslip.io/health`.
148
+ Health check (no auth): `GET https://mcp.kivimedia.co/health`.
148
149
 
149
150
  ## Adding tools
150
151
 
package/bin/kmhub.mjs CHANGED
@@ -50,6 +50,12 @@ const FALLBACK_BASE = 'https://jpwbosrmkibsdgckowsm.supabase.co/functions/v1/kmh
50
50
  /** Keys are minted as kmh_live_ plus hex. The API matches the same shape before it looks anything up. */
51
51
  const KEY_RE = /^kmh_live_[0-9a-f]+$/i;
52
52
 
53
+ /**
54
+ * Where people who use Codex, Cursor or Grok Build are sent. This tool only knows how to
55
+ * register into Claude Code; the installers behind this page wire all four apps.
56
+ */
57
+ const SETUP_URL = 'https://hub.kivimedia.co/terminal/';
58
+
53
59
  /** A connector name has to survive being an argv element and a JSON key. */
54
60
  const NAME_RE = /^[A-Za-z0-9_-]{1,64}$/;
55
61
 
@@ -71,8 +77,12 @@ const HELP = `kmhub, the KM Hub Terminal Mode command line tool.
71
77
  you passed, then KMHUB_API_KEY in the environment, then the key stored in the
72
78
  registration itself.
73
79
 
74
- Create a key in KM Hub under Settings > Developer & API.
80
+ Create a key in KM Hub under Settings > Connect > Developer & API.
75
81
  Set KMHUB_API_BASE to point at a different KM Hub.
82
+
83
+ This tool registers Claude Code only. For Codex, Cursor or Grok Build, use the
84
+ KM Hub setup instead, which connects the app you pick and needs no key:
85
+ ${SETUP_URL}
76
86
  `;
77
87
 
78
88
  // ---------------------------------------------------------------------------
@@ -197,7 +207,7 @@ function explain(res, base) {
197
207
  if (res.status === 401) {
198
208
  return [
199
209
  'KM Hub did not accept that key. It is either mistyped or it has been revoked.',
200
- 'Create a fresh one in KM Hub under Settings > Developer & API, then run this again with the new key.',
210
+ 'Create a fresh one in KM Hub under Settings > Connect > Developer & API, then run this again with the new key.',
201
211
  ].join('\n');
202
212
  }
203
213
  if (res.status === 402) {
@@ -213,7 +223,7 @@ function explain(res, base) {
213
223
  if (res.status === 403) {
214
224
  return [
215
225
  `This key does not carry the scope that call needs${message ? ` (${message})` : ''}.`,
216
- 'A read-only key can read your workspace but cannot create anything. Mint a key with write scope in Settings > Developer & API if you need the create tools.',
226
+ 'A read-only key can read your workspace but cannot create anything. Mint a key with write scope in Settings > Connect > Developer & API if you need the create tools.',
217
227
  ].join('\n');
218
228
  }
219
229
  if (res.status === 429) {
@@ -436,12 +446,12 @@ async function cmdInstall(key, name) {
436
446
  fail(`I read "${name}" as the connector name, not as a key. A key starts with kmh_live_.`);
437
447
  fail('');
438
448
  }
439
- fail('Create one in KM Hub under Settings > Developer & API.');
449
+ fail('Create one in KM Hub under Settings > Connect > Developer & API.');
440
450
  return 2;
441
451
  }
442
452
  if (!KEY_RE.test(key)) {
443
453
  fail('That does not look like a KM Hub API key.');
444
- fail('A key starts with kmh_live_ and is followed by hex. Copy it again from Settings > Developer & API.');
454
+ fail('A key starts with kmh_live_ and is followed by hex. Copy it again from Settings > Connect > Developer & API.');
445
455
  return 2;
446
456
  }
447
457
  if (!NAME_RE.test(name)) {
@@ -487,6 +497,9 @@ async function cmdInstall(key, name) {
487
497
  fail('If you are setting up Claude Desktop instead, put this in your claude_desktop_config.json:');
488
498
  fail('');
489
499
  fail(desktopConfigBlock(name, key));
500
+ fail('');
501
+ fail('Using Codex, Cursor or Grok Build instead? This tool only registers Claude Code.');
502
+ fail(`The KM Hub setup connects the app you pick: ${SETUP_URL}`);
490
503
  return 1;
491
504
  }
492
505
 
@@ -521,7 +534,7 @@ async function cmdInstall(key, name) {
521
534
  say('');
522
535
  say('Two things worth knowing:');
523
536
  say(` 1. The key is stored in your Claude Code config. If it ever leaks, revoke it in KM Hub`);
524
- say(' under Settings > Developer & API and run this install again with a fresh one.');
537
+ say(' under Settings > Connect > Developer & API and run this install again with a fresh one.');
525
538
  say(` 2. The connector is launched with npx, so restarting Claude Code picks up new builds.`);
526
539
  say(` Run npx ${PKG_NAME} doctor if anything ever looks wrong.`);
527
540
  return 0;
@@ -743,7 +756,7 @@ async function cmdDoctor(argKey, name) {
743
756
  'fail',
744
757
  'API key',
745
758
  `the value from ${source} is not shaped like a KM Hub key`,
746
- 'A key starts with kmh_live_ and is followed by hex. Copy it again from Settings > Developer & API.',
759
+ 'A key starts with kmh_live_ and is followed by hex. Copy it again from Settings > Connect > Developer & API.',
747
760
  );
748
761
  } else {
749
762
  record('ok', 'API key', `${maskKey(key)} from ${source}`);