@seldonframe/mcp 1.46.0 → 1.47.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 (2) hide show
  1. package/package.json +1 -1
  2. package/src/tools.js +44 -3
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seldonframe/mcp",
3
- "version": "1.46.0",
3
+ "version": "1.47.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",
package/src/tools.js CHANGED
@@ -60,7 +60,8 @@ export const TOOLS = [
60
60
  {
61
61
  name: "create_full_workspace",
62
62
  description:
63
- "PREFERRED for new workspaces. Atomic, server-side workspace creation: takes structured business info and creates everything in ONE call — workspace, business profile, CRM with industry-specific pipeline stages, booking page with availability, intake form, themed landing page, all deployed with live URLs. " +
63
+ " DO NOT USE WHEN A URL IS PROVIDED use `create_workspace_from_url` instead. THIS tool is for STRUCTURED, PRE-EXTRACTED business info ONLY (manual paste, operator-typed fields, etc.). " +
64
+ "PREFERRED for new workspaces FROM STRUCTURED INPUT. Atomic, server-side workspace creation: takes structured business info and creates everything in ONE call — workspace, business profile, CRM with industry-specific pipeline stages, booking page with availability, intake form, themed landing page, all deployed with live URLs. " +
64
65
  "Use this instead of create_workspace + a long sequence of customization tools. The pipeline runs server-side with a fixed order — same input always produces same output, no retries, no 404s. " +
65
66
  "MANDATORY FOLLOW-UP: After this returns `status: 'ready'`, ask the operator verbatim 'What email should I use for your account? This is where you'll get your login link and notifications.' Then call `finalize_workspace({ workspace_id, email })`. The admin dashboard URL is ONLY created by finalize_workspace — it does not exist in this response (so there's nothing for you to display prematurely). " +
66
67
  "Example: create_full_workspace({ business_name: 'Summit Air Comfort', city: 'Phoenix', state: 'AZ', phone: '(480) 555-2100', services: ['AC repair', 'heating installation', 'duct cleaning'], business_description: 'Residential and commercial HVAC in Phoenix', review_count: 950, review_rating: 4.7, trust_signals: ['licensed', 'bonded', 'insured'], emergency_service: true, same_day: true, service_area: ['Scottsdale', 'Tempe', 'Mesa'] })",
@@ -477,7 +478,16 @@ export const TOOLS = [
477
478
  {
478
479
  name: "create_workspace_from_url",
479
480
  description:
480
- "Crawl a business website URL and create a complete personalized client workspace in one step: CRM, landing page, booking page, intake form, and AI chatbot wired to FAQs auto-extracted from the site plus the booking calendar. The chatbot ships eval-gated (must pass ≥10/11 safety + behavior scenarios). White-label-ready under partner-agency attachment. USE-WHEN: agency operator says 'set up a workspace for dallasplumbing.com' or pastes any client business URL. Returns workspace + agent + embed_url + faq_summary.",
481
+ " MUST USE WHEN A URL IS PROVIDED this is the LEAN atomic URL-input path for agency client workspace creation (v1.47, ~10-30s). " +
482
+ "PATTERNS THAT ROUTE HERE (do not even consider other workspace-creation tools when input matches): " +
483
+ "'create a workspace for <URL>', 'set up <client> at <URL>', 'spin up <URL>', '<URL>' alone, or any operator message containing http://, https://, or a recognizable domain (.com/.io/.net/.co/.app/.dev/.us etc). " +
484
+ "WHAT THIS TOOL DOES: backend crawls the URL → extracts business info → creates CRM + booking + intake + eval-gated AI chatbot wired to FAQs auto-pulled from the site. " +
485
+ "DOES NOT GENERATE A LANDING PAGE BY DEFAULT — agency clients typically already have their own website (the URL the operator passed). The chatbot ships as an embed snippet (`chatbot_embed_snippet` in the response) which the agency pastes onto the client's existing site. " +
486
+ "If you ALSO need a SeldonFrame-hosted landing page (only when the client has no site of their own), call `generate_landing_page({ workspace_id })` AFTER this returns — it's a separate ~30-60s opt-in step. " +
487
+ "DO NOT use create_workspace_v2 or create_full_workspace when a URL is available. Those tools require PRE-EXTRACTED structured fields (business_name, services[], phone) and will produce INFERIOR results for URL input because they skip the URL crawler, the FAQ extractor, and the auto-chatbot build. " +
488
+ "DO NOT manually WebFetch the URL first — the SeldonFrame backend's soul-compiler is already wired to scrape + extract. Forwarding pre-fetched HTML wastes a round-trip and bypasses the FAQ-from-URL pipeline. " +
489
+ "Eval gate: chatbot must pass ≥10 of 11 safety + behavior scenarios to ship 'live'. White-label-ready under partner-agency attachment. " +
490
+ "Returns: workspace + agent + chatbot_embed_snippet + faq_summary. MANDATORY FOLLOW-UP: ask the operator verbatim 'What email should I use for your account?' then call finalize_workspace({ workspace_id, email }) — the admin dashboard URL is ONLY created by finalize_workspace.",
481
491
  inputSchema: obj(
482
492
  {
483
493
  url: str("Business website URL, e.g. https://dallasplumbing.com"),
@@ -490,6 +500,36 @@ export const TOOLS = [
490
500
  url: args.url,
491
501
  include_chatbot: true,
492
502
  auto_extract_faq: true,
503
+ include_landing_page: false,
504
+ },
505
+ allow_anonymous: true,
506
+ }),
507
+ },
508
+ // v1.47 — explicit opt-in landing-page generator. create_workspace_from_url
509
+ // defaults to NO landing page (the client already has their own site);
510
+ // when the operator DOES want a SeldonFrame-hosted landing page, this
511
+ // tool generates it on demand.
512
+ {
513
+ name: "generate_landing_page",
514
+ description:
515
+ "Generate a SeldonFrame-hosted landing page for an EXISTING workspace. " +
516
+ "USE-WHEN: operator explicitly asks for a landing page after the workspace exists, OR the client has no website of their own and the agency wants SeldonFrame to host the public-facing site. " +
517
+ "If the client already has a website (the common agency case), the chatbot embed snippet returned by create_workspace_from_url is the canonical deliverable; you do NOT need a generated landing page. " +
518
+ "Latency: ~30-60s. Returns the public landing URL. Operator can later customize per-block via update_landing_section / persist_block.",
519
+ inputSchema: obj(
520
+ {
521
+ workspace_id: str("Workspace UUID (from create_workspace_from_url or other creation tool)."),
522
+ style: str(
523
+ "Optional archetype override: 'bold-urgency', 'editorial-warm', 'clinical-trust', 'cinematic-aspirational'. If omitted, the soul's base_framework picks the default style."
524
+ ),
525
+ },
526
+ ["workspace_id"]
527
+ ),
528
+ handler: async (args) =>
529
+ api("POST", "/workspace/generate-landing-page", {
530
+ body: {
531
+ workspace_id: args.workspace_id,
532
+ style: args.style ?? null,
493
533
  },
494
534
  allow_anonymous: true,
495
535
  }),
@@ -2966,7 +3006,8 @@ export const TOOLS = [
2966
3006
  {
2967
3007
  name: "create_workspace_v2",
2968
3008
  description:
2969
- "PREFERRED for new workspaces (v1.4+). MCP-native workspace creation: bootstraps the workspace via the v1 orchestrator (CRM, booking, intake, theme, pipeline) AND returns a list of v2 page blocks the IDE agent will now generate using its own LLM. " +
3009
+ " DO NOT USE WHEN A URL IS PROVIDED use `create_workspace_from_url` instead. THIS tool is for STRUCTURED, PRE-EXTRACTED business info ONLY (typically a Google Maps paste the operator already parsed into fields). " +
3010
+ "PREFERRED for STRUCTURED-INPUT workspaces (v1.4+) when no URL is available. MCP-native workspace creation: bootstraps the workspace via the v1 orchestrator (CRM, booking, intake, theme, pipeline) AND returns a list of v2 page blocks the IDE agent will now generate using its own LLM. " +
2970
3011
  "Flow: 1) call this tool with the operator's business info; 2) for each block in `v2.recommended_blocks`, call get_block_skill(name) and use your LLM to generate props matching the SKILL.md prompt + schema; 3) call persist_block({ workspace_id, block_name, generation_prompt, props }) for each; 4) call complete_workspace_v2({ workspace_id }). " +
2971
3012
  "MANDATORY FOLLOW-UP: After this returns `status: 'ready'` AND after all blocks land via persist_block + complete_workspace_v2, ask the operator verbatim 'What email should I use for your account?' Then call finalize_workspace({ workspace_id, email }). The admin dashboard URL is created by finalize_workspace, not here. " +
2972
3013
  "Why v2: v1 generated all copy server-side from a hardcoded personality system, which produced layer-mismatch bugs every time a new niche was tested. v2 puts the LLM in your context (the IDE agent), reads from one SKILL.md per block, and the generated copy is naturally niche-aware. The operator can later say 'change the hero' and you customize it via persist_block with a customization payload.",