@loopops/mcp-server 3.32.0 → 3.34.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/index.js +0 -0
- package/dist/tools/account-master.js +2 -2
- package/dist/tools/deploy.js +34 -0
- package/package.json +7 -8
package/dist/index.js
CHANGED
|
File without changes
|
|
@@ -158,7 +158,7 @@ export function registerAccountMasterTools(server, allowed) {
|
|
|
158
158
|
.min(1)
|
|
159
159
|
.max(64)
|
|
160
160
|
.regex(/^[a-z0-9_]+$/)
|
|
161
|
-
.describe("Attribute name in snake_case (e.g. '
|
|
161
|
+
.describe("Attribute name in snake_case (e.g. 'billing_state', 'industry_naics', 'employee_count'). Must match the `attribute_name` used in resolution rules."),
|
|
162
162
|
value: z
|
|
163
163
|
.string()
|
|
164
164
|
.min(1)
|
|
@@ -218,7 +218,7 @@ export function registerAccountMasterTools(server, allowed) {
|
|
|
218
218
|
.min(1)
|
|
219
219
|
.max(64)
|
|
220
220
|
.regex(/^[a-z0-9_]+$/)
|
|
221
|
-
.describe("Attribute name (e.g. '
|
|
221
|
+
.describe("Attribute name (e.g. 'billing_state'). Must match a prior manual override row."),
|
|
222
222
|
reason: z
|
|
223
223
|
.string()
|
|
224
224
|
.min(3)
|
package/dist/tools/deploy.js
CHANGED
|
@@ -45,12 +45,32 @@ export function registerDeployTools(server, allowed) {
|
|
|
45
45
|
.boolean()
|
|
46
46
|
.optional()
|
|
47
47
|
.describe("Run the model and return proposals without persisting. Useful for previewing what the model would emit before committing to a cycle. Default: false."),
|
|
48
|
+
async: z
|
|
49
|
+
.boolean()
|
|
50
|
+
.optional()
|
|
51
|
+
.describe("Run the placement model as a Modal background job (bypasses Vercel's 5-min function ceiling). Returns immediately with a job_id; poll status via propose_user_assignments_status. Required for rosters >50 hires. Cannot be combined with dryRun:true. Default: false."),
|
|
48
52
|
branch: z
|
|
49
53
|
.string()
|
|
50
54
|
.optional()
|
|
51
55
|
.describe("Git branch to read configs from. Default: main."),
|
|
52
56
|
}, safeTool(async (input) => trpcMutation("mcp.proposeUserAssignments", input)));
|
|
53
57
|
}
|
|
58
|
+
if (allowed.has("propose_user_assignments_status")) {
|
|
59
|
+
server.tool("propose_user_assignments_status", [
|
|
60
|
+
"Read the status of an async user-placement job kicked off by",
|
|
61
|
+
"`propose_user_assignments async:true`. Returns the job's current",
|
|
62
|
+
"status (queued / running / complete / failed), how many proposals",
|
|
63
|
+
"have been written so far, when it started/completed, and the",
|
|
64
|
+
"Modal call id for cross-referencing in the Modal UI. Once the",
|
|
65
|
+
"status is `complete`, run `review_user_assignments` to see the",
|
|
66
|
+
"proposals.",
|
|
67
|
+
].join(" "), {
|
|
68
|
+
jobId: z
|
|
69
|
+
.string()
|
|
70
|
+
.uuid()
|
|
71
|
+
.describe("placement_job.id returned by `propose_user_assignments async:true`."),
|
|
72
|
+
}, safeTool(async (input) => trpcQuery("mcp.proposeUserAssignmentsStatus", input)));
|
|
73
|
+
}
|
|
54
74
|
if (allowed.has("propose_quotas")) {
|
|
55
75
|
server.tool("propose_quotas", [
|
|
56
76
|
"Run the quota model for an open planning cycle. Produces one",
|
|
@@ -452,9 +472,23 @@ export function registerDeployTools(server, allowed) {
|
|
|
452
472
|
preserveCurrentOwnershipOverride: z.boolean().optional().describe("Override config/deploy/account_placement.yaml's preserve_current_ownership policy."),
|
|
453
473
|
accountIds: z.array(z.string().uuid()).optional().describe("Optional restriction; only model these accounts."),
|
|
454
474
|
scenarioId: z.string().optional().describe("Override active scenario."),
|
|
475
|
+
async: z.boolean().optional().describe("Run the placement model as a Modal background job (bypasses Vercel's 5-min function ceiling). Returns immediately with a job_id; poll status via propose_account_assignments_status. Recommended for cycles with >500 accounts. Default: false."),
|
|
455
476
|
branch: z.string().optional(),
|
|
456
477
|
}, safeTool(async (input) => trpcMutation("mcp.proposeAccountAssignments", input)));
|
|
457
478
|
}
|
|
479
|
+
if (allowed.has("propose_account_assignments_status")) {
|
|
480
|
+
server.tool("propose_account_assignments_status", [
|
|
481
|
+
"Read the status of an async account-placement job kicked off by",
|
|
482
|
+
"`propose_account_assignments async:true`. Returns the job's current",
|
|
483
|
+
"status (queued / running / complete / failed), how many proposals",
|
|
484
|
+
"have been written so far, when it started/completed, and the",
|
|
485
|
+
"Modal call id for cross-referencing in the Modal UI. Once the",
|
|
486
|
+
"status is `complete`, run `review_account_assignments` to see the",
|
|
487
|
+
"proposals.",
|
|
488
|
+
].join(" "), {
|
|
489
|
+
jobId: z.string().uuid().describe("placement_job.id returned by `propose_account_assignments async:true`."),
|
|
490
|
+
}, safeTool(async (input) => trpcQuery("mcp.proposeAccountAssignmentsStatus", input)));
|
|
491
|
+
}
|
|
458
492
|
if (allowed.has("review_account_assignments")) {
|
|
459
493
|
server.tool("review_account_assignments", [
|
|
460
494
|
"List Phase 3 account placement proposals for a cycle. Subtree-",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loopops/mcp-server",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.34.0",
|
|
4
4
|
"description": "Loop Operations MCP Server — AI skills for RevOps",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"type": "module",
|
|
@@ -20,12 +20,6 @@
|
|
|
20
20
|
"publishConfig": {
|
|
21
21
|
"access": "public"
|
|
22
22
|
},
|
|
23
|
-
"scripts": {
|
|
24
|
-
"build": "tsc",
|
|
25
|
-
"dev": "tsx src/index.ts",
|
|
26
|
-
"start": "node dist/index.js",
|
|
27
|
-
"prepublishOnly": "pnpm build"
|
|
28
|
-
},
|
|
29
23
|
"dependencies": {
|
|
30
24
|
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
31
25
|
"zod": "^3.24.4"
|
|
@@ -34,5 +28,10 @@
|
|
|
34
28
|
"@types/node": "^22.15.21",
|
|
35
29
|
"tsx": "^4.19.4",
|
|
36
30
|
"typescript": "^5.8.3"
|
|
31
|
+
},
|
|
32
|
+
"scripts": {
|
|
33
|
+
"build": "tsc",
|
|
34
|
+
"dev": "tsx src/index.ts",
|
|
35
|
+
"start": "node dist/index.js"
|
|
37
36
|
}
|
|
38
|
-
}
|
|
37
|
+
}
|