conduyt-mcp 4.43.0 → 4.45.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.
@@ -128,6 +128,48 @@ 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_call_performance_report", "Unified call report: every call in the window, whatever carried it (the in-app dialer over Twilio, click-to-call Twilio, Project Blue), with the dialer analytics' definitions: calls, inbound and outbound, answered (network completed with talk time), connected and conversations (from the saved disposition), talk time and average talk, voicemails, missed inbound, appointments set and sales closed; overall and by user, transport, direction, disposition, day and hour of the account's timezone. 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
+ userId: z.string().uuid().optional().describe("Only calls placed or taken by this user"),
135
+ transport: z.string().max(64).optional().describe("Exact call transport: twilio (the in-app dialer and click-to-call), project_blue, project_blue_twilio"),
136
+ direction: z.enum(["inbound", "outbound"]).optional(),
137
+ }, async ({ from, to, userId, transport, direction }) => {
138
+ const params = new URLSearchParams();
139
+ if (from)
140
+ params.set("from", from);
141
+ if (to)
142
+ params.set("to", to);
143
+ if (userId)
144
+ params.set("userId", userId);
145
+ if (transport)
146
+ params.set("transport", transport);
147
+ if (direction)
148
+ params.set("direction", direction);
149
+ const result = await client.get(`/api/v1/reports/call-performance?${params}`);
150
+ return formatResult(result);
151
+ });
152
+ 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`.", {
153
+ from: z.string().optional().describe("ISO start (omit both for the last 366 days)"),
154
+ to: z.string().optional().describe("ISO end"),
155
+ basis: z.enum(["start", "booked"]).optional().describe("start (default): appointments by their time; booked: by when they were booked"),
156
+ assignedTo: z.string().uuid().optional().describe("Only appointments assigned to this user"),
157
+ 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"),
158
+ }, async ({ from, to, basis, assignedTo, sources }) => {
159
+ const params = new URLSearchParams();
160
+ if (from)
161
+ params.set("from", from);
162
+ if (to)
163
+ params.set("to", to);
164
+ if (basis)
165
+ params.set("basis", basis);
166
+ if (assignedTo)
167
+ params.set("assignedTo", assignedTo);
168
+ if (sources && sources.length > 0)
169
+ params.set("sources", sources.join(","));
170
+ const result = await client.get(`/api/v1/reports/appointments?${params}`);
171
+ return formatResult(result);
172
+ });
131
173
  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
174
  pipelineId: z.string().uuid().describe("The pipeline to report on"),
133
175
  from: z.string().optional().describe("ISO start (omit both for the last 90 days; spans clamp to 90d)"),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "conduyt-mcp",
3
- "version": "4.43.0",
3
+ "version": "4.45.0",
4
4
  "description": "MCP server for Conduyt CRM — expose CRM operations as AI-accessible tools",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,9 +1,9 @@
1
1
  {
2
- "generatedAt": "2026-09-11T09:30:31.753Z",
3
- "toolCount": 244,
4
- "totalEndpoints": 949,
2
+ "generatedAt": "2026-09-11T10:42:14.525Z",
3
+ "toolCount": 246,
4
+ "totalEndpoints": 951,
5
5
  "counts": {
6
- "covered": 226,
6
+ "covered": 228,
7
7
  "excluded": 283,
8
8
  "planned": 440,
9
9
  "uncategorized": 0
@@ -3211,6 +3211,18 @@
3211
3211
  "status": "planned",
3212
3212
  "reason": "additional report surfaces beyond ai/insights"
3213
3213
  },
3214
+ "GET /api/v1/reports/appointments": {
3215
+ "status": "covered",
3216
+ "tools": [
3217
+ "conduyt_appointment_report"
3218
+ ]
3219
+ },
3220
+ "GET /api/v1/reports/call-performance": {
3221
+ "status": "covered",
3222
+ "tools": [
3223
+ "conduyt_call_performance_report"
3224
+ ]
3225
+ },
3214
3226
  "GET /api/v1/reports/calls": {
3215
3227
  "status": "planned",
3216
3228
  "reason": "additional report surfaces beyond ai/insights"