conduyt-mcp 4.41.0 → 4.43.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,4 +128,20 @@ 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_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
+ pipelineId: z.string().uuid().describe("The pipeline to report on"),
133
+ from: z.string().optional().describe("ISO start (omit both for the last 90 days; spans clamp to 90d)"),
134
+ to: z.string().optional().describe("ISO end"),
135
+ dateRange: z.string().optional().describe("A shared dashboard range key (today, week, month, quarter, year, last_30_days, ...) instead of from/to"),
136
+ }, async ({ pipelineId, from, to, dateRange }) => {
137
+ const params = new URLSearchParams({ pipelineId });
138
+ if (from)
139
+ params.set("from", from);
140
+ if (to)
141
+ params.set("to", to);
142
+ if (dateRange)
143
+ params.set("dateRange", dateRange);
144
+ const result = await client.get(`/api/v1/reports/funnel?${params}`);
145
+ return formatResult(result);
146
+ });
131
147
  }
@@ -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,6 +1,6 @@
1
1
  {
2
2
  "name": "conduyt-mcp",
3
- "version": "4.41.0",
3
+ "version": "4.43.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,11 +1,11 @@
1
1
  {
2
- "generatedAt": "2026-09-11T04:54:57.020Z",
3
- "toolCount": 243,
4
- "totalEndpoints": 950,
2
+ "generatedAt": "2026-09-11T09:30:31.753Z",
3
+ "toolCount": 244,
4
+ "totalEndpoints": 949,
5
5
  "counts": {
6
- "covered": 225,
6
+ "covered": 226,
7
7
  "excluded": 283,
8
- "planned": 442,
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,10 +3211,6 @@
3215
3211
  "status": "planned",
3216
3212
  "reason": "additional report surfaces beyond ai/insights"
3217
3213
  },
3218
- "GET /api/v1/reports/bda": {
3219
- "status": "planned",
3220
- "reason": "additional report surfaces beyond ai/insights"
3221
- },
3222
3214
  "GET /api/v1/reports/calls": {
3223
3215
  "status": "planned",
3224
3216
  "reason": "additional report surfaces beyond ai/insights"
@@ -3311,6 +3303,12 @@
3311
3303
  "status": "planned",
3312
3304
  "reason": "additional report surfaces beyond ai/insights"
3313
3305
  },
3306
+ "GET /api/v1/reports/funnel": {
3307
+ "status": "covered",
3308
+ "tools": [
3309
+ "conduyt_funnel_report"
3310
+ ]
3311
+ },
3314
3312
  "GET /api/v1/reports/pipeline": {
3315
3313
  "status": "planned",
3316
3314
  "reason": "additional report surfaces beyond ai/insights"