wixzel-voice-mcp 0.4.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/CHANGELOG.md +57 -0
- package/LICENSE +21 -0
- package/README.md +127 -0
- package/dist/client.d.ts +69 -0
- package/dist/client.js +137 -0
- package/dist/client.js.map +1 -0
- package/dist/guide.d.ts +11 -0
- package/dist/guide.js +86 -0
- package/dist/guide.js.map +1 -0
- package/dist/http.d.ts +80 -0
- package/dist/http.js +281 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.js +88 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts.d.ts +7 -0
- package/dist/prompts.js +83 -0
- package/dist/prompts.js.map +1 -0
- package/dist/schemas.d.ts +105 -0
- package/dist/schemas.js +122 -0
- package/dist/schemas.js.map +1 -0
- package/dist/server.d.ts +16 -0
- package/dist/server.js +58 -0
- package/dist/server.js.map +1 -0
- package/dist/site.d.ts +12 -0
- package/dist/site.js +17 -0
- package/dist/site.js.map +1 -0
- package/dist/tooling.d.ts +59 -0
- package/dist/tooling.js +129 -0
- package/dist/tooling.js.map +1 -0
- package/dist/tools/agents.d.ts +97 -0
- package/dist/tools/agents.js +105 -0
- package/dist/tools/agents.js.map +1 -0
- package/dist/tools/api-keys.d.ts +37 -0
- package/dist/tools/api-keys.js +61 -0
- package/dist/tools/api-keys.js.map +1 -0
- package/dist/tools/appointments.d.ts +30 -0
- package/dist/tools/appointments.js +77 -0
- package/dist/tools/appointments.js.map +1 -0
- package/dist/tools/billing.d.ts +29 -0
- package/dist/tools/billing.js +72 -0
- package/dist/tools/billing.js.map +1 -0
- package/dist/tools/calls.d.ts +37 -0
- package/dist/tools/calls.js +98 -0
- package/dist/tools/calls.js.map +1 -0
- package/dist/tools/campaigns.d.ts +13 -0
- package/dist/tools/campaigns.js +76 -0
- package/dist/tools/campaigns.js.map +1 -0
- package/dist/tools/engines.d.ts +4 -0
- package/dist/tools/engines.js +43 -0
- package/dist/tools/engines.js.map +1 -0
- package/dist/tools/index.d.ts +5 -0
- package/dist/tools/index.js +37 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/knowledge-bases.d.ts +27 -0
- package/dist/tools/knowledge-bases.js +69 -0
- package/dist/tools/knowledge-bases.js.map +1 -0
- package/dist/tools/leads.d.ts +28 -0
- package/dist/tools/leads.js +88 -0
- package/dist/tools/leads.js.map +1 -0
- package/dist/tools/phone-numbers.d.ts +19 -0
- package/dist/tools/phone-numbers.js +72 -0
- package/dist/tools/phone-numbers.js.map +1 -0
- package/dist/tools/realtime.d.ts +8 -0
- package/dist/tools/realtime.js +28 -0
- package/dist/tools/realtime.js.map +1 -0
- package/dist/tools/sip-trunks.d.ts +45 -0
- package/dist/tools/sip-trunks.js +118 -0
- package/dist/tools/sip-trunks.js.map +1 -0
- package/dist/tools/webhooks.d.ts +52 -0
- package/dist/tools/webhooks.js +90 -0
- package/dist/tools/webhooks.js.map +1 -0
- package/dist/version.d.ts +7 -0
- package/dist/version.js +8 -0
- package/dist/version.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { z } from 'zod/v4';
|
|
2
|
+
export declare const webhookTools: (import("../tooling.js").ToolDef<{}> | import("../tooling.js").ToolDef<{
|
|
3
|
+
url: z.ZodOptional<z.ZodString>;
|
|
4
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
5
|
+
events: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
6
|
+
inboundCall: "inboundCall";
|
|
7
|
+
outboundCall: "outboundCall";
|
|
8
|
+
callCompleted: "callCompleted";
|
|
9
|
+
leadCreated: "leadCreated";
|
|
10
|
+
leadQualified: "leadQualified";
|
|
11
|
+
campaignCompleted: "campaignCompleted";
|
|
12
|
+
appointmentBooked: "appointmentBooked";
|
|
13
|
+
appointmentCanceled: "appointmentCanceled";
|
|
14
|
+
callTransferred: "callTransferred";
|
|
15
|
+
transferFailed: "transferFailed";
|
|
16
|
+
}>>>;
|
|
17
|
+
}> | import("../tooling.js").ToolDef<{
|
|
18
|
+
event: z.ZodEnum<{
|
|
19
|
+
inboundCall: "inboundCall";
|
|
20
|
+
outboundCall: "outboundCall";
|
|
21
|
+
callCompleted: "callCompleted";
|
|
22
|
+
leadCreated: "leadCreated";
|
|
23
|
+
leadQualified: "leadQualified";
|
|
24
|
+
campaignCompleted: "campaignCompleted";
|
|
25
|
+
appointmentBooked: "appointmentBooked";
|
|
26
|
+
appointmentCanceled: "appointmentCanceled";
|
|
27
|
+
callTransferred: "callTransferred";
|
|
28
|
+
transferFailed: "transferFailed";
|
|
29
|
+
}>;
|
|
30
|
+
}> | import("../tooling.js").ToolDef<{
|
|
31
|
+
limit: z.ZodOptional<z.ZodNumber>;
|
|
32
|
+
starting_after: z.ZodOptional<z.ZodString>;
|
|
33
|
+
ending_before: z.ZodOptional<z.ZodString>;
|
|
34
|
+
event: z.ZodOptional<z.ZodEnum<{
|
|
35
|
+
inboundCall: "inboundCall";
|
|
36
|
+
outboundCall: "outboundCall";
|
|
37
|
+
callCompleted: "callCompleted";
|
|
38
|
+
leadCreated: "leadCreated";
|
|
39
|
+
leadQualified: "leadQualified";
|
|
40
|
+
campaignCompleted: "campaignCompleted";
|
|
41
|
+
appointmentBooked: "appointmentBooked";
|
|
42
|
+
appointmentCanceled: "appointmentCanceled";
|
|
43
|
+
callTransferred: "callTransferred";
|
|
44
|
+
transferFailed: "transferFailed";
|
|
45
|
+
}>>;
|
|
46
|
+
status: z.ZodOptional<z.ZodEnum<{
|
|
47
|
+
failed: "failed";
|
|
48
|
+
delivered: "delivered";
|
|
49
|
+
}>>;
|
|
50
|
+
start: z.ZodOptional<z.ZodString>;
|
|
51
|
+
end: z.ZodOptional<z.ZodString>;
|
|
52
|
+
}>)[];
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { z } from 'zod/v4';
|
|
2
|
+
import { annotate, compact, defineTool } from '../tooling.js';
|
|
3
|
+
import { isoDate, pagination } from '../schemas.js';
|
|
4
|
+
const EVENTS = [
|
|
5
|
+
'inboundCall',
|
|
6
|
+
'outboundCall',
|
|
7
|
+
'callCompleted',
|
|
8
|
+
'leadCreated',
|
|
9
|
+
'leadQualified',
|
|
10
|
+
'campaignCompleted',
|
|
11
|
+
'appointmentBooked',
|
|
12
|
+
'appointmentCanceled',
|
|
13
|
+
'callTransferred',
|
|
14
|
+
'transferFailed',
|
|
15
|
+
];
|
|
16
|
+
const event = z.enum(EVENTS).describe('An event id. These are camelCase because they are the literal `event` field of the JSON we POST, not API fields.');
|
|
17
|
+
export const webhookTools = [
|
|
18
|
+
defineTool({
|
|
19
|
+
name: 'get_webhook',
|
|
20
|
+
endpoint: 'GET /v1/webhook',
|
|
21
|
+
title: 'Retrieve the webhook endpoint',
|
|
22
|
+
description: 'Where events are sent for this account, whether delivery is on, and which events are subscribed. ' +
|
|
23
|
+
'One endpoint per account, so there is nothing to list. The signing secret is never returned — only whether one is set.',
|
|
24
|
+
input: {},
|
|
25
|
+
annotations: annotate.read,
|
|
26
|
+
scope: 'webhooks:read',
|
|
27
|
+
handler: (client) => client.get('/v1/webhook'),
|
|
28
|
+
}),
|
|
29
|
+
defineTool({
|
|
30
|
+
name: 'update_webhook',
|
|
31
|
+
endpoint: 'PATCH /v1/webhook',
|
|
32
|
+
title: 'Update the webhook endpoint',
|
|
33
|
+
description: 'Set the URL, turn delivery on or off, or change the event subscription. Only the fields you send change, ' +
|
|
34
|
+
'EXCEPT events, which replaces the subscription entirely — send the full list you want, not a delta. ' +
|
|
35
|
+
'The URL must be publicly resolvable; one pointing at loopback or a private network is refused. ' +
|
|
36
|
+
'Enabling with no URL set is refused rather than silently saved.',
|
|
37
|
+
input: {
|
|
38
|
+
url: z.string().url().optional().describe('HTTPS endpoint we POST events to.'),
|
|
39
|
+
enabled: z.boolean().optional().describe('Master switch. False sends nothing regardless of the event list.'),
|
|
40
|
+
events: z.array(event).min(1).optional().describe('The complete set of events to receive.'),
|
|
41
|
+
},
|
|
42
|
+
annotations: annotate.write,
|
|
43
|
+
scope: 'webhooks:write',
|
|
44
|
+
handler: (client, args) => client.patch('/v1/webhook', compact(args)),
|
|
45
|
+
}),
|
|
46
|
+
defineTool({
|
|
47
|
+
name: 'rotate_webhook_secret',
|
|
48
|
+
endpoint: 'POST /v1/webhook/rotate-secret',
|
|
49
|
+
title: 'Rotate the webhook signing secret',
|
|
50
|
+
description: 'Mint a new signing secret and return it ONCE. The old secret stops verifying immediately, so a receiver ' +
|
|
51
|
+
'that checks signatures will reject every event until it has been redeployed with the new one. ' +
|
|
52
|
+
'Do this when a secret has leaked, not as routine maintenance, and hand the value to the user right away.',
|
|
53
|
+
input: {},
|
|
54
|
+
annotations: annotate.write,
|
|
55
|
+
scope: 'webhooks:write',
|
|
56
|
+
handler: (client) => client.post('/v1/webhook/rotate-secret'),
|
|
57
|
+
}),
|
|
58
|
+
defineTool({
|
|
59
|
+
name: 'test_webhook',
|
|
60
|
+
endpoint: 'POST /v1/webhook/test',
|
|
61
|
+
title: 'Send a test webhook event',
|
|
62
|
+
description: 'POST one sample payload to the configured URL right now and report what came back. This is how to check ' +
|
|
63
|
+
'a webhook works BEFORE enabling it: it deliberately ignores the enabled flag and the event subscription. ' +
|
|
64
|
+
'It reaches a real third-party endpoint but spends no credit. The payload is obviously fake sample data.',
|
|
65
|
+
input: { event },
|
|
66
|
+
annotations: annotate.probe,
|
|
67
|
+
scope: 'webhooks:write',
|
|
68
|
+
handler: (client, args) => client.post('/v1/webhook/test', args),
|
|
69
|
+
}),
|
|
70
|
+
defineTool({
|
|
71
|
+
name: 'list_webhook_deliveries',
|
|
72
|
+
endpoint: 'GET /v1/webhook/deliveries',
|
|
73
|
+
title: 'List webhook delivery attempts',
|
|
74
|
+
description: 'What was sent and what came back, newest first — the answer to "did my webhook fire?". One record per ' +
|
|
75
|
+
'attempt, so an event delivered on its third try appears three times. A null response_status means nothing ' +
|
|
76
|
+
'answered at all (DNS, refused connection, timeout), which is what tells a wrong URL apart from a handler ' +
|
|
77
|
+
'that threw. Filter with status: "failed" to see only what broke.',
|
|
78
|
+
input: {
|
|
79
|
+
event: event.optional(),
|
|
80
|
+
status: z.enum(['delivered', 'failed']).optional().describe('Filter by outcome.'),
|
|
81
|
+
start: isoDate.optional().describe('Only attempts at or after this time.'),
|
|
82
|
+
end: isoDate.optional().describe('Only attempts at or before this time.'),
|
|
83
|
+
...pagination,
|
|
84
|
+
},
|
|
85
|
+
annotations: annotate.read,
|
|
86
|
+
scope: 'webhooks:read',
|
|
87
|
+
handler: (client, args) => client.get('/v1/webhook/deliveries', compact(args)),
|
|
88
|
+
}),
|
|
89
|
+
];
|
|
90
|
+
//# sourceMappingURL=webhooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/tools/webhooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEpD,MAAM,MAAM,GAAG;IACX,aAAa;IACb,cAAc;IACd,eAAe;IACf,aAAa;IACb,eAAe;IACf,mBAAmB;IACnB,mBAAmB;IACnB,qBAAqB;IACrB,iBAAiB;IACjB,gBAAgB;CACV,CAAC;AAEX,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CACjC,kHAAkH,CACrH,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG;IACxB,UAAU,CAAC;QACP,IAAI,EAAE,aAAa;QACnB,QAAQ,EAAE,iBAAiB;QAC3B,KAAK,EAAE,+BAA+B;QACtC,WAAW,EACP,mGAAmG;YACnG,wHAAwH;QAC5H,KAAK,EAAE,EAAE;QACT,WAAW,EAAE,QAAQ,CAAC,IAAI;QAC1B,KAAK,EAAE,eAAe;QACtB,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC;KACjD,CAAC;IACF,UAAU,CAAC;QACP,IAAI,EAAE,gBAAgB;QACtB,QAAQ,EAAE,mBAAmB;QAC7B,KAAK,EAAE,6BAA6B;QACpC,WAAW,EACP,2GAA2G;YAC3G,sGAAsG;YACtG,iGAAiG;YACjG,iEAAiE;QACrE,KAAK,EAAE;YACH,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;YAC9E,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kEAAkE,CAAC;YAC5G,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;SAC9F;QACD,WAAW,EAAE,QAAQ,CAAC,KAAK;QAC3B,KAAK,EAAE,gBAAgB;QACvB,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;KACxE,CAAC;IACF,UAAU,CAAC;QACP,IAAI,EAAE,uBAAuB;QAC7B,QAAQ,EAAE,gCAAgC;QAC1C,KAAK,EAAE,mCAAmC;QAC1C,WAAW,EACP,0GAA0G;YAC1G,gGAAgG;YAChG,0GAA0G;QAC9G,KAAK,EAAE,EAAE;QACT,WAAW,EAAE,QAAQ,CAAC,KAAK;QAC3B,KAAK,EAAE,gBAAgB;QACvB,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC;KAChE,CAAC;IACF,UAAU,CAAC;QACP,IAAI,EAAE,cAAc;QACpB,QAAQ,EAAE,uBAAuB;QACjC,KAAK,EAAE,2BAA2B;QAClC,WAAW,EACP,0GAA0G;YAC1G,2GAA2G;YAC3G,yGAAyG;QAC7G,KAAK,EAAE,EAAE,KAAK,EAAE;QAChB,WAAW,EAAE,QAAQ,CAAC,KAAK;QAC3B,KAAK,EAAE,gBAAgB;QACvB,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC;KACnE,CAAC;IACF,UAAU,CAAC;QACP,IAAI,EAAE,yBAAyB;QAC/B,QAAQ,EAAE,4BAA4B;QACtC,KAAK,EAAE,gCAAgC;QACvC,WAAW,EACP,wGAAwG;YACxG,4GAA4G;YAC5G,2GAA2G;YAC3G,kEAAkE;QACtE,KAAK,EAAE;YACH,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE;YACvB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YACjF,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;YAC1E,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;YACzE,GAAG,UAAU;SAChB;QACD,WAAW,EAAE,QAAQ,CAAC,IAAI;QAC1B,KAAK,EAAE,eAAe;QACtB,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,wBAAwB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;KACjF,CAAC;CACL,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The release, in one place. The server advertises it, the client sends it in
|
|
3
|
+
* its User-Agent, and a test holds package.json and server.json to it. The
|
|
4
|
+
* User-Agent once said 0.2.1 through the 0.3.0 release because it was a second
|
|
5
|
+
* literal nobody bumped.
|
|
6
|
+
*/
|
|
7
|
+
export declare const VERSION = "0.4.0";
|
package/dist/version.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The release, in one place. The server advertises it, the client sends it in
|
|
3
|
+
* its User-Agent, and a test holds package.json and server.json to it. The
|
|
4
|
+
* User-Agent once said 0.2.1 through the 0.3.0 release because it was a second
|
|
5
|
+
* literal nobody bumped.
|
|
6
|
+
*/
|
|
7
|
+
export const VERSION = '0.4.0';
|
|
8
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "wixzel-voice-mcp",
|
|
3
|
+
"version": "0.4.0",
|
|
4
|
+
"description": "MCP server for Wixzel Voice — lets Claude, ChatGPT, Cursor and any other MCP client create voice agents, place and answer real phone calls, manage leads and campaigns, and read usage over the Wixzel Voice API.",
|
|
5
|
+
"mcpName": "com.wixzel/voice",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"bin": {
|
|
9
|
+
"wixzel-voice-mcp": "dist/index.js"
|
|
10
|
+
},
|
|
11
|
+
"main": "dist/server.js",
|
|
12
|
+
"types": "dist/server.d.ts",
|
|
13
|
+
"files": [
|
|
14
|
+
"dist",
|
|
15
|
+
"README.md",
|
|
16
|
+
"CHANGELOG.md",
|
|
17
|
+
"LICENSE"
|
|
18
|
+
],
|
|
19
|
+
"publishConfig": {
|
|
20
|
+
"access": "public"
|
|
21
|
+
},
|
|
22
|
+
"engines": {
|
|
23
|
+
"node": ">=20"
|
|
24
|
+
},
|
|
25
|
+
"scripts": {
|
|
26
|
+
"build": "tsc -p tsconfig.json && chmod +x dist/index.js",
|
|
27
|
+
"dev": "tsx src/index.ts",
|
|
28
|
+
"start": "node dist/index.js",
|
|
29
|
+
"test": "tsx --test test/*.test.ts",
|
|
30
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
31
|
+
"inspect": "npx @modelcontextprotocol/inspector node dist/index.js",
|
|
32
|
+
"prepublishOnly": "npm run build && npm test"
|
|
33
|
+
},
|
|
34
|
+
"keywords": [
|
|
35
|
+
"mcp",
|
|
36
|
+
"model-context-protocol",
|
|
37
|
+
"wixzel",
|
|
38
|
+
"voice-agents",
|
|
39
|
+
"telephony",
|
|
40
|
+
"claude-code",
|
|
41
|
+
"ai-agents",
|
|
42
|
+
"mcp-server",
|
|
43
|
+
"phone-calls",
|
|
44
|
+
"voice-ai",
|
|
45
|
+
"ai-voice-agent",
|
|
46
|
+
"sip-trunk",
|
|
47
|
+
"claude",
|
|
48
|
+
"cursor"
|
|
49
|
+
],
|
|
50
|
+
"repository": {
|
|
51
|
+
"type": "git",
|
|
52
|
+
"url": "git+https://github.com/aqeelshamz/wixzel-voice-sdks.git",
|
|
53
|
+
"directory": "apps/mcp"
|
|
54
|
+
},
|
|
55
|
+
"homepage": "https://voice.wixzel.com",
|
|
56
|
+
"dependencies": {
|
|
57
|
+
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
58
|
+
"zod": "^3.25.76"
|
|
59
|
+
},
|
|
60
|
+
"devDependencies": {
|
|
61
|
+
"@types/node": "^22.19.0",
|
|
62
|
+
"tsx": "^4.19.0",
|
|
63
|
+
"typescript": "^5.7.0"
|
|
64
|
+
}
|
|
65
|
+
}
|