@opencx/mcp 1.11.16 → 1.11.33
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/api-client.d.ts +17 -12
- package/dist/api-client.d.ts.map +1 -1
- package/dist/api-client.js +35 -56
- package/dist/api-client.js.map +1 -1
- package/dist/api-client.spec.js +51 -89
- package/dist/api-client.spec.js.map +1 -1
- package/dist/schema.d.ts +12706 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +6 -0
- package/dist/schema.js.map +1 -0
- package/dist/server.js +2 -2
- package/dist/server.js.map +1 -1
- package/dist/server.spec.js +54 -51
- package/dist/server.spec.js.map +1 -1
- package/dist/tools/actions.d.ts +1 -1
- package/dist/tools/actions.d.ts.map +1 -1
- package/dist/tools/actions.js +26 -16
- package/dist/tools/actions.js.map +1 -1
- package/dist/tools/audit-logs.d.ts +1 -1
- package/dist/tools/audit-logs.d.ts.map +1 -1
- package/dist/tools/audit-logs.js +50 -42
- package/dist/tools/audit-logs.js.map +1 -1
- package/dist/tools/autopilot.d.ts +1 -1
- package/dist/tools/autopilot.d.ts.map +1 -1
- package/dist/tools/autopilot.js +5 -4
- package/dist/tools/autopilot.js.map +1 -1
- package/dist/tools/blocklist.d.ts +1 -1
- package/dist/tools/blocklist.d.ts.map +1 -1
- package/dist/tools/blocklist.js +20 -20
- package/dist/tools/blocklist.js.map +1 -1
- package/dist/tools/contact-segments.d.ts +1 -1
- package/dist/tools/contact-segments.d.ts.map +1 -1
- package/dist/tools/contact-segments.js +15 -12
- package/dist/tools/contact-segments.js.map +1 -1
- package/dist/tools/contacts.d.ts +1 -1
- package/dist/tools/contacts.d.ts.map +1 -1
- package/dist/tools/contacts.js +23 -11
- package/dist/tools/contacts.js.map +1 -1
- package/dist/tools/coworker.d.ts +1 -1
- package/dist/tools/coworker.d.ts.map +1 -1
- package/dist/tools/coworker.js +54 -43
- package/dist/tools/coworker.js.map +1 -1
- package/dist/tools/crawl.d.ts +1 -1
- package/dist/tools/crawl.d.ts.map +1 -1
- package/dist/tools/crawl.js +43 -14
- package/dist/tools/crawl.js.map +1 -1
- package/dist/tools/csat.d.ts +1 -1
- package/dist/tools/csat.d.ts.map +1 -1
- package/dist/tools/csat.js +16 -10
- package/dist/tools/csat.js.map +1 -1
- package/dist/tools/email.d.ts +1 -1
- package/dist/tools/email.d.ts.map +1 -1
- package/dist/tools/email.js +23 -9
- package/dist/tools/email.js.map +1 -1
- package/dist/tools/firecrawl.d.ts.map +1 -1
- package/dist/tools/firecrawl.js +31 -24
- package/dist/tools/firecrawl.js.map +1 -1
- package/dist/tools/handoff-analytics.d.ts +1 -1
- package/dist/tools/handoff-analytics.d.ts.map +1 -1
- package/dist/tools/handoff-analytics.js +5 -6
- package/dist/tools/handoff-analytics.js.map +1 -1
- package/dist/tools/help-center.d.ts +1 -1
- package/dist/tools/help-center.d.ts.map +1 -1
- package/dist/tools/help-center.js +41 -11
- package/dist/tools/help-center.js.map +1 -1
- package/dist/tools/impact-report.d.ts +1 -1
- package/dist/tools/impact-report.d.ts.map +1 -1
- package/dist/tools/impact-report.js +15 -11
- package/dist/tools/impact-report.js.map +1 -1
- package/dist/tools/insights.d.ts +1 -1
- package/dist/tools/insights.d.ts.map +1 -1
- package/dist/tools/insights.js +104 -15
- package/dist/tools/insights.js.map +1 -1
- package/dist/tools/media.d.ts +1 -1
- package/dist/tools/media.d.ts.map +1 -1
- package/dist/tools/media.js +2 -3
- package/dist/tools/media.js.map +1 -1
- package/dist/tools/office-hours.d.ts +1 -1
- package/dist/tools/office-hours.d.ts.map +1 -1
- package/dist/tools/office-hours.js +42 -10
- package/dist/tools/office-hours.js.map +1 -1
- package/dist/tools/onboarding.d.ts.map +1 -1
- package/dist/tools/onboarding.js +8 -5
- package/dist/tools/onboarding.js.map +1 -1
- package/dist/tools/org.d.ts +1 -1
- package/dist/tools/org.d.ts.map +1 -1
- package/dist/tools/org.js +5 -4
- package/dist/tools/org.js.map +1 -1
- package/dist/tools/phone.d.ts +1 -1
- package/dist/tools/phone.d.ts.map +1 -1
- package/dist/tools/phone.js +66 -48
- package/dist/tools/phone.js.map +1 -1
- package/dist/tools/redaction.d.ts +1 -1
- package/dist/tools/redaction.d.ts.map +1 -1
- package/dist/tools/redaction.js +5 -4
- package/dist/tools/redaction.js.map +1 -1
- package/dist/tools/search.d.ts +1 -1
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/search.js +3 -2
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/sequences.d.ts +1 -1
- package/dist/tools/sequences.d.ts.map +1 -1
- package/dist/tools/sequences.js +26 -14
- package/dist/tools/sequences.js.map +1 -1
- package/dist/tools/sessions.d.ts +1 -1
- package/dist/tools/sessions.d.ts.map +1 -1
- package/dist/tools/sessions.js +150 -123
- package/dist/tools/sessions.js.map +1 -1
- package/dist/tools/sla-analytics.d.ts +1 -1
- package/dist/tools/sla-analytics.d.ts.map +1 -1
- package/dist/tools/sla-analytics.js +31 -45
- package/dist/tools/sla-analytics.js.map +1 -1
- package/dist/tools/sla.d.ts +1 -1
- package/dist/tools/sla.d.ts.map +1 -1
- package/dist/tools/sla.js +18 -16
- package/dist/tools/sla.js.map +1 -1
- package/dist/tools/tags.d.ts +1 -1
- package/dist/tools/tags.d.ts.map +1 -1
- package/dist/tools/tags.js +11 -11
- package/dist/tools/tags.js.map +1 -1
- package/dist/tools/teams.d.ts +1 -1
- package/dist/tools/teams.d.ts.map +1 -1
- package/dist/tools/teams.js +24 -17
- package/dist/tools/teams.js.map +1 -1
- package/dist/tools/todos.d.ts +1 -1
- package/dist/tools/todos.d.ts.map +1 -1
- package/dist/tools/todos.js +30 -21
- package/dist/tools/todos.js.map +1 -1
- package/dist/tools/training.d.ts +1 -1
- package/dist/tools/training.d.ts.map +1 -1
- package/dist/tools/training.js +110 -64
- package/dist/tools/training.js.map +1 -1
- package/dist/tools/users.d.ts +1 -1
- package/dist/tools/users.d.ts.map +1 -1
- package/dist/tools/users.js +35 -23
- package/dist/tools/users.js.map +1 -1
- package/dist/tools/whatsapp.d.ts +1 -1
- package/dist/tools/whatsapp.d.ts.map +1 -1
- package/dist/tools/whatsapp.js +11 -2
- package/dist/tools/whatsapp.js.map +1 -1
- package/dist/tools/widget.d.ts +1 -1
- package/dist/tools/widget.d.ts.map +1 -1
- package/dist/tools/widget.js +3 -2
- package/dist/tools/widget.js.map +1 -1
- package/dist/tools/workflows.d.ts +1 -1
- package/dist/tools/workflows.d.ts.map +1 -1
- package/dist/tools/workflows.js +164 -93
- package/dist/tools/workflows.js.map +1 -1
- package/dist/utils/json.d.ts +9 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +10 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/session-channel.d.ts +4 -0
- package/dist/utils/session-channel.d.ts.map +1 -0
- package/dist/utils/session-channel.js +15 -0
- package/dist/utils/session-channel.js.map +1 -0
- package/dist/workflow-editor-state.d.ts +12 -2
- package/dist/workflow-editor-state.d.ts.map +1 -1
- package/dist/workflow-editor-state.js.map +1 -1
- package/dist/workflows.spec.d.ts +2 -0
- package/dist/workflows.spec.d.ts.map +1 -0
- package/dist/workflows.spec.js +109 -0
- package/dist/workflows.spec.js.map +1 -0
- package/package.json +5 -2
package/dist/tools/blocklist.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import {
|
|
2
|
+
import { jsonContent } from '../api-client.js';
|
|
3
3
|
export function registerBlocklistTools(server, client) {
|
|
4
4
|
// ── Blocked Contacts ──
|
|
5
5
|
server.registerTool('list_blocked_contacts', {
|
|
@@ -19,11 +19,10 @@ export function registerBlocklistTools(server, client) {
|
|
|
19
19
|
.describe('Results per page (default: 20). String or number.'),
|
|
20
20
|
},
|
|
21
21
|
}, async ({ page, limit }) => {
|
|
22
|
-
const data = await client.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
return { content: [{ type: 'text', text: JSON.stringify(data) }] };
|
|
22
|
+
const data = (await client.GET('/blocklist/contacts', {
|
|
23
|
+
params: { query: { page, limit } },
|
|
24
|
+
})).data;
|
|
25
|
+
return jsonContent(data);
|
|
27
26
|
});
|
|
28
27
|
server.registerTool('block_contact', {
|
|
29
28
|
description: 'Block a contact by email. The AI will stop responding to messages from this contact.',
|
|
@@ -32,21 +31,23 @@ export function registerBlocklistTools(server, client) {
|
|
|
32
31
|
reason: z.string().optional().describe('Why the contact is being blocked'),
|
|
33
32
|
},
|
|
34
33
|
}, async (params) => {
|
|
35
|
-
await client.
|
|
34
|
+
await client.POST('/blocklist/contacts', { body: params });
|
|
36
35
|
return { content: [{ type: 'text', text: `Contact ${params.email} blocked.` }] };
|
|
37
36
|
});
|
|
38
37
|
server.registerTool('check_contact_blocked', {
|
|
39
38
|
description: 'Check whether a specific contact is currently blocked.',
|
|
40
39
|
inputSchema: { contact_id: z.string().describe('The contact ID to check') },
|
|
41
40
|
}, async ({ contact_id }) => {
|
|
42
|
-
const data = await client.
|
|
43
|
-
|
|
41
|
+
const data = (await client.GET('/blocklist/contacts/check/{contact_id}', {
|
|
42
|
+
params: { path: { contact_id } },
|
|
43
|
+
})).data;
|
|
44
|
+
return jsonContent(data);
|
|
44
45
|
});
|
|
45
46
|
server.registerTool('unblock_contact', {
|
|
46
47
|
description: 'Remove a contact from the blocklist. The AI will resume responding to them.',
|
|
47
48
|
inputSchema: { id: z.string().describe('The block record ID (from list_blocked_contacts)') },
|
|
48
49
|
}, async ({ id }) => {
|
|
49
|
-
await client.
|
|
50
|
+
await client.DELETE('/blocklist/contacts/{id}', { params: { path: { id } } });
|
|
50
51
|
return { content: [{ type: 'text', text: `Contact unblocked.` }] };
|
|
51
52
|
});
|
|
52
53
|
// ── Blocked Domains ──
|
|
@@ -67,11 +68,10 @@ export function registerBlocklistTools(server, client) {
|
|
|
67
68
|
.describe('Results per page (default: 20). String or number.'),
|
|
68
69
|
},
|
|
69
70
|
}, async ({ page, limit }) => {
|
|
70
|
-
const data = await client.
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
return { content: [{ type: 'text', text: JSON.stringify(data) }] };
|
|
71
|
+
const data = (await client.GET('/blocklist/domains', {
|
|
72
|
+
params: { query: { page, limit } },
|
|
73
|
+
})).data;
|
|
74
|
+
return jsonContent(data);
|
|
75
75
|
});
|
|
76
76
|
server.registerTool('block_domains', {
|
|
77
77
|
description: 'Block one or more email domains. Pass comma-separated for multiple (e.g. "spam.com, junk.org"). Messages from these domains will be ignored by the AI.',
|
|
@@ -80,21 +80,21 @@ export function registerBlocklistTools(server, client) {
|
|
|
80
80
|
reason: z.string().optional().describe('Why these domains are being blocked'),
|
|
81
81
|
},
|
|
82
82
|
}, async (params) => {
|
|
83
|
-
const data = await client.
|
|
84
|
-
return
|
|
83
|
+
const data = (await client.POST('/blocklist/domains', { body: params })).data;
|
|
84
|
+
return jsonContent(data);
|
|
85
85
|
});
|
|
86
86
|
server.registerTool('check_domain_blocked', {
|
|
87
87
|
description: 'Check if a domain or email is blocked. Pass either a domain (e.g. "spam.com") or full email (e.g. "user@spam.com").',
|
|
88
88
|
inputSchema: { value: z.string().describe('A domain or email to check') },
|
|
89
89
|
}, async ({ value }) => {
|
|
90
|
-
const data = await client.
|
|
91
|
-
return
|
|
90
|
+
const data = (await client.GET('/blocklist/domains/check', { params: { query: { value } } })).data;
|
|
91
|
+
return jsonContent(data);
|
|
92
92
|
});
|
|
93
93
|
server.registerTool('unblock_domain', {
|
|
94
94
|
description: 'Remove a domain from the blocklist.',
|
|
95
95
|
inputSchema: { id: z.string().describe('The block record ID (from list_blocked_domains)') },
|
|
96
96
|
}, async ({ id }) => {
|
|
97
|
-
await client.
|
|
97
|
+
await client.DELETE('/blocklist/domains/{id}', { params: { path: { id } } });
|
|
98
98
|
return { content: [{ type: 'text', text: `Domain unblocked.` }] };
|
|
99
99
|
});
|
|
100
100
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blocklist.js","sourceRoot":"","sources":["../../src/tools/blocklist.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,
|
|
1
|
+
{"version":3,"file":"blocklist.js","sourceRoot":"","sources":["../../src/tools/blocklist.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
-
import { OpenCXClient } from '../api-client.js';
|
|
2
|
+
import type { OpenCXClient } from '../api-client.js';
|
|
3
3
|
export declare function registerContactSegmentTools(server: McpServer, client: OpenCXClient): void;
|
|
4
4
|
//# sourceMappingURL=contact-segments.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contact-segments.d.ts","sourceRoot":"","sources":["../../src/tools/contact-segments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"contact-segments.d.ts","sourceRoot":"","sources":["../../src/tools/contact-segments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,QA2ElF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import {
|
|
2
|
+
import { jsonContent } from '../api-client.js';
|
|
3
3
|
export function registerContactSegmentTools(server, client) {
|
|
4
4
|
server.registerTool('list_contact_segments', {
|
|
5
5
|
description: 'List contact segments defined in your organization. Segments are saved filter criteria over contacts (e.g. "VIP customers", "Trial users"). Returns paginated definitions including the underlying filter rules.',
|
|
@@ -8,11 +8,10 @@ export function registerContactSegmentTools(server, client) {
|
|
|
8
8
|
limit: z.number().int().min(1).max(100).optional().describe('Items per page (max 100)'),
|
|
9
9
|
},
|
|
10
10
|
}, async ({ page, limit }) => {
|
|
11
|
-
const data = await client.
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
return { content: [{ type: 'text', text: JSON.stringify(data) }] };
|
|
11
|
+
const data = (await client.GET('/contacts/segments', {
|
|
12
|
+
params: { query: { page, limit } },
|
|
13
|
+
})).data;
|
|
14
|
+
return jsonContent(data);
|
|
16
15
|
});
|
|
17
16
|
server.registerTool('get_contact_segment', {
|
|
18
17
|
description: 'Get a single contact segment definition by ID, including its filter rules.',
|
|
@@ -20,8 +19,8 @@ export function registerContactSegmentTools(server, client) {
|
|
|
20
19
|
segment_id: z.string().describe('The ID of the segment to fetch'),
|
|
21
20
|
},
|
|
22
21
|
}, async ({ segment_id }) => {
|
|
23
|
-
const data = await client.
|
|
24
|
-
return
|
|
22
|
+
const data = (await client.GET('/contacts/segments/{segment_id}', { params: { path: { segment_id } } })).data;
|
|
23
|
+
return jsonContent(data);
|
|
25
24
|
});
|
|
26
25
|
server.registerTool('list_segments_for_contact', {
|
|
27
26
|
description: 'List all segments that a specific contact currently belongs to. A contact can be a member of multiple segments at once. Use this when you want to know every cohort the contact is in, rather than checking a single segment.',
|
|
@@ -29,8 +28,10 @@ export function registerContactSegmentTools(server, client) {
|
|
|
29
28
|
contact_id: z.string().describe('The ID of the contact'),
|
|
30
29
|
},
|
|
31
30
|
}, async ({ contact_id }) => {
|
|
32
|
-
const data = await client.
|
|
33
|
-
|
|
31
|
+
const data = (await client.GET('/contacts/segments/contacts/{contact_id}', {
|
|
32
|
+
params: { path: { contact_id } },
|
|
33
|
+
})).data;
|
|
34
|
+
return jsonContent(data);
|
|
34
35
|
});
|
|
35
36
|
server.registerTool('check_contact_in_segment', {
|
|
36
37
|
description: 'Check whether a specific contact is currently a member of a specific segment. Returns { is_member: boolean }. Use this to gate behavior on cohort membership (e.g. "is this contact a VIP?").',
|
|
@@ -39,8 +40,10 @@ export function registerContactSegmentTools(server, client) {
|
|
|
39
40
|
contact_id: z.string().describe('The ID of the contact'),
|
|
40
41
|
},
|
|
41
42
|
}, async ({ segment_id, contact_id }) => {
|
|
42
|
-
const data = await client.
|
|
43
|
-
|
|
43
|
+
const data = (await client.GET('/contacts/segments/{segment_id}/contacts/{contact_id}', {
|
|
44
|
+
params: { path: { segment_id, contact_id } },
|
|
45
|
+
})).data;
|
|
46
|
+
return jsonContent(data);
|
|
44
47
|
});
|
|
45
48
|
}
|
|
46
49
|
//# sourceMappingURL=contact-segments.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contact-segments.js","sourceRoot":"","sources":["../../src/tools/contact-segments.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,
|
|
1
|
+
{"version":3,"file":"contact-segments.js","sourceRoot":"","sources":["../../src/tools/contact-segments.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/contacts.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
-
import { OpenCXClient } from '../api-client.js';
|
|
2
|
+
import type { OpenCXClient } from '../api-client.js';
|
|
3
3
|
export declare function registerContactTools(server: McpServer, client: OpenCXClient): void;
|
|
4
4
|
//# sourceMappingURL=contacts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contacts.d.ts","sourceRoot":"","sources":["../../src/tools/contacts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"contacts.d.ts","sourceRoot":"","sources":["../../src/tools/contacts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAMrD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,QA+F3E"}
|
package/dist/tools/contacts.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import {
|
|
2
|
+
import { jsonContent } from '../api-client.js';
|
|
3
3
|
export function registerContactTools(server, client) {
|
|
4
4
|
server.registerTool('list_contacts', {
|
|
5
5
|
description: 'List contacts in your organization. Returns a paginated list of contacts with their email, phone, name, and custom data. Use the cursor from the response to fetch the next page.',
|
|
@@ -7,8 +7,8 @@ export function registerContactTools(server, client) {
|
|
|
7
7
|
cursor: z.string().optional().describe('Pagination cursor from a previous response'),
|
|
8
8
|
},
|
|
9
9
|
}, async ({ cursor }) => {
|
|
10
|
-
const data = await client.
|
|
11
|
-
return
|
|
10
|
+
const data = (await client.GET('/contacts', { params: { query: { cursor } } })).data;
|
|
11
|
+
return jsonContent(data);
|
|
12
12
|
});
|
|
13
13
|
server.registerTool('create_contact', {
|
|
14
14
|
description: 'Create a new contact in your organization. At least one of email or phone is recommended for identification. Custom data can store arbitrary key-value pairs.',
|
|
@@ -17,20 +17,23 @@ export function registerContactTools(server, client) {
|
|
|
17
17
|
phone: z.string().optional().describe('Contact phone number'),
|
|
18
18
|
name: z.string().optional().describe('Contact display name'),
|
|
19
19
|
custom_data: z
|
|
20
|
-
.record(z.string(), z.
|
|
20
|
+
.record(z.string(), z.string())
|
|
21
21
|
.optional()
|
|
22
22
|
.describe('Arbitrary key-value pairs to store on the contact'),
|
|
23
23
|
},
|
|
24
24
|
}, async (params) => {
|
|
25
|
-
const
|
|
25
|
+
const body = {
|
|
26
26
|
contact: {
|
|
27
27
|
email: params.email,
|
|
28
28
|
phone: params.phone,
|
|
29
29
|
name: params.name,
|
|
30
30
|
custom_data: params.custom_data,
|
|
31
31
|
},
|
|
32
|
-
}
|
|
33
|
-
|
|
32
|
+
};
|
|
33
|
+
const data = (await client.POST('/contacts', {
|
|
34
|
+
body,
|
|
35
|
+
})).data;
|
|
36
|
+
return jsonContent(data);
|
|
34
37
|
});
|
|
35
38
|
server.registerTool('update_contact', {
|
|
36
39
|
description: 'Update an existing contact. Only the provided fields will be changed; omitted fields remain unchanged.',
|
|
@@ -40,13 +43,22 @@ export function registerContactTools(server, client) {
|
|
|
40
43
|
phone: z.string().optional().describe('New phone number'),
|
|
41
44
|
name: z.string().optional().describe('New display name'),
|
|
42
45
|
custom_data: z
|
|
43
|
-
.record(z.string(), z.
|
|
46
|
+
.record(z.string(), z.string())
|
|
44
47
|
.optional()
|
|
45
48
|
.describe('Key-value pairs to merge into existing custom data'),
|
|
46
49
|
},
|
|
47
50
|
}, async ({ contact_id, ...fields }) => {
|
|
48
|
-
const
|
|
49
|
-
|
|
51
|
+
const body = {
|
|
52
|
+
contact: {
|
|
53
|
+
...fields,
|
|
54
|
+
custom_data: fields.custom_data,
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
const data = (await client.PATCH('/contacts/{contact_id}', {
|
|
58
|
+
params: { path: { contact_id } },
|
|
59
|
+
body,
|
|
60
|
+
})).data;
|
|
61
|
+
return jsonContent(data);
|
|
50
62
|
});
|
|
51
63
|
server.registerTool('delete_contact', {
|
|
52
64
|
description: 'Permanently delete a contact by ID. This action cannot be undone.',
|
|
@@ -54,7 +66,7 @@ export function registerContactTools(server, client) {
|
|
|
54
66
|
contact_id: z.string().describe('The ID of the contact to delete'),
|
|
55
67
|
},
|
|
56
68
|
}, async ({ contact_id }) => {
|
|
57
|
-
await client.
|
|
69
|
+
await client.DELETE('/contacts/{contact_id}', { params: { path: { contact_id } } });
|
|
58
70
|
return { content: [{ type: 'text', text: `Contact ${contact_id} deleted successfully.` }] };
|
|
59
71
|
});
|
|
60
72
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contacts.js","sourceRoot":"","sources":["../../src/tools/contacts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,
|
|
1
|
+
{"version":3,"file":"contacts.js","sourceRoot":"","sources":["../../src/tools/contacts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAO/C,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,MAAoB;IAC1E,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,WAAW,EACT,mLAAmL;QACrL,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;SACrF;KACF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QACnB,MAAM,IAAI,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACrF,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,WAAW,EACT,+JAA+J;QACjK,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YACtE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YAC7D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YAC5D,WAAW,EAAE,CAAC;iBACX,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;iBAC9B,QAAQ,EAAE;iBACV,QAAQ,CAAC,mDAAmD,CAAC;SACjE;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,IAAI,GAAsB;YAC9B,OAAO,EAAE;gBACP,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,WAAW,EAAE,MAAM,CAAC,WAAW;aAChC;SACF,CAAC;QACF,MAAM,IAAI,GAAG,CACX,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE;YAC7B,IAAI;SACL,CAAC,CACH,CAAC,IAAI,CAAC;QACP,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,WAAW,EACT,wGAAwG;QAC1G,WAAW,EAAE;YACX,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;YAClE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YAClE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YACzD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YACxD,WAAW,EAAE,CAAC;iBACX,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;iBAC9B,QAAQ,EAAE;iBACV,QAAQ,CAAC,oDAAoD,CAAC;SAClE;KACF,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE;QAClC,MAAM,IAAI,GAAsB;YAC9B,OAAO,EAAE;gBACP,GAAG,MAAM;gBACT,WAAW,EAAE,MAAM,CAAC,WAAW;aAChC;SACF,CAAC;QACF,MAAM,IAAI,GAAG,CACX,MAAM,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE;YAC3C,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE;YAChC,IAAI;SACL,CAAC,CACH,CAAC,IAAI,CAAC;QACP,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,WAAW,EAAE,mEAAmE;QAChF,WAAW,EAAE;YACX,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;SACnE;KACF,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QACvB,MAAM,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QACpF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,UAAU,wBAAwB,EAAE,CAAC,EAAE,CAAC;IAC9F,CAAC,CACF,CAAC;AACJ,CAAC"}
|
package/dist/tools/coworker.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
-
import {
|
|
2
|
+
import type { OpenCXClient } from '../api-client.js';
|
|
3
3
|
export declare function registerCoworkerTools(server: McpServer, client: OpenCXClient): void;
|
|
4
4
|
//# sourceMappingURL=coworker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coworker.d.ts","sourceRoot":"","sources":["../../src/tools/coworker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"coworker.d.ts","sourceRoot":"","sources":["../../src/tools/coworker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAsCrD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,QA4G5E"}
|
package/dist/tools/coworker.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import {
|
|
2
|
+
import { jsonContent } from '../api-client.js';
|
|
3
3
|
const sessionEventsResponseSchema = z.object({
|
|
4
4
|
events: z.array(z.object({
|
|
5
5
|
kind: z.string(),
|
|
@@ -32,53 +32,62 @@ Always ASK the user first: "Want me to notify the OpenCX team about this?" Only
|
|
|
32
32
|
|
|
33
33
|
Provide a clear summary of what the user needs and any context about what you tried.`;
|
|
34
34
|
export function registerCoworkerTools(server, client) {
|
|
35
|
-
server.
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
.string()
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
35
|
+
server.registerTool('investigate_session_debug', {
|
|
36
|
+
description: INVESTIGATE_SESSION_DEBUG_DESCRIPTION,
|
|
37
|
+
inputSchema: {
|
|
38
|
+
session_id: z
|
|
39
|
+
.string()
|
|
40
|
+
.uuid()
|
|
41
|
+
.optional()
|
|
42
|
+
.describe('Customer support / inbox session UUID (NOT the coworker chat session ID)'),
|
|
43
|
+
ticket_number: z.string().optional().describe('Ticket number to resolve to a session'),
|
|
44
|
+
date_from: z.string().datetime({ offset: true }).optional().describe('ISO 8601 start date'),
|
|
45
|
+
date_to: z.string().datetime({ offset: true }).optional().describe('ISO 8601 end date'),
|
|
46
|
+
channel_type: z
|
|
47
|
+
.string()
|
|
48
|
+
.optional()
|
|
49
|
+
.describe('Filter by channel (web, whatsapp, email, etc.)'),
|
|
50
|
+
contact_name: z.string().optional().describe('Filter by contact name (partial match)'),
|
|
51
|
+
contact_email: z.string().optional().describe('Filter by contact email (partial match)'),
|
|
52
|
+
keyword: z.string().optional().describe('Search keyword to match against message text'),
|
|
53
|
+
},
|
|
51
54
|
}, async (params) => {
|
|
52
|
-
const data = await client.
|
|
53
|
-
return
|
|
55
|
+
const data = (await client.POST('/chat/sessions/investigate-debug', { body: params })).data;
|
|
56
|
+
return jsonContent(data);
|
|
54
57
|
});
|
|
55
|
-
server.
|
|
56
|
-
|
|
57
|
-
|
|
58
|
+
server.registerTool('notify_opencx_team', {
|
|
59
|
+
description: NOTIFY_TEAM_DESCRIPTION,
|
|
60
|
+
inputSchema: {
|
|
61
|
+
summary: z.string().min(1).max(2000).describe('Summary of what the user needs help with'),
|
|
62
|
+
context: z.string().max(4000).optional().describe('Additional context about the situation'),
|
|
63
|
+
},
|
|
58
64
|
}, async (params) => {
|
|
59
|
-
const data = await client.
|
|
60
|
-
return
|
|
65
|
+
const data = (await client.POST('/companion/notify-team', { body: params })).data;
|
|
66
|
+
return jsonContent(data);
|
|
61
67
|
});
|
|
62
|
-
server.
|
|
68
|
+
server.registerTool('recall_conversation_history', {
|
|
69
|
+
description: `Retrieve earlier conversation history when your context has been compacted.
|
|
63
70
|
Returns parsed entries (messages, tool calls, reasoning) from the current coworker session.
|
|
64
71
|
Use when you notice gaps in memory or need to reference earlier context.
|
|
65
|
-
Supports filters to narrow results — prefer filtering over loading everything.`,
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
72
|
+
Supports filters to narrow results — prefer filtering over loading everything.`,
|
|
73
|
+
inputSchema: {
|
|
74
|
+
kind: z.enum(['message', 'tool', 'reasoning']).optional().describe('Filter by entry type'),
|
|
75
|
+
role: z
|
|
76
|
+
.enum(['user', 'assistant'])
|
|
77
|
+
.optional()
|
|
78
|
+
.describe('Filter messages by role (only applies when kind=message)'),
|
|
79
|
+
keyword: z
|
|
80
|
+
.string()
|
|
81
|
+
.optional()
|
|
82
|
+
.describe('Case-insensitive text search across message text and tool names'),
|
|
83
|
+
limit: z
|
|
84
|
+
.number()
|
|
85
|
+
.int()
|
|
86
|
+
.min(1)
|
|
87
|
+
.max(500)
|
|
88
|
+
.optional()
|
|
89
|
+
.describe('Max entries to return (default 100, newest first)'),
|
|
90
|
+
},
|
|
82
91
|
}, async ({ kind, role, keyword, limit = 100 }) => {
|
|
83
92
|
const sessionId = client.coworkerSessionId;
|
|
84
93
|
if (!sessionId) {
|
|
@@ -87,7 +96,9 @@ Supports filters to narrow results — prefer filtering over loading everything.
|
|
|
87
96
|
isError: true,
|
|
88
97
|
};
|
|
89
98
|
}
|
|
90
|
-
const data = sessionEventsResponseSchema.parse(await client.
|
|
99
|
+
const data = sessionEventsResponseSchema.parse((await client.GET('/companion/sessions/{id}', {
|
|
100
|
+
params: { path: { id: sessionId } },
|
|
101
|
+
})).data);
|
|
91
102
|
const kw = keyword?.toLowerCase();
|
|
92
103
|
let entries = data.events;
|
|
93
104
|
if (kind || role || kw) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coworker.js","sourceRoot":"","sources":["../../src/tools/coworker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,
|
|
1
|
+
{"version":3,"file":"coworker.js","sourceRoot":"","sources":["../../src/tools/coworker.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/crawl.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
-
import { OpenCXClient } from '../api-client.js';
|
|
2
|
+
import type { OpenCXClient } from '../api-client.js';
|
|
3
3
|
export declare function registerCrawlTools(server: McpServer, client: OpenCXClient): void;
|
|
4
4
|
//# sourceMappingURL=crawl.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crawl.d.ts","sourceRoot":"","sources":["../../src/tools/crawl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"crawl.d.ts","sourceRoot":"","sources":["../../src/tools/crawl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,QAsIzE"}
|
package/dist/tools/crawl.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import {
|
|
2
|
+
import { jsonContent } from '../api-client.js';
|
|
3
3
|
export function registerCrawlTools(server, client) {
|
|
4
4
|
server.registerTool('list_datasources', {
|
|
5
5
|
description: 'List website datasources configured for knowledge base crawling. Each datasource represents a website whose pages are crawled and synced into the AI knowledge base.',
|
|
@@ -8,8 +8,15 @@ export function registerCrawlTools(server, client) {
|
|
|
8
8
|
limit: z.string().optional().describe('Results per page (default 20)'),
|
|
9
9
|
},
|
|
10
10
|
}, async (params) => {
|
|
11
|
-
const data = await client.
|
|
12
|
-
|
|
11
|
+
const data = (await client.GET('/crawl', {
|
|
12
|
+
params: {
|
|
13
|
+
query: {
|
|
14
|
+
page: params.page ? Number(params.page) : undefined,
|
|
15
|
+
limit: params.limit ? Number(params.limit) : undefined,
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
})).data;
|
|
19
|
+
return jsonContent(data);
|
|
13
20
|
});
|
|
14
21
|
server.registerTool('create_datasource', {
|
|
15
22
|
description: 'Create a new website datasource and automatically start crawling from the given URL. Pages discovered during the crawl are added to the knowledge base. No need to call start_crawl after this — the first crawl begins immediately.',
|
|
@@ -18,22 +25,32 @@ export function registerCrawlTools(server, client) {
|
|
|
18
25
|
name: z.string().optional().describe('A friendly name for this datasource'),
|
|
19
26
|
},
|
|
20
27
|
}, async (params) => {
|
|
21
|
-
const data = await client.
|
|
22
|
-
|
|
28
|
+
const data = (await client.POST('/crawl', {
|
|
29
|
+
body: {
|
|
30
|
+
url: params.url,
|
|
31
|
+
display_name: params.name,
|
|
32
|
+
page_limit: 100,
|
|
33
|
+
exclude_paths: [],
|
|
34
|
+
include_paths: [],
|
|
35
|
+
crawl_interval_hours: 168,
|
|
36
|
+
auto_start_crawl: true,
|
|
37
|
+
},
|
|
38
|
+
})).data;
|
|
39
|
+
return jsonContent(data);
|
|
23
40
|
});
|
|
24
41
|
server.registerTool('get_datasource', {
|
|
25
42
|
description: 'Get details of a specific website datasource, including its configuration and crawl status.',
|
|
26
43
|
inputSchema: { id: z.string().describe('The datasource ID') },
|
|
27
44
|
}, async ({ id }) => {
|
|
28
|
-
const data = await client.
|
|
29
|
-
return
|
|
45
|
+
const data = (await client.GET('/crawl/{id}', { params: { path: { id } } })).data;
|
|
46
|
+
return jsonContent(data);
|
|
30
47
|
});
|
|
31
48
|
server.registerTool('start_crawl', {
|
|
32
49
|
description: 'Re-crawl an existing website datasource to discover new or updated pages. Only one crawl can run at a time per datasource. Only needed for subsequent crawls — create_datasource already triggers the first crawl automatically.',
|
|
33
50
|
inputSchema: { id: z.string().describe('The datasource ID to crawl') },
|
|
34
51
|
}, async ({ id }) => {
|
|
35
|
-
const data = await client.
|
|
36
|
-
return
|
|
52
|
+
const data = (await client.POST('/crawl/{id}/crawl', { params: { path: { id } } })).data;
|
|
53
|
+
return jsonContent(data);
|
|
37
54
|
});
|
|
38
55
|
server.registerTool('get_crawl_status', {
|
|
39
56
|
description: 'Get the status and progress of a specific crawl job.',
|
|
@@ -42,8 +59,10 @@ export function registerCrawlTools(server, client) {
|
|
|
42
59
|
job_id: z.string().describe('The crawl job ID'),
|
|
43
60
|
},
|
|
44
61
|
}, async ({ datasource_id, job_id }) => {
|
|
45
|
-
const data = await client.
|
|
46
|
-
|
|
62
|
+
const data = (await client.GET('/crawl/{id}/crawls/{jobId}', {
|
|
63
|
+
params: { path: { id: datasource_id, jobId: job_id } },
|
|
64
|
+
})).data;
|
|
65
|
+
return jsonContent(data);
|
|
47
66
|
});
|
|
48
67
|
server.registerTool('list_crawled_pages', {
|
|
49
68
|
description: 'List pages discovered by a website datasource crawl. Can filter by sync status and search by URL or title.',
|
|
@@ -54,9 +73,19 @@ export function registerCrawlTools(server, client) {
|
|
|
54
73
|
sync_status: z.string().optional().describe('Filter by sync status'),
|
|
55
74
|
search: z.string().optional().describe('Search pages by URL or title'),
|
|
56
75
|
},
|
|
57
|
-
}, async ({ datasource_id,
|
|
58
|
-
const data = await client.
|
|
59
|
-
|
|
76
|
+
}, async ({ datasource_id, page, limit, sync_status, search }) => {
|
|
77
|
+
const data = (await client.GET('/crawl/{id}/pages', {
|
|
78
|
+
params: {
|
|
79
|
+
path: { id: datasource_id },
|
|
80
|
+
query: {
|
|
81
|
+
page: page ? Number(page) : undefined,
|
|
82
|
+
limit: limit ? Number(limit) : undefined,
|
|
83
|
+
sync_status: sync_status,
|
|
84
|
+
search,
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
})).data;
|
|
88
|
+
return jsonContent(data);
|
|
60
89
|
});
|
|
61
90
|
}
|
|
62
91
|
//# sourceMappingURL=crawl.js.map
|