@seldonframe/mcp 1.55.0 → 1.56.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,6 +1,6 @@
1
1
  {
2
2
  "name": "@seldonframe/mcp",
3
- "version": "1.55.0",
3
+ "version": "1.56.0",
4
4
  "mcpName": "io.github.seldonframe/seldonframe-mcp",
5
5
  "description": "Open-source GoHighLevel alternative for agencies. 146+ MCP tools that let Claude Code spin up white-labeled client workspaces — CRM, booking, intake forms, landing pages, AI chatbot, and pre-wired agent archetypes (speed-to-lead, missed-call-text-back, review-requester) — in minutes. AGPL-3.0.",
6
6
  "license": "AGPL-3.0-or-later",
@@ -95,6 +95,55 @@ export function buildFinalizeSummary({ snapshot, durationSec, aestheticArchetype
95
95
  );
96
96
  lines.push("");
97
97
 
98
+ // v1.55.x — derive appHost for the LLM-settings + client-portal links.
99
+ // SELDONFRAME_APP_BASE wins when set (white-label/staging); falls back
100
+ // to https://app.seldonframe.com. Trailing slash stripped to match the
101
+ // pattern used by v2/complete when building ops_stack.automations_url.
102
+ const appHost = (
103
+ process.env.SELDONFRAME_APP_BASE ?? "https://app.seldonframe.com"
104
+ ).replace(/\/$/, "");
105
+
106
+ // LLM key clarity — operators kept asking "which key is the chatbot
107
+ // using?" + had no recovery path when llm_credit_exhausted fired.
108
+ lines.push(
109
+ `🔑 Chatbot LLM key: uses your Claude Code key by default. Change at ${appHost}/settings/integrations/llm.`,
110
+ );
111
+ lines.push(
112
+ ` (If you see "llm_credit_exhausted", top up at console.anthropic.com/settings/billing.)`,
113
+ );
114
+ lines.push("");
115
+
116
+ // v1.55.x — Client portal demo callout. Closes the demo loop:
117
+ // chatbot (above) → booking → CRM → portal demo for the client.
118
+ // Slug is required; skip gracefully if absent (shouldn't happen in
119
+ // practice but the snapshot can theoretically lack it).
120
+ //
121
+ // The /demo URL is a one-click deep link: workspace creation seeds
122
+ // a "Demo Customer" contact + sample upcoming appointment + welcome
123
+ // message, and visiting /customer/<slug>/demo auto-establishes a
124
+ // portal session for that contact — no email, no magic link. The
125
+ // operator can paste this URL to a prospect and they land directly
126
+ // in a populated portal instead of a magic-link form with empty
127
+ // tabs. Demo data is filtered out of operator-facing CRM / pipeline
128
+ // / analytics by tag, so it stays isolated from real customer data.
129
+ const slug = ws.slug ?? "";
130
+ if (slug) {
131
+ const portalUrl = `${appHost}/customer/${slug}/demo`;
132
+ lines.push(`🎬 Demo the client portal (one-click, no login):`);
133
+ lines.push(` ${portalUrl}`);
134
+ lines.push(
135
+ ` Share this link with the prospect — opens directly as "Demo Customer" with a`,
136
+ );
137
+ lines.push(
138
+ ` sample appointment and welcome message. Demo data stays isolated from your`,
139
+ );
140
+ lines.push(` real CRM and pipelines.`);
141
+ lines.push(
142
+ ` Free tier shows the portal with SeldonFrame branding. Growth ($29/mo) unlocks custom domain + the agency's logo.`,
143
+ );
144
+ lines.push("");
145
+ }
146
+
98
147
  // Landing-page nudge (closing)
99
148
  const archetypeClause = aestheticArchetype ? ` in ${aestheticArchetype} style` : "";
100
149
  lines.push(