@seldonframe/mcp 1.0.2 → 1.0.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 +2 -2
- package/src/tools.js +61 -3
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seldonframe/mcp",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "MCP server for SeldonFrame — AI-native Business OS platform. One command creates a real hosted workspace with CRM, booking, intake, and Brain v2.",
|
|
3
|
+
"version": "1.0.3",
|
|
4
|
+
"description": "MCP server for SeldonFrame — AI-native Business OS platform. One command creates a real hosted workspace with CRM, booking, intake, and Brain v2. v1.0.3: surfaces admin URL prominently in create_workspace response (no signup required to access dashboard).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"seldonframe-mcp": "src/index.js"
|
package/src/tools.js
CHANGED
|
@@ -63,6 +63,10 @@ export const TOOLS = [
|
|
|
63
63
|
} else {
|
|
64
64
|
setDefaultWorkspace(id);
|
|
65
65
|
}
|
|
66
|
+
// C6: surface the bearer-token admin URL as the most prominent line
|
|
67
|
+
// in the response. Operators paste it into their browser and land
|
|
68
|
+
// directly on the dashboard — no signup, no login, no OAuth.
|
|
69
|
+
const adminUrl = result.admin_url ?? null;
|
|
66
70
|
const payload = {
|
|
67
71
|
ok: true,
|
|
68
72
|
workspace: {
|
|
@@ -72,13 +76,23 @@ export const TOOLS = [
|
|
|
72
76
|
tier: ws.tier ?? "free",
|
|
73
77
|
created_at: ws.created_at,
|
|
74
78
|
},
|
|
79
|
+
// ⚡ Admin Dashboard (bookmark this!): the one URL operators need.
|
|
80
|
+
admin_url: adminUrl,
|
|
81
|
+
admin_url_expires_at: result.bearer_token_expires_at ?? null,
|
|
82
|
+
admin_url_message: adminUrl
|
|
83
|
+
? `⚡ Admin Dashboard (bookmark this!): ${adminUrl}\nClick to open the dashboard — no signup needed. Token expires in 7 days; re-mint with list_workspaces({}) when it does.`
|
|
84
|
+
: null,
|
|
75
85
|
urls: result.urls ?? ws.urls ?? null,
|
|
86
|
+
public_urls: result.public_urls ?? null,
|
|
76
87
|
installed: result.installed ?? ["crm", "caldiy-booking", "formbricks-intake", "brain-v2"],
|
|
77
88
|
next: [
|
|
89
|
+
adminUrl
|
|
90
|
+
? `Open the admin dashboard: ${adminUrl} (paste into your browser; no signup needed)`
|
|
91
|
+
: null,
|
|
78
92
|
"install_vertical_pack({ pack: 'real-estate' }) // or 'dental', 'legal'",
|
|
79
93
|
"fetch_source_for_soul({ url: 'https://yoursite.com' }) → submit_soul({ soul })",
|
|
80
94
|
"get_workspace_snapshot({}) — read workspace state to reason about next steps",
|
|
81
|
-
],
|
|
95
|
+
].filter(Boolean),
|
|
82
96
|
};
|
|
83
97
|
return firstEver ? withFirstCallBanner(payload) : payload;
|
|
84
98
|
},
|
|
@@ -250,7 +264,7 @@ export const TOOLS = [
|
|
|
250
264
|
{
|
|
251
265
|
name: "update_landing_content",
|
|
252
266
|
description:
|
|
253
|
-
"Rewrite the workspace's public landing page
|
|
267
|
+
"Rewrite the workspace's public landing page hero — headline, subhead, and primary CTA label. C3.4 made this blueprint-aware: the operator's edit lands without losing any of the renderer's visual polish (typography, layered-shadow buttons, animations, etc.). Use this for the most common copy edits; for granular per-section / per-item edits use update_landing_section.",
|
|
254
268
|
inputSchema: obj(
|
|
255
269
|
{
|
|
256
270
|
headline: str("Main hero heading. Keep short; 1 line."),
|
|
@@ -258,7 +272,6 @@ export const TOOLS = [
|
|
|
258
272
|
cta_label: str("Primary call-to-action button text, e.g. 'Book a call'."),
|
|
259
273
|
workspace_id: str("Optional workspace override."),
|
|
260
274
|
},
|
|
261
|
-
["headline", "subhead", "cta_label"],
|
|
262
275
|
),
|
|
263
276
|
handler: async (a) => {
|
|
264
277
|
const ws = wsOrDefault(a.workspace_id);
|
|
@@ -273,6 +286,51 @@ export const TOOLS = [
|
|
|
273
286
|
});
|
|
274
287
|
},
|
|
275
288
|
},
|
|
289
|
+
{
|
|
290
|
+
name: "update_landing_section",
|
|
291
|
+
description:
|
|
292
|
+
"Granular per-field landing edit — change any single slot in any section of the blueprint-rendered landing page. Use when update_landing_content's three fields aren't enough. Section types: emergency-strip, hero, trust-strip, services-grid, about, mid-cta, testimonials, service-area, faq, footer. Field is a dot-segmented path on that section (e.g. 'headline', 'subhead', 'items.0.title', 'items.2.answer', 'showHours'). Value is the new value (string for copy, boolean for flags, etc.).",
|
|
293
|
+
inputSchema: obj(
|
|
294
|
+
{
|
|
295
|
+
section: {
|
|
296
|
+
type: "string",
|
|
297
|
+
enum: [
|
|
298
|
+
"emergency-strip",
|
|
299
|
+
"hero",
|
|
300
|
+
"trust-strip",
|
|
301
|
+
"services-grid",
|
|
302
|
+
"about",
|
|
303
|
+
"mid-cta",
|
|
304
|
+
"testimonials",
|
|
305
|
+
"service-area",
|
|
306
|
+
"faq",
|
|
307
|
+
"footer",
|
|
308
|
+
],
|
|
309
|
+
},
|
|
310
|
+
field: str(
|
|
311
|
+
"Dot-segmented field path on the section. Examples: 'headline', 'subhead', 'items.0.title', 'items.2.answer', 'showHours'."
|
|
312
|
+
),
|
|
313
|
+
value: {
|
|
314
|
+
description:
|
|
315
|
+
"New value for the field. String for copy, number for ratings, boolean for flags, object/array for richer slots.",
|
|
316
|
+
},
|
|
317
|
+
workspace_id: str("Optional workspace override."),
|
|
318
|
+
},
|
|
319
|
+
["section", "field", "value"],
|
|
320
|
+
),
|
|
321
|
+
handler: async (a) => {
|
|
322
|
+
const ws = wsOrDefault(a.workspace_id);
|
|
323
|
+
return api("POST", "/landing/section/update", {
|
|
324
|
+
body: {
|
|
325
|
+
section: a.section,
|
|
326
|
+
field: a.field,
|
|
327
|
+
value: a.value,
|
|
328
|
+
workspace_id: ws,
|
|
329
|
+
},
|
|
330
|
+
workspace_id: ws,
|
|
331
|
+
});
|
|
332
|
+
},
|
|
333
|
+
},
|
|
276
334
|
// Note: `customize_intake_form` used to live here pointing at POST
|
|
277
335
|
// /api/v1/intake/customize. Phase 2.d unified it under update_form; the
|
|
278
336
|
// alias that preserves the old name now lives in the Phase 2.d block at
|