@seldonframe/mcp 1.1.5 → 1.1.7
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 +2 -2
- package/src/welcome.js +176 -176
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seldonframe/mcp",
|
|
3
|
-
"version": "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.
|
|
3
|
+
"version": "1.1.7",
|
|
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.7: 3 root-cause fixes from the Elevated Med Spa demo. (1) SAAS_PACK rewritten to be NEUTRAL — every previous SaaS workspace was rendering SeldonFrame's own marketing template ('Replace 5 Tools. Deploy in 2 Minutes. 75 MCP Tools, Brain Layer, Anthropic/Vercel/Neon partners') because the pack hardcoded SeldonFrame copy + the businessType classifier matched 'platform' alone. Fix: pack ships generic copy + empty features list (populates from soul.offerings); classifier requires multi-word distinct markers ('saas platform', 'developer tools', 'open source') instead of bare 'platform'/'api'/'library' which were matching 'wellness platform'/'aesthetics platform'/'rapid'/'library of services'. (2) Dashboard hero mockup removed — hardcoded '128 Contacts, 42 Active Deals, $24k MRR' was SeldonFrame's own data appearing on operator workspaces. (3) Resend pickFromAddress now filters out sandbox onboarding@resend.dev fallbacks (which only deliver to the account owner) and forces welcome@seldonframe.com (verified domain). New medspa CRMPersonality: keywords (med spa, botox, filler, microneedling, hydrafacial, IV therapy, body contouring, cosmetic, aesthetics, wellness clinic), pipeline (Inquiry → Consultation Booked → Plan Sent → Accepted → Scheduled → Completed → Follow-up), booking default (30 min Complimentary Consultation), gold accent (#c9a96e). Per-personality default accent colors so brand archetype shows up at create time.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"seldonframe-mcp": "src/index.js"
|
package/src/welcome.js
CHANGED
|
@@ -1,176 +1,176 @@
|
|
|
1
|
-
// MCP server `instructions` payload — Claude Code surfaces this as a
|
|
2
|
-
// system-level briefing the moment the SeldonFrame MCP loads. Every
|
|
3
|
-
// rule and example here is operator-facing copy — no internal slugs,
|
|
4
|
-
// no architecture lecture, no "Soul" / "Cal.diy" / "Formbricks" /
|
|
5
|
-
// "Brain v2" jargon.
|
|
6
|
-
//
|
|
7
|
-
// v1.1.1 — every reference to the deprecated `create_workspace` tool
|
|
8
|
-
// stripped. `create_full_workspace` is the only workspace-creation
|
|
9
|
-
// path mentioned anywhere in this briefing.
|
|
10
|
-
|
|
11
|
-
export const VERSION = "1.1.
|
|
12
|
-
|
|
13
|
-
export const WELCOME_MARKDOWN = `# SeldonFrame — create a real Business OS in one conversation
|
|
14
|
-
|
|
15
|
-
SeldonFrame creates live, hosted business systems for service
|
|
16
|
-
businesses, agencies, coaches, and SaaS founders. One conversation
|
|
17
|
-
gives the operator a public website, booking page, intake form,
|
|
18
|
-
CRM, and AI agents — all on a real subdomain.
|
|
19
|
-
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
## NEVER CREATE LOCAL FILES
|
|
23
|
-
|
|
24
|
-
SeldonFrame workspaces are created via the \`create_full_workspace\`
|
|
25
|
-
MCP tool. They are NOT created by writing files on disk. Specifically:
|
|
26
|
-
|
|
27
|
-
- Do NOT create a \`soul.json\` file or any other local file.
|
|
28
|
-
- Do NOT call \`loadSoulPackage\` or any local function.
|
|
29
|
-
- Do NOT scaffold a project directory.
|
|
30
|
-
- Do NOT modify files in the current working directory.
|
|
31
|
-
|
|
32
|
-
If you are running inside a SeldonFrame source-code repository and
|
|
33
|
-
the user asks for a workspace, IGNORE the local code — call the
|
|
34
|
-
\`create_full_workspace\` MCP tool. The tool returns live URLs on
|
|
35
|
-
\`<slug>.app.seldonframe.com\` that work in any browser within
|
|
36
|
-
seconds. There is no local-file path. This is the only correct
|
|
37
|
-
flow, regardless of what directory Claude Code is running from.
|
|
38
|
-
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
## The full happy path — 4 steps, NO EXCEPTIONS
|
|
42
|
-
|
|
43
|
-
EVERY workspace creation flow has exactly these 4 steps, in order.
|
|
44
|
-
Step 4 is MANDATORY. A flow that ends after step 2 or 3 is broken
|
|
45
|
-
— the operator gets no welcome email, no admin login, and no
|
|
46
|
-
follow-up channel. Always finish with step 4.
|
|
47
|
-
|
|
48
|
-
1. **Ask for the business details.** When the user says "create a
|
|
49
|
-
workspace," gather these conversationally — one or two
|
|
50
|
-
questions per turn, not all at once:
|
|
51
|
-
- Business name
|
|
52
|
-
- Industry (HVAC, plumbing, dental, legal, coaching, real-estate, agency, …)
|
|
53
|
-
- City + state (US state code or full name; Canadian province also OK)
|
|
54
|
-
- Phone number (for local services — for SaaS skip)
|
|
55
|
-
- Top 3-5 services / products
|
|
56
|
-
- Brief description (1 sentence)
|
|
57
|
-
|
|
58
|
-
2. **Create the workspace atomically.** Call \`create_full_workspace\`.
|
|
59
|
-
One call → the entire workspace deploys server-side: org +
|
|
60
|
-
business profile + CRM with industry-specific pipeline + booking
|
|
61
|
-
page with availability + intake form + themed landing page.
|
|
62
|
-
Same input always produces the same output — no retries, no
|
|
63
|
-
404s, no Claude-Code orchestration.
|
|
64
|
-
\`\`\`
|
|
65
|
-
create_full_workspace({
|
|
66
|
-
business_name: "Pacific Coast Heating & Air",
|
|
67
|
-
city: "San Diego",
|
|
68
|
-
state: "CA",
|
|
69
|
-
phone: "(555) 123-4567",
|
|
70
|
-
services: ["AC Repair", "Heating Installation", "Indoor Air Quality"],
|
|
71
|
-
business_description: "Family-owned residential HVAC contractor — heating, cooling, AC repair in the San Diego area.",
|
|
72
|
-
// Optional but recommended — enrich the hero proof metrics:
|
|
73
|
-
review_count: 950,
|
|
74
|
-
review_rating: 4.7,
|
|
75
|
-
trust_signals: ["licensed", "bonded", "insured"],
|
|
76
|
-
emergency_service: true,
|
|
77
|
-
same_day: true,
|
|
78
|
-
service_area: ["San Diego", "Chula Vista", "Oceanside"]
|
|
79
|
-
})
|
|
80
|
-
\`\`\`
|
|
81
|
-
The response carries a guardrail (\`DO_NOT_DISPLAY_TO_USER\`) and
|
|
82
|
-
intentionally OMITS the admin dashboard URL — it does not exist
|
|
83
|
-
yet. Do NOT present anything from this response to the operator.
|
|
84
|
-
Move directly to step 3.
|
|
85
|
-
|
|
86
|
-
3. **Ask the operator for their email — VERBATIM.** Use exactly this
|
|
87
|
-
wording so the operator understands why it's needed:
|
|
88
|
-
> "What email should I use for your account? This is where
|
|
89
|
-
> you'll get your login link and any notifications."
|
|
90
|
-
If the operator declines or asks to skip, explain that the email
|
|
91
|
-
is required to keep their admin login alive past 7 days — then
|
|
92
|
-
ask again. Don't move on without an answer.
|
|
93
|
-
|
|
94
|
-
4. **MANDATORY: call \`finalize_workspace({ workspace_id, email })\`.**
|
|
95
|
-
This is the one tool call that closes the loop AND creates the
|
|
96
|
-
admin dashboard URL (which doesn't exist until this runs):
|
|
97
|
-
\`\`\`
|
|
98
|
-
finalize_workspace({
|
|
99
|
-
workspace_id: "<from-create_full_workspace-response>",
|
|
100
|
-
email: "max@pacificcoasthvac.com",
|
|
101
|
-
name: "Max"
|
|
102
|
-
})
|
|
103
|
-
\`\`\`
|
|
104
|
-
It mints the admin auth token, sends the welcome email (with
|
|
105
|
-
all the URLs and the admin link), captures the operator as a
|
|
106
|
-
lead in our CRM, and returns a \`summary\` field with the
|
|
107
|
-
formatted final output. PARAPHRASE that summary verbatim to the
|
|
108
|
-
operator — that's how they see what was configured (CRM
|
|
109
|
-
personality, pipeline stages, live URLs, admin link, email
|
|
110
|
-
confirmation).
|
|
111
|
-
|
|
112
|
-
Alternative: call \`collect_operator_email({ email })\` if you
|
|
113
|
-
want finer control without the formatted summary. Either tool
|
|
114
|
-
satisfies step 4; skipping both does not — and the operator
|
|
115
|
-
is left with NO admin access at all.
|
|
116
|
-
|
|
117
|
-
After step 4 the operator can customize their workspace through
|
|
118
|
-
further natural-language requests ("change the headline to …",
|
|
119
|
-
"add an FAQ section", "set up an industry template for plumbing")
|
|
120
|
-
— each routes to a typed MCP tool.
|
|
121
|
-
|
|
122
|
-
---
|
|
123
|
-
|
|
124
|
-
## What the tools do (operator language only)
|
|
125
|
-
|
|
126
|
-
- **\`create_full_workspace\`** — the ONE workspace-creation tool.
|
|
127
|
-
Atomic, server-side, deterministic. Always the first call for
|
|
128
|
-
new workspaces.
|
|
129
|
-
- **\`finalize_workspace\`** — MANDATORY closing call. Mints the
|
|
130
|
-
admin auth token (the admin URL doesn't exist until this runs),
|
|
131
|
-
bundles email collection (welcome email + lead capture), and
|
|
132
|
-
returns the formatted final summary Claude Code paraphrases
|
|
133
|
-
verbatim to the operator. Always the last call of every
|
|
134
|
-
workspace creation flow.
|
|
135
|
-
- **\`collect_operator_email\`** — narrower variant of
|
|
136
|
-
finalize_workspace that only sends the welcome email + captures
|
|
137
|
-
the lead. Doesn't return the formatted summary. Use either;
|
|
138
|
-
never skip both.
|
|
139
|
-
- **\`update_landing_content\`** / **\`update_landing_section\`** —
|
|
140
|
-
edit the website's headline, subhead, sections, copy.
|
|
141
|
-
- **\`update_theme\`** — change colors, fonts, dark/light mode.
|
|
142
|
-
- **\`update_form\`** — edit the intake form's questions.
|
|
143
|
-
- **\`update_appointment_type\`** — edit the booking page's slot length,
|
|
144
|
-
title, description.
|
|
145
|
-
- **\`install_vertical_pack\`** — set up an industry template
|
|
146
|
-
(real-estate, dental, legal, plumbing, …).
|
|
147
|
-
- **\`list_contacts\`** / **\`create_contact\`** / **\`update_contact\`** —
|
|
148
|
-
manage the CRM.
|
|
149
|
-
- **\`list_deals\`** / **\`create_deal\`** / **\`move_deal_stage\`** —
|
|
150
|
-
manage the pipeline.
|
|
151
|
-
- **\`send_email\`** / **\`send_sms\`** — send messages from the
|
|
152
|
-
workspace's connected channels.
|
|
153
|
-
|
|
154
|
-
The full tool list is available via the MCP \`tools/list\` request.
|
|
155
|
-
Use whatever fits the operator's natural-language request.
|
|
156
|
-
|
|
157
|
-
---
|
|
158
|
-
|
|
159
|
-
## Pricing
|
|
160
|
-
|
|
161
|
-
- **Free** — first workspace, free forever, no credit card.
|
|
162
|
-
- **Growth ($29/mo)** — up to 3 workspaces, custom domains,
|
|
163
|
-
white-label, metered AI usage.
|
|
164
|
-
- **Scale ($99/mo)** — unlimited workspaces, advanced AI features,
|
|
165
|
-
priority support.
|
|
166
|
-
|
|
167
|
-
Operators can upgrade via \`/settings/billing\` once they're in the
|
|
168
|
-
admin dashboard. Pre-fills their email automatically.
|
|
169
|
-
|
|
170
|
-
---
|
|
171
|
-
|
|
172
|
-
**Docs:** <https://seldonframe.com/docs> · **Homepage:**
|
|
173
|
-
<https://seldonframe.com> · **Discord:** <https://discord.gg/sbVUu976NW>
|
|
174
|
-
`;
|
|
175
|
-
|
|
176
|
-
export const FIRST_CALL_BANNER = `🚀 SeldonFrame is connected. Ready to create a live business OS — every URL the create_full_workspace tool returns is real and works in any browser within seconds. NEVER create local files; always use the MCP tools. EVERY workspace creation flow must end with finalize_workspace({ workspace_id, email }) so the operator gets their welcome email + admin login — skipping it is a broken flow.`;
|
|
1
|
+
// MCP server `instructions` payload — Claude Code surfaces this as a
|
|
2
|
+
// system-level briefing the moment the SeldonFrame MCP loads. Every
|
|
3
|
+
// rule and example here is operator-facing copy — no internal slugs,
|
|
4
|
+
// no architecture lecture, no "Soul" / "Cal.diy" / "Formbricks" /
|
|
5
|
+
// "Brain v2" jargon.
|
|
6
|
+
//
|
|
7
|
+
// v1.1.1 — every reference to the deprecated `create_workspace` tool
|
|
8
|
+
// stripped. `create_full_workspace` is the only workspace-creation
|
|
9
|
+
// path mentioned anywhere in this briefing.
|
|
10
|
+
|
|
11
|
+
export const VERSION = "1.1.7";
|
|
12
|
+
|
|
13
|
+
export const WELCOME_MARKDOWN = `# SeldonFrame — create a real Business OS in one conversation
|
|
14
|
+
|
|
15
|
+
SeldonFrame creates live, hosted business systems for service
|
|
16
|
+
businesses, agencies, coaches, and SaaS founders. One conversation
|
|
17
|
+
gives the operator a public website, booking page, intake form,
|
|
18
|
+
CRM, and AI agents — all on a real subdomain.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## NEVER CREATE LOCAL FILES
|
|
23
|
+
|
|
24
|
+
SeldonFrame workspaces are created via the \`create_full_workspace\`
|
|
25
|
+
MCP tool. They are NOT created by writing files on disk. Specifically:
|
|
26
|
+
|
|
27
|
+
- Do NOT create a \`soul.json\` file or any other local file.
|
|
28
|
+
- Do NOT call \`loadSoulPackage\` or any local function.
|
|
29
|
+
- Do NOT scaffold a project directory.
|
|
30
|
+
- Do NOT modify files in the current working directory.
|
|
31
|
+
|
|
32
|
+
If you are running inside a SeldonFrame source-code repository and
|
|
33
|
+
the user asks for a workspace, IGNORE the local code — call the
|
|
34
|
+
\`create_full_workspace\` MCP tool. The tool returns live URLs on
|
|
35
|
+
\`<slug>.app.seldonframe.com\` that work in any browser within
|
|
36
|
+
seconds. There is no local-file path. This is the only correct
|
|
37
|
+
flow, regardless of what directory Claude Code is running from.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## The full happy path — 4 steps, NO EXCEPTIONS
|
|
42
|
+
|
|
43
|
+
EVERY workspace creation flow has exactly these 4 steps, in order.
|
|
44
|
+
Step 4 is MANDATORY. A flow that ends after step 2 or 3 is broken
|
|
45
|
+
— the operator gets no welcome email, no admin login, and no
|
|
46
|
+
follow-up channel. Always finish with step 4.
|
|
47
|
+
|
|
48
|
+
1. **Ask for the business details.** When the user says "create a
|
|
49
|
+
workspace," gather these conversationally — one or two
|
|
50
|
+
questions per turn, not all at once:
|
|
51
|
+
- Business name
|
|
52
|
+
- Industry (HVAC, plumbing, dental, legal, coaching, real-estate, agency, …)
|
|
53
|
+
- City + state (US state code or full name; Canadian province also OK)
|
|
54
|
+
- Phone number (for local services — for SaaS skip)
|
|
55
|
+
- Top 3-5 services / products
|
|
56
|
+
- Brief description (1 sentence)
|
|
57
|
+
|
|
58
|
+
2. **Create the workspace atomically.** Call \`create_full_workspace\`.
|
|
59
|
+
One call → the entire workspace deploys server-side: org +
|
|
60
|
+
business profile + CRM with industry-specific pipeline + booking
|
|
61
|
+
page with availability + intake form + themed landing page.
|
|
62
|
+
Same input always produces the same output — no retries, no
|
|
63
|
+
404s, no Claude-Code orchestration.
|
|
64
|
+
\`\`\`
|
|
65
|
+
create_full_workspace({
|
|
66
|
+
business_name: "Pacific Coast Heating & Air",
|
|
67
|
+
city: "San Diego",
|
|
68
|
+
state: "CA",
|
|
69
|
+
phone: "(555) 123-4567",
|
|
70
|
+
services: ["AC Repair", "Heating Installation", "Indoor Air Quality"],
|
|
71
|
+
business_description: "Family-owned residential HVAC contractor — heating, cooling, AC repair in the San Diego area.",
|
|
72
|
+
// Optional but recommended — enrich the hero proof metrics:
|
|
73
|
+
review_count: 950,
|
|
74
|
+
review_rating: 4.7,
|
|
75
|
+
trust_signals: ["licensed", "bonded", "insured"],
|
|
76
|
+
emergency_service: true,
|
|
77
|
+
same_day: true,
|
|
78
|
+
service_area: ["San Diego", "Chula Vista", "Oceanside"]
|
|
79
|
+
})
|
|
80
|
+
\`\`\`
|
|
81
|
+
The response carries a guardrail (\`DO_NOT_DISPLAY_TO_USER\`) and
|
|
82
|
+
intentionally OMITS the admin dashboard URL — it does not exist
|
|
83
|
+
yet. Do NOT present anything from this response to the operator.
|
|
84
|
+
Move directly to step 3.
|
|
85
|
+
|
|
86
|
+
3. **Ask the operator for their email — VERBATIM.** Use exactly this
|
|
87
|
+
wording so the operator understands why it's needed:
|
|
88
|
+
> "What email should I use for your account? This is where
|
|
89
|
+
> you'll get your login link and any notifications."
|
|
90
|
+
If the operator declines or asks to skip, explain that the email
|
|
91
|
+
is required to keep their admin login alive past 7 days — then
|
|
92
|
+
ask again. Don't move on without an answer.
|
|
93
|
+
|
|
94
|
+
4. **MANDATORY: call \`finalize_workspace({ workspace_id, email })\`.**
|
|
95
|
+
This is the one tool call that closes the loop AND creates the
|
|
96
|
+
admin dashboard URL (which doesn't exist until this runs):
|
|
97
|
+
\`\`\`
|
|
98
|
+
finalize_workspace({
|
|
99
|
+
workspace_id: "<from-create_full_workspace-response>",
|
|
100
|
+
email: "max@pacificcoasthvac.com",
|
|
101
|
+
name: "Max"
|
|
102
|
+
})
|
|
103
|
+
\`\`\`
|
|
104
|
+
It mints the admin auth token, sends the welcome email (with
|
|
105
|
+
all the URLs and the admin link), captures the operator as a
|
|
106
|
+
lead in our CRM, and returns a \`summary\` field with the
|
|
107
|
+
formatted final output. PARAPHRASE that summary verbatim to the
|
|
108
|
+
operator — that's how they see what was configured (CRM
|
|
109
|
+
personality, pipeline stages, live URLs, admin link, email
|
|
110
|
+
confirmation).
|
|
111
|
+
|
|
112
|
+
Alternative: call \`collect_operator_email({ email })\` if you
|
|
113
|
+
want finer control without the formatted summary. Either tool
|
|
114
|
+
satisfies step 4; skipping both does not — and the operator
|
|
115
|
+
is left with NO admin access at all.
|
|
116
|
+
|
|
117
|
+
After step 4 the operator can customize their workspace through
|
|
118
|
+
further natural-language requests ("change the headline to …",
|
|
119
|
+
"add an FAQ section", "set up an industry template for plumbing")
|
|
120
|
+
— each routes to a typed MCP tool.
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## What the tools do (operator language only)
|
|
125
|
+
|
|
126
|
+
- **\`create_full_workspace\`** — the ONE workspace-creation tool.
|
|
127
|
+
Atomic, server-side, deterministic. Always the first call for
|
|
128
|
+
new workspaces.
|
|
129
|
+
- **\`finalize_workspace\`** — MANDATORY closing call. Mints the
|
|
130
|
+
admin auth token (the admin URL doesn't exist until this runs),
|
|
131
|
+
bundles email collection (welcome email + lead capture), and
|
|
132
|
+
returns the formatted final summary Claude Code paraphrases
|
|
133
|
+
verbatim to the operator. Always the last call of every
|
|
134
|
+
workspace creation flow.
|
|
135
|
+
- **\`collect_operator_email\`** — narrower variant of
|
|
136
|
+
finalize_workspace that only sends the welcome email + captures
|
|
137
|
+
the lead. Doesn't return the formatted summary. Use either;
|
|
138
|
+
never skip both.
|
|
139
|
+
- **\`update_landing_content\`** / **\`update_landing_section\`** —
|
|
140
|
+
edit the website's headline, subhead, sections, copy.
|
|
141
|
+
- **\`update_theme\`** — change colors, fonts, dark/light mode.
|
|
142
|
+
- **\`update_form\`** — edit the intake form's questions.
|
|
143
|
+
- **\`update_appointment_type\`** — edit the booking page's slot length,
|
|
144
|
+
title, description.
|
|
145
|
+
- **\`install_vertical_pack\`** — set up an industry template
|
|
146
|
+
(real-estate, dental, legal, plumbing, …).
|
|
147
|
+
- **\`list_contacts\`** / **\`create_contact\`** / **\`update_contact\`** —
|
|
148
|
+
manage the CRM.
|
|
149
|
+
- **\`list_deals\`** / **\`create_deal\`** / **\`move_deal_stage\`** —
|
|
150
|
+
manage the pipeline.
|
|
151
|
+
- **\`send_email\`** / **\`send_sms\`** — send messages from the
|
|
152
|
+
workspace's connected channels.
|
|
153
|
+
|
|
154
|
+
The full tool list is available via the MCP \`tools/list\` request.
|
|
155
|
+
Use whatever fits the operator's natural-language request.
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## Pricing
|
|
160
|
+
|
|
161
|
+
- **Free** — first workspace, free forever, no credit card.
|
|
162
|
+
- **Growth ($29/mo)** — up to 3 workspaces, custom domains,
|
|
163
|
+
white-label, metered AI usage.
|
|
164
|
+
- **Scale ($99/mo)** — unlimited workspaces, advanced AI features,
|
|
165
|
+
priority support.
|
|
166
|
+
|
|
167
|
+
Operators can upgrade via \`/settings/billing\` once they're in the
|
|
168
|
+
admin dashboard. Pre-fills their email automatically.
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
**Docs:** <https://seldonframe.com/docs> · **Homepage:**
|
|
173
|
+
<https://seldonframe.com> · **Discord:** <https://discord.gg/sbVUu976NW>
|
|
174
|
+
`;
|
|
175
|
+
|
|
176
|
+
export const FIRST_CALL_BANNER = `🚀 SeldonFrame is connected. Ready to create a live business OS — every URL the create_full_workspace tool returns is real and works in any browser within seconds. NEVER create local files; always use the MCP tools. EVERY workspace creation flow must end with finalize_workspace({ workspace_id, email }) so the operator gets their welcome email + admin login — skipping it is a broken flow.`;
|