@opencx/mcp 1.0.0 → 1.7.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/server.d.ts.map +1 -1
- package/dist/server.js +16 -0
- package/dist/server.js.map +1 -1
- package/dist/tools/actions.d.ts +4 -0
- package/dist/tools/actions.d.ts.map +1 -0
- package/dist/tools/actions.js +76 -0
- package/dist/tools/actions.js.map +1 -0
- package/dist/tools/autopilot.d.ts +4 -0
- package/dist/tools/autopilot.d.ts.map +1 -0
- package/dist/tools/autopilot.js +17 -0
- package/dist/tools/autopilot.js.map +1 -0
- package/dist/tools/blocklist.d.ts +4 -0
- package/dist/tools/blocklist.d.ts.map +1 -0
- package/dist/tools/blocklist.js +57 -0
- package/dist/tools/blocklist.js.map +1 -0
- package/dist/tools/csat.js +1 -1
- package/dist/tools/csat.js.map +1 -1
- package/dist/tools/handoff-analytics.d.ts +4 -0
- package/dist/tools/handoff-analytics.d.ts.map +1 -0
- package/dist/tools/handoff-analytics.js +17 -0
- package/dist/tools/handoff-analytics.js.map +1 -0
- package/dist/tools/office-hours.d.ts +4 -0
- package/dist/tools/office-hours.d.ts.map +1 -0
- package/dist/tools/office-hours.js +47 -0
- package/dist/tools/office-hours.js.map +1 -0
- package/dist/tools/org.js +1 -1
- package/dist/tools/org.js.map +1 -1
- package/dist/tools/phone.d.ts.map +1 -1
- package/dist/tools/phone.js +67 -18
- package/dist/tools/phone.js.map +1 -1
- package/dist/tools/search.d.ts +4 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +12 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/sequences.js +1 -1
- package/dist/tools/sequences.js.map +1 -1
- package/dist/tools/sessions.d.ts.map +1 -1
- package/dist/tools/sessions.js +35 -0
- package/dist/tools/sessions.js.map +1 -1
- package/dist/tools/tags.d.ts +4 -0
- package/dist/tools/tags.d.ts.map +1 -0
- package/dist/tools/tags.js +39 -0
- package/dist/tools/tags.js.map +1 -0
- package/dist/tools/teams.js +1 -1
- package/dist/tools/teams.js.map +1 -1
- package/dist/tools/training.d.ts.map +1 -1
- package/dist/tools/training.js +148 -10
- package/dist/tools/training.js.map +1 -1
- package/dist/tools/workflows.d.ts +4 -0
- package/dist/tools/workflows.d.ts.map +1 -0
- package/dist/tools/workflows.js +189 -0
- package/dist/tools/workflows.js.map +1 -0
- package/package.json +1 -1
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAuBpE,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CA8BvE"}
|
package/dist/server.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
2
|
import { OpenCXClient } from './api-client.js';
|
|
3
|
+
import { registerActionTools } from './tools/actions.js';
|
|
4
|
+
import { registerAutopilotTools } from './tools/autopilot.js';
|
|
5
|
+
import { registerBlocklistTools } from './tools/blocklist.js';
|
|
3
6
|
import { registerContactTools } from './tools/contacts.js';
|
|
4
7
|
import { registerSessionTools } from './tools/sessions.js';
|
|
5
8
|
import { registerTrainingTools } from './tools/training.js';
|
|
@@ -9,15 +12,23 @@ import { registerTeamTools } from './tools/teams.js';
|
|
|
9
12
|
import { registerEmailTools } from './tools/email.js';
|
|
10
13
|
import { registerPhoneTools } from './tools/phone.js';
|
|
11
14
|
import { registerOrgTools } from './tools/org.js';
|
|
15
|
+
import { registerSearchTools } from './tools/search.js';
|
|
12
16
|
import { registerSequenceTools } from './tools/sequences.js';
|
|
17
|
+
import { registerOfficeHoursTools } from './tools/office-hours.js';
|
|
18
|
+
import { registerTagTools } from './tools/tags.js';
|
|
13
19
|
import { registerCsatTools } from './tools/csat.js';
|
|
14
20
|
import { registerWhatsAppTools } from './tools/whatsapp.js';
|
|
21
|
+
import { registerHandoffAnalyticsTools } from './tools/handoff-analytics.js';
|
|
22
|
+
import { registerWorkflowTools } from './tools/workflows.js';
|
|
15
23
|
export function createServer(apiKey, baseUrl) {
|
|
16
24
|
const server = new McpServer({
|
|
17
25
|
name: 'OpenCX',
|
|
18
26
|
version: '0.1.0',
|
|
19
27
|
});
|
|
20
28
|
const client = new OpenCXClient(apiKey, baseUrl);
|
|
29
|
+
registerActionTools(server, client);
|
|
30
|
+
registerAutopilotTools(server, client);
|
|
31
|
+
registerBlocklistTools(server, client);
|
|
21
32
|
registerContactTools(server, client);
|
|
22
33
|
registerSessionTools(server, client);
|
|
23
34
|
registerTrainingTools(server, client);
|
|
@@ -27,9 +38,14 @@ export function createServer(apiKey, baseUrl) {
|
|
|
27
38
|
registerEmailTools(server, client);
|
|
28
39
|
registerPhoneTools(server, client);
|
|
29
40
|
registerOrgTools(server, client);
|
|
41
|
+
registerSearchTools(server, client);
|
|
30
42
|
registerSequenceTools(server, client);
|
|
43
|
+
registerOfficeHoursTools(server, client);
|
|
44
|
+
registerTagTools(server, client);
|
|
31
45
|
registerCsatTools(server, client);
|
|
32
46
|
registerWhatsAppTools(server, client);
|
|
47
|
+
registerHandoffAnalyticsTools(server, client);
|
|
48
|
+
registerWorkflowTools(server, client);
|
|
33
49
|
return server;
|
|
34
50
|
}
|
|
35
51
|
//# sourceMappingURL=server.js.map
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/tools/actions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAY,MAAM,kBAAkB,CAAC;AAE1D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,QA6G1E"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { safePath } from '../api-client.js';
|
|
3
|
+
export function registerActionTools(server, client) {
|
|
4
|
+
server.tool('list_actions', 'List all actions (HTTP API calls) the AI agent can make during conversations. Actions define what APIs the AI can call to take real-world actions on behalf of users.', {}, async () => {
|
|
5
|
+
const data = await client.get('/actions/');
|
|
6
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
7
|
+
});
|
|
8
|
+
server.tool('get_action', 'Get a single action by ID, including its full OpenAPI-style payload specification (parameters, request body, responses).', { action_id: z.string().describe('The action ID') }, async ({ action_id }) => {
|
|
9
|
+
const data = await client.get(`/actions/${safePath(action_id)}`);
|
|
10
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
11
|
+
});
|
|
12
|
+
server.tool('create_action', 'Create a new action the AI agent can call. The payload field uses OpenAPI-style specs to define parameters, request body, and responses. The AI uses this to construct API calls during conversations.', {
|
|
13
|
+
name: z.string().describe('Action display name (e.g. "Get Order Status")'),
|
|
14
|
+
description: z.string().optional().describe('What this action does'),
|
|
15
|
+
api_endpoint: z.string().describe('The full API endpoint URL to call'),
|
|
16
|
+
request_type: z
|
|
17
|
+
.enum(['GET', 'POST', 'PUT', 'PATCH', 'DELETE'])
|
|
18
|
+
.describe('HTTP method'),
|
|
19
|
+
operation_id: z
|
|
20
|
+
.string()
|
|
21
|
+
.optional()
|
|
22
|
+
.describe('Unique operation ID (auto-generated from name if omitted)'),
|
|
23
|
+
payload: z
|
|
24
|
+
.record(z.string(), z.unknown())
|
|
25
|
+
.describe('OpenAPI-style operation spec with parameters, requestBody, responses. ' +
|
|
26
|
+
'Example: { "parameters": [{ "name": "order_id", "in": "path", "required": true, "schema": { "type": "string" } }], ' +
|
|
27
|
+
'"requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" } } } } } } }'),
|
|
28
|
+
enabled_on_channel: z
|
|
29
|
+
.object({
|
|
30
|
+
channels: z
|
|
31
|
+
.array(z.string())
|
|
32
|
+
.describe('Channels: "web", "email", "whatsapp", "phone_voice", "sms", "slack", etc.'),
|
|
33
|
+
})
|
|
34
|
+
.optional()
|
|
35
|
+
.describe('Channel restrictions (defaults to web only)'),
|
|
36
|
+
pinned: z.boolean().optional().describe('Pin this action prominently'),
|
|
37
|
+
tags: z.array(z.string()).optional().describe('Tags for organizing actions'),
|
|
38
|
+
}, async (params) => {
|
|
39
|
+
const data = await client.post('/actions/', params);
|
|
40
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
41
|
+
});
|
|
42
|
+
server.tool('update_action', 'Update an existing action. Only the fields you provide will be changed; omitted fields keep their current values.', {
|
|
43
|
+
action_id: z.string().describe('The action ID to update'),
|
|
44
|
+
name: z.string().optional().describe('New action display name'),
|
|
45
|
+
description: z.string().optional().describe('New description of what the action does'),
|
|
46
|
+
api_endpoint: z.string().optional().describe('New API endpoint URL'),
|
|
47
|
+
request_type: z
|
|
48
|
+
.enum(['GET', 'POST', 'PUT', 'PATCH', 'DELETE'])
|
|
49
|
+
.optional()
|
|
50
|
+
.describe('New HTTP method'),
|
|
51
|
+
payload: z
|
|
52
|
+
.record(z.string(), z.unknown())
|
|
53
|
+
.optional()
|
|
54
|
+
.describe('New OpenAPI-style operation spec (parameters, requestBody, responses)'),
|
|
55
|
+
enabled_on_channel: z
|
|
56
|
+
.object({
|
|
57
|
+
channels: z.array(z.string()).describe('Channel names: "web", "email", "whatsapp", etc.'),
|
|
58
|
+
})
|
|
59
|
+
.optional()
|
|
60
|
+
.describe('New channel restrictions'),
|
|
61
|
+
pinned: z.boolean().optional().describe('Whether to pin this action prominently'),
|
|
62
|
+
tags: z.array(z.string()).optional().describe('New tags for organizing'),
|
|
63
|
+
}, async ({ action_id, ...body }) => {
|
|
64
|
+
const data = await client.patch(`/actions/${safePath(action_id)}`, body);
|
|
65
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
66
|
+
});
|
|
67
|
+
server.tool('delete_action', 'Permanently delete a single action by ID.', { action_id: z.string().describe('The action ID to delete') }, async ({ action_id }) => {
|
|
68
|
+
await client.delete(`/actions/${safePath(action_id)}`);
|
|
69
|
+
return { content: [{ type: 'text', text: `Action ${action_id} deleted.` }] };
|
|
70
|
+
});
|
|
71
|
+
server.tool('list_action_tags', 'Get all unique tags used across actions in your organization.', {}, async () => {
|
|
72
|
+
const data = await client.get('/actions/tags');
|
|
73
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/tools/actions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autopilot.d.ts","sourceRoot":"","sources":["../../src/tools/autopilot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,QAyB7E"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export function registerAutopilotTools(server, client) {
|
|
3
|
+
server.tool('get_autopilot_status', 'Get the autopilot enabled/disabled status for each channel (web, email, phone, whatsapp, slack, sms, etc.). When autopilot is enabled, the AI automatically responds to customers on that channel.', {}, async () => {
|
|
4
|
+
const data = await client.get('/autopilot/');
|
|
5
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
6
|
+
});
|
|
7
|
+
server.tool('set_autopilot', 'Enable or disable AI autopilot for a specific channel. When disabled, conversations on that channel go directly to human agents.', {
|
|
8
|
+
channel: z
|
|
9
|
+
.enum(['web', 'email', 'phone', 'whatsapp', 'slack', 'sms', 'instagram', 'messenger', 'api', 'web_voice'])
|
|
10
|
+
.describe('The channel to update'),
|
|
11
|
+
autopilot_enabled: z.boolean().describe('Set true to enable autopilot, false to disable'),
|
|
12
|
+
}, async (params) => {
|
|
13
|
+
const data = await client.put('/autopilot/', params);
|
|
14
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=autopilot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autopilot.js","sourceRoot":"","sources":["../../src/tools/autopilot.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,sBAAsB,CAAC,MAAiB,EAAE,MAAoB;IAC5E,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,oMAAoM,EACpM,EAAE,EACF,KAAK,IAAI,EAAE;QACT,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC7C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAC9E,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,eAAe,EACf,kIAAkI,EAClI;QACE,OAAO,EAAE,CAAC;aACP,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;aACzG,QAAQ,CAAC,uBAAuB,CAAC;QACpC,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;KAC1F,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QACrD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAC9E,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blocklist.d.ts","sourceRoot":"","sources":["../../src/tools/blocklist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAY,MAAM,kBAAkB,CAAC;AAE1D,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,QAsG7E"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { safePath } from '../api-client.js';
|
|
3
|
+
export function registerBlocklistTools(server, client) {
|
|
4
|
+
// ── Blocked Contacts ──
|
|
5
|
+
server.tool('list_blocked_contacts', 'List all blocked contacts. Blocked contacts are ignored by the AI — their messages get no automated response.', {
|
|
6
|
+
page: z.number().optional().describe('Page number (default: 1)'),
|
|
7
|
+
limit: z.number().optional().describe('Results per page (default: 20)'),
|
|
8
|
+
}, async ({ page, limit }) => {
|
|
9
|
+
const data = await client.get('/blocklist/contacts', {
|
|
10
|
+
page: page?.toString(),
|
|
11
|
+
limit: limit?.toString(),
|
|
12
|
+
});
|
|
13
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
14
|
+
});
|
|
15
|
+
server.tool('block_contact', 'Block a contact by email. The AI will stop responding to messages from this contact.', {
|
|
16
|
+
email: z.string().describe('The email of the contact to block'),
|
|
17
|
+
reason: z.string().optional().describe('Why the contact is being blocked'),
|
|
18
|
+
}, async (params) => {
|
|
19
|
+
await client.post('/blocklist/contacts', params);
|
|
20
|
+
return { content: [{ type: 'text', text: `Contact ${params.email} blocked.` }] };
|
|
21
|
+
});
|
|
22
|
+
server.tool('check_contact_blocked', 'Check whether a specific contact is currently blocked.', { contact_id: z.string().describe('The contact ID to check') }, async ({ contact_id }) => {
|
|
23
|
+
const data = await client.get(`/blocklist/contacts/check/${safePath(contact_id)}`);
|
|
24
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
25
|
+
});
|
|
26
|
+
server.tool('unblock_contact', 'Remove a contact from the blocklist. The AI will resume responding to them.', { id: z.string().describe('The block record ID (from list_blocked_contacts)') }, async ({ id }) => {
|
|
27
|
+
await client.delete(`/blocklist/contacts/${safePath(id)}`);
|
|
28
|
+
return { content: [{ type: 'text', text: `Contact unblocked.` }] };
|
|
29
|
+
});
|
|
30
|
+
// ── Blocked Domains ──
|
|
31
|
+
server.tool('list_blocked_domains', 'List all blocked email domains. Messages from contacts on blocked domains are ignored by the AI.', {
|
|
32
|
+
page: z.number().optional().describe('Page number (default: 1)'),
|
|
33
|
+
limit: z.number().optional().describe('Results per page (default: 20)'),
|
|
34
|
+
}, async ({ page, limit }) => {
|
|
35
|
+
const data = await client.get('/blocklist/domains', {
|
|
36
|
+
page: page?.toString(),
|
|
37
|
+
limit: limit?.toString(),
|
|
38
|
+
});
|
|
39
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
40
|
+
});
|
|
41
|
+
server.tool('block_domains', '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.', {
|
|
42
|
+
domains: z.string().describe('Domain(s) to block — comma-separated for multiple'),
|
|
43
|
+
reason: z.string().optional().describe('Why these domains are being blocked'),
|
|
44
|
+
}, async (params) => {
|
|
45
|
+
const data = await client.post('/blocklist/domains', params);
|
|
46
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
47
|
+
});
|
|
48
|
+
server.tool('check_domain_blocked', 'Check if a domain or email is blocked. Pass either a domain (e.g. "spam.com") or full email (e.g. "user@spam.com").', { value: z.string().describe('A domain or email to check') }, async ({ value }) => {
|
|
49
|
+
const data = await client.get('/blocklist/domains/check', { value });
|
|
50
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
51
|
+
});
|
|
52
|
+
server.tool('unblock_domain', 'Remove a domain from the blocklist.', { id: z.string().describe('The block record ID (from list_blocked_domains)') }, async ({ id }) => {
|
|
53
|
+
await client.delete(`/blocklist/domains/${safePath(id)}`);
|
|
54
|
+
return { content: [{ type: 'text', text: `Domain unblocked.` }] };
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=blocklist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blocklist.js","sourceRoot":"","sources":["../../src/tools/blocklist.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/csat.js
CHANGED
|
@@ -11,7 +11,7 @@ export function registerCsatTools(server, client) {
|
|
|
11
11
|
});
|
|
12
12
|
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
13
13
|
});
|
|
14
|
-
server.tool('get_csat_score', 'Get a specific CSAT score by its ID.', { score_id: z.string().describe('The CSAT score ID') }, async ({ score_id }) => {
|
|
14
|
+
server.tool('get_csat_score', 'Get a specific CSAT score by its ID, including the rating value, comment, and associated session.', { score_id: z.string().describe('The CSAT score ID') }, async ({ score_id }) => {
|
|
15
15
|
const data = await client.get(`/csat/scores/${safePath(score_id)}`);
|
|
16
16
|
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
17
17
|
});
|
package/dist/tools/csat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csat.js","sourceRoot":"","sources":["../../src/tools/csat.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAgB,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE1D,MAAM,UAAU,iBAAiB,CAAC,MAAiB,EAAE,MAAoB;IACvE,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,2IAA2I,EAC3I;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QACxE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;KAC1E,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE;YAC5C,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAC9E,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,
|
|
1
|
+
{"version":3,"file":"csat.js","sourceRoot":"","sources":["../../src/tools/csat.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAgB,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE1D,MAAM,UAAU,iBAAiB,CAAC,MAAiB,EAAE,MAAoB;IACvE,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,2IAA2I,EAC3I;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QACxE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;KAC1E,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE;YAC5C,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAC9E,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,mGAAmG,EACnG,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,EACtD,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QACrB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,gBAAgB,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACpE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAC9E,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,uEAAuE,EACvE,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC,EAAE,EACzE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QACvB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,wBAAwB,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC9E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAC9E,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handoff-analytics.d.ts","sourceRoot":"","sources":["../../src/tools/handoff-analytics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,QAmBpF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export function registerHandoffAnalyticsTools(server, client) {
|
|
3
|
+
server.tool('get_handoff_analytics', 'Get a comprehensive overview of AI-to-human handoff events. Returns reason breakdowns (why the AI handed off), sentiment analysis, daily trends, and referenced resources (knowledge articles, tools, instructions, prohibited topics). Defaults to the last 30 days if no dates are provided.', {
|
|
4
|
+
start_date: z
|
|
5
|
+
.string()
|
|
6
|
+
.optional()
|
|
7
|
+
.describe('Start date in ISO 8601 format (e.g. "2025-01-01"). Defaults to 30 days ago.'),
|
|
8
|
+
end_date: z
|
|
9
|
+
.string()
|
|
10
|
+
.optional()
|
|
11
|
+
.describe('End date in ISO 8601 format (e.g. "2025-01-31"). Defaults to now.'),
|
|
12
|
+
}, async ({ start_date, end_date }) => {
|
|
13
|
+
const data = await client.get('/handoff-analytics/', { start_date, end_date });
|
|
14
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=handoff-analytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handoff-analytics.js","sourceRoot":"","sources":["../../src/tools/handoff-analytics.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,6BAA6B,CAAC,MAAiB,EAAE,MAAoB;IACnF,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,gSAAgS,EAChS;QACE,UAAU,EAAE,CAAC;aACV,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,6EAA6E,CAAC;QAC1F,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,mEAAmE,CAAC;KACjF,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;QACjC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC/E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAC9E,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"office-hours.d.ts","sourceRoot":"","sources":["../../src/tools/office-hours.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAY,MAAM,kBAAkB,CAAC;AAY1D,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,QAiE/E"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { safePath } from '../api-client.js';
|
|
3
|
+
const DAY_OF_WEEK_DESC = 'Day(s) of week. Single days: "monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday". ' +
|
|
4
|
+
'Ranges: "everyday", "monday_to_friday", "sunday_to_thursday", "friday_and_saturday", "sunday_and_monday".';
|
|
5
|
+
const ShiftParam = z.object({
|
|
6
|
+
day_of_week: z.string().describe(DAY_OF_WEEK_DESC),
|
|
7
|
+
start_time: z.string().describe('Start time in HH:mm:ss (e.g. "09:00:00")'),
|
|
8
|
+
end_time: z.string().describe('End time in HH:mm:ss (e.g. "17:00:00")'),
|
|
9
|
+
});
|
|
10
|
+
export function registerOfficeHoursTools(server, client) {
|
|
11
|
+
server.tool('list_office_hours', 'List all office hours schedules. Office hours define when your support team is available — the AI uses this to set expectations outside business hours.', {}, async () => {
|
|
12
|
+
const data = await client.get('/office-hours/');
|
|
13
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
14
|
+
});
|
|
15
|
+
server.tool('get_office_hours', 'Get a specific office hours schedule by ID, including all its time shifts.', { id: z.string().describe('The office hours schedule ID') }, async ({ id }) => {
|
|
16
|
+
const data = await client.get(`/office-hours/${safePath(id)}`);
|
|
17
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
18
|
+
});
|
|
19
|
+
server.tool('create_office_hours', 'Create a new office hours schedule. Define when support is available with time shifts. Example: for Mon-Fri 9am-5pm EST, use name "Business Hours", iana_timezone "America/New_York", and one shift with day_of_week "monday_to_friday", start_time "09:00:00", end_time "17:00:00".', {
|
|
20
|
+
name: z.string().describe('Schedule name (e.g. "Business Hours", "Weekend Support")'),
|
|
21
|
+
iana_timezone: z
|
|
22
|
+
.string()
|
|
23
|
+
.describe('IANA timezone (e.g. "America/New_York", "Europe/London", "Asia/Tokyo")'),
|
|
24
|
+
shifts: z
|
|
25
|
+
.array(ShiftParam)
|
|
26
|
+
.describe('Time blocks when support is available'),
|
|
27
|
+
}, async (params) => {
|
|
28
|
+
const data = await client.post('/office-hours/', params);
|
|
29
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
30
|
+
});
|
|
31
|
+
server.tool('update_office_hours', 'Update an office hours schedule. The shifts array replaces ALL existing shifts — include every shift you want to keep.', {
|
|
32
|
+
id: z.string().describe('The office hours schedule ID to update'),
|
|
33
|
+
name: z.string().describe('Updated schedule name'),
|
|
34
|
+
iana_timezone: z.string().describe('Updated IANA timezone'),
|
|
35
|
+
shifts: z
|
|
36
|
+
.array(ShiftParam.extend({ id: z.string().describe('Shift ID from the existing schedule') }))
|
|
37
|
+
.describe('Complete replacement list of shifts'),
|
|
38
|
+
}, async ({ id, ...body }) => {
|
|
39
|
+
await client.put(`/office-hours/${safePath(id)}`, body);
|
|
40
|
+
return { content: [{ type: 'text', text: `Office hours ${id} updated.` }] };
|
|
41
|
+
});
|
|
42
|
+
server.tool('delete_office_hours', 'Delete an office hours schedule and all its shifts. This action cannot be undone.', { id: z.string().describe('The office hours schedule ID to delete') }, async ({ id }) => {
|
|
43
|
+
await client.delete(`/office-hours/${safePath(id)}`);
|
|
44
|
+
return { content: [{ type: 'text', text: `Office hours ${id} deleted.` }] };
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=office-hours.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"office-hours.js","sourceRoot":"","sources":["../../src/tools/office-hours.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/org.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
export function registerOrgTools(server, client) {
|
|
3
|
-
server.tool('get_organization', 'Get information about your OpenCX organization, including its name and
|
|
3
|
+
server.tool('get_organization', 'Get information about your OpenCX organization, including its name, creation date, and last update timestamp. Useful to verify which org your API key belongs to.', {}, async () => {
|
|
4
4
|
const data = await client.get('/org/');
|
|
5
5
|
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
6
6
|
});
|
package/dist/tools/org.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"org.js","sourceRoot":"","sources":["../../src/tools/org.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,gBAAgB,CAAC,MAAiB,EAAE,MAAoB;IACtE,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,
|
|
1
|
+
{"version":3,"file":"org.js","sourceRoot":"","sources":["../../src/tools/org.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,gBAAgB,CAAC,MAAiB,EAAE,MAAoB;IACtE,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,mKAAmK,EACnK,EAAE,EACF,KAAK,IAAI,EAAE;QACT,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAC9E,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,gCAAgC,EAChC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC,EAAE,EAC1D,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACjB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAC9E,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phone.d.ts","sourceRoot":"","sources":["../../src/tools/phone.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAY,MAAM,kBAAkB,CAAC;AAE1D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"phone.d.ts","sourceRoot":"","sources":["../../src/tools/phone.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAY,MAAM,kBAAkB,CAAC;AAE1D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,QA0IzE"}
|
package/dist/tools/phone.js
CHANGED
|
@@ -1,34 +1,64 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { safePath } from '../api-client.js';
|
|
3
3
|
export function registerPhoneTools(server, client) {
|
|
4
|
-
server.tool('
|
|
5
|
-
|
|
6
|
-
}, async ({ cursor }) => {
|
|
7
|
-
const data = await client.get('/phone/', { cursor });
|
|
4
|
+
server.tool('list_voices', 'List all available voices for AI phone agents. Returns voice ID, name, labels (accent, gender, age, language, use case), description, and a preview URL. Use the voice_id when creating or updating a phone agent.', {}, async () => {
|
|
5
|
+
const data = await client.get('/phone/voices');
|
|
8
6
|
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
9
7
|
});
|
|
10
|
-
server.tool('
|
|
8
|
+
server.tool('list_phone_agents', 'List all AI phone agents in your organization with full details: name, type (inbound/outbound), model, voice, language, phone number, instructions, and configuration.', {}, async () => {
|
|
9
|
+
const data = await client.get('/phone/');
|
|
10
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
11
|
+
});
|
|
12
|
+
server.tool('get_phone_agent', 'Get full details of a specific AI phone agent including its voice, language, instructions, phone number, model, and all configuration.', { phone_agent_id: z.string().describe('The phone agent ID') }, async ({ phone_agent_id }) => {
|
|
11
13
|
const data = await client.get(`/phone/${safePath(phone_agent_id)}`);
|
|
12
14
|
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
13
15
|
});
|
|
14
|
-
server.tool('create_phone_agent', 'Create a new AI phone agent.
|
|
15
|
-
name: z.string().describe('A name for the phone agent'),
|
|
16
|
+
server.tool('create_phone_agent', 'Create a new AI phone agent powered by the latest voice model. Only name is required — everything else has sensible defaults. Use list_voices first to pick a voice_id.', {
|
|
17
|
+
name: z.string().describe('A name for the phone agent (e.g. "Billing Support")'),
|
|
18
|
+
type: z
|
|
19
|
+
.enum(['inbound', 'outbound'])
|
|
20
|
+
.optional()
|
|
21
|
+
.describe('Agent type: "inbound" (receives calls, default) or "outbound" (makes calls)'),
|
|
22
|
+
voice_id: z
|
|
23
|
+
.string()
|
|
24
|
+
.optional()
|
|
25
|
+
.describe('Voice ID from list_voices. Omit for default voice.'),
|
|
26
|
+
language: z.string().optional().describe('Primary language code (e.g. "en", "es", "fr")'),
|
|
27
|
+
first_message: z
|
|
28
|
+
.string()
|
|
29
|
+
.optional()
|
|
30
|
+
.describe('What the agent says when answering (default: "Hello?")'),
|
|
16
31
|
instructions: z
|
|
32
|
+
.array(z.string())
|
|
33
|
+
.optional()
|
|
34
|
+
.describe('Training scenario IDs to attach to this agent'),
|
|
35
|
+
handoff_phone_number: z
|
|
17
36
|
.string()
|
|
18
37
|
.optional()
|
|
19
|
-
.describe('
|
|
20
|
-
|
|
21
|
-
|
|
38
|
+
.describe('Phone number to transfer to when handing off to a human (E.164 format)'),
|
|
39
|
+
use_org_knowledgebase: z
|
|
40
|
+
.boolean()
|
|
41
|
+
.optional()
|
|
42
|
+
.describe('Whether the agent can search your knowledge base during calls (default: false)'),
|
|
43
|
+
actionIds: z
|
|
44
|
+
.array(z.string())
|
|
45
|
+
.optional()
|
|
46
|
+
.describe('Action IDs the agent can call during conversations'),
|
|
22
47
|
}, async (params) => {
|
|
23
48
|
const data = await client.post('/phone/', params);
|
|
24
49
|
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
25
50
|
});
|
|
26
|
-
server.tool('update_phone_agent', 'Update an existing AI phone agent
|
|
51
|
+
server.tool('update_phone_agent', 'Update an existing AI phone agent. Only the fields you provide will be changed.', {
|
|
27
52
|
phone_agent_id: z.string().describe('The phone agent ID to update'),
|
|
28
53
|
name: z.string().optional().describe('New name'),
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
language: z.string().optional().describe('New
|
|
54
|
+
type: z.enum(['inbound', 'outbound']).optional().describe('New agent type'),
|
|
55
|
+
voice_id: z.string().optional().describe('New voice ID from list_voices'),
|
|
56
|
+
language: z.string().optional().describe('New language code'),
|
|
57
|
+
first_message: z.string().optional().describe('New greeting message'),
|
|
58
|
+
instructions: z.array(z.string()).optional().describe('New training scenario IDs'),
|
|
59
|
+
handoff_phone_number: z.string().optional().describe('New handoff phone number (E.164)'),
|
|
60
|
+
use_org_knowledgebase: z.boolean().optional().describe('Toggle knowledge base access'),
|
|
61
|
+
actionIds: z.array(z.string()).optional().describe('New action IDs'),
|
|
32
62
|
}, async ({ phone_agent_id, ...body }) => {
|
|
33
63
|
const data = await client.patch(`/phone/${safePath(phone_agent_id)}`, body);
|
|
34
64
|
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
@@ -39,13 +69,32 @@ export function registerPhoneTools(server, client) {
|
|
|
39
69
|
content: [{ type: 'text', text: `Phone agent ${phone_agent_id} deleted successfully.` }],
|
|
40
70
|
};
|
|
41
71
|
});
|
|
42
|
-
server.tool('make_outbound_call', '
|
|
72
|
+
server.tool('make_outbound_call', 'Initiate an outbound AI phone call. Target either an existing contact by ID or a raw phone number in E.164 format (e.g. "+14155551234").', {
|
|
43
73
|
phone_agent_id: z.string().describe('The phone agent ID to make the call with'),
|
|
74
|
+
contact_id: z
|
|
75
|
+
.string()
|
|
76
|
+
.optional()
|
|
77
|
+
.describe('Existing contact ID to call (use this OR phone_number, not both)'),
|
|
44
78
|
phone_number: z
|
|
45
79
|
.string()
|
|
46
|
-
.
|
|
47
|
-
|
|
48
|
-
|
|
80
|
+
.optional()
|
|
81
|
+
.describe('Phone number to call in E.164 format (use this OR contact_id, not both)'),
|
|
82
|
+
}, async ({ phone_agent_id, contact_id, phone_number }) => {
|
|
83
|
+
const contact = contact_id
|
|
84
|
+
? { id: contact_id }
|
|
85
|
+
: phone_number
|
|
86
|
+
? { phoneNumber: phone_number }
|
|
87
|
+
: undefined;
|
|
88
|
+
if (!contact) {
|
|
89
|
+
return {
|
|
90
|
+
content: [{ type: 'text', text: 'Error: provide either contact_id or phone_number' }],
|
|
91
|
+
isError: true,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
const data = await client.post('/phone/outbound-call', {
|
|
95
|
+
phoneAgentId: phone_agent_id,
|
|
96
|
+
contact,
|
|
97
|
+
});
|
|
49
98
|
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
50
99
|
});
|
|
51
100
|
}
|
package/dist/tools/phone.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phone.js","sourceRoot":"","sources":["../../src/tools/phone.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAgB,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE1D,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,MAAoB;IACxE,MAAM,CAAC,IAAI,CACT,
|
|
1
|
+
{"version":3,"file":"phone.js","sourceRoot":"","sources":["../../src/tools/phone.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,QAc1E"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export function registerSearchTools(server, client) {
|
|
3
|
+
server.tool('search', 'Full-text search across contacts and chat messages. Searches contact names, emails, phone numbers, and message content. Returns matching contacts with IDs and messages with their session IDs.', {
|
|
4
|
+
query: z
|
|
5
|
+
.string()
|
|
6
|
+
.describe('Search query — a name, email, phone number, or keyword to search for'),
|
|
7
|
+
}, async ({ query }) => {
|
|
8
|
+
const data = await client.get('/chat/sessions/search', { q: query });
|
|
9
|
+
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,MAAoB;IACzE,MAAM,CAAC,IAAI,CACT,QAAQ,EACR,iMAAiM,EACjM;QACE,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,QAAQ,CAAC,sEAAsE,CAAC;KACpF,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAClB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,uBAAuB,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACrE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAC9E,CAAC,CACF,CAAC;AACJ,CAAC"}
|