conduyt-mcp 4.13.0 → 4.14.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/index.js
CHANGED
|
@@ -35,6 +35,7 @@ import { registerDashboardTools } from "./tools/dashboard.js";
|
|
|
35
35
|
import { registerAiExtendedTools } from "./tools/ai-extended.js";
|
|
36
36
|
import { registerWorkflowSandboxTools } from "./tools/workflow-sandbox.js";
|
|
37
37
|
import { registerPrivacyTools } from "./tools/privacy.js";
|
|
38
|
+
import { registerAccountExportTools } from "./tools/account-exports.js";
|
|
38
39
|
const apiUrl = process.env.CONDUYT_API_URL;
|
|
39
40
|
const apiKey = process.env.CONDUYT_API_KEY;
|
|
40
41
|
if (!apiUrl || !apiKey) {
|
|
@@ -92,5 +93,6 @@ registerDashboardTools(server, client);
|
|
|
92
93
|
registerAiExtendedTools(server, client);
|
|
93
94
|
registerWorkflowSandboxTools(server, client);
|
|
94
95
|
registerPrivacyTools(server, client);
|
|
96
|
+
registerAccountExportTools(server, client);
|
|
95
97
|
const transport = new StdioServerTransport();
|
|
96
98
|
await server.connect(transport);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { ConduytClient } from "../client.js";
|
|
3
|
+
/**
|
|
4
|
+
* Scheduled account exports (Enterprise): settings + run history.
|
|
5
|
+
*
|
|
6
|
+
* Listing/downloading full-account export files is account-wide PII egress,
|
|
7
|
+
* so the /account-exports endpoints require the EXPLICIT 'account-exports'
|
|
8
|
+
* API-key scope (same posture as 'dnc' — an admin must grant it per key; an
|
|
9
|
+
* unrestricted key does NOT imply it). The settings endpoints ride the
|
|
10
|
+
* normal 'settings' scope. File BYTES are not fetched through MCP (a 50k-row
|
|
11
|
+
* CSV does not belong in a tool result) — tools return metadata plus the
|
|
12
|
+
* authed downloadPath for the API/CLI to retrieve.
|
|
13
|
+
*/
|
|
14
|
+
export declare function registerAccountExportTools(server: McpServer, client: ConduytClient): void;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { formatResult } from "../client.js";
|
|
3
|
+
/**
|
|
4
|
+
* Scheduled account exports (Enterprise): settings + run history.
|
|
5
|
+
*
|
|
6
|
+
* Listing/downloading full-account export files is account-wide PII egress,
|
|
7
|
+
* so the /account-exports endpoints require the EXPLICIT 'account-exports'
|
|
8
|
+
* API-key scope (same posture as 'dnc' — an admin must grant it per key; an
|
|
9
|
+
* unrestricted key does NOT imply it). The settings endpoints ride the
|
|
10
|
+
* normal 'settings' scope. File BYTES are not fetched through MCP (a 50k-row
|
|
11
|
+
* CSV does not belong in a tool result) — tools return metadata plus the
|
|
12
|
+
* authed downloadPath for the API/CLI to retrieve.
|
|
13
|
+
*/
|
|
14
|
+
export function registerAccountExportTools(server, client) {
|
|
15
|
+
server.tool("conduyt_scheduled_export_get_settings", "Get the account's scheduled-export configuration (enabled, frequency, entities) and whether the Enterprise feature is available on the current plan.", {}, async () => {
|
|
16
|
+
const result = await client.get("/api/v1/settings/scheduled-export");
|
|
17
|
+
return formatResult(result);
|
|
18
|
+
});
|
|
19
|
+
server.tool("conduyt_scheduled_export_update_settings", "Update scheduled-export settings. Enabling requires an Enterprise plan (403 upsell otherwise). Omitted fields keep their current values. Weekly exports run on Mondays; all exports run in the morning of the account timezone and files are kept 14 days.", {
|
|
20
|
+
enabled: z.boolean().optional().describe("Turn scheduled exports on/off"),
|
|
21
|
+
frequency: z.enum(["daily", "weekly"]).optional().describe("How often to export (weekly = Mondays)"),
|
|
22
|
+
entities: z
|
|
23
|
+
.array(z.enum(["contacts", "deals", "companies"]))
|
|
24
|
+
.min(1)
|
|
25
|
+
.optional()
|
|
26
|
+
.describe("Which entities to include"),
|
|
27
|
+
}, async (params) => {
|
|
28
|
+
const result = await client.patch("/api/v1/settings/scheduled-export", params);
|
|
29
|
+
return formatResult(result);
|
|
30
|
+
});
|
|
31
|
+
server.tool("conduyt_account_exports_list", "List recent scheduled account-export runs with per-file metadata (rows, truncation, size, expiry) and authed downloadPath for each completed file. Requires the explicit 'account-exports' API-key scope. Download the CSV bytes via the API or CLI using downloadPath — not through MCP.", {}, async () => {
|
|
32
|
+
const result = await client.get("/api/v1/account-exports");
|
|
33
|
+
return formatResult(result);
|
|
34
|
+
});
|
|
35
|
+
}
|
package/package.json
CHANGED
|
@@ -15,6 +15,11 @@
|
|
|
15
15
|
"status": "excluded",
|
|
16
16
|
"reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
|
|
17
17
|
},
|
|
18
|
+
{
|
|
19
|
+
"match": "GET /api/v1/account-exports/:id/files/:entity/download",
|
|
20
|
+
"status": "excluded",
|
|
21
|
+
"reason": "raw CSV bytes (up to 50k rows) do not belong in a tool result; conduyt_account_exports_list returns the authed downloadPath for API/CLI retrieval"
|
|
22
|
+
},
|
|
18
23
|
{
|
|
19
24
|
"match": "/api/v1/auth/",
|
|
20
25
|
"status": "excluded",
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
|
-
"generatedAt": "2026-07-
|
|
3
|
-
"toolCount":
|
|
4
|
-
"totalEndpoints":
|
|
2
|
+
"generatedAt": "2026-07-23T16:00:26.290Z",
|
|
3
|
+
"toolCount": 165,
|
|
4
|
+
"totalEndpoints": 827,
|
|
5
5
|
"counts": {
|
|
6
|
-
"covered":
|
|
7
|
-
"excluded":
|
|
8
|
-
"planned":
|
|
6
|
+
"covered": 154,
|
|
7
|
+
"excluded": 240,
|
|
8
|
+
"planned": 433,
|
|
9
9
|
"uncategorized": 0
|
|
10
10
|
},
|
|
11
11
|
"matrix": {
|
|
@@ -211,6 +211,16 @@
|
|
|
211
211
|
"status": "excluded",
|
|
212
212
|
"reason": "email open/click tracking pixels and redirects — recipient-facing"
|
|
213
213
|
},
|
|
214
|
+
"GET /api/v1/account-exports": {
|
|
215
|
+
"status": "covered",
|
|
216
|
+
"tools": [
|
|
217
|
+
"conduyt_account_exports_list"
|
|
218
|
+
]
|
|
219
|
+
},
|
|
220
|
+
"GET /api/v1/account-exports/:id/files/:entity/download": {
|
|
221
|
+
"status": "excluded",
|
|
222
|
+
"reason": "raw CSV bytes (up to 50k rows) do not belong in a tool result; conduyt_account_exports_list returns the authed downloadPath for API/CLI retrieval"
|
|
223
|
+
},
|
|
214
224
|
"GET /api/v1/account/readiness": {
|
|
215
225
|
"status": "planned",
|
|
216
226
|
"reason": "account readiness/onboarding surfaces"
|
|
@@ -1177,6 +1187,10 @@
|
|
|
1177
1187
|
"conduyt_export_contact_data"
|
|
1178
1188
|
]
|
|
1179
1189
|
},
|
|
1190
|
+
"GET /api/v1/contacts/:id/gdpr-export/files/:fileId/download": {
|
|
1191
|
+
"status": "planned",
|
|
1192
|
+
"reason": "contact subroutes beyond the core CRUD/search tools"
|
|
1193
|
+
},
|
|
1180
1194
|
"POST /api/v1/contacts/:id/gdpr-forget": {
|
|
1181
1195
|
"status": "covered",
|
|
1182
1196
|
"tools": [
|
|
@@ -1399,6 +1413,10 @@
|
|
|
1399
1413
|
"status": "excluded",
|
|
1400
1414
|
"reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
|
|
1401
1415
|
},
|
|
1416
|
+
"GET /api/v1/cron/process-external-deletions": {
|
|
1417
|
+
"status": "excluded",
|
|
1418
|
+
"reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
|
|
1419
|
+
},
|
|
1402
1420
|
"GET /api/v1/cron/process-import-side-effects": {
|
|
1403
1421
|
"status": "excluded",
|
|
1404
1422
|
"reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
|
|
@@ -1407,6 +1425,10 @@
|
|
|
1407
1425
|
"status": "excluded",
|
|
1408
1426
|
"reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
|
|
1409
1427
|
},
|
|
1428
|
+
"GET /api/v1/cron/process-outbox": {
|
|
1429
|
+
"status": "excluded",
|
|
1430
|
+
"reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
|
|
1431
|
+
},
|
|
1410
1432
|
"GET /api/v1/cron/process-playbook-steps": {
|
|
1411
1433
|
"status": "excluded",
|
|
1412
1434
|
"reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
|
|
@@ -1443,6 +1465,14 @@
|
|
|
1443
1465
|
"status": "excluded",
|
|
1444
1466
|
"reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
|
|
1445
1467
|
},
|
|
1468
|
+
"GET /api/v1/cron/reconcile-document-sends": {
|
|
1469
|
+
"status": "excluded",
|
|
1470
|
+
"reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
|
|
1471
|
+
},
|
|
1472
|
+
"POST /api/v1/cron/reconcile-document-sends": {
|
|
1473
|
+
"status": "excluded",
|
|
1474
|
+
"reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
|
|
1475
|
+
},
|
|
1446
1476
|
"GET /api/v1/cron/recurring-tasks": {
|
|
1447
1477
|
"status": "excluded",
|
|
1448
1478
|
"reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
|
|
@@ -1479,6 +1509,18 @@
|
|
|
1479
1509
|
"status": "excluded",
|
|
1480
1510
|
"reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
|
|
1481
1511
|
},
|
|
1512
|
+
"GET /api/v1/cron/scheduled-account-exports": {
|
|
1513
|
+
"status": "excluded",
|
|
1514
|
+
"reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
|
|
1515
|
+
},
|
|
1516
|
+
"POST /api/v1/cron/scheduled-account-exports": {
|
|
1517
|
+
"status": "excluded",
|
|
1518
|
+
"reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
|
|
1519
|
+
},
|
|
1520
|
+
"GET /api/v1/cron/seat-threshold-alerts": {
|
|
1521
|
+
"status": "excluded",
|
|
1522
|
+
"reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
|
|
1523
|
+
},
|
|
1482
1524
|
"GET /api/v1/cron/send-scheduled-emails": {
|
|
1483
1525
|
"status": "excluded",
|
|
1484
1526
|
"reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
|
|
@@ -2249,6 +2291,10 @@
|
|
|
2249
2291
|
"status": "planned",
|
|
2250
2292
|
"reason": "import job monitoring/resubmission (ai-import tool covers creation)"
|
|
2251
2293
|
},
|
|
2294
|
+
"POST /api/v1/imports/upload-url": {
|
|
2295
|
+
"status": "planned",
|
|
2296
|
+
"reason": "import job monitoring/resubmission (ai-import tool covers creation)"
|
|
2297
|
+
},
|
|
2252
2298
|
"GET /api/v1/imports/users": {
|
|
2253
2299
|
"status": "planned",
|
|
2254
2300
|
"reason": "import job monitoring/resubmission (ai-import tool covers creation)"
|
|
@@ -2997,6 +3043,18 @@
|
|
|
2997
3043
|
"status": "planned",
|
|
2998
3044
|
"reason": "account settings read/update surfaces"
|
|
2999
3045
|
},
|
|
3046
|
+
"GET /api/v1/settings/scheduled-export": {
|
|
3047
|
+
"status": "covered",
|
|
3048
|
+
"tools": [
|
|
3049
|
+
"conduyt_scheduled_export_get_settings"
|
|
3050
|
+
]
|
|
3051
|
+
},
|
|
3052
|
+
"PATCH /api/v1/settings/scheduled-export": {
|
|
3053
|
+
"status": "covered",
|
|
3054
|
+
"tools": [
|
|
3055
|
+
"conduyt_scheduled_export_update_settings"
|
|
3056
|
+
]
|
|
3057
|
+
},
|
|
3000
3058
|
"GET /api/v1/settings/sms": {
|
|
3001
3059
|
"status": "planned",
|
|
3002
3060
|
"reason": "account settings read/update surfaces"
|