@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.
- package/dist/api-client.js +8 -1
- package/dist/index.js +2 -0
- package/dist/tools/deal-prep.d.ts +18 -0
- package/dist/tools/deal-prep.js +23 -0
- package/package.json +1 -1
package/dist/api-client.js
CHANGED
|
@@ -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
|
-
|
|
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
|
+
}
|