@loopops/mcp-server 3.46.0 → 3.48.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.
@@ -32,7 +32,14 @@ let refreshToken = process.env.OKTA_REFRESH_TOKEN;
32
32
  // Access token cache (in-memory, subprocess-lifetime).
33
33
  let cachedAccessToken = null;
34
34
  let cachedAccessTokenExpiresAt = 0; // epoch ms
35
- const DEFAULT_TIMEOUT_MS = Number(process.env.API_TIMEOUT_MS || 30_000);
35
+ // 120s default. The fast tools (cpq_context, find_opportunity, my_quotes,
36
+ // account_show, etc.) return in <2s; the slow tools (create_prep_brief,
37
+ // draft_quote_from_intent) chain web search + Claude composition and can
38
+ // legitimately take 30-90s. The old 30s default tripped users on the slow
39
+ // tools when their MCP client config didn't override. Override via
40
+ // API_TIMEOUT_MS env (Claude Code CLI sets 300000 from `loop-ops login`;
41
+ // Desktop config should mirror that).
42
+ const DEFAULT_TIMEOUT_MS = Number(process.env.API_TIMEOUT_MS || 120_000);
36
43
  const SERVER_NAME = "loop-operations";
37
44
  // Refresh a little early so requests don't race token expiry at the edge.
38
45
  const ACCESS_TOKEN_EARLY_REFRESH_MS = 60 * 1000; // 1 minute
package/dist/index.js CHANGED
@@ -18,6 +18,7 @@ import { registerAccountMasterTools } from "./tools/account-master.js";
18
18
  import { registerPeopleMasterTools } from "./tools/people-master.js";
19
19
  import { registerScoringTools } from "./tools/scoring.js";
20
20
  import { registerCpqTools } from "./tools/cpq.js";
21
+ import { registerDealPrepTools } from "./tools/deal-prep.js";
21
22
  import { registerSfdcSyncTools } from "./tools/sfdc-sync.js";
22
23
  import { registerTalTools } from "./tools/tal.js";
23
24
  import { parseSkillModesResponse } from "./skills/loader.js";
@@ -71,6 +72,7 @@ registerTalTools(server, allowedSkills);
71
72
  registerScoringTools(server, allowedSkills);
72
73
  registerSfdcSyncTools(server, allowedSkills);
73
74
  registerCpqTools(server, allowedSkills);
75
+ registerDealPrepTools(server, allowedSkills);
74
76
  // Skills framework — fetch role-visible skills from the Loop API and
75
77
  // register each as a server-provided MCP prompt. Surfaces in the
76
78
  // client's `/` menu and bundles (system prompt + tool emphasis +
@@ -0,0 +1,18 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ /**
3
+ * Deal-prep tools — surface for the `deal_prep` skill.
4
+ *
5
+ * The skill (config/mcp/skills.yaml) bundles this tool with a system
6
+ * prompt + the existing prep + pipeline tools. When a user invokes
7
+ * /deal_prep, Claude auto-loads `deal_prep_context` to ground in
8
+ * Loop's MEDDPICC playbook before doing anything.
9
+ *
10
+ * Other tools the deal_prep skill emphasizes come from elsewhere:
11
+ * - create_prep_brief (tools/eng.ts) — the brief artifact
12
+ * - find_opportunity (tools/cpq.ts) — resolve account name → opp Id
13
+ * - review_stale_pipeline (tools/reporting.ts) — pipeline gaps
14
+ * - account_show + walk_account_hierarchy (tools/account-master.ts)
15
+ * - mcp__salesforce-hosted__soqlQuery — read MEDDPICC fields
16
+ * - mcp__salesforce-hosted__updateSobjectRecord — write MEDDPICC + Tasks
17
+ */
18
+ export declare function registerDealPrepTools(server: McpServer, allowed: Set<string>): void;
@@ -0,0 +1,23 @@
1
+ import { trpcQuery } from "../api-client.js";
2
+ import { safeTool } from "./_helpers.js";
3
+ /**
4
+ * Deal-prep tools — surface for the `deal_prep` skill.
5
+ *
6
+ * The skill (config/mcp/skills.yaml) bundles this tool with a system
7
+ * prompt + the existing prep + pipeline tools. When a user invokes
8
+ * /deal_prep, Claude auto-loads `deal_prep_context` to ground in
9
+ * Loop's MEDDPICC playbook before doing anything.
10
+ *
11
+ * Other tools the deal_prep skill emphasizes come from elsewhere:
12
+ * - create_prep_brief (tools/eng.ts) — the brief artifact
13
+ * - find_opportunity (tools/cpq.ts) — resolve account name → opp Id
14
+ * - review_stale_pipeline (tools/reporting.ts) — pipeline gaps
15
+ * - account_show + walk_account_hierarchy (tools/account-master.ts)
16
+ * - mcp__salesforce-hosted__soqlQuery — read MEDDPICC fields
17
+ * - mcp__salesforce-hosted__updateSobjectRecord — write MEDDPICC + Tasks
18
+ */
19
+ export function registerDealPrepTools(server, allowed) {
20
+ if (allowed.has("deal_prep_context")) {
21
+ 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
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loopops/mcp-server",
3
- "version": "3.46.0",
3
+ "version": "3.48.0",
4
4
  "description": "Loop Operations MCP Server — AI skills for RevOps",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",