@loopops/mcp-server 3.54.0 → 3.56.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.
@@ -1,5 +1,5 @@
1
1
  import { z } from "zod";
2
- import { trpcQuery } from "../api-client.js";
2
+ import { trpcMutation, trpcQuery } from "../api-client.js";
3
3
  import { safeTool } from "./_helpers.js";
4
4
  /**
5
5
  * Prospecting tools — surface for the `/prospecting` skill.
@@ -22,6 +22,24 @@ export function registerProspectingTools(server, allowed) {
22
22
  if (allowed.has("prospecting_context")) {
23
23
  server.tool("prospecting_context", "Loads Loop's prospecting playbook: four-phase workflow (prioritize → understand → generate → review → activate), prioritization heuristics (ICP weight 0.7 + freshness 0.3 − open-opp/open-sequence penalties), generation guardrails, approval voice, conversation patterns, handoffs to /deal_prep + /cpq_coach + /account_curate. Call ONCE per prospecting conversation. The /prospecting skill auto-loads this on entry.", {}, safeTool(async () => trpcQuery("mcp.prospectingContext")));
24
24
  }
25
+ if (allowed.has("generate_sequence_for_account")) {
26
+ server.tool("generate_sequence_for_account", "Generate a draft prospecting email sequence for an account that doesn't have one. Single Sonnet 4.6 call grounded in AM firmographics + rep-provided context. Inserts into engage_sequences with status='draft'; rep reviews via my_sequences / review_sequence / approve_sequence. REFUSES if the account has an open opportunity (use /deal_prep instead) or an existing draft/approved sequence. ~$0.02/call. Always confirm with rep before firing — don't auto-generate on first mention of an account.", {
27
+ accountIdentifier: z
28
+ .string()
29
+ .min(2)
30
+ .max(200)
31
+ .describe("Account UUID, primary domain, SF Account Id (001…), or partial name. Must resolve to exactly one account."),
32
+ context: z
33
+ .string()
34
+ .max(2000)
35
+ .optional()
36
+ .describe("Optional rep-provided grounding: recent press release, champion mention, observed buying signal, specific use case. Strongly recommended — generic firmographic-only sequences perform poorly."),
37
+ playId: z
38
+ .enum(["enterprise_intro", "mid_market_outbound", "fallback_nurture"])
39
+ .optional()
40
+ .describe("Override the auto-selected play (default: enterprise_intro if employees ≥500, mid_market_outbound 100-500, else fallback_nurture)."),
41
+ }, safeTool(async (args) => trpcMutation("mcp.generateSequenceForAccount", args)));
42
+ }
25
43
  if (allowed.has("prospecting_priorities")) {
26
44
  server.tool("prospecting_priorities", "Rank target accounts in caller's territory for outbound prospecting. Hybrid CH query joining am.account_profile + salesforce.opportunity (excludes open opps) + engage_sequences (flags pending). Scope defaults to caller's own territory; managers can pass 'subtree' or {repId}. Returns top-N markdown table with ICP score + band, owner, why (reason line), and suggested action (Generate or Review existing sequence).", {
27
45
  scope: z
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loopops/mcp-server",
3
- "version": "3.54.0",
3
+ "version": "3.56.0",
4
4
  "description": "Loop Operations MCP Server — AI skills for RevOps",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",