@seldonframe/mcp 1.1.1 → 1.1.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.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@seldonframe/mcp",
3
- "version": "1.1.1",
4
- "description": "MCP server for SeldonFrame — AI-native Business OS platform. One command creates a real, hosted workspace with a website, booking page, intake form, CRM, and AI agents. v1.1.1: DEPRECATED `create_workspace` tool. Renamed to `_legacy_create_workspace` (sorts last in tool listings) and the handler returns a deprecation error pointing at `create_full_workspace` without doing anything. Closes the old door so Claude Code is forced onto the atomic pipeline introduced in v1.1.0 every fix shipped since (timezone, pipeline stages, email collection, admin URL withholding) only activates inside the new pipeline. WELCOME_MARKDOWN updated so create_full_workspace is the only workspace-creation path mentioned anywhere.",
3
+ "version": "1.1.3",
4
+ "description": "MCP server for SeldonFrame — AI-native Business OS platform. One command creates a real, hosted workspace with a website, booking page, intake form, CRM, and AI agents. v1.1.3: fixes the personality-mismatch bug in create_full_workspace where dental / legal / agency workspaces seeded the wrong CRM personality (and wrong pipeline stages, intake fields, booking duration). Root cause: the orchestrator passed `industry: null` to the inner createAnonymousWorkspace, losing the industry hint, so the inner classifier fell back to the BUSINESS_TYPE_FALLBACK chain coaching for any vertical whose keywords only live in the personality bank (dental, legal, agency). Fix: pass the industry hint through to the inner classifier so the inner personality decision matches the outer one. Plus a defensive override that re-writes settings.crmPersonality + reseeds the default pipeline stages to the orchestrator's classified personality if any future regression reintroduces the mismatch.",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "seldonframe-mcp": "src/index.js"
package/src/tools.js CHANGED
@@ -39,36 +39,11 @@ function wsOrDefault(workspace_id) {
39
39
  }
40
40
 
