conduyt-mcp 4.3.0 → 4.3.2
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
|
@@ -45,7 +45,7 @@ if (!apiKey.startsWith("cdy_")) {
|
|
|
45
45
|
const client = new ConduytClient({ apiUrl, apiKey });
|
|
46
46
|
const server = new McpServer({
|
|
47
47
|
name: "conduyt",
|
|
48
|
-
version: "4.3.
|
|
48
|
+
version: "4.3.2",
|
|
49
49
|
});
|
|
50
50
|
registerDiscoveryTools(server, client);
|
|
51
51
|
registerContactTools(server, client);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { formatResult } from "../client.js";
|
|
3
3
|
export function registerCustomFieldTools(server, client) {
|
|
4
|
-
server.tool("conduyt_list_custom_fields", "List custom field definitions. Filter by entity type (contact or
|
|
5
|
-
entityType: z.enum(["contact", "deal"]).optional().describe("Filter by entity type"),
|
|
4
|
+
server.tool("conduyt_list_custom_fields", "List custom field definitions. Filter by entity type (contact, deal, or company) to see available fields.", {
|
|
5
|
+
entityType: z.enum(["contact", "deal", "company"]).optional().describe("Filter by entity type"),
|
|
6
6
|
page: z.number().optional().describe("Page number (default 1)"),
|
|
7
7
|
per_page: z.number().optional().describe("Results per page"),
|
|
8
8
|
}, async ({ entityType, page, per_page }) => {
|
|
@@ -16,8 +16,8 @@ export function registerCustomFieldTools(server, client) {
|
|
|
16
16
|
const result = await client.get(`/api/v1/custom-fields?${params}`);
|
|
17
17
|
return formatResult(result);
|
|
18
18
|
});
|
|
19
|
-
server.tool("conduyt_create_custom_field", "Create a new custom field definition for contacts or
|
|
20
|
-
entityType: z.enum(["contact", "deal"]).describe("Entity type this field applies to"),
|
|
19
|
+
server.tool("conduyt_create_custom_field", "Create a new custom field definition for contacts, deals, or companies. Field types: text, number, date, select, multiselect, boolean.", {
|
|
20
|
+
entityType: z.enum(["contact", "deal", "company"]).describe("Entity type this field applies to"),
|
|
21
21
|
fieldKey: z.string().describe("Unique field key (alphanumeric + underscores, e.g. 'lead_score')"),
|
|
22
22
|
label: z.string().describe("Human-readable label (e.g. 'Lead Score')"),
|
|
23
23
|
fieldType: z.enum(["text", "number", "date", "select", "multiselect", "boolean"]).describe("Field data type"),
|
package/dist/tools/discovery.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { formatResult } from "../client.js";
|
|
3
3
|
export function registerDiscoveryTools(server, client) {
|
|
4
|
-
server.tool("conduyt_api_catalog", "Discover all Conduyt CRM API endpoints
|
|
4
|
+
server.tool("conduyt_api_catalog", "Discover all Conduyt CRM API endpoints across 90+ domains, with full request and response schemas. Call this first to learn what the CRM can do — the response carries the exact, current endpoint counts.", {}, async () => {
|
|
5
5
|
const result = await client.get("/api/v1/schema/api-catalog");
|
|
6
6
|
return formatResult(result);
|
|
7
7
|
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { ConduytClient } from "../client.js";
|
|
3
|
+
/**
|
|
4
|
+
* Document knowledge base (RAG) — tier 2 of Conduyt's AI model: "use our AI with
|
|
5
|
+
* YOUR model." Uploaded documents are retrieved and fed to the chat model on
|
|
6
|
+
* every call, so the feature is gated to accounts running their OWN AI engine
|
|
7
|
+
* (BYO key). Caps: BYO = 20 docs, + $50/mo AI Knowledge add-on = 100, >100 is
|
|
8
|
+
* handled manually ("reach out to us").
|
|
9
|
+
*
|
|
10
|
+
* All JSON surfaces (API / MCP / CLI) expose the same subset: list / add-URL /
|
|
11
|
+
* delete / reindex. Binary file upload (TXT/MD/CSV) is multipart and is web-UI
|
|
12
|
+
* only — neither MCP tool calls nor the generated CLI carry a file body.
|
|
13
|
+
*/
|
|
14
|
+
export declare function registerKnowledgeTools(server: McpServer, client: ConduytClient): void;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { formatResult } from "../client.js";
|
|
3
|
+
/**
|
|
4
|
+
* Document knowledge base (RAG) — tier 2 of Conduyt's AI model: "use our AI with
|
|
5
|
+
* YOUR model." Uploaded documents are retrieved and fed to the chat model on
|
|
6
|
+
* every call, so the feature is gated to accounts running their OWN AI engine
|
|
7
|
+
* (BYO key). Caps: BYO = 20 docs, + $50/mo AI Knowledge add-on = 100, >100 is
|
|
8
|
+
* handled manually ("reach out to us").
|
|
9
|
+
*
|
|
10
|
+
* All JSON surfaces (API / MCP / CLI) expose the same subset: list / add-URL /
|
|
11
|
+
* delete / reindex. Binary file upload (TXT/MD/CSV) is multipart and is web-UI
|
|
12
|
+
* only — neither MCP tool calls nor the generated CLI carry a file body.
|
|
13
|
+
*/
|
|
14
|
+
export function registerKnowledgeTools(server, client) {
|
|
15
|
+
server.tool("conduyt_list_knowledge_sources", "List the account's AI knowledge-base documents and the current entitlement. Returns each source (name, type, status: queued|indexing|indexed|stale|failed) plus byoActive (whether the document KB is unlocked by an own-AI-key), addon (whether the $50/mo add-on is active), docLimit, and used count.", {}, async () => {
|
|
16
|
+
const result = await client.get("/api/v1/knowledge/sources");
|
|
17
|
+
return formatResult(result);
|
|
18
|
+
});
|
|
19
|
+
server.tool("conduyt_add_knowledge_url", "Add a web page to the AI knowledge base by URL. The page is scraped, chunked, embedded, and becomes retrievable for AI answers. Requires the account to have its own AI key connected (byoActive) and to be under its document cap. To add a file (TXT/MD/CSV), use the web UI — file upload is multipart and not available over MCP or CLI.", {
|
|
20
|
+
url: z.string().describe("Public http(s) URL of the page to learn from"),
|
|
21
|
+
name: z.string().optional().describe("Optional friendly name (defaults to the URL)"),
|
|
22
|
+
}, async (params) => {
|
|
23
|
+
const result = await client.post("/api/v1/knowledge/sources", params);
|
|
24
|
+
return formatResult(result);
|
|
25
|
+
});
|
|
26
|
+
server.tool("conduyt_delete_knowledge_source", "Remove a document from the AI knowledge base. Deletes the stored file (if any) and all of its embeddings. Account-scoped.", {
|
|
27
|
+
id: z.string().describe("Knowledge source UUID"),
|
|
28
|
+
}, async ({ id }) => {
|
|
29
|
+
const result = await client.del(`/api/v1/knowledge/sources/${id}`);
|
|
30
|
+
return formatResult(result);
|
|
31
|
+
});
|
|
32
|
+
server.tool("conduyt_reindex_knowledge_source", "Re-learn a document — re-fetches/re-extracts and rebuilds its embeddings. Use to refresh a URL whose content changed, or to retry a source that failed indexing.", {
|
|
33
|
+
id: z.string().describe("Knowledge source UUID"),
|
|
34
|
+
}, async ({ id }) => {
|
|
35
|
+
const result = await client.post(`/api/v1/knowledge/sources/${id}/reindex`, {});
|
|
36
|
+
return formatResult(result);
|
|
37
|
+
});
|
|
38
|
+
}
|
|
@@ -43,12 +43,15 @@ export function registerSmartListTools(server, client) {
|
|
|
43
43
|
page: z.number().optional().describe("Page number"),
|
|
44
44
|
per_page: z.number().optional().describe("Results per page"),
|
|
45
45
|
}, async ({ smartListId, page, per_page }) => {
|
|
46
|
-
|
|
46
|
+
// There is no GET /smart-lists/:id/contacts route; contacts are fetched
|
|
47
|
+
// from the contacts list filtered by smartListId (static lists return
|
|
48
|
+
// members, dynamic lists run the saved filter).
|
|
49
|
+
const params = new URLSearchParams({ smartListId });
|
|
47
50
|
if (page)
|
|
48
51
|
params.set("page", String(page));
|
|
49
52
|
if (per_page)
|
|
50
53
|
params.set("per_page", String(per_page));
|
|
51
|
-
const result = await client.get(`/api/v1/
|
|
54
|
+
const result = await client.get(`/api/v1/contacts?${params}`);
|
|
52
55
|
return formatResult(result);
|
|
53
56
|
});
|
|
54
57
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "conduyt-mcp",
|
|
3
|
-
"version": "4.3.
|
|
4
|
-
"description": "MCP server for Conduyt CRM
|
|
3
|
+
"version": "4.3.2",
|
|
4
|
+
"description": "MCP server for Conduyt CRM \u2014 expose CRM operations as AI-accessible tools",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -20,7 +20,9 @@
|
|
|
20
20
|
"start": "tsx src/index.ts",
|
|
21
21
|
"build": "tsc",
|
|
22
22
|
"typecheck": "tsc --noEmit",
|
|
23
|
-
"prepublishOnly": "npm run build"
|
|
23
|
+
"prepublishOnly": "npm run build && ENFORCE=1 node scripts/verify-contracts.mjs",
|
|
24
|
+
"audit:contracts": "node scripts/verify-contracts.mjs",
|
|
25
|
+
"contracts:refresh": "node scripts/refresh-contracts.mjs"
|
|
24
26
|
},
|
|
25
27
|
"keywords": [
|
|
26
28
|
"mcp",
|