conduyt-mcp 4.105.0 → 4.105.1

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.
@@ -10,6 +10,7 @@ import { registerAutomationTools } from "./tools/automations.js";
10
10
  import { registerSequenceTools } from "./tools/sequences.js";
11
11
  import { registerMessagingTools } from "./tools/messaging.js";
12
12
  import { registerMessageCheckSettingsTools } from "./tools/message-check-settings.js";
13
+ import { registerAiLocalFilesTools } from "./tools/ai-local-files.js";
13
14
  import { registerCallTools } from "./tools/calls.js";
14
15
  import { registerDialerSettingsTools, registerCallingHoursTools } from "./tools/dialer-settings.js";
15
16
  import { registerCompanyTools } from "./tools/companies.js";
@@ -71,6 +72,7 @@ export function registerAllTools(server, client) {
71
72
  registerSequenceTools(server, client);
72
73
  registerMessagingTools(server, client);
73
74
  registerMessageCheckSettingsTools(server, client);
75
+ registerAiLocalFilesTools(server, client);
74
76
  registerCallTools(server, client);
75
77
  registerDialerSettingsTools(server, client);
76
78
  registerCallingHoursTools(server, client);
@@ -96,6 +96,8 @@ export const TOOL_ANNOTATIONS = {
96
96
  conduyt_appointment_report: ro("Get Appointment Report"),
97
97
  conduyt_funnel_report: ro("Get Funnel Report"),
98
98
  conduyt_get_message_check_minimum_grade: ro("Get Message Check Minimum Grade"),
99
+ conduyt_get_ai_local_files: ro("Get AI Local Files Settings"),
100
+ conduyt_set_ai_local_files: update("Set AI Local Files Settings"),
99
101
  conduyt_update_message_check_minimum_grade: update("Update Message Check Minimum Grade"),
100
102
  conduyt_list_calls: ro("List Calls"),
101
103
  conduyt_search_dialer_history: ro("Search Dialer History"),
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { ConduytClient } from "../client.js";
3
+ export declare function registerAiLocalFilesTools(server: McpServer, client: ConduytClient): void;
@@ -0,0 +1,29 @@
1
+ import { z } from "zod";
2
+ import { formatResult } from "../client.js";
3
+ import { strictInput } from "./strict.js";
4
+ /**
5
+ * (#655 phase 2) Settings › AI › Local files (GET / PATCH /api/v1/settings/ai-local-files): may AI teammates use their OWNER's local
6
+ * files (read on the owner's computer by the owner's own AI, in folders the owner allows there; Conduyt never reads a disk), and the
7
+ * sensitive-number screen on those posts. Both default on. Changing either is owners and admins only, never an AI teammate's key;
8
+ * switching the screen off needs acknowledgeUnscreened: true and is audited. Refusals are surfaced verbatim, never retried.
9
+ */
10
+ const STATE = "{ data: { enabled, sensitiveScreen, aiTeammatesEnabled, canManage } }";
11
+ export function registerAiLocalFilesTools(server, client) {
12
+ strictInput(server.tool("conduyt_get_ai_local_files", `Read Settings › AI › Local files (GET /api/v1/settings/ai-local-files): ${STATE}. enabled: AI teammates may use their owner's local files (read on the owner's computer, in folders the owner allows there, only when the owner's own message asks; default true). sensitiveScreen: a post from local files is refused 422 sensitive_numbers_in_local_post when it contains a full card, Social Security or bank routing + account number (default true). aiTeammatesEnabled: the workspace's AI teammates switch. canManage: this key may change it. Requires the settings scope and settings.view.`, {}, async () => formatResult(await client.get("/api/v1/settings/ai-local-files"))));
13
+ strictInput(server.tool("conduyt_set_ai_local_files", `Change Settings › AI › Local files (PATCH /api/v1/settings/ai-local-files): pass enabled and/or sensitiveScreen; answers ${STATE}. Owners and admins only (403 otherwise; an AI teammate's own key is always 403 agent_key_refused). Switching sensitiveScreen off needs acknowledgeUnscreened: true (400 local_files_screen_acknowledgement_required otherwise): the team accepts that posts from local files are no longer checked for full card, Social Security or bank account numbers; the acknowledgement is not stored, the change is audited (ai_local_files.changed, who, when, old -> new). Switching local files off needs no acknowledgement. Refusals are surfaced verbatim, never retried.`, {
14
+ enabled: z.boolean().optional().describe("AI teammates may use their owner's local files (true) or not (false)"),
15
+ sensitiveScreen: z.boolean().optional().describe("the sensitive-number screen on posts from local files; false needs acknowledgeUnscreened: true"),
16
+ acknowledgeUnscreened: z.boolean().optional().describe("required true with sensitiveScreen: false"),
17
+ }, async ({ enabled, sensitiveScreen, acknowledgeUnscreened }) => {
18
+ if (enabled === undefined && sensitiveScreen === undefined)
19
+ throw new Error("nothing to change: pass enabled and/or sensitiveScreen");
20
+ const body = {};
21
+ if (enabled !== undefined)
22
+ body.enabled = enabled;
23
+ if (sensitiveScreen !== undefined)
24
+ body.sensitiveScreen = sensitiveScreen;
25
+ if (acknowledgeUnscreened !== undefined)
26
+ body.acknowledgeUnscreened = acknowledgeUnscreened;
27
+ return formatResult(await client.patch("/api/v1/settings/ai-local-files", body));
28
+ }));
29
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "conduyt-mcp",
3
- "version": "4.105.0",
3
+ "version": "4.105.1",
4
4
  "mcpName": "com.conduyt/mcp",
5
5
  "description": "MCP server for Conduyt CRM — expose CRM operations as AI-accessible tools",
6
6
  "type": "module",
@@ -25,6 +25,11 @@
25
25
  "status": "excluded",
26
26
  "reason": "CRON_SECRET-gated infrastructure jobs; never key-callable"
27
27
  },
28
+ {
29
+ "match": "POST /api/v1/account-exports",
30
+ "status": "planned",
31
+ "reason": "(#618) starts a background Activity export run (owners and admins; the CSV past 100,000 rows); a typed tool is wanted but not built (the #655 phase 2 parity release only refreshed the snapshot to app f3455749d)"
32
+ },
28
33
  {
29
34
  "match": "GET /api/v1/account-exports/:id/files/:entity/download",
30
35
  "status": "excluded",
@@ -1,11 +1,11 @@
1
1
  {
2
- "generatedAt": "2026-10-30T13:37:28.694Z",
3
- "toolCount": 378,
4
- "totalEndpoints": 1134,
2
+ "generatedAt": "2026-11-05T07:30:55.402Z",
3
+ "toolCount": 380,
4
+ "totalEndpoints": 1143,
5
5
  "counts": {
6
- "covered": 331,
7
- "excluded": 350,
8
- "planned": 453,
6
+ "covered": 333,
7
+ "excluded": 351,
8
+ "planned": 459,
9
9
  "uncategorized": 0
10
10
  },
11
11
  "matrix": {
@@ -265,6 +265,10 @@
265
265
  "conduyt_account_exports_list"
266
266
  ]
267
267
  },
268
+ "POST /api/v1/account-exports": {
269
+ "status": "planned",
270
+ "reason": "(#618) starts a background Activity export run (owners and admins; the CSV past 100,000 rows); a typed tool is wanted but not built (the #655 phase 2 parity release only refreshed the snapshot to app f3455749d)"
271
+ },
268
272
  "GET /api/v1/account-exports/:id/files/:entity/download": {
269
273
  "status": "excluded",
270
274
  "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"
@@ -1337,6 +1341,10 @@
1337
1341
  "status": "excluded",
1338
1342
  "reason": "(#599) session-only (assertSessionOnly): a channel's agents-respond mode is an admin setting; every API key is refused"
1339
1343
  },
1344
+ "GET /api/v1/chat/channels/:id/linked-record": {
1345
+ "status": "planned",
1346
+ "reason": "team chat read/post for agents"
1347
+ },
1340
1348
  "POST /api/v1/chat/channels/:id/members": {
1341
1349
  "status": "planned",
1342
1350
  "reason": "team chat read/post for agents"
@@ -1640,6 +1648,10 @@
1640
1648
  "conduyt_forget_contact"
1641
1649
  ]
1642
1650
  },
1651
+ "GET /api/v1/contacts/:id/phone-reachability": {
1652
+ "status": "planned",
1653
+ "reason": "contact subroutes beyond the core CRUD/search tools"
1654
+ },
1643
1655
  "GET /api/v1/contacts/:id/score": {
1644
1656
  "status": "planned",
1645
1657
  "reason": "contact subroutes beyond the core CRUD/search tools"
@@ -2685,6 +2697,10 @@
2685
2697
  "status": "excluded",
2686
2698
  "reason": "realtime browser dialer (WebRTC tokens, live call control) — needs a live audio session"
2687
2699
  },
2700
+ "GET /api/v1/dialer/status-log/timeline": {
2701
+ "status": "excluded",
2702
+ "reason": "realtime browser dialer (WebRTC tokens, live call control) — needs a live audio session"
2703
+ },
2688
2704
  "POST /api/v1/dialer/token": {
2689
2705
  "status": "excluded",
2690
2706
  "reason": "realtime browser dialer (WebRTC tokens, live call control) — needs a live audio session"
@@ -2885,6 +2901,10 @@
2885
2901
  "conduyt_add_email_opt_out"
2886
2902
  ]
2887
2903
  },
2904
+ "POST /api/v1/email/opt-out-list/check": {
2905
+ "status": "planned",
2906
+ "reason": "bulk email send surfaces"
2907
+ },
2888
2908
  "POST /api/v1/email/opt-out-list/resubscribe": {
2889
2909
  "status": "covered",
2890
2910
  "tools": [
@@ -3169,6 +3189,14 @@
3169
3189
  "status": "planned",
3170
3190
  "reason": "import job monitoring/resubmission (ai-import tool covers creation)"
3171
3191
  },
3192
+ "GET /api/v1/imports/:id/restore": {
3193
+ "status": "planned",
3194
+ "reason": "import job monitoring/resubmission (ai-import tool covers creation)"
3195
+ },
3196
+ "POST /api/v1/imports/:id/restore": {
3197
+ "status": "planned",
3198
+ "reason": "import job monitoring/resubmission (ai-import tool covers creation)"
3199
+ },
3172
3200
  "POST /api/v1/imports/:id/resubmit": {
3173
3201
  "status": "planned",
3174
3202
  "reason": "import job monitoring/resubmission (ai-import tool covers creation)"
@@ -4305,6 +4333,18 @@
4305
4333
  "status": "planned",
4306
4334
  "reason": "account settings read/update surfaces"
4307
4335
  },
4336
+ "GET /api/v1/settings/ai-local-files": {
4337
+ "status": "covered",
4338
+ "tools": [
4339
+ "conduyt_get_ai_local_files"
4340
+ ]
4341
+ },
4342
+ "PATCH /api/v1/settings/ai-local-files": {
4343
+ "status": "covered",
4344
+ "tools": [
4345
+ "conduyt_set_ai_local_files"
4346
+ ]
4347
+ },
4308
4348
  "GET /api/v1/settings/ai-teammates": {
4309
4349
  "status": "excluded",
4310
4350
  "reason": "(#614) session-only (assertSessionOnly): an admin turns AI teammates on or off in Settings > AI (Professional and above, the trial, comp); every API key is refused"