@opencx/mcp 1.15.75 → 1.15.77
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/campaign-tools.spec.js +32 -0
- package/dist/campaign-tools.spec.js.map +1 -1
- package/dist/create-server-options.spec.js +19 -0
- package/dist/create-server-options.spec.js.map +1 -1
- package/dist/http.d.ts +3 -0
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +6 -2
- package/dist/http.js.map +1 -1
- package/dist/integrations.d.ts +7 -0
- package/dist/integrations.d.ts.map +1 -0
- package/dist/integrations.js +18 -0
- package/dist/integrations.js.map +1 -0
- package/dist/salesforce-ai-reply-templates.spec.js +4 -1
- package/dist/salesforce-ai-reply-templates.spec.js.map +1 -1
- package/dist/schema.d.ts +13509 -10726
- package/dist/schema.d.ts.map +1 -1
- package/dist/server.d.ts +6 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +27 -2
- package/dist/server.js.map +1 -1
- package/dist/tool-annotations.spec.js +5 -1
- package/dist/tool-annotations.spec.js.map +1 -1
- package/dist/tools/campaign-channel.d.ts.map +1 -1
- package/dist/tools/campaign-channel.js +55 -0
- package/dist/tools/campaign-channel.js.map +1 -1
- package/dist/tools/campaign-spine.d.ts.map +1 -1
- package/dist/tools/campaign-spine.js +34 -0
- package/dist/tools/campaign-spine.js.map +1 -1
- package/dist/tools/dynamics365-integration.d.ts +4 -0
- package/dist/tools/dynamics365-integration.d.ts.map +1 -0
- package/dist/tools/dynamics365-integration.js +45 -0
- package/dist/tools/dynamics365-integration.js.map +1 -0
- package/dist/tools/email.d.ts.map +1 -1
- package/dist/tools/email.js +24 -0
- package/dist/tools/email.js.map +1 -1
- package/dist/tools/freshchat-integration.d.ts +4 -0
- package/dist/tools/freshchat-integration.d.ts.map +1 -0
- package/dist/tools/freshchat-integration.js +54 -0
- package/dist/tools/freshchat-integration.js.map +1 -0
- package/dist/tools/freshdesk-integration.d.ts +4 -0
- package/dist/tools/freshdesk-integration.d.ts.map +1 -0
- package/dist/tools/freshdesk-integration.js +68 -0
- package/dist/tools/freshdesk-integration.js.map +1 -0
- package/dist/tools/front-integration.d.ts +4 -0
- package/dist/tools/front-integration.d.ts.map +1 -0
- package/dist/tools/front-integration.js +52 -0
- package/dist/tools/front-integration.js.map +1 -0
- package/dist/tools/gorgias-integration.d.ts +4 -0
- package/dist/tools/gorgias-integration.d.ts.map +1 -0
- package/dist/tools/gorgias-integration.js +24 -0
- package/dist/tools/gorgias-integration.js.map +1 -0
- package/dist/tools/hubspot-integration.d.ts +4 -0
- package/dist/tools/hubspot-integration.d.ts.map +1 -0
- package/dist/tools/hubspot-integration.js +50 -0
- package/dist/tools/hubspot-integration.js.map +1 -0
- package/dist/tools/infobip-integration.d.ts +4 -0
- package/dist/tools/infobip-integration.d.ts.map +1 -0
- package/dist/tools/infobip-integration.js +68 -0
- package/dist/tools/infobip-integration.js.map +1 -0
- package/dist/tools/intercom-integration.d.ts +4 -0
- package/dist/tools/intercom-integration.d.ts.map +1 -0
- package/dist/tools/intercom-integration.js +74 -0
- package/dist/tools/intercom-integration.js.map +1 -0
- package/dist/tools/macros.d.ts.map +1 -1
- package/dist/tools/macros.js +9 -1
- package/dist/tools/macros.js.map +1 -1
- package/dist/tools/salesforce-integration.d.ts +4 -0
- package/dist/tools/salesforce-integration.d.ts.map +1 -0
- package/dist/tools/salesforce-integration.js +65 -0
- package/dist/tools/salesforce-integration.js.map +1 -0
- package/dist/tools/team-settings.d.ts +2 -0
- package/dist/tools/team-settings.d.ts.map +1 -1
- package/dist/tools/team-settings.js +8 -0
- package/dist/tools/team-settings.js.map +1 -1
- package/dist/tools/twilio-flex-integration.d.ts +4 -0
- package/dist/tools/twilio-flex-integration.d.ts.map +1 -0
- package/dist/tools/twilio-flex-integration.js +44 -0
- package/dist/tools/twilio-flex-integration.js.map +1 -0
- package/dist/tools/zendesk-integration.d.ts +4 -0
- package/dist/tools/zendesk-integration.d.ts.map +1 -0
- package/dist/tools/zendesk-integration.js +65 -0
- package/dist/tools/zendesk-integration.js.map +1 -0
- package/package.json +5 -1
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { jsonContent } from '../api-client.js';
|
|
3
|
+
import { registerSalesforceAiReplyTemplateTools } from './salesforce-ai-reply-templates.js';
|
|
4
|
+
// Registered by createServer only when the org has this integration connected.
|
|
5
|
+
// The AI reply template tools ride along: they only apply to Salesforce orgs.
|
|
6
|
+
export function registerSalesforceIntegrationTools(server, client) {
|
|
7
|
+
registerSalesforceAiReplyTemplateTools(server, client);
|
|
8
|
+
server.registerTool('get_salesforce_settings', {
|
|
9
|
+
description: 'Get the Salesforce settings: case_management (assist drafts, auto-fill, Case comments, first-email content) and miaw (messaging deployment). A section is null when that side is not connected. Credentials are never returned.',
|
|
10
|
+
annotations: { title: 'Get Salesforce settings', readOnlyHint: true },
|
|
11
|
+
}, async () => jsonContent((await client.GET('/integrations/salesforce/settings')).data));
|
|
12
|
+
server.registerTool('update_salesforce_settings', {
|
|
13
|
+
description: 'Change Salesforce settings. Pass only the fields to change. case_management needs Case management connected; miaw needs messaging configured.',
|
|
14
|
+
inputSchema: {
|
|
15
|
+
case_management: z
|
|
16
|
+
.object({
|
|
17
|
+
assist_replies_as_drafts: z
|
|
18
|
+
.boolean()
|
|
19
|
+
.optional()
|
|
20
|
+
.describe('true = assist suggestions become editable email drafts on the Case instead of private comments'),
|
|
21
|
+
draft_from_address: z
|
|
22
|
+
.string()
|
|
23
|
+
.nullable()
|
|
24
|
+
.optional()
|
|
25
|
+
.describe('From address on those drafts — must be from list_salesforce_org_wide_addresses; null = composer default'),
|
|
26
|
+
autofill_fields_on_assist_mode: z
|
|
27
|
+
.boolean()
|
|
28
|
+
.optional()
|
|
29
|
+
.describe('true = AI Case-field auto-fill writes to the Case on assist sessions too'),
|
|
30
|
+
include_session_url_in_case_comment: z
|
|
31
|
+
.boolean()
|
|
32
|
+
.optional()
|
|
33
|
+
.describe('true = Case comments include a link to the session'),
|
|
34
|
+
post_handoff_case_comment: z
|
|
35
|
+
.boolean()
|
|
36
|
+
.optional()
|
|
37
|
+
.describe('true = a handoff posts a summary comment on the Case'),
|
|
38
|
+
prefer_first_email_content: z
|
|
39
|
+
.boolean()
|
|
40
|
+
.optional()
|
|
41
|
+
.describe("true = new sessions start from the Case's first email instead of its description"),
|
|
42
|
+
})
|
|
43
|
+
.optional(),
|
|
44
|
+
miaw: z
|
|
45
|
+
.object({
|
|
46
|
+
es_developer_name: z
|
|
47
|
+
.string()
|
|
48
|
+
.nullable()
|
|
49
|
+
.optional()
|
|
50
|
+
.describe('Developer name of the Embedded Service deployment for messaging'),
|
|
51
|
+
salesforce_org_id: z.string().nullable().optional().describe('Salesforce org id (00D…)'),
|
|
52
|
+
})
|
|
53
|
+
.optional(),
|
|
54
|
+
},
|
|
55
|
+
annotations: { title: 'Update Salesforce settings', destructiveHint: true },
|
|
56
|
+
}, async (input) => {
|
|
57
|
+
const body = input;
|
|
58
|
+
return jsonContent((await client.PATCH('/integrations/salesforce/settings', { body })).data);
|
|
59
|
+
});
|
|
60
|
+
server.registerTool('list_salesforce_org_wide_addresses', {
|
|
61
|
+
description: 'List the verified org-wide email addresses of the connected Salesforce org — the valid values for case_management.draft_from_address.',
|
|
62
|
+
annotations: { title: 'List Salesforce org-wide addresses', readOnlyHint: true },
|
|
63
|
+
}, async () => jsonContent((await client.GET('/integrations/salesforce/org-wide-addresses')).data));
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=salesforce-integration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"salesforce-integration.js","sourceRoot":"","sources":["../../src/tools/salesforce-integration.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,OAAO,EAAE,sCAAsC,EAAE,MAAM,oCAAoC,CAAC;AAK5F,+EAA+E;AAC/E,8EAA8E;AAC9E,MAAM,UAAU,kCAAkC,CAAC,MAAiB,EAAE,MAAoB;IACxF,sCAAsC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEvD,MAAM,CAAC,YAAY,CACjB,yBAAyB,EACzB;QACE,WAAW,EACT,iOAAiO;QACnO,WAAW,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE,YAAY,EAAE,IAAI,EAAE;KACtE,EACD,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,CAAC,IAAI,CAAC,CACtF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,4BAA4B,EAC5B;QACE,WAAW,EACT,+IAA+I;QACjJ,WAAW,EAAE;YACX,eAAe,EAAE,CAAC;iBACf,MAAM,CAAC;gBACN,wBAAwB,EAAE,CAAC;qBACxB,OAAO,EAAE;qBACT,QAAQ,EAAE;qBACV,QAAQ,CAAC,gGAAgG,CAAC;gBAC7G,kBAAkB,EAAE,CAAC;qBAClB,MAAM,EAAE;qBACR,QAAQ,EAAE;qBACV,QAAQ,EAAE;qBACV,QAAQ,CAAC,yGAAyG,CAAC;gBACtH,8BAA8B,EAAE,CAAC;qBAC9B,OAAO,EAAE;qBACT,QAAQ,EAAE;qBACV,QAAQ,CAAC,0EAA0E,CAAC;gBACvF,mCAAmC,EAAE,CAAC;qBACnC,OAAO,EAAE;qBACT,QAAQ,EAAE;qBACV,QAAQ,CAAC,oDAAoD,CAAC;gBACjE,yBAAyB,EAAE,CAAC;qBACzB,OAAO,EAAE;qBACT,QAAQ,EAAE;qBACV,QAAQ,CAAC,sDAAsD,CAAC;gBACnE,0BAA0B,EAAE,CAAC;qBAC1B,OAAO,EAAE;qBACT,QAAQ,EAAE;qBACV,QAAQ,CAAC,kFAAkF,CAAC;aAChG,CAAC;iBACD,QAAQ,EAAE;YACb,IAAI,EAAE,CAAC;iBACJ,MAAM,CAAC;gBACN,iBAAiB,EAAE,CAAC;qBACjB,MAAM,EAAE;qBACR,QAAQ,EAAE;qBACV,QAAQ,EAAE;qBACV,QAAQ,CAAC,iEAAiE,CAAC;gBAC9E,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;aACzF,CAAC;iBACD,QAAQ,EAAE;SACd;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,4BAA4B,EAAE,eAAe,EAAE,IAAI,EAAE;KAC5E,EACD,KAAK,EAAE,KAAK,EAAE,EAAE;QACd,MAAM,IAAI,GAAe,KAAK,CAAC;QAC/B,OAAO,WAAW,CAAC,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/F,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,oCAAoC,EACpC;QACE,WAAW,EACT,uIAAuI;QACzI,WAAW,EAAE,EAAE,KAAK,EAAE,oCAAoC,EAAE,YAAY,EAAE,IAAI,EAAE;KACjF,EACD,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC,CAAC,IAAI,CAAC,CAChG,CAAC;AACJ,CAAC"}
|
|
@@ -13,6 +13,8 @@ export declare const teamSettingsShape: {
|
|
|
13
13
|
phone_sla_policy_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
14
14
|
support_assignment_strategy: z.ZodOptional<z.ZodEnum<["least-busy", "round-robin", "unassigned"]>>;
|
|
15
15
|
auto_assign_interval_seconds: z.ZodOptional<z.ZodEffects<z.ZodNumber, number, number>>;
|
|
16
|
+
call_recording_enabled: z.ZodOptional<z.ZodBoolean>;
|
|
17
|
+
call_languages: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
16
18
|
};
|
|
17
19
|
export declare function registerTeamSettingsTools(server: McpServer, client: OpenCXClient): void;
|
|
18
20
|
//# sourceMappingURL=team-settings.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"team-settings.d.ts","sourceRoot":"","sources":["../../src/tools/team-settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAgBrD,eAAO,MAAM,iBAAiB
|
|
1
|
+
{"version":3,"file":"team-settings.d.ts","sourceRoot":"","sources":["../../src/tools/team-settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAgBrD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;CAuF7B,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,QA2BhF"}
|
|
@@ -74,6 +74,14 @@ export const teamSettingsShape = {
|
|
|
74
74
|
.refine((value) => value === 0 || value >= 15, 'Use 0 to disable pacing, or 15 to 3600 seconds')
|
|
75
75
|
.optional()
|
|
76
76
|
.describe('Seconds between assignments to the same agent under least-busy: 0 disables pacing'),
|
|
77
|
+
call_recording_enabled: z
|
|
78
|
+
.boolean()
|
|
79
|
+
.optional()
|
|
80
|
+
.describe('Record calls answered by this team. When off, answering does not start a recording; one the phone agent or call flow already started keeps running.'),
|
|
81
|
+
call_languages: z
|
|
82
|
+
.array(z.string())
|
|
83
|
+
.optional()
|
|
84
|
+
.describe('Languages spoken on calls this team answers (language codes). Live transcripts of those calls stay in these languages; empty uses the organization default.'),
|
|
77
85
|
};
|
|
78
86
|
export function registerTeamSettingsTools(server, client) {
|
|
79
87
|
server.registerTool('update_team_settings', {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"team-settings.js","sourceRoot":"","sources":["../../src/tools/team-settings.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAM/C,MAAM,aAAa,GAAG;IACpB,uBAAuB;IACvB,mBAAmB;CACgE,CAAC;AAEtF,MAAM,oBAAoB,GAAG;IAC3B,YAAY;IACZ,aAAa;IACb,YAAY;CAC4E,CAAC;AAE3F,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,kBAAkB,EAAE,CAAC;SAClB,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,+CAA+C,CAAC;IAC5D,wBAAwB,EAAE,CAAC;SACxB,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,qEAAqE,CAAC;IAClF,sBAAsB,EAAE,CAAC;SACtB,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,EAAE,CAAC;SACP,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,yDAAyD,CAAC;IACtE,4BAA4B,EAAE,CAAC;SAC5B,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,EAAE,CAAC;SACP,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,+DAA+D,CAAC;IAC5E,sBAAsB,EAAE,CAAC;SACtB,IAAI,CAAC,aAAa,CAAC;SACnB,QAAQ,EAAE;SACV,QAAQ,CAAC,+EAA+E,CAAC;IAC5F,oBAAoB,EAAE,CAAC;SACpB,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,QAAQ,CAAC,oFAAoF,CAAC;IACjG,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,IAAI,EAAE;SACN,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,QAAQ,CACP,0FAA0F,CAC3F;IACH,uBAAuB,EAAE,CAAC;SACvB,MAAM,EAAE;SACR,IAAI,EAAE;SACN,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,QAAQ,CACP,8FAA8F,CAC/F;IACH,mBAAmB,EAAE,CAAC;SACnB,MAAM,EAAE;SACR,IAAI,EAAE;SACN,QAAQ,EAAE;SACV,QAAQ,EAAE;SACV,QAAQ,CACP,2KAA2K,CAC5K;IACH,2BAA2B,EAAE,CAAC;SAC3B,IAAI,CAAC,oBAAoB,CAAC;SAC1B,QAAQ,EAAE;SACV,QAAQ,CAAC,uCAAuC,CAAC;IACpD,4BAA4B,EAAE,CAAC;SAC5B,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,IAAI,CAAC;SACT,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,EAAE,gDAAgD,CAAC;SAC/F,QAAQ,EAAE;SACV,QAAQ,CAAC,mFAAmF,CAAC;
|
|
1
|
+
{"version":3,"file":"team-settings.js","sourceRoot":"","sources":["../../src/tools/team-settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import type { OpenCXClient } from '../api-client.js';
|
|
3
|
+
export declare function registerTwilioFlexIntegrationTools(server: McpServer, client: OpenCXClient): void;
|
|
4
|
+
//# sourceMappingURL=twilio-flex-integration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"twilio-flex-integration.d.ts","sourceRoot":"","sources":["../../src/tools/twilio-flex-integration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAOrD,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,QAgEzF"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { jsonContent } from '../api-client.js';
|
|
3
|
+
// Registered by createServer only when the org has this integration connected.
|
|
4
|
+
export function registerTwilioFlexIntegrationTools(server, client) {
|
|
5
|
+
server.registerTool('get_twilio_flex_settings', {
|
|
6
|
+
description: 'Read the Twilio Flex integration settings: account and workspace, AI queue and workers, handoff toggles and contact-synced task attributes. The auth token is never returned.',
|
|
7
|
+
annotations: { title: 'Get Twilio Flex settings', readOnlyHint: true },
|
|
8
|
+
}, async () => jsonContent((await client.GET('/integrations/twilio-flex/settings')).data));
|
|
9
|
+
server.registerTool('update_twilio_flex_settings', {
|
|
10
|
+
description: 'Change Twilio Flex integration settings. Only the fields you pass change. Credentials cannot be changed here, and the workspace is not re-provisioned. The response lists synced attribute names that will never match.',
|
|
11
|
+
inputSchema: {
|
|
12
|
+
ai_queue_sid: z
|
|
13
|
+
.string()
|
|
14
|
+
.optional()
|
|
15
|
+
.describe('TaskRouter queue SID for AI-handled conversations; empty string clears it'),
|
|
16
|
+
ai_worker_email_domain: z
|
|
17
|
+
.string()
|
|
18
|
+
.nullable()
|
|
19
|
+
.optional()
|
|
20
|
+
.describe('Domain (e.g. example.com) used to give each AI worker an email; null clears it'),
|
|
21
|
+
internal_notes_enabled: z
|
|
22
|
+
.boolean()
|
|
23
|
+
.optional()
|
|
24
|
+
.describe('Post the handoff summary into the conversation. Twilio has no private notes, so the customer sees it too.'),
|
|
25
|
+
interactions_handoff_enabled: z
|
|
26
|
+
.boolean()
|
|
27
|
+
.optional()
|
|
28
|
+
.describe('OpenCX routes the handoff itself through Flex Interactions. Leave off if their Flex flow already handles the handoff webhook — both on means duplicate chat requests.'),
|
|
29
|
+
contact_synced_task_attributes: z
|
|
30
|
+
.array(z.string().min(1))
|
|
31
|
+
.optional()
|
|
32
|
+
.describe('Task attribute names copied onto the contact (e.g. "user_id", "customers.name"); replaces the list. See list_twilio_flex_task_attributes.'),
|
|
33
|
+
},
|
|
34
|
+
annotations: { title: 'Update Twilio Flex settings', destructiveHint: false },
|
|
35
|
+
}, async (args) => {
|
|
36
|
+
const body = args;
|
|
37
|
+
return jsonContent((await client.PATCH('/integrations/twilio-flex/settings', { body })).data);
|
|
38
|
+
});
|
|
39
|
+
server.registerTool('list_twilio_flex_task_attributes', {
|
|
40
|
+
description: "List the task attribute names the org's Flex workflow actually sends, sampled from recent tasks. Empty means unknown, not none.",
|
|
41
|
+
annotations: { title: 'List Twilio Flex task attributes', readOnlyHint: true },
|
|
42
|
+
}, async () => jsonContent((await client.GET('/integrations/twilio-flex/task-attributes')).data));
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=twilio-flex-integration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"twilio-flex-integration.js","sourceRoot":"","sources":["../../src/tools/twilio-flex-integration.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAO/C,+EAA+E;AAC/E,MAAM,UAAU,kCAAkC,CAAC,MAAiB,EAAE,MAAoB;IACxF,MAAM,CAAC,YAAY,CACjB,0BAA0B,EAC1B;QACE,WAAW,EACT,+KAA+K;QACjL,WAAW,EAAE,EAAE,KAAK,EAAE,0BAA0B,EAAE,YAAY,EAAE,IAAI,EAAE;KACvE,EACD,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,CAAC,IAAI,CAAC,CACvF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,6BAA6B,EAC7B;QACE,WAAW,EACT,yNAAyN;QAC3N,WAAW,EAAE;YACX,YAAY,EAAE,CAAC;iBACZ,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,2EAA2E,CAAC;YACxF,sBAAsB,EAAE,CAAC;iBACtB,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,EAAE;iBACV,QAAQ,CACP,gFAAgF,CACjF;YACH,sBAAsB,EAAE,CAAC;iBACtB,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CACP,2GAA2G,CAC5G;YACH,4BAA4B,EAAE,CAAC;iBAC5B,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CACP,uKAAuK,CACxK;YACH,8BAA8B,EAAE,CAAC;iBAC9B,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;iBACxB,QAAQ,EAAE;iBACV,QAAQ,CACP,2IAA2I,CAC5I;SACJ;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,6BAA6B,EAAE,eAAe,EAAE,KAAK,EAAE;KAC9E,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,IAAI,GAAe,IAAI,CAAC;QAC9B,OAAO,WAAW,CAAC,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAChG,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,kCAAkC,EAClC;QACE,WAAW,EACT,iIAAiI;QACnI,WAAW,EAAE,EAAE,KAAK,EAAE,kCAAkC,EAAE,YAAY,EAAE,IAAI,EAAE;KAC/E,EACD,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC,CAAC,IAAI,CAAC,CAC9F,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import type { OpenCXClient } from '../api-client.js';
|
|
3
|
+
export declare function registerZendeskIntegrationTools(server: McpServer, client: OpenCXClient): void;
|
|
4
|
+
//# sourceMappingURL=zendesk-integration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zendesk-integration.d.ts","sourceRoot":"","sources":["../../src/tools/zendesk-integration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAOrD,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,QA6EtF"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { jsonContent } from '../api-client.js';
|
|
3
|
+
// Registered by createServer only when the org has this integration connected.
|
|
4
|
+
export function registerZendeskIntegrationTools(server, client) {
|
|
5
|
+
server.registerTool('get_zendesk_settings', {
|
|
6
|
+
description: 'Get the Zendesk integration settings: ticket creation and assignment defaults, web/email handoff behaviour, internal notes, the handoff note and recipient editing. Credentials are never returned; connected:false means Zendesk is not connected.',
|
|
7
|
+
annotations: { title: 'Get Zendesk settings', readOnlyHint: true },
|
|
8
|
+
}, async () => jsonContent((await client.GET('/integrations/zendesk/settings')).data));
|
|
9
|
+
server.registerTool('update_zendesk_settings', {
|
|
10
|
+
description: 'Change Zendesk integration settings. Pass only the fields to change; the rest stay as they are. Credentials and the subdomain cannot be changed here (the dashboard connects Zendesk).',
|
|
11
|
+
inputSchema: {
|
|
12
|
+
default_agent_id: z
|
|
13
|
+
.string()
|
|
14
|
+
.min(1)
|
|
15
|
+
.optional()
|
|
16
|
+
.describe('Zendesk user id new tickets are assigned to when no team mapping applies'),
|
|
17
|
+
default_agent_group_id: z
|
|
18
|
+
.string()
|
|
19
|
+
.nullable()
|
|
20
|
+
.optional()
|
|
21
|
+
.describe('Zendesk group id for new tickets when no team mapping applies (see list_zendesk_groups); null = none'),
|
|
22
|
+
create_ticket_only_on_handoff: z
|
|
23
|
+
.boolean()
|
|
24
|
+
.optional()
|
|
25
|
+
.describe('true = create the Zendesk ticket only when the session is handed off'),
|
|
26
|
+
skip_handoff_for_web: z
|
|
27
|
+
.boolean()
|
|
28
|
+
.optional()
|
|
29
|
+
.describe('true = web handoffs stay in OpenCX and never reach Zendesk'),
|
|
30
|
+
skip_ticket_creation_for_web: z
|
|
31
|
+
.boolean()
|
|
32
|
+
.optional()
|
|
33
|
+
.describe('true = no Zendesk ticket for web sessions at all'),
|
|
34
|
+
sync_automated_sender_tickets: z
|
|
35
|
+
.boolean()
|
|
36
|
+
.optional()
|
|
37
|
+
.describe('true = tickets from noreply@-style senders still get a session (the AI never replies)'),
|
|
38
|
+
create_tickets_for_email_sessions: z
|
|
39
|
+
.boolean()
|
|
40
|
+
.optional()
|
|
41
|
+
.describe('true = every email session opens a ticket up front; false = only on handoff'),
|
|
42
|
+
ai_reads_private_notes: z
|
|
43
|
+
.boolean()
|
|
44
|
+
.optional()
|
|
45
|
+
.describe('true = internal notes are given to the AI as private context; false also stops earlier notes reaching it'),
|
|
46
|
+
post_handoff_note: z
|
|
47
|
+
.boolean()
|
|
48
|
+
.optional()
|
|
49
|
+
.describe('true = a handoff posts a "Handoff Summary" internal note on the ticket'),
|
|
50
|
+
email_recipient_sync_enabled: z
|
|
51
|
+
.boolean()
|
|
52
|
+
.optional()
|
|
53
|
+
.describe('true = agents may edit To/Cc in OpenCX and the edits sync to Zendesk (verifies the connection first)'),
|
|
54
|
+
},
|
|
55
|
+
annotations: { title: 'Update Zendesk settings', destructiveHint: true },
|
|
56
|
+
}, async (input) => {
|
|
57
|
+
const body = input;
|
|
58
|
+
return jsonContent((await client.PATCH('/integrations/zendesk/settings', { body })).data);
|
|
59
|
+
});
|
|
60
|
+
server.registerTool('list_zendesk_groups', {
|
|
61
|
+
description: 'List the Zendesk groups synced from the connected account — the valid values for default_agent_group_id.',
|
|
62
|
+
annotations: { title: 'List Zendesk groups', readOnlyHint: true },
|
|
63
|
+
}, async () => jsonContent((await client.GET('/integrations/zendesk/groups')).data));
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=zendesk-integration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zendesk-integration.js","sourceRoot":"","sources":["../../src/tools/zendesk-integration.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAO/C,+EAA+E;AAC/E,MAAM,UAAU,+BAA+B,CAAC,MAAiB,EAAE,MAAoB;IACrF,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,WAAW,EACT,qPAAqP;QACvP,WAAW,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE,YAAY,EAAE,IAAI,EAAE;KACnE,EACD,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,CAAC,IAAI,CAAC,CACnF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,yBAAyB,EACzB;QACE,WAAW,EACT,wLAAwL;QAC1L,WAAW,EAAE;YACX,gBAAgB,EAAE,CAAC;iBAChB,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,EAAE;iBACV,QAAQ,CAAC,0EAA0E,CAAC;YACvF,sBAAsB,EAAE,CAAC;iBACtB,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,EAAE;iBACV,QAAQ,CAAC,sGAAsG,CAAC;YACnH,6BAA6B,EAAE,CAAC;iBAC7B,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,sEAAsE,CAAC;YACnF,oBAAoB,EAAE,CAAC;iBACpB,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,4DAA4D,CAAC;YACzE,4BAA4B,EAAE,CAAC;iBAC5B,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,kDAAkD,CAAC;YAC/D,6BAA6B,EAAE,CAAC;iBAC7B,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,uFAAuF,CAAC;YACpG,iCAAiC,EAAE,CAAC;iBACjC,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,6EAA6E,CAAC;YAC1F,sBAAsB,EAAE,CAAC;iBACtB,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,0GAA0G,CAAC;YACvH,iBAAiB,EAAE,CAAC;iBACjB,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,wEAAwE,CAAC;YACrF,4BAA4B,EAAE,CAAC;iBAC5B,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,sGAAsG,CAAC;SACpH;QACD,WAAW,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE,eAAe,EAAE,IAAI,EAAE;KACzE,EACD,KAAK,EAAE,KAAK,EAAE,EAAE;QACd,MAAM,IAAI,GAAe,KAAK,CAAC;QAC/B,OAAO,WAAW,CAAC,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5F,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,WAAW,EACT,0GAA0G;QAC5G,WAAW,EAAE,EAAE,KAAK,EAAE,qBAAqB,EAAE,YAAY,EAAE,IAAI,EAAE;KAClE,EACD,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC,IAAI,CAAC,CACjF,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opencx/mcp",
|
|
3
|
-
"version": "1.15.
|
|
3
|
+
"version": "1.15.77",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "MCP server for OpenCX — manage contacts, sessions, training, and more from Claude Desktop, Cursor, or any MCP client.",
|
|
6
6
|
"type": "module",
|
|
@@ -21,6 +21,10 @@
|
|
|
21
21
|
"types": "./dist/http.d.ts",
|
|
22
22
|
"default": "./dist/http.js"
|
|
23
23
|
},
|
|
24
|
+
"./integrations": {
|
|
25
|
+
"types": "./dist/integrations.d.ts",
|
|
26
|
+
"default": "./dist/integrations.js"
|
|
27
|
+
},
|
|
24
28
|
"./package.json": "./package.json"
|
|
25
29
|
},
|
|
26
30
|
"files": [
|