conduyt-mcp 4.36.0 → 4.38.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.
@@ -86,4 +86,46 @@ export function registerMessagingTools(server, client) {
86
86
  const result = await client.get(`/api/v1/reports/sms-delivery?${params}`);
87
87
  return formatResult(result);
88
88
  });
89
+ server.tool("conduyt_sms_drip_conversion_report", "Conversion by drip STEP for external-workflow SMS drips: for each text in each SMS-drip automation, how many contacts were texted and how many of them replied, booked an appointment, moved their deal forward (to a non-Lost stage) or won, credited last-touch inside the attribution window (the next text, from any drip, closes the window early). Per-step and per-automation rates. Spans clamp to 90 days. Response `notes` states the one approximation: texts from a since-deleted drip still close windows but are credited to no step.", {
90
+ from: z.string().optional().describe("ISO start (omit both for the last 90 days; spans clamp to 90d)"),
91
+ to: z.string().optional().describe("ISO end"),
92
+ automationId: z.string().uuid().optional().describe("Scope to one automation"),
93
+ smartListId: z.string().uuid().optional().describe("Scope to contacts in this smart list"),
94
+ attributionDays: z.number().int().min(1).max(14).optional().describe("Credit an outcome only within this many days of the text (default 3, max 14)"),
95
+ }, async ({ from, to, automationId, smartListId, attributionDays }) => {
96
+ const params = new URLSearchParams();
97
+ if (from)
98
+ params.set("from", from);
99
+ if (to)
100
+ params.set("to", to);
101
+ if (automationId)
102
+ params.set("automationId", automationId);
103
+ if (smartListId)
104
+ params.set("smartListId", smartListId);
105
+ if (attributionDays !== undefined)
106
+ params.set("attributionDays", String(attributionDays));
107
+ const result = await client.get(`/api/v1/reports/sms-drip-conversion?${params}`);
108
+ return formatResult(result);
109
+ });
110
+ server.tool("conduyt_speed_to_lead_report", "Speed to lead: for every contact created in the window, the time to the FIRST HUMAN touch (a call placed by a person, a text or email a person sent through a connected provider, a note, or a completed task, inside the CRM): median and p90 seconds, leads reached within 5/15 min and 1/4/24 h, never reached, first-touch channel; overall, by assigned rep, by lead source and by who made the touch. Automation messages, campaign blasts and anything done outside the CRM are not touches (the response `definition` says so). Spans clamp to 90 days.", {
111
+ from: z.string().optional().describe("ISO start (omit both for the last 90 days; spans clamp to 90d)"),
112
+ to: z.string().optional().describe("ISO end"),
113
+ assignedTo: z.string().uuid().optional().describe("Only leads assigned to this user"),
114
+ sources: z.array(z.string()).max(50).optional().describe("Exact contact source values; '__none__' adds contacts with no source"),
115
+ smartListId: z.string().uuid().optional().describe("Only contacts in this smart list"),
116
+ }, async ({ from, to, assignedTo, sources, smartListId }) => {
117
+ const params = new URLSearchParams();
118
+ if (from)
119
+ params.set("from", from);
120
+ if (to)
121
+ params.set("to", to);
122
+ if (assignedTo)
123
+ params.set("assignedTo", assignedTo);
124
+ if (sources && sources.length > 0)
125
+ params.set("sources", sources.join(","));
126
+ if (smartListId)
127
+ params.set("smartListId", smartListId);
128
+ const result = await client.get(`/api/v1/reports/speed-to-lead?${params}`);
129
+ return formatResult(result);
130
+ });
89
131
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "conduyt-mcp",
3
- "version": "4.36.0",
3
+ "version": "4.38.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-10T18:42:14.384Z",
3
- "toolCount": 231,
4
- "totalEndpoints": 939,
2
+ "generatedAt": "2026-09-10T23:09:09.291Z",
3
+ "toolCount": 233,
4
+ "totalEndpoints": 941,
5
5
  "counts": {
6
- "covered": 213,
6
+ "covered": 215,
7
7
  "excluded": 283,
8
8
  "planned": 443,
9
9
  "uncategorized": 0
@@ -3269,10 +3269,22 @@
3269
3269
  "conduyt_sms_delivery_report"
3270
3270
  ]
3271
3271
  },
3272
+ "GET /api/v1/reports/sms-drip-conversion": {
3273
+ "status": "covered",
3274
+ "tools": [
3275
+ "conduyt_sms_drip_conversion_report"
3276
+ ]
3277
+ },
3272
3278
  "GET /api/v1/reports/sms-templates": {
3273
3279
  "status": "planned",
3274
3280
  "reason": "additional report surfaces beyond ai/insights"
3275
3281
  },
3282
+ "GET /api/v1/reports/speed-to-lead": {
3283
+ "status": "covered",
3284
+ "tools": [
3285
+ "conduyt_speed_to_lead_report"
3286
+ ]
3287
+ },
3276
3288
  "GET /api/v1/reports/subscriptions/:sid": {
3277
3289
  "status": "planned",
3278
3290
  "reason": "additional report surfaces beyond ai/insights"