@seldonframe/mcp 1.57.0 → 1.58.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 +59 -59
- package/src/finalize-summary.js +12 -2
- package/src/tools.js +9 -2
- package/src/welcome.js +1 -1
package/package.json
CHANGED
|
@@ -1,59 +1,59 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@seldonframe/mcp",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"mcpName": "io.github.seldonframe/seldonframe-mcp",
|
|
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
|
-
"license": "AGPL-3.0-or-later",
|
|
7
|
-
"type": "module",
|
|
8
|
-
"bin": {
|
|
9
|
-
"seldonframe-mcp": "src/index.js"
|
|
10
|
-
},
|
|
11
|
-
"files": [
|
|
12
|
-
"src",
|
|
13
|
-
"README.md"
|
|
14
|
-
],
|
|
15
|
-
"engines": {
|
|
16
|
-
"node": ">=18"
|
|
17
|
-
},
|
|
18
|
-
"scripts": {
|
|
19
|
-
"start": "node src/index.js",
|
|
20
|
-
"check:syntax": "node --check --input-type=module < src/index.js && node --check --input-type=module < src/client.js && node --check --input-type=module < src/tools.js && node --check --input-type=module < src/welcome.js",
|
|
21
|
-
"prepublishOnly": "npm run check:syntax"
|
|
22
|
-
},
|
|
23
|
-
"dependencies": {
|
|
24
|
-
"@modelcontextprotocol/sdk": "^1.0.4"
|
|
25
|
-
},
|
|
26
|
-
"keywords": [
|
|
27
|
-
"mcp",
|
|
28
|
-
"model-context-protocol",
|
|
29
|
-
"seldonframe",
|
|
30
|
-
"ai",
|
|
31
|
-
"agents",
|
|
32
|
-
"business-os",
|
|
33
|
-
"claude-code",
|
|
34
|
-
"crm",
|
|
35
|
-
"gohighlevel-alternative",
|
|
36
|
-
"gohighlevel",
|
|
37
|
-
"agency",
|
|
38
|
-
"whitelabel",
|
|
39
|
-
"partner-agency",
|
|
40
|
-
"booking",
|
|
41
|
-
"intake-form",
|
|
42
|
-
"landing-page",
|
|
43
|
-
"local-service-business",
|
|
44
|
-
"sms",
|
|
45
|
-
"twilio",
|
|
46
|
-
"ai-receptionist",
|
|
47
|
-
"ai-chatbot",
|
|
48
|
-
"missed-call"
|
|
49
|
-
],
|
|
50
|
-
"homepage": "https://seldonframe.com",
|
|
51
|
-
"repository": {
|
|
52
|
-
"type": "git",
|
|
53
|
-
"url": "https://github.com/seldonframe/seldonframe",
|
|
54
|
-
"directory": "skills/mcp-server"
|
|
55
|
-
},
|
|
56
|
-
"publishConfig": {
|
|
57
|
-
"access": "public"
|
|
58
|
-
}
|
|
59
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@seldonframe/mcp",
|
|
3
|
+
"version": "1.58.0",
|
|
4
|
+
"mcpName": "io.github.seldonframe/seldonframe-mcp",
|
|
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
|
+
"license": "AGPL-3.0-or-later",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"bin": {
|
|
9
|
+
"seldonframe-mcp": "src/index.js"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"src",
|
|
13
|
+
"README.md"
|
|
14
|
+
],
|
|
15
|
+
"engines": {
|
|
16
|
+
"node": ">=18"
|
|
17
|
+
},
|
|
18
|
+
"scripts": {
|
|
19
|
+
"start": "node src/index.js",
|
|
20
|
+
"check:syntax": "node --check --input-type=module < src/index.js && node --check --input-type=module < src/client.js && node --check --input-type=module < src/tools.js && node --check --input-type=module < src/welcome.js",
|
|
21
|
+
"prepublishOnly": "npm run check:syntax"
|
|
22
|
+
},
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"@modelcontextprotocol/sdk": "^1.0.4"
|
|
25
|
+
},
|
|
26
|
+
"keywords": [
|
|
27
|
+
"mcp",
|
|
28
|
+
"model-context-protocol",
|
|
29
|
+
"seldonframe",
|
|
30
|
+
"ai",
|
|
31
|
+
"agents",
|
|
32
|
+
"business-os",
|
|
33
|
+
"claude-code",
|
|
34
|
+
"crm",
|
|
35
|
+
"gohighlevel-alternative",
|
|
36
|
+
"gohighlevel",
|
|
37
|
+
"agency",
|
|
38
|
+
"whitelabel",
|
|
39
|
+
"partner-agency",
|
|
40
|
+
"booking",
|
|
41
|
+
"intake-form",
|
|
42
|
+
"landing-page",
|
|
43
|
+
"local-service-business",
|
|
44
|
+
"sms",
|
|
45
|
+
"twilio",
|
|
46
|
+
"ai-receptionist",
|
|
47
|
+
"ai-chatbot",
|
|
48
|
+
"missed-call"
|
|
49
|
+
],
|
|
50
|
+
"homepage": "https://seldonframe.com",
|
|
51
|
+
"repository": {
|
|
52
|
+
"type": "git",
|
|
53
|
+
"url": "git+https://github.com/seldonframe/seldonframe.git",
|
|
54
|
+
"directory": "skills/mcp-server"
|
|
55
|
+
},
|
|
56
|
+
"publishConfig": {
|
|
57
|
+
"access": "public"
|
|
58
|
+
}
|
|
59
|
+
}
|
package/src/finalize-summary.js
CHANGED
|
@@ -15,9 +15,16 @@
|
|
|
15
15
|
* @param {string|null} args.aestheticArchetype — workspace's classified
|
|
16
16
|
* archetype (from snapshot.theme.aestheticArchetype). Used in the
|
|
17
17
|
* closing landing-page nudge.
|
|
18
|
+
* @param {string|null} [args.adminUrl] — bearer-token-scoped admin URL
|
|
19
|
+
* (built in tools.js as `${appHost}/admin/${workspaceId}?token=${bearer}`,
|
|
20
|
+
* same variable the welcome-email path already uses). Takes priority
|
|
21
|
+
* over snapshot.ops_stack.admin_url, which is tokenless (the snapshot
|
|
22
|
+
* endpoint has no bearer to mint one) and 404s at /admin/invalid if
|
|
23
|
+
* printed as-is. Falls back to the tokenless value only if omitted, so
|
|
24
|
+
* existing callers that don't pass it keep working.
|
|
18
25
|
* @returns {string} the formatted operator summary
|
|
19
26
|
*/
|
|
20
|
-
export function buildFinalizeSummary({ snapshot, durationSec, aestheticArchetype }) {
|
|
27
|
+
export function buildFinalizeSummary({ snapshot, durationSec, aestheticArchetype, adminUrl = null }) {
|
|
21
28
|
const ws = snapshot.workspace ?? {};
|
|
22
29
|
const businessName = ws.name ?? "Your workspace";
|
|
23
30
|
const chatbot = snapshot.chatbot ?? null;
|
|
@@ -57,7 +64,10 @@ export function buildFinalizeSummary({ snapshot, durationSec, aestheticArchetype
|
|
|
57
64
|
// Ops stack URLs
|
|
58
65
|
lines.push(`📅 Booking: ${opsStack.booking_url ?? snapshot.public_urls?.book ?? ""}`);
|
|
59
66
|
lines.push(`📝 Intake: ${opsStack.intake_url ?? snapshot.public_urls?.intake ?? ""}`);
|
|
60
|
-
|
|
67
|
+
// The token-bearing adminUrl (computed in tools.js from the workspace's
|
|
68
|
+
// bearer) is required to open the dashboard — the snapshot's
|
|
69
|
+
// ops_stack.admin_url has no token and 404s at /admin/invalid if clicked.
|
|
70
|
+
lines.push(`🔧 Admin: ${adminUrl ?? opsStack.admin_url ?? ""}`);
|
|
61
71
|
lines.push("");
|
|
62
72
|
|
|
63
73
|
// 7-automation callout
|
package/src/tools.js
CHANGED
|
@@ -914,6 +914,9 @@ export const TOOLS = [
|
|
|
914
914
|
snapshot,
|
|
915
915
|
durationSec: 0, // smoke test reports actual duration via Vercel logs, not the summary text
|
|
916
916
|
aestheticArchetype,
|
|
917
|
+
adminUrl, // token-bearing (same variable the welcome-email body uses below) —
|
|
918
|
+
// without this the summary's Admin line falls back to the snapshot's
|
|
919
|
+
// tokenless ops_stack.admin_url and 404s at /admin/invalid when clicked.
|
|
917
920
|
});
|
|
918
921
|
|
|
919
922
|
return {
|
|
@@ -5086,11 +5089,13 @@ export const TOOLS = [
|
|
|
5086
5089
|
error: "publish_failed_but_agent_created",
|
|
5087
5090
|
agent: createResult.agent,
|
|
5088
5091
|
embed_url: createResult.embed_url,
|
|
5089
|
-
|
|
5092
|
+
turn_api_url: createResult.turn_url,
|
|
5093
|
+
turn_api_method: "POST",
|
|
5090
5094
|
publish_detail: publishResult,
|
|
5091
5095
|
steps,
|
|
5092
5096
|
next_steps: [
|
|
5093
5097
|
`Agent ${agentId} was created but couldn't be published to test. Call publish_agent({ agent_id: '${agentId}', status: 'test' }) manually, or check the dashboard at /agents/${agentId}`,
|
|
5098
|
+
`Turn API (POST) — this is not a clickable link, it's a POST-only endpoint: curl -sX POST ${createResult.turn_url} -H "Content-Type: application/json" -d '{"message":"hi"}'`,
|
|
5094
5099
|
],
|
|
5095
5100
|
};
|
|
5096
5101
|
}
|
|
@@ -5114,7 +5119,8 @@ export const TOOLS = [
|
|
|
5114
5119
|
ok: true,
|
|
5115
5120
|
agent: createResult.agent,
|
|
5116
5121
|
embed_url: createResult.embed_url,
|
|
5117
|
-
|
|
5122
|
+
turn_api_url: createResult.turn_url,
|
|
5123
|
+
turn_api_method: "POST",
|
|
5118
5124
|
dashboard_url: dashboardUrl,
|
|
5119
5125
|
sandbox_url: `${dashboardUrl}/test`,
|
|
5120
5126
|
llm_mode: llmMode,
|
|
@@ -5125,6 +5131,7 @@ export const TOOLS = [
|
|
|
5125
5131
|
`3. When ready, publish to live: call publish_agent({ agent_id: '${agentId}', status: 'live' }) — auto-runs eval gate, requires ≥87.5% pass.`,
|
|
5126
5132
|
`4. Add to the operator's SF-hosted landing page (one MCP call): embed_chatbot_on_workspace_landing({ workspace_id, agent_id: '${agentId}' }) — the chatbot bubble appears bottom-right on every public page. (For an external website the operator owns, paste this snippet manually: <script src="${createResult.embed_url}" async></script>)`,
|
|
5127
5133
|
`5. ${llmKeyNote}`,
|
|
5134
|
+
`6. Turn API (POST) — not a clickable link, it's a POST-only endpoint: curl -sX POST ${createResult.turn_url} -H "Content-Type: application/json" -d '{"message":"hi"}'`,
|
|
5128
5135
|
],
|
|
5129
5136
|
};
|
|
5130
5137
|
},
|
package/src/welcome.js
CHANGED
|
@@ -109,7 +109,7 @@ of v1.28.0 this is **ONE tool call**:
|
|
|
109
109
|
// /settings/integrations/llm. Pass explicitly only when you need
|
|
110
110
|
// per-workspace billing isolation (white-label / agency).
|
|
111
111
|
})
|
|
112
|
-
// → returns { agent, embed_url,
|
|
112
|
+
// → returns { agent, embed_url, turn_api_url, turn_api_method: "POST", dashboard_url, llm_mode, next_steps }
|
|
113
113
|
// Internally: creates agent, publishes to test. Skips set_llm_key when
|
|
114
114
|
// no key supplied (platform fallback in lib/ai/client.ts handles inference).
|
|
115
115
|
|