@loopops/mcp-server 3.49.0 → 3.51.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/dist/tools/deal-prep.js +17 -0
- package/dist/tools/reporting.js +7 -23
- package/package.json +1 -2
package/dist/tools/deal-prep.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
1
2
|
import { trpcQuery } from "../api-client.js";
|
|
2
3
|
import { safeTool } from "./_helpers.js";
|
|
3
4
|
/**
|
|
@@ -20,4 +21,20 @@ export function registerDealPrepTools(server, allowed) {
|
|
|
20
21
|
if (allowed.has("deal_prep_context")) {
|
|
21
22
|
server.tool("deal_prep_context", "Loads Loop's deal-prep playbook: pre-call / during / post-call workflow, MEDDPICC field map (Salesforce API names), progression rules (Not Started → Identified → Validated → Confirmed; score 0-3 per dimension), health bands, conversation patterns, and follow-up actions. Call this ONCE per deal-prep conversation before doing anything else. The deal_prep skill auto-loads this on entry.", {}, safeTool(async () => trpcQuery("mcp.dealPrepContext")));
|
|
22
23
|
}
|
|
24
|
+
if (allowed.has("opportunity_meddpicc")) {
|
|
25
|
+
server.tool("opportunity_meddpicc", "Read all 8 MEDDPICC dimensions + score + band + biggest-gap callout for an Opportunity. Loop-side read via the service account — guaranteed available even when salesforce-hosted MCP is reconnecting. Use this in the pre-call phase of /deal_prep. Look up by opportunityId / opportunityName / accountName (account name resolves to the most recently modified open opp). For WRITES, use salesforce-hosted updateSobjectRecord — per-user OAuth preserves LastModifiedById.", {
|
|
26
|
+
opportunityId: z
|
|
27
|
+
.string()
|
|
28
|
+
.regex(/^006/)
|
|
29
|
+
.optional()
|
|
30
|
+
.describe("SF Opportunity Id (006...). Provide one of: opportunityId / opportunityName / accountName."),
|
|
31
|
+
opportunityName: z.string().optional(),
|
|
32
|
+
accountName: z
|
|
33
|
+
.string()
|
|
34
|
+
.min(2)
|
|
35
|
+
.max(200)
|
|
36
|
+
.optional()
|
|
37
|
+
.describe("Customer account name (substring). Resolves to most recent open opp."),
|
|
38
|
+
}, safeTool(async (args) => trpcQuery("mcp.opportunityMeddpicc", args)));
|
|
39
|
+
}
|
|
23
40
|
}
|
package/dist/tools/reporting.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { trpcMutation, trpcQuery } from "../api-client.js";
|
|
3
3
|
import { safeTool } from "./_helpers.js";
|
|
4
|
-
import { safeToolUi } from "./_html-ui.js";
|
|
5
4
|
import { rangeSchema, salesforceLeadIdSchema, } from "./_schemas.js";
|
|
6
5
|
export function registerReportingTools(server, allowed) {
|
|
7
6
|
// loop_health retired 2026-05-06 — replaced by ClickHouse parameterized
|
|
@@ -51,27 +50,12 @@ export function registerReportingTools(server, allowed) {
|
|
|
51
50
|
.enum(["concise", "standard", "detailed"])
|
|
52
51
|
.optional()
|
|
53
52
|
.describe("Output verbosity. concise ~400 words; standard ~900 (default); detailed ~1500."),
|
|
54
|
-
},
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
});
|
|
62
|
-
// Pretty title for the document tab + heading.
|
|
63
|
-
const conversationLabel = conversationType
|
|
64
|
-
.split("_")
|
|
65
|
-
.map((s) => s.charAt(0).toUpperCase() + s.slice(1))
|
|
66
|
-
.join(" ");
|
|
67
|
-
return {
|
|
68
|
-
markdown,
|
|
69
|
-
title: `${accountDomain} — ${conversationLabel} prep`,
|
|
70
|
-
meta: meetingContext
|
|
71
|
-
? `Meeting context: ${meetingContext}`
|
|
72
|
-
: undefined,
|
|
73
|
-
uri: `loop://briefs/${accountDomain}/${conversationType}/${Date.now()}`,
|
|
74
|
-
};
|
|
75
|
-
}));
|
|
53
|
+
}, safeTool(async ({ accountDomain, conversationType, meetingContext, localContent, style }) => trpcMutation("mcp.createPrepBrief", {
|
|
54
|
+
accountDomain,
|
|
55
|
+
conversationType,
|
|
56
|
+
meetingContext,
|
|
57
|
+
localContent,
|
|
58
|
+
style: style ?? "standard",
|
|
59
|
+
})));
|
|
76
60
|
}
|
|
77
61
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loopops/mcp-server",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.51.0",
|
|
4
4
|
"description": "Loop Operations MCP Server — AI skills for RevOps",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"type": "module",
|
|
@@ -28,7 +28,6 @@
|
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
31
|
-
"marked": "^18.0.4",
|
|
32
31
|
"yaml": "^2.6.0",
|
|
33
32
|
"zod": "^3.24.4"
|
|
34
33
|
},
|