conduyt-mcp 4.47.0 → 4.49.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/README.md +2 -1
- package/dist/tools/ai.js +12 -2
- package/dist/tools/messaging.js +4 -0
- package/package.json +1 -1
- package/scripts/coverage-matrix.json +20 -6
package/README.md
CHANGED
|
@@ -55,7 +55,7 @@ MCP server for [Conduyt CRM](https://conduyt.app) — expose your CRM as AI-acce
|
|
|
55
55
|
### AI
|
|
56
56
|
| Tool | Description |
|
|
57
57
|
|------|-------------|
|
|
58
|
-
| `conduyt_ai_insights` | AI-powered CRM analytics (
|
|
58
|
+
| `conduyt_ai_insights` | AI-powered CRM analytics (11 query types, incl. report_catalog, saved_report and dashboard: run any saved report or board) |
|
|
59
59
|
|
|
60
60
|
### Automations
|
|
61
61
|
| Tool | Description |
|
|
@@ -86,6 +86,7 @@ MCP server for [Conduyt CRM](https://conduyt.app) — expose your CRM as AI-acce
|
|
|
86
86
|
### Messaging
|
|
87
87
|
| Tool | Description |
|
|
88
88
|
|------|-------------|
|
|
89
|
+
| `conduyt_sms_transports` | What a workflow Send SMS step can speak through today: Twilio numbers, Project Blue lines held by active reps, webhook provider count, FromK.ai coming soon |
|
|
89
90
|
| `conduyt_send_sms` | Send SMS to a contact (max 1600 chars) |
|
|
90
91
|
| `conduyt_send_email` | Send a single email to a contact |
|
|
91
92
|
|
package/dist/tools/ai.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { formatResult } from "../client.js";
|
|
3
3
|
export function registerAiTools(server, client) {
|
|
4
|
-
server.tool("conduyt_ai_insights", "Query AI-powered CRM insights.
|
|
4
|
+
server.tool("conduyt_ai_insights", "Query AI-powered CRM insights. 11 query types: report_catalog (every saved report and dashboard this key can run), saved_report (run any saved report by name or id: rows, total, metric, chart data, pivot; optionally windowed with filters.period or filters.dateRange, reps and sources, paged with page / perPage), dashboard (run every tile of a dashboard by name or id, its saved filters or the filters passed for this run), pipeline_health (deals per stage, stale deals), sms_drip_status (SMS drip overview by provider/step), sms_responses_untouched (replied contacts with no follow-up), agent_followups (per-agent task performance), email_performance (open/click/reply rates), smart_view_summary (contact counts per saved view), team_activity (per-user activity counts), contact_import_history (recent import batches).", {
|
|
5
5
|
query: z.enum([
|
|
6
|
+
"report_catalog",
|
|
7
|
+
"saved_report",
|
|
8
|
+
"dashboard",
|
|
6
9
|
"pipeline_health",
|
|
7
10
|
"sms_drip_status",
|
|
8
11
|
"sms_responses_untouched",
|
|
@@ -12,6 +15,10 @@ export function registerAiTools(server, client) {
|
|
|
12
15
|
"team_activity",
|
|
13
16
|
"contact_import_history",
|
|
14
17
|
]).describe("Insight query type"),
|
|
18
|
+
report: z.object({ id: z.string().uuid().optional(), name: z.string().optional() }).optional().describe("saved_report: the saved report to run, by id or by exact name (case-insensitive); two of a name is a 409 naming both"),
|
|
19
|
+
dashboard: z.object({ id: z.string().uuid().optional(), name: z.string().optional() }).optional().describe("dashboard: the dashboard to run, by id or by exact name"),
|
|
20
|
+
page: z.number().int().min(1).optional().describe("saved_report: page number (default 1)"),
|
|
21
|
+
perPage: z.number().int().min(1).max(500).optional().describe("saved_report: rows per page (default 50, max 500)"),
|
|
15
22
|
filters: z
|
|
16
23
|
.object({
|
|
17
24
|
dateRange: z
|
|
@@ -20,7 +27,10 @@ export function registerAiTools(server, client) {
|
|
|
20
27
|
to: z.string().describe("ISO 8601 date"),
|
|
21
28
|
})
|
|
22
29
|
.optional()
|
|
23
|
-
.describe("Date range to scope the query"),
|
|
30
|
+
.describe("Date range to scope the query (saved_report / dashboard: a custom window; never together with period)"),
|
|
31
|
+
period: z.enum(["today", "this_week", "this_month", "this_quarter", "this_year", "last_7_days", "last_30_days", "last_90_days"]).optional().describe("saved_report / dashboard: a board preset window"),
|
|
32
|
+
assignedTo: z.array(z.string().uuid()).max(50).optional().describe("saved_report / dashboard: rep user ids to keep"),
|
|
33
|
+
sources: z.array(z.string()).max(50).optional().describe("saved_report / dashboard: lead sources to keep"),
|
|
24
34
|
provider: z.string().optional().describe("Filter by provider (e.g. for sms_drip_status)"),
|
|
25
35
|
pipelineId: z.string().optional().describe("Pipeline UUID (for pipeline_health)"),
|
|
26
36
|
userId: z.string().optional().describe("User UUID (for agent_followups)"),
|
package/dist/tools/messaging.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { formatResult } from "../client.js";
|
|
3
3
|
export function registerMessagingTools(server, client) {
|
|
4
|
+
server.tool("conduyt_sms_transports", "What a workflow Send SMS step can speak through TODAY (GET /api/v1/sms/transports): twilio {connected, numbers[] = the account number + every active rep's assigned line, each a valid send_sms config.fromNumber}, projectBlue {connected, lines[] = Project Blue iPhone lines held by active reps, each lineId a valid config.projectBlueLineId for smsMode project_blue}, webhook {providers = active webhook providers for smsMode webhook}, fromk {status: coming_soon}. Use it before building or editing a send_sms step so you never configure a transport that is not connected. Requires automations:view.", {}, async () => {
|
|
5
|
+
const result = await client.get("/api/v1/sms/transports");
|
|
6
|
+
return formatResult(result);
|
|
7
|
+
});
|
|
4
8
|
server.tool("conduyt_send_sms", "Send an SMS message to a contact. Contact must have a phone number and not have opted out. Max 1600 characters.", {
|
|
5
9
|
contactId: z.string().describe("Contact UUID — must have a phone number on file"),
|
|
6
10
|
body: z.string().describe("SMS message body (max 1600 characters)"),
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
|
-
"generatedAt": "2026-09-
|
|
3
|
-
"toolCount":
|
|
4
|
-
"totalEndpoints":
|
|
2
|
+
"generatedAt": "2026-09-11T17:17:05.004Z",
|
|
3
|
+
"toolCount": 251,
|
|
4
|
+
"totalEndpoints": 958,
|
|
5
5
|
"counts": {
|
|
6
|
-
"covered":
|
|
7
|
-
"excluded":
|
|
8
|
-
"planned":
|
|
6
|
+
"covered": 233,
|
|
7
|
+
"excluded": 284,
|
|
8
|
+
"planned": 441,
|
|
9
9
|
"uncategorized": 0
|
|
10
10
|
},
|
|
11
11
|
"matrix": {
|
|
@@ -1545,6 +1545,10 @@
|
|
|
1545
1545
|
"status": "excluded",
|
|
1546
1546
|
"reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
|
|
1547
1547
|
},
|
|
1548
|
+
"GET /api/v1/cron/hyros-source-sync": {
|
|
1549
|
+
"status": "excluded",
|
|
1550
|
+
"reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
|
|
1551
|
+
},
|
|
1548
1552
|
"GET /api/v1/cron/job-run-monitor": {
|
|
1549
1553
|
"status": "excluded",
|
|
1550
1554
|
"reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
|
|
@@ -2933,6 +2937,10 @@
|
|
|
2933
2937
|
"status": "planned",
|
|
2934
2938
|
"reason": "notification surfaces"
|
|
2935
2939
|
},
|
|
2940
|
+
"GET /api/v1/ops/capacity": {
|
|
2941
|
+
"status": "planned",
|
|
2942
|
+
"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"
|
|
2943
|
+
},
|
|
2936
2944
|
"GET /api/v1/phone-numbers": {
|
|
2937
2945
|
"status": "planned",
|
|
2938
2946
|
"reason": "phone number inventory"
|
|
@@ -3841,6 +3849,12 @@
|
|
|
3841
3849
|
"status": "planned",
|
|
3842
3850
|
"reason": "SMS surfaces beyond send tools"
|
|
3843
3851
|
},
|
|
3852
|
+
"GET /api/v1/sms/transports": {
|
|
3853
|
+
"status": "covered",
|
|
3854
|
+
"tools": [
|
|
3855
|
+
"conduyt_sms_transports"
|
|
3856
|
+
]
|
|
3857
|
+
},
|
|
3844
3858
|
"GET /api/v1/sso/connection": {
|
|
3845
3859
|
"status": "excluded",
|
|
3846
3860
|
"reason": "SAML/SSO configuration + protocol endpoints; interactive/IdP-facing"
|