conduyt-mcp 4.42.0 → 4.44.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/tools/messaging.js +21 -0
- package/dist/tools/reports.js +6 -2
- package/package.json +1 -1
- package/scripts/coverage-matrix.json +10 -12
package/dist/tools/messaging.js
CHANGED
|
@@ -128,6 +128,27 @@ export function registerMessagingTools(server, client) {
|
|
|
128
128
|
const result = await client.get(`/api/v1/reports/speed-to-lead?${params}`);
|
|
129
129
|
return formatResult(result);
|
|
130
130
|
});
|
|
131
|
+
server.tool("conduyt_appointment_report", "Appointment report: every appointment whose time (basis=start, default) or booking (basis=booked) falls in the window: booked, by status (scheduled, confirmed, completed, cancelled, no-show), the outcome of the ones already in the past (held or no-show, show rate), cancellations, reschedules and upcoming; overall and by assigned user, by calendar or booking page, by lead source, by the channel it came in on (booking page, call disposition, created in Conduyt, calendar) and by day. Reschedules count moves by the attendee, by a person in Conduyt, or synced from a connected calendar. Spans clamp to 366 days; the definition comes back as `definition`.", {
|
|
132
|
+
from: z.string().optional().describe("ISO start (omit both for the last 366 days)"),
|
|
133
|
+
to: z.string().optional().describe("ISO end"),
|
|
134
|
+
basis: z.enum(["start", "booked"]).optional().describe("start (default): appointments by their time; booked: by when they were booked"),
|
|
135
|
+
assignedTo: z.string().uuid().optional().describe("Only appointments assigned to this user"),
|
|
136
|
+
sources: z.array(z.string()).max(50).optional().describe("Exact contact source values of the appointment's contact; '__none__' adds appointments with no source or no contact"),
|
|
137
|
+
}, async ({ from, to, basis, assignedTo, sources }) => {
|
|
138
|
+
const params = new URLSearchParams();
|
|
139
|
+
if (from)
|
|
140
|
+
params.set("from", from);
|
|
141
|
+
if (to)
|
|
142
|
+
params.set("to", to);
|
|
143
|
+
if (basis)
|
|
144
|
+
params.set("basis", basis);
|
|
145
|
+
if (assignedTo)
|
|
146
|
+
params.set("assignedTo", assignedTo);
|
|
147
|
+
if (sources && sources.length > 0)
|
|
148
|
+
params.set("sources", sources.join(","));
|
|
149
|
+
const result = await client.get(`/api/v1/reports/appointments?${params}`);
|
|
150
|
+
return formatResult(result);
|
|
151
|
+
});
|
|
131
152
|
server.tool("conduyt_funnel_report", "Stage funnel for ONE pipeline: every deal that entered each stage in the window (created in it, or moved into it) and what happened to that presence so far (advanced to a later stage, lost, moved back, handed off to another pipeline, still there; the five add up to the entries), with the median days a settled stay lasted, plus the pipeline cohort (deals created in the window by where they sit now: won / lost / open). Built from recorded stage moves, never from where deals sit now. Windows clamp to 90 days. GET /api/v1/reports/funnel", {
|
|
132
153
|
pipelineId: z.string().uuid().describe("The pipeline to report on"),
|
|
133
154
|
from: z.string().optional().describe("ISO start (omit both for the last 90 days; spans clamp to 90d)"),
|
package/dist/tools/reports.js
CHANGED
|
@@ -42,8 +42,9 @@ export function registerReportTools(server, client) {
|
|
|
42
42
|
chartType: z.enum(["bar", "line", "pie", "table", "funnel", "number"]).optional(),
|
|
43
43
|
population: z.object({ smartViewId: z.string().uuid().nullable().optional() }).optional().describe("contacts/deals only: { smartViewId } runs the report over the contacts in that Smart View"),
|
|
44
44
|
isShared: z.boolean().optional().describe("Visible to the whole account (default false = only you and admins)"),
|
|
45
|
+
isPrivate: z.boolean().optional().describe("Only the creator and admins can open it, even when shared to a dashboard (default false)"),
|
|
45
46
|
pivot: pivotSchema.optional(),
|
|
46
|
-
}, async ({ name, description, entity, columns, filters, sortBy, sortDir, groupBy, groupBy2, timeGrain, aggregate, measureField, chartType, population, isShared, pivot }) => {
|
|
47
|
+
}, async ({ name, description, entity, columns, filters, sortBy, sortDir, groupBy, groupBy2, timeGrain, aggregate, measureField, chartType, population, isShared, isPrivate, pivot }) => {
|
|
47
48
|
// Inline body (undefined fields drop out in JSON) — readable by the contract verifier's static parser.
|
|
48
49
|
const result = await client.post("/api/v1/reports/custom", {
|
|
49
50
|
name,
|
|
@@ -61,6 +62,7 @@ export function registerReportTools(server, client) {
|
|
|
61
62
|
chartType,
|
|
62
63
|
population,
|
|
63
64
|
isShared,
|
|
65
|
+
isPrivate,
|
|
64
66
|
pivot,
|
|
65
67
|
});
|
|
66
68
|
return formatResult(result);
|
|
@@ -124,8 +126,9 @@ export function registerReportTools(server, client) {
|
|
|
124
126
|
chartType: z.enum(["bar", "line", "pie", "table", "funnel", "number"]).optional(),
|
|
125
127
|
population: z.object({ smartViewId: z.string().uuid().nullable().optional() }).nullable().optional(),
|
|
126
128
|
isShared: z.boolean().optional(),
|
|
129
|
+
isPrivate: z.boolean().optional().describe("Only the creator and admins can open it, even when shared"),
|
|
127
130
|
pivot: pivotSchema.nullable().optional().describe("A pivot definition, or null to remove the pivot"),
|
|
128
|
-
}, async ({ id, name, description, columns, filters, sortBy, sortDir, groupBy, groupBy2, timeGrain, aggregate, measureField, chartType, population, isShared, pivot }) => {
|
|
131
|
+
}, async ({ id, name, description, columns, filters, sortBy, sortDir, groupBy, groupBy2, timeGrain, aggregate, measureField, chartType, population, isShared, isPrivate, pivot }) => {
|
|
129
132
|
const result = await client.patch(`/api/v1/reports/custom/${encodeURIComponent(id)}`, {
|
|
130
133
|
name,
|
|
131
134
|
description,
|
|
@@ -141,6 +144,7 @@ export function registerReportTools(server, client) {
|
|
|
141
144
|
chartType,
|
|
142
145
|
population,
|
|
143
146
|
isShared,
|
|
147
|
+
isPrivate,
|
|
144
148
|
pivot,
|
|
145
149
|
});
|
|
146
150
|
return formatResult(result);
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
|
-
"generatedAt": "2026-09-
|
|
3
|
-
"toolCount":
|
|
4
|
-
"totalEndpoints":
|
|
2
|
+
"generatedAt": "2026-09-11T10:14:55.350Z",
|
|
3
|
+
"toolCount": 245,
|
|
4
|
+
"totalEndpoints": 950,
|
|
5
5
|
"counts": {
|
|
6
|
-
"covered":
|
|
6
|
+
"covered": 227,
|
|
7
7
|
"excluded": 283,
|
|
8
|
-
"planned":
|
|
8
|
+
"planned": 440,
|
|
9
9
|
"uncategorized": 0
|
|
10
10
|
},
|
|
11
11
|
"matrix": {
|
|
@@ -2933,10 +2933,6 @@
|
|
|
2933
2933
|
"status": "planned",
|
|
2934
2934
|
"reason": "notification surfaces"
|
|
2935
2935
|
},
|
|
2936
|
-
"GET /api/v1/ops/capacity": {
|
|
2937
|
-
"status": "planned",
|
|
2938
|
-
"reason": "operator capacity dashboard (#51, shipped 2026-09) — read-only queue/park telemetry; a typed conduyt_capacity_snapshot tool is agent-relevant for throughput questions"
|
|
2939
|
-
},
|
|
2940
2936
|
"GET /api/v1/phone-numbers": {
|
|
2941
2937
|
"status": "planned",
|
|
2942
2938
|
"reason": "phone number inventory"
|
|
@@ -3215,9 +3211,11 @@
|
|
|
3215
3211
|
"status": "planned",
|
|
3216
3212
|
"reason": "additional report surfaces beyond ai/insights"
|
|
3217
3213
|
},
|
|
3218
|
-
"GET /api/v1/reports/
|
|
3219
|
-
"status": "
|
|
3220
|
-
"
|
|
3214
|
+
"GET /api/v1/reports/appointments": {
|
|
3215
|
+
"status": "covered",
|
|
3216
|
+
"tools": [
|
|
3217
|
+
"conduyt_appointment_report"
|
|
3218
|
+
]
|
|
3221
3219
|
},
|
|
3222
3220
|
"GET /api/v1/reports/calls": {
|
|
3223
3221
|
"status": "planned",
|