conduyt-mcp 4.4.0 → 4.6.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/tools/contacts.js +8 -0
- package/dist/tools/deals.js +19 -0
- package/package.json +2 -2
package/dist/tools/contacts.js
CHANGED
|
@@ -77,6 +77,14 @@ export function registerContactTools(server, client) {
|
|
|
77
77
|
const result = await client.patch(`/api/v1/contacts/${id}`, body);
|
|
78
78
|
return formatResult(result);
|
|
79
79
|
});
|
|
80
|
+
server.tool("conduyt_delete_contact", "Delete a contact by UUID (soft-delete — the contact is removed from lists/searches but the row is retained for audit, and its deals are unaffected). Use this to clean up test or duplicate contacts. There is no undelete endpoint, so treat it as irreversible via the API.", {
|
|
81
|
+
// .uuid() so a malformed id with slashes can't form a different DELETE
|
|
82
|
+
// subroute (e.g. /contacts/:id/tags/:tagId); encode the segment too.
|
|
83
|
+
id: z.string().uuid().describe("Contact UUID to delete"),
|
|
84
|
+
}, async ({ id }) => {
|
|
85
|
+
const result = await client.del(`/api/v1/contacts/${encodeURIComponent(id)}`);
|
|
86
|
+
return formatResult(result);
|
|
87
|
+
});
|
|
80
88
|
server.tool("conduyt_add_tags", "Add one or more existing tags to a contact by tag UUID. Tags must already exist (create them with conduyt_create_tag); this does NOT create tags.", {
|
|
81
89
|
contactId: z.string().describe("Contact UUID"),
|
|
82
90
|
tagIds: z.array(z.string()).describe("Tag UUIDs to add (must already exist)"),
|
package/dist/tools/deals.js
CHANGED
|
@@ -107,6 +107,14 @@ export function registerDealTools(server, client) {
|
|
|
107
107
|
const result = await client.patch(`/api/v1/deals/${id}`, updates);
|
|
108
108
|
return formatResult(result);
|
|
109
109
|
});
|
|
110
|
+
server.tool("conduyt_delete_deal", "Delete a deal by UUID (soft-delete — the deal is removed from lists/boards and its value drops out of pipeline totals, but the row is retained for audit). Use this to clean up test or mistaken deals. There is no undelete endpoint, so treat it as irreversible via the API.", {
|
|
111
|
+
// .uuid() so a malformed id with slashes can't form a different DELETE
|
|
112
|
+
// subroute (e.g. /deals/views/:id); encode the segment too as defence in depth.
|
|
113
|
+
id: z.string().uuid().describe("Deal UUID to delete"),
|
|
114
|
+
}, async ({ id }) => {
|
|
115
|
+
const result = await client.del(`/api/v1/deals/${encodeURIComponent(id)}`);
|
|
116
|
+
return formatResult(result);
|
|
117
|
+
});
|
|
110
118
|
server.tool("conduyt_import_deals", "Bulk-import deals from a list of rows in one call. Runs on the canonical import engine — pipelines and stages are resolved by NAME (create them first with conduyt_create_pipeline), contacts by email. Deduplicates on title + pipeline + contact, and intentionally does NOT fire deal-created automations/webhooks/SMS/email (bulk imports are side-effect-free by design). Requires an owner/admin API key. Returns the created/skipped/duplicate counts and any per-row errors.", {
|
|
111
119
|
deals: z
|
|
112
120
|
.array(z.object({
|
|
@@ -141,4 +149,15 @@ export function registerDealTools(server, client) {
|
|
|
141
149
|
const result = await client.post(`/api/v1/imports/${jobId}/process`, {});
|
|
142
150
|
return formatResult({ jobId, ...result });
|
|
143
151
|
});
|
|
152
|
+
server.tool("conduyt_add_deal_tags", "Tag a deal with one or more EXISTING tags by tag UUID. Tags must already exist (create them with conduyt_create_tag); this does NOT create tags. Deals support tags just like contacts — use this to segment high-value or priority deals. To tag several deals, call this once per deal.", {
|
|
153
|
+
dealId: z.string().describe("Deal UUID"),
|
|
154
|
+
tagIds: z.array(z.string()).describe("Tag UUIDs to add to the deal (must already exist; non-empty)"),
|
|
155
|
+
}, async ({ dealId, tagIds }) => {
|
|
156
|
+
const result = await client.post(`/api/v1/deals/${dealId}/tags`, { tagIds });
|
|
157
|
+
return formatResult(result);
|
|
158
|
+
});
|
|
159
|
+
server.tool("conduyt_list_deal_views", "List the account's SAVED DEAL VIEWS (saved deal segments, e.g. 'Open deals over $10k'), each with its id, name, stored filter rules, and current deal count. Read-only — shows how the account segments its deals.", {}, async () => {
|
|
160
|
+
const result = await client.get("/api/v1/deals/views");
|
|
161
|
+
return formatResult(result);
|
|
162
|
+
});
|
|
144
163
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "conduyt-mcp",
|
|
3
|
-
"version": "4.
|
|
4
|
-
"description": "MCP server for Conduyt CRM
|
|
3
|
+
"version": "4.6.0",
|
|
4
|
+
"description": "MCP server for Conduyt CRM — expose CRM operations as AI-accessible tools",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|