@opencx/mcp 1.15.26 → 1.15.28
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 +107 -0
- package/dist/campaign-tools.spec.js.map +1 -1
- package/dist/schema.d.ts +616 -3
- package/dist/schema.d.ts.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +4 -0
- package/dist/server.js.map +1 -1
- package/dist/skills.spec.d.ts +2 -0
- package/dist/skills.spec.d.ts.map +1 -0
- package/dist/skills.spec.js +175 -0
- package/dist/skills.spec.js.map +1 -0
- package/dist/tools/campaign-personalization.d.ts +4 -0
- package/dist/tools/campaign-personalization.d.ts.map +1 -0
- package/dist/tools/campaign-personalization.js +149 -0
- package/dist/tools/campaign-personalization.js.map +1 -0
- package/dist/tools/campaign-spine.d.ts.map +1 -1
- package/dist/tools/campaign-spine.js +5 -2
- package/dist/tools/campaign-spine.js.map +1 -1
- package/dist/tools/skills.d.ts +4 -0
- package/dist/tools/skills.d.ts.map +1 -0
- package/dist/tools/skills.js +80 -0
- package/dist/tools/skills.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { jsonContent } from '../api-client.js';
|
|
3
|
+
const ROUTING_NOTE = 'Skills drive skills-based routing: a session carries required skills (set only by the "Assign Skills to Ticket" workflow action — there is no tool to set them directly), and when "Assign Ticket to Support Team" / "Auto Assign to Support Team" runs with skill-based routing enabled, only team members holding every required skill are eligible. Load the "skills-routing" skill for the full setup.';
|
|
4
|
+
const skillDescriptionField = z
|
|
5
|
+
.string()
|
|
6
|
+
.nullable()
|
|
7
|
+
.optional()
|
|
8
|
+
.describe('What the skill covers, written as the condition under which a session needs it (e.g. "Billing disputes, refunds, invoice questions"). AI workflow steps read this via {{routingSkills}} to decide which skills to put on a session, so keep it concrete.');
|
|
9
|
+
export function registerSkillTools(server, client) {
|
|
10
|
+
server.registerTool('list_skills', {
|
|
11
|
+
description: `List every routing skill defined for the organization, newest first. ${ROUTING_NOTE}`,
|
|
12
|
+
}, async () => {
|
|
13
|
+
const data = (await client.GET('/skills')).data;
|
|
14
|
+
return jsonContent(data);
|
|
15
|
+
});
|
|
16
|
+
server.registerTool('get_skill', {
|
|
17
|
+
description: 'Get a single routing skill by ID.',
|
|
18
|
+
inputSchema: {
|
|
19
|
+
skill_id: z.string().uuid().describe('Skill ID'),
|
|
20
|
+
},
|
|
21
|
+
}, async ({ skill_id }) => {
|
|
22
|
+
const data = (await client.GET('/skills/{skill_id}', { params: { path: { skill_id } } }))
|
|
23
|
+
.data;
|
|
24
|
+
return jsonContent(data);
|
|
25
|
+
});
|
|
26
|
+
server.registerTool('create_skill', {
|
|
27
|
+
description: `Create a routing skill. Names are unique per organization (case-insensitive). Always provide a description — it is what the AI reads when deciding which skills a session needs. ${ROUTING_NOTE}`,
|
|
28
|
+
inputSchema: {
|
|
29
|
+
name: z.string().min(1).describe('Skill name (e.g. "billing", "spanish", "enterprise")'),
|
|
30
|
+
description: skillDescriptionField,
|
|
31
|
+
},
|
|
32
|
+
}, async (body) => {
|
|
33
|
+
const data = (await client.POST('/skills', { body })).data;
|
|
34
|
+
return jsonContent(data);
|
|
35
|
+
});
|
|
36
|
+
server.registerTool('update_skill', {
|
|
37
|
+
description: 'Rename a routing skill and/or change its description. Only provided fields change. Renaming is safe: agents and sessions reference skills by ID.',
|
|
38
|
+
inputSchema: {
|
|
39
|
+
skill_id: z.string().uuid().describe('Skill ID'),
|
|
40
|
+
name: z.string().min(1).optional().describe('New skill name'),
|
|
41
|
+
description: skillDescriptionField,
|
|
42
|
+
},
|
|
43
|
+
}, async ({ skill_id, ...body }) => {
|
|
44
|
+
const data = (await client.PATCH('/skills/{skill_id}', { params: { path: { skill_id } }, body })).data;
|
|
45
|
+
return jsonContent(data);
|
|
46
|
+
});
|
|
47
|
+
server.registerTool('delete_skill', {
|
|
48
|
+
description: 'Delete a routing skill. Agents that held it and sessions that required it simply stop referencing it. Confirm with the user first — a deleted skill silently loosens routing for every session that required it.',
|
|
49
|
+
inputSchema: {
|
|
50
|
+
skill_id: z.string().uuid().describe('Skill ID'),
|
|
51
|
+
},
|
|
52
|
+
}, async ({ skill_id }) => {
|
|
53
|
+
await client.DELETE('/skills/{skill_id}', { params: { path: { skill_id } } });
|
|
54
|
+
return jsonContent({ success: true, skill_id });
|
|
55
|
+
});
|
|
56
|
+
server.registerTool('get_user_skills', {
|
|
57
|
+
description: 'List the routing skills an organization member (agent) holds. Use list_org_users to find the user ID.',
|
|
58
|
+
inputSchema: {
|
|
59
|
+
user_id: z.number().int().positive().describe('Organization user ID'),
|
|
60
|
+
},
|
|
61
|
+
}, async ({ user_id }) => {
|
|
62
|
+
const data = (await client.GET('/skills/users/{user_id}', { params: { path: { user_id } } }))
|
|
63
|
+
.data;
|
|
64
|
+
return jsonContent(data);
|
|
65
|
+
});
|
|
66
|
+
server.registerTool('set_user_skills', {
|
|
67
|
+
description: 'Replace the full set of routing skills an organization member (agent) holds. Skills not in skill_ids are REMOVED — call get_user_skills first and merge when adding. Every ID must be a skill of this organization. Returns the resolved skills now assigned.',
|
|
68
|
+
inputSchema: {
|
|
69
|
+
user_id: z.number().int().positive().describe('Organization user ID'),
|
|
70
|
+
skill_ids: z.array(z.string().uuid()).describe('The complete set of skill IDs to hold'),
|
|
71
|
+
},
|
|
72
|
+
}, async ({ user_id, skill_ids }) => {
|
|
73
|
+
const data = (await client.PUT('/skills/users/{user_id}', {
|
|
74
|
+
params: { path: { user_id } },
|
|
75
|
+
body: { skill_ids },
|
|
76
|
+
})).data;
|
|
77
|
+
return jsonContent(data);
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/tools/skills.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED