conduyt-mcp 4.18.0 → 4.20.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/client.js +8 -0
- package/dist/tools/deals.js +1 -0
- package/dist/tools/users.js +6 -0
- package/package.json +1 -1
- package/scripts/coverage-manifest.json +16 -1
- package/scripts/coverage-matrix.json +124 -4
package/dist/client.js
CHANGED
|
@@ -150,6 +150,14 @@ export class ConduytClient {
|
|
|
150
150
|
const json = JSON.parse(text);
|
|
151
151
|
if (json?.error)
|
|
152
152
|
msg = json.error;
|
|
153
|
+
// Structured error details (e.g. STAGE_REQUIREMENTS carries
|
|
154
|
+
// lostReasonOptions) must reach the agent, or a "must be one of the
|
|
155
|
+
// configured options" error is unactionable. Bounded so a pathological
|
|
156
|
+
// body can't bloat the message.
|
|
157
|
+
const details = Object.fromEntries(Object.entries(json ?? {}).filter(([k]) => k !== "error"));
|
|
158
|
+
if (Object.keys(details).length > 0) {
|
|
159
|
+
msg = `${msg} ${JSON.stringify(details).slice(0, 1000)}`;
|
|
160
|
+
}
|
|
153
161
|
}
|
|
154
162
|
catch {
|
|
155
163
|
if (text)
|
package/dist/tools/deals.js
CHANGED
|
@@ -104,6 +104,7 @@ export function registerDealTools(server, client) {
|
|
|
104
104
|
expectedCloseDate: z.string().optional().describe("Expected close date (ISO 8601)"),
|
|
105
105
|
assignedTo: z.string().optional().describe("Reassign to user (owner) UUID"),
|
|
106
106
|
source: z.string().trim().min(1).max(500).nullable().optional().describe("Attribution source for THIS deal (the trigger that produced it) — distinct from the contact's first-touch source. Pass null to clear it; a blank string is rejected. 1-500 chars."),
|
|
107
|
+
lostReason: z.string().optional().describe("Reason for a lost/disqualified deal. Some stages REQUIRE this on entry (the move fails with code STAGE_REQUIREMENTS listing lostReasonOptions when the stage has a configured dropdown — resend with one of those exact values)."),
|
|
107
108
|
customFields: z.record(z.any()).optional().describe("Structured custom-field values to merge, keyed by field key"),
|
|
108
109
|
}, async ({ id, ...updates }) => {
|
|
109
110
|
const result = await client.patch(`/api/v1/deals/${id}`, updates);
|
package/dist/tools/users.js
CHANGED
|
@@ -41,6 +41,12 @@ export function registerUserTools(server, client) {
|
|
|
41
41
|
phone: z.string().optional().describe("Updated phone"),
|
|
42
42
|
role: z.enum(["member", "admin", "owner"]).optional().describe("Updated role"),
|
|
43
43
|
permissions: z.array(z.string()).optional().describe("Updated permission scopes"),
|
|
44
|
+
position: z.string().nullable().optional().describe("Rep-profile position/title, merge-taggable as {{user.position}} (owner/admin only; null clears)"),
|
|
45
|
+
mobilePhone: z.string().nullable().optional().describe("Rep-profile mobile phone, merge-taggable as {{user.mobilePhone}} (owner/admin only; null clears)"),
|
|
46
|
+
custom1: z.string().nullable().optional().describe("Rep-profile custom field 1, merge-taggable as {{user.custom1}} (owner/admin only; null clears)"),
|
|
47
|
+
custom2: z.string().nullable().optional().describe("Rep-profile custom field 2, merge-taggable as {{user.custom2}} (owner/admin only; null clears)"),
|
|
48
|
+
custom3: z.string().nullable().optional().describe("Rep-profile custom field 3, merge-taggable as {{user.custom3}} (owner/admin only; null clears)"),
|
|
49
|
+
custom4: z.string().nullable().optional().describe("Rep-profile custom field 4, merge-taggable as {{user.custom4}} (owner/admin only; null clears)"),
|
|
44
50
|
}, async ({ id, ...updates }) => {
|
|
45
51
|
const result = await client.patch(`/api/v1/users/${id}`, updates);
|
|
46
52
|
return formatResult(result);
|
package/package.json
CHANGED
|
@@ -499,6 +499,21 @@
|
|
|
499
499
|
"match": "/api/v1/webhooks",
|
|
500
500
|
"status": "planned",
|
|
501
501
|
"reason": "outbound webhook subscription management (distinct from the inbound /webhooks/ receivers)"
|
|
502
|
+
},
|
|
503
|
+
{
|
|
504
|
+
"match": "/api/v1/automation-folders",
|
|
505
|
+
"status": "planned",
|
|
506
|
+
"reason": "automation-folder organization (shipped 2026-08) \u2014 agent-relevant workflow housekeeping; typed tools wanted"
|
|
507
|
+
},
|
|
508
|
+
{
|
|
509
|
+
"match": "/api/v1/call-flows",
|
|
510
|
+
"status": "planned",
|
|
511
|
+
"reason": "call-flow builder API (shipped 2026-08-21) \u2014 agent-relevant; typed tools follow once the canvas UI (#25) settles the surface"
|
|
512
|
+
},
|
|
513
|
+
{
|
|
514
|
+
"match": "/api/v1/ring-groups",
|
|
515
|
+
"status": "planned",
|
|
516
|
+
"reason": "ring-group management (call-flows companion, shipped 2026-08-21) \u2014 agent-relevant; typed tools with the call-flow set"
|
|
502
517
|
}
|
|
503
518
|
]
|
|
504
|
-
}
|
|
519
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
|
-
"generatedAt": "2026-08-
|
|
2
|
+
"generatedAt": "2026-08-22T18:59:24.922Z",
|
|
3
3
|
"toolCount": 173,
|
|
4
|
-
"totalEndpoints":
|
|
4
|
+
"totalEndpoints": 872,
|
|
5
5
|
"counts": {
|
|
6
6
|
"covered": 161,
|
|
7
|
-
"excluded":
|
|
8
|
-
"planned":
|
|
7
|
+
"excluded": 255,
|
|
8
|
+
"planned": 456,
|
|
9
9
|
"uncategorized": 0
|
|
10
10
|
},
|
|
11
11
|
"matrix": {
|
|
@@ -395,6 +395,10 @@
|
|
|
395
395
|
"status": "planned",
|
|
396
396
|
"reason": "API key admin beyond self-check"
|
|
397
397
|
},
|
|
398
|
+
"GET /api/v1/api-keys/:id": {
|
|
399
|
+
"status": "planned",
|
|
400
|
+
"reason": "API key admin beyond self-check"
|
|
401
|
+
},
|
|
398
402
|
"PATCH /api/v1/api-keys/:id": {
|
|
399
403
|
"status": "planned",
|
|
400
404
|
"reason": "API key admin beyond self-check"
|
|
@@ -533,6 +537,22 @@
|
|
|
533
537
|
"status": "planned",
|
|
534
538
|
"reason": "execution inspection"
|
|
535
539
|
},
|
|
540
|
+
"GET /api/v1/automation-folders": {
|
|
541
|
+
"status": "planned",
|
|
542
|
+
"reason": "automation-folder organization (shipped 2026-08) — agent-relevant workflow housekeeping; typed tools wanted"
|
|
543
|
+
},
|
|
544
|
+
"POST /api/v1/automation-folders": {
|
|
545
|
+
"status": "planned",
|
|
546
|
+
"reason": "automation-folder organization (shipped 2026-08) — agent-relevant workflow housekeeping; typed tools wanted"
|
|
547
|
+
},
|
|
548
|
+
"PATCH /api/v1/automation-folders/:id": {
|
|
549
|
+
"status": "planned",
|
|
550
|
+
"reason": "automation-folder organization (shipped 2026-08) — agent-relevant workflow housekeeping; typed tools wanted"
|
|
551
|
+
},
|
|
552
|
+
"DELETE /api/v1/automation-folders/:id": {
|
|
553
|
+
"status": "planned",
|
|
554
|
+
"reason": "automation-folder organization (shipped 2026-08) — agent-relevant workflow housekeeping; typed tools wanted"
|
|
555
|
+
},
|
|
536
556
|
"GET /api/v1/automations": {
|
|
537
557
|
"status": "covered",
|
|
538
558
|
"tools": [
|
|
@@ -970,6 +990,50 @@
|
|
|
970
990
|
"status": "planned",
|
|
971
991
|
"reason": "calendar/booking management beyond current appointment tools"
|
|
972
992
|
},
|
|
993
|
+
"GET /api/v1/call-flows": {
|
|
994
|
+
"status": "planned",
|
|
995
|
+
"reason": "call-flow builder API (shipped 2026-08-21) — agent-relevant; typed tools follow once the canvas UI (#25) settles the surface"
|
|
996
|
+
},
|
|
997
|
+
"POST /api/v1/call-flows": {
|
|
998
|
+
"status": "planned",
|
|
999
|
+
"reason": "call-flow builder API (shipped 2026-08-21) — agent-relevant; typed tools follow once the canvas UI (#25) settles the surface"
|
|
1000
|
+
},
|
|
1001
|
+
"GET /api/v1/call-flows/:id": {
|
|
1002
|
+
"status": "planned",
|
|
1003
|
+
"reason": "call-flow builder API (shipped 2026-08-21) — agent-relevant; typed tools follow once the canvas UI (#25) settles the surface"
|
|
1004
|
+
},
|
|
1005
|
+
"PATCH /api/v1/call-flows/:id": {
|
|
1006
|
+
"status": "planned",
|
|
1007
|
+
"reason": "call-flow builder API (shipped 2026-08-21) — agent-relevant; typed tools follow once the canvas UI (#25) settles the surface"
|
|
1008
|
+
},
|
|
1009
|
+
"DELETE /api/v1/call-flows/:id": {
|
|
1010
|
+
"status": "planned",
|
|
1011
|
+
"reason": "call-flow builder API (shipped 2026-08-21) — agent-relevant; typed tools follow once the canvas UI (#25) settles the surface"
|
|
1012
|
+
},
|
|
1013
|
+
"POST /api/v1/call-flows/:id/publish": {
|
|
1014
|
+
"status": "planned",
|
|
1015
|
+
"reason": "call-flow builder API (shipped 2026-08-21) — agent-relevant; typed tools follow once the canvas UI (#25) settles the surface"
|
|
1016
|
+
},
|
|
1017
|
+
"POST /api/v1/call-flows/:id/simulate": {
|
|
1018
|
+
"status": "planned",
|
|
1019
|
+
"reason": "call-flow builder API (shipped 2026-08-21) — agent-relevant; typed tools follow once the canvas UI (#25) settles the surface"
|
|
1020
|
+
},
|
|
1021
|
+
"POST /api/v1/call-flows/:id/unpublish": {
|
|
1022
|
+
"status": "planned",
|
|
1023
|
+
"reason": "call-flow builder API (shipped 2026-08-21) — agent-relevant; typed tools follow once the canvas UI (#25) settles the surface"
|
|
1024
|
+
},
|
|
1025
|
+
"GET /api/v1/call-flows/:id/validate": {
|
|
1026
|
+
"status": "planned",
|
|
1027
|
+
"reason": "call-flow builder API (shipped 2026-08-21) — agent-relevant; typed tools follow once the canvas UI (#25) settles the surface"
|
|
1028
|
+
},
|
|
1029
|
+
"POST /api/v1/call-flows/audio": {
|
|
1030
|
+
"status": "planned",
|
|
1031
|
+
"reason": "call-flow builder API (shipped 2026-08-21) — agent-relevant; typed tools follow once the canvas UI (#25) settles the surface"
|
|
1032
|
+
},
|
|
1033
|
+
"GET /api/v1/call-flows/roster": {
|
|
1034
|
+
"status": "planned",
|
|
1035
|
+
"reason": "call-flow builder API (shipped 2026-08-21) — agent-relevant; typed tools follow once the canvas UI (#25) settles the surface"
|
|
1036
|
+
},
|
|
973
1037
|
"GET /api/v1/calls": {
|
|
974
1038
|
"status": "covered",
|
|
975
1039
|
"tools": [
|
|
@@ -1381,6 +1445,10 @@
|
|
|
1381
1445
|
"status": "excluded",
|
|
1382
1446
|
"reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
|
|
1383
1447
|
},
|
|
1448
|
+
"GET /api/v1/cron/process-automation-redispatch": {
|
|
1449
|
+
"status": "excluded",
|
|
1450
|
+
"reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
|
|
1451
|
+
},
|
|
1384
1452
|
"GET /api/v1/cron/process-batches": {
|
|
1385
1453
|
"status": "excluded",
|
|
1386
1454
|
"reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
|
|
@@ -1389,6 +1457,10 @@
|
|
|
1389
1457
|
"status": "excluded",
|
|
1390
1458
|
"reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
|
|
1391
1459
|
},
|
|
1460
|
+
"GET /api/v1/cron/process-call-lifecycle-intents": {
|
|
1461
|
+
"status": "excluded",
|
|
1462
|
+
"reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
|
|
1463
|
+
},
|
|
1392
1464
|
"GET /api/v1/cron/process-consent-outbox": {
|
|
1393
1465
|
"status": "excluded",
|
|
1394
1466
|
"reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
|
|
@@ -1489,6 +1561,10 @@
|
|
|
1489
1561
|
"status": "excluded",
|
|
1490
1562
|
"reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
|
|
1491
1563
|
},
|
|
1564
|
+
"GET /api/v1/cron/reap-stale-group-calls": {
|
|
1565
|
+
"status": "excluded",
|
|
1566
|
+
"reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
|
|
1567
|
+
},
|
|
1492
1568
|
"GET /api/v1/cron/reconcile-document-sends": {
|
|
1493
1569
|
"status": "excluded",
|
|
1494
1570
|
"reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
|
|
@@ -1501,6 +1577,10 @@
|
|
|
1501
1577
|
"status": "excluded",
|
|
1502
1578
|
"reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
|
|
1503
1579
|
},
|
|
1580
|
+
"GET /api/v1/cron/recover-booking-side-effects": {
|
|
1581
|
+
"status": "excluded",
|
|
1582
|
+
"reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
|
|
1583
|
+
},
|
|
1504
1584
|
"GET /api/v1/cron/recurring-tasks": {
|
|
1505
1585
|
"status": "excluded",
|
|
1506
1586
|
"reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
|
|
@@ -1513,6 +1593,10 @@
|
|
|
1513
1593
|
"status": "excluded",
|
|
1514
1594
|
"reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
|
|
1515
1595
|
},
|
|
1596
|
+
"GET /api/v1/cron/reply-capture-drain": {
|
|
1597
|
+
"status": "excluded",
|
|
1598
|
+
"reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
|
|
1599
|
+
},
|
|
1516
1600
|
"GET /api/v1/cron/resume-imports": {
|
|
1517
1601
|
"status": "excluded",
|
|
1518
1602
|
"reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
|
|
@@ -2377,6 +2461,10 @@
|
|
|
2377
2461
|
"status": "planned",
|
|
2378
2462
|
"reason": "integration management"
|
|
2379
2463
|
},
|
|
2464
|
+
"POST /api/v1/integrations/dpp/ingest": {
|
|
2465
|
+
"status": "planned",
|
|
2466
|
+
"reason": "integration management"
|
|
2467
|
+
},
|
|
2380
2468
|
"GET /api/v1/integrations/health": {
|
|
2381
2469
|
"status": "planned",
|
|
2382
2470
|
"reason": "integration management"
|
|
@@ -2941,6 +3029,30 @@
|
|
|
2941
3029
|
"status": "planned",
|
|
2942
3030
|
"reason": "additional report surfaces beyond ai/insights"
|
|
2943
3031
|
},
|
|
3032
|
+
"GET /api/v1/ring-groups": {
|
|
3033
|
+
"status": "planned",
|
|
3034
|
+
"reason": "ring-group management (call-flows companion, shipped 2026-08-21) — agent-relevant; typed tools with the call-flow set"
|
|
3035
|
+
},
|
|
3036
|
+
"POST /api/v1/ring-groups": {
|
|
3037
|
+
"status": "planned",
|
|
3038
|
+
"reason": "ring-group management (call-flows companion, shipped 2026-08-21) — agent-relevant; typed tools with the call-flow set"
|
|
3039
|
+
},
|
|
3040
|
+
"GET /api/v1/ring-groups/:id": {
|
|
3041
|
+
"status": "planned",
|
|
3042
|
+
"reason": "ring-group management (call-flows companion, shipped 2026-08-21) — agent-relevant; typed tools with the call-flow set"
|
|
3043
|
+
},
|
|
3044
|
+
"PATCH /api/v1/ring-groups/:id": {
|
|
3045
|
+
"status": "planned",
|
|
3046
|
+
"reason": "ring-group management (call-flows companion, shipped 2026-08-21) — agent-relevant; typed tools with the call-flow set"
|
|
3047
|
+
},
|
|
3048
|
+
"DELETE /api/v1/ring-groups/:id": {
|
|
3049
|
+
"status": "planned",
|
|
3050
|
+
"reason": "ring-group management (call-flows companion, shipped 2026-08-21) — agent-relevant; typed tools with the call-flow set"
|
|
3051
|
+
},
|
|
3052
|
+
"POST /api/v1/ring-groups/release-number": {
|
|
3053
|
+
"status": "planned",
|
|
3054
|
+
"reason": "ring-group management (call-flows companion, shipped 2026-08-21) — agent-relevant; typed tools with the call-flow set"
|
|
3055
|
+
},
|
|
2944
3056
|
"GET /api/v1/saved-filters": {
|
|
2945
3057
|
"status": "planned",
|
|
2946
3058
|
"reason": "saved filter management"
|
|
@@ -3643,6 +3755,10 @@
|
|
|
3643
3755
|
"status": "excluded",
|
|
3644
3756
|
"reason": "inbound provider callback receivers (Twilio/Resend/etc.), not client-callable"
|
|
3645
3757
|
},
|
|
3758
|
+
"POST /api/v1/webhooks/voice/flow-step": {
|
|
3759
|
+
"status": "excluded",
|
|
3760
|
+
"reason": "inbound provider callback receivers (Twilio/Resend/etc.), not client-callable"
|
|
3761
|
+
},
|
|
3646
3762
|
"POST /api/v1/webhooks/voice/inbound": {
|
|
3647
3763
|
"status": "excluded",
|
|
3648
3764
|
"reason": "inbound provider callback receivers (Twilio/Resend/etc.), not client-callable"
|
|
@@ -3651,6 +3767,10 @@
|
|
|
3651
3767
|
"status": "excluded",
|
|
3652
3768
|
"reason": "inbound provider callback receivers (Twilio/Resend/etc.), not client-callable"
|
|
3653
3769
|
},
|
|
3770
|
+
"POST /api/v1/webhooks/voice/ring-group-step": {
|
|
3771
|
+
"status": "excluded",
|
|
3772
|
+
"reason": "inbound provider callback receivers (Twilio/Resend/etc.), not client-callable"
|
|
3773
|
+
},
|
|
3654
3774
|
"POST /api/v1/webhooks/voice/status": {
|
|
3655
3775
|
"status": "excluded",
|
|
3656
3776
|
"reason": "inbound provider callback receivers (Twilio/Resend/etc.), not client-callable"
|