41
41
  export const TOOLS = [
42
- {
43
- // May 2, 2026 (v1.1.1) Renamed from `create_workspace` to
44
- // `_legacy_create_workspace` to force Claude Code onto the new
45
- // atomic `create_full_workspace` path. The leading underscore
46
- // sorts this tool toward the bottom of MCP tool listings, and
47
- // the "DEPRECATED" prefix in the description makes it obvious
48
- // when the model is browsing tools. The handler does NOT call
49
- // the API — it returns a redirect error immediately so even if
50
- // Claude Code does invoke this, no workspace is created and the
51
- // model is told exactly which tool to use instead.
52
- name: "_legacy_create_workspace",
53
- description:
54
- "DEPRECATED — do not use. Use `create_full_workspace` instead for ALL workspace creation. This tool no longer creates anything; calling it returns an error pointing at the replacement. The atomic `create_full_workspace` runs the entire 13-step pipeline server-side in one call (workspace + business profile + CRM + booking + intake + landing page) and the admin URL is structurally created only by `finalize_workspace` — both fixes that the legacy multi-call sequence couldn't reliably deliver.",
55
- inputSchema: obj({}),
56
- handler: async () => {
57
- return {
58
- ok: false,
59
- error:
60
- "This tool is deprecated. Use create_full_workspace for all new workspaces.",
61
- redirect_tool: "create_full_workspace",
62
- why:
63
- "create_full_workspace runs the entire workspace creation pipeline atomically server-side — same input always produces the same output, no retries, no Claude-Code orchestration. The admin dashboard URL is then created only by finalize_workspace, which structurally enforces the email-collection step. The legacy create_workspace path required Claude Code to chain 15-25 tool calls in some order and skipped finalize_workspace in practice.",
64
- next_step: {
65
- tool_to_call: "create_full_workspace",
66
- docs:
67
- "Pass: business_name, city, state, phone, services[], business_description (required), and any of: review_count, review_rating, certifications[], trust_signals[], emergency_service, same_day, service_area[].",
68
- },
69
- };
70
- },
71
- },
42
+ // May 2, 2026 (v1.1.2) — `create_workspace` (formerly
43
+ // `_legacy_create_workspace`) DELETED entirely from the tool registry.
44
+ // Deprecation in 1.1.1 didn't stop Claude Code from finding alternative
45
+ // multi-tool paths to compose a workspace. Removing the tool outright
46
+ // is the only structural way to force `create_full_workspace`.
72
47
  {
73
48
  name: "create_full_workspace",
74
49
  description:
@@ -821,25 +796,14 @@ export const TOOLS = [
821
796
  return api("GET", `/automations?workspace_id=${encodeURIComponent(ws)}`, { workspace_id: ws });
822
797
  },
823
798
  },
824
- {
825
- name: "install_vertical_pack",
826
- description:
827
- "Set up an industry template (real-estate, dental, legal, …). Adds industry-specific objects, fields, and views to the CRM and pre-fills the booking page + intake form for that line of work.",
828
- inputSchema: obj(
829
- {
830
- pack: str("Industry template name, e.g. 'real-estate', 'dental', 'legal'."),
831
- workspace_id: str("Optional workspace override."),
832
- },
833
- ["pack"],
834
- ),
835
- handler: async (a) => {
836
- const ws = wsOrDefault(a.workspace_id);
837
- return api("POST", "/packs/install", {
838
- body: { pack: a.pack, workspace_id: ws },
839
- workspace_id: ws,
840
- });
841
- },
842
- },
799
+ // May 2, 2026 (v1.1.2) — `install_vertical_pack` DELETED entirely.
800
+ // The /packs/install endpoint doesn't exist, so this tool 404'd
801
+ // every time Claude Code reached for it. Industry-specific
802
+ // configuration (terminology, pipeline stages, intake fields,
803
+ // booking duration) is now driven by the CRMPersonality the
804
+ // server picks during create_full_workspace from the operator's
805
+ // services + business_description no separate install step
806
+ // needed.
843
807
  {
844
808
  name: "install_caldiy_booking",
845
809
  description:
@@ -2321,39 +2285,14 @@ export const TOOLS = [
2321
2285
  return api("GET", `/landing/${encodeURIComponent(args.page_id)}`, { workspace_id: ws });
2322
2286
  },
2323
2287
  },
2324
- {
2325
- name: "create_landing_page",
2326
- description:
2327
- "Create a landing page from an optional Puck payload. Without puck_data, creates a blank draft. With puck_data, validates the payload against the Puck schema and rejects on mismatch. Set published=true to publish immediately.",
2328
- inputSchema: obj(
2329
- {
2330
- title: str("Page title (used for the dashboard; not the public URL)."),
2331
- slug: str("Optional URL slug. Derived from title if omitted."),
2332
- puck_data: {
2333
- type: "object",
2334
- description: "Optional Puck payload { content: [], root: {props}, zones: {} }.",
2335
- },
2336
- published: {
2337
- type: "boolean",
2338
- description: "If true, publish the page immediately. Default: draft.",
2339
- },
2340
- workspace_id: str("Optional. Falls back to the active workspace."),
2341
- },
2342
- ["title"],
2343
- ),
2344
- handler: async (args) => {
2345
- const ws = wsOrDefault(args.workspace_id);
2346
- return api("POST", "/landing", {
2347
- body: {
2348
- title: args.title,
2349
- slug: args.slug,
2350
- puckData: args.puck_data,
2351
- published: Boolean(args.published),
2352
- },
2353
- workspace_id: ws,
2354
- });
2355
- },
2356
- },
2288
+ // May 2, 2026 (v1.1.2) — `create_landing_page` DELETED entirely.
2289
+ // Every workspace already has a default landing page seeded by
2290
+ // create_full_workspace (via createDefaultLandingPage +
2291
+ // seedLandingFromSoul). Calling create_landing_page tried to
2292
+ // create a SECOND page, which the Free-tier landingPages limit (=1)
2293
+ // rejected with `upgrade_required` — surfacing as a 500 on every
2294
+ // demo run. Customization goes through update_landing_page on
2295
+ // the existing page; no second page is ever needed.
2357
2296
  {
2358
2297
  name: "update_landing_page",
2359
2298
  description:
package/src/welcome.js CHANGED
@@ -8,7 +8,7 @@
8
8
  // stripped. `create_full_workspace` is the only workspace-creation
9
9
  // path mentioned anywhere in this briefing.
10
10
 
11
- export const VERSION = "1.1.1";
11
+ export const VERSION = "1.1.3";
12
12
 
13
13
  export const WELCOME_MARKDOWN = `# SeldonFrame — create a real Business OS in one conversation
14
14