wixzel-voice-mcp 0.9.0 → 0.11.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 CHANGED
@@ -1,5 +1,23 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.11.0 (2026-10-24)
4
+
5
+ - `connect_meeting_integration` takes `signed_in_bots`, and `api_key` may be left out to keep the stored key; `join_meeting` takes `signed_in`.
6
+
7
+ ## 0.10.0 (2026-10-22)
8
+
9
+ Meetings.
10
+
11
+ - `connect_meeting_integration`, `get_meeting_integration` and
12
+ `delete_meeting_integration` store the user's own Attendee account.
13
+ - `join_meeting` sends an agent into a Zoom, Google Meet or Teams meeting;
14
+ `list_meetings`, `get_meeting` and `leave_meeting` follow and end it.
15
+
16
+ ## 0.9.1 (2026-10-22)
17
+
18
+ The 0.9.0 release, published again: 0.9.0 was staged on npm and never went
19
+ live, and npm does not reuse a version number. No code changes.
20
+
3
21
  ## 0.9.0 (2026-10-21)
4
22
 
5
23
  WhatsApp: business numbers, their chats, and sending messages.
package/README.md CHANGED
@@ -65,6 +65,7 @@ Same shape as `.mcp.json` above: command `npx`, args `["-y", "wixzel-voice-mcp"]
65
65
  | Agents | `list_agents` `get_agent` `create_agent` `update_agent` `delete_agent` |
66
66
  | Calls | `place_call` `list_calls` `get_call` `get_call_transcript` `hangup_call` `delete_call` |
67
67
  | Callers | `list_callers` `get_caller` `update_caller` |
68
+ | Meetings | `connect_meeting_integration` `get_meeting_integration` `delete_meeting_integration` `join_meeting` `list_meetings` `get_meeting` `leave_meeting` |
68
69
  | SIP trunks | `list_sip_trunks` `get_sip_trunk` `create_sip_trunk` `update_sip_trunk` `delete_sip_trunk` `check_sip_trunk_status` `test_sip_trunk` `get_sip_trunk_logs` |
69
70
  | Phone numbers | `list_phone_numbers` `get_phone_number` `create_phone_number` `update_phone_number` `delete_phone_number` |
70
71
  | Leads | `list_leads` `get_lead` `create_lead` `update_lead` `delete_lead` `import_leads` |
package/dist/client.d.ts CHANGED
@@ -11,7 +11,7 @@
11
11
  * so older releases of this package keep working.
12
12
  */
13
13
  export declare const DEFAULT_BASE_URL = "https://api.voice.wixzel.com";
14
- export declare const USER_AGENT = "wixzel-voice-mcp/0.9.0";
14
+ export declare const USER_AGENT = "wixzel-voice-mcp/0.11.0";
15
15
  export type HttpMethod = 'GET' | 'POST' | 'PATCH' | 'DELETE';
16
16
  export type QueryValue = string | number | boolean | null | undefined;
17
17
  export interface RequestOptions {
package/dist/guide.js CHANGED
@@ -56,6 +56,9 @@ ${intro}
56
56
  - A VOICE is a clone of one person's voice, made with create_voice_clone from
57
57
  recordings the user has permission to use. Put its provider_voice_id in an
58
58
  agent's voice.tts.voice, on one of the engines the voice lists.
59
+ - A MEETING is an agent in a Zoom, Google Meet or Teams meeting, through the
60
+ user's own Attendee account (connect_meeting_integration, then join_meeting).
61
+ It speaks only when someone says its name unless respond_when is "always".
59
62
  - A WHATSAPP ACCOUNT is a business number connected through Meta, best done in the
60
63
  console (WhatsApp > Connect WhatsApp). Give it an inbound_agent_id and that agent
61
64
  answers its chats and voice notes. An agent's whatsapp settings turn on tools to
package/dist/guide.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"guide.js","sourceRoot":"","sources":["../src/guide.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAErD,MAAM,UAAU,UAAU,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC3D,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,UAAU;QACpB,CAAC,CAAC,wDAAwD,IAAI,EAAE;QAChE,CAAC,CAAC,gEAAgE,IAAI,EAAE,CAAC;IAC7E,MAAM,KAAK,GAAG,UAAU;QACpB,CAAC,CAAC;;4DAEkD;QACpD,CAAC,CAAC;sEAC4D,CAAC;IACnE,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,kCAAkC,CAAC;IACrF,MAAM,QAAQ,GAAG,UAAU;QACvB,CAAC,CAAC;;;oCAG0B;QAC5B,CAAC,CAAC;;;;;;kDAMwC,CAAC;IAE/C,OAAO;;;;EAIT,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;EAyBL,KAAK;;;;;;;;;;;;;EAaL,SAAS;;;;;;EAMT,QAAQ;;;;;;;;;;;;;;CAcT,CAAC;AACF,CAAC;AAED,MAAM,CAAC,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC"}
1
+ {"version":3,"file":"guide.js","sourceRoot":"","sources":["../src/guide.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAErD,MAAM,UAAU,UAAU,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC3D,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,UAAU;QACpB,CAAC,CAAC,wDAAwD,IAAI,EAAE;QAChE,CAAC,CAAC,gEAAgE,IAAI,EAAE,CAAC;IAC7E,MAAM,KAAK,GAAG,UAAU;QACpB,CAAC,CAAC;;4DAEkD;QACpD,CAAC,CAAC;sEAC4D,CAAC;IACnE,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,kCAAkC,CAAC;IACrF,MAAM,QAAQ,GAAG,UAAU;QACvB,CAAC,CAAC;;;oCAG0B;QAC5B,CAAC,CAAC;;;;;;kDAMwC,CAAC;IAE/C,OAAO;;;;EAIT,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4BL,KAAK;;;;;;;;;;;;;EAaL,SAAS;;;;;;EAMT,QAAQ;;;;;;;;;;;;;;CAcT,CAAC;AACF,CAAC;AAED,MAAM,CAAC,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC"}
package/dist/server.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  import { WixzelClient, type WixzelClientOptions } from './client.js';
3
3
  export declare const SERVER_NAME = "wixzel-voice";
4
- export declare const SERVER_VERSION = "0.9.0";
4
+ export declare const SERVER_VERSION = "0.11.0";
5
5
  export interface CreateServerOptions {
6
6
  /** An already-constructed client, or the options to build one. */
7
7
  client: WixzelClient | WixzelClientOptions;
@@ -6,6 +6,7 @@ import { billingTools } from './billing.js';
6
6
  import { callTools } from './calls.js';
7
7
  import { callerTools } from './callers.js';
8
8
  import { realtimeTools } from './realtime.js';
9
+ import { meetingTools } from './meetings.js';
9
10
  import { campaignTools } from './campaigns.js';
10
11
  import { engineTools } from './engines.js';
11
12
  import { knowledgeBaseTools } from './knowledge-bases.js';
@@ -24,6 +25,7 @@ export const allTools = [
24
25
  ...callTools,
25
26
  ...callerTools,
26
27
  ...realtimeTools,
28
+ ...meetingTools,
27
29
  ...sipTrunkTools,
28
30
  ...phoneNumberTools,
29
31
  ...leadTools,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,uEAAuE;AACvE,MAAM,CAAC,MAAM,QAAQ,GAAmB;IACpC,GAAG,WAAW;IACd,GAAG,UAAU;IACb,GAAG,SAAS;IACZ,GAAG,WAAW;IACd,GAAG,aAAa;IAChB,GAAG,aAAa;IAChB,GAAG,gBAAgB;IACnB,GAAG,SAAS;IACZ,GAAG,aAAa;IAChB,GAAG,kBAAkB;IACrB,GAAG,gBAAgB;IACnB,GAAG,cAAc;IACjB,GAAG,SAAS;IACZ,GAAG,UAAU;IACb,GAAG,aAAa;IAChB,GAAG,YAAY;IACf,GAAG,YAAY;IACf,GAAG,WAAW;CACjB,CAAC;AAEF,mFAAmF;AACnF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;AAE9C,mEAAmE;AACnE,MAAM,UAAU,QAAQ,CAAC,MAAyB,OAAO,CAAC,GAAG;IACzD,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AACjG,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,uEAAuE;AACvE,MAAM,CAAC,MAAM,QAAQ,GAAmB;IACpC,GAAG,WAAW;IACd,GAAG,UAAU;IACb,GAAG,SAAS;IACZ,GAAG,WAAW;IACd,GAAG,aAAa;IAChB,GAAG,YAAY;IACf,GAAG,aAAa;IAChB,GAAG,gBAAgB;IACnB,GAAG,SAAS;IACZ,GAAG,aAAa;IAChB,GAAG,kBAAkB;IACrB,GAAG,gBAAgB;IACnB,GAAG,cAAc;IACjB,GAAG,SAAS;IACZ,GAAG,UAAU;IACb,GAAG,aAAa;IAChB,GAAG,YAAY;IACf,GAAG,YAAY;IACf,GAAG,WAAW;CACjB,CAAC;AAEF,mFAAmF;AACnF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;AAE9C,mEAAmE;AACnE,MAAM,UAAU,QAAQ,CAAC,MAAyB,OAAO,CAAC,GAAG;IACzD,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AACjG,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { z } from 'zod/v4';
2
+ export declare const meetingTools: (import("../tooling.js").ToolDef<{}> | import("../tooling.js").ToolDef<{
3
+ api_key: z.ZodOptional<z.ZodString>;
4
+ base_url: z.ZodOptional<z.ZodString>;
5
+ webhook_secret: z.ZodOptional<z.ZodNullable<z.ZodString>>;
6
+ signed_in_bots: z.ZodOptional<z.ZodObject<{
7
+ google_meet: z.ZodBoolean;
8
+ teams: z.ZodBoolean;
9
+ login_group: z.ZodOptional<z.ZodNullable<z.ZodString>>;
10
+ }, z.core.$strip>>;
11
+ }> | import("../tooling.js").ToolDef<{
12
+ agent_id: z.ZodString;
13
+ meeting_url: z.ZodString;
14
+ bot_name: z.ZodOptional<z.ZodString>;
15
+ respond_when: z.ZodOptional<z.ZodEnum<{
16
+ addressed: "addressed";
17
+ always: "always";
18
+ }>>;
19
+ wake_names: z.ZodOptional<z.ZodArray<z.ZodString>>;
20
+ signed_in: z.ZodOptional<z.ZodBoolean>;
21
+ lead_id: z.ZodOptional<z.ZodString>;
22
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
23
+ max_duration_seconds: z.ZodOptional<z.ZodNumber>;
24
+ waiting_room_timeout_seconds: z.ZodOptional<z.ZodNumber>;
25
+ idempotency_key: z.ZodOptional<z.ZodString>;
26
+ }> | import("../tooling.js").ToolDef<{
27
+ limit: z.ZodOptional<z.ZodNumber>;
28
+ starting_after: z.ZodOptional<z.ZodString>;
29
+ ending_before: z.ZodOptional<z.ZodString>;
30
+ }> | import("../tooling.js").ToolDef<{
31
+ id: z.ZodString;
32
+ }>)[];
@@ -0,0 +1,110 @@
1
+ import { z } from 'zod/v4';
2
+ import { annotate, compact, defineTool } from '../tooling.js';
3
+ import { arbitraryFields, id, idempotencyKey, pagination } from '../schemas.js';
4
+ export const meetingTools = [
5
+ defineTool({
6
+ name: 'get_meeting_integration',
7
+ endpoint: 'GET /v1/meetings/integration',
8
+ title: 'Retrieve the meeting integration',
9
+ description: 'The Attendee account agents join meetings through: its URL, the last four characters of its key, and whether a webhook secret is stored. ' +
10
+ 'A not_found error means none is connected yet: use connect_meeting_integration first.',
11
+ input: {},
12
+ annotations: annotate.read,
13
+ scope: 'calls:read',
14
+ handler: (client) => client.get('/v1/meetings/integration'),
15
+ }),
16
+ defineTool({
17
+ name: 'connect_meeting_integration',
18
+ endpoint: 'POST /v1/meetings/integration',
19
+ title: 'Connect Attendee for meetings',
20
+ description: 'Store the user\'s own Attendee account (attendee.dev), which agents join Zoom, Google Meet and Teams meetings through. ' +
21
+ 'Bring your own key: the user signs up at app.attendee.dev (or runs Attendee themselves) and creates an API key in their project there. Attendee bills the user for bot hours directly. ' +
22
+ 'The key is checked with Attendee before it is saved and is never returned. Calling this again replaces what is stored. ' +
23
+ 'For Zoom meetings the user\'s Attendee project also needs Zoom Meeting SDK credentials, set up in Attendee.',
24
+ input: {
25
+ api_key: z.string().optional().describe('An API key from the user\'s Attendee project. Needed the first time and when base_url changes; omit to keep the stored key.'),
26
+ base_url: z.string().optional().describe('Their Attendee: https://app.attendee.dev (the default) or the address of their own install.'),
27
+ webhook_secret: z.string().nullable().optional()
28
+ .describe('Optional: the Attendee project\'s webhook secret (Settings > Webhooks there), so bot state webhooks are signature-checked. null removes it.'),
29
+ signed_in_bots: z.object({
30
+ google_meet: z.boolean().describe('Sign in before joining Google Meet. Needs a Google Workspace bot login set up in Attendee.'),
31
+ teams: z.boolean().describe('Sign in before joining Teams. Needs a Microsoft 365 bot login set up in Attendee.'),
32
+ login_group: z.string().nullable().optional().describe('Attendee bot login group; null uses the oldest.'),
33
+ }).optional().describe('Signed-in bots show as a named account instead of an anonymous guest that Meet labels "appears to be a bot". Omit to keep what is stored. Not for Zoom.'),
34
+ },
35
+ // Reaches the user's Attendee to check the key, spending nothing.
36
+ annotations: annotate.probe,
37
+ scope: 'calls:write',
38
+ handler: (client, args) => client.post('/v1/meetings/integration', compact({ provider: 'attendee', ...args })),
39
+ }),
40
+ defineTool({
41
+ name: 'delete_meeting_integration',
42
+ endpoint: 'DELETE /v1/meetings/integration',
43
+ title: 'Disconnect Attendee',
44
+ description: 'Forget the stored Attendee URL and key. Meetings already running carry on; new ones cannot be joined until it is connected again.',
45
+ input: {},
46
+ annotations: annotate.destructive,
47
+ scope: 'calls:write',
48
+ handler: async (client) => {
49
+ await client.delete('/v1/meetings/integration');
50
+ return { deleted: true };
51
+ },
52
+ }),
53
+ defineTool({
54
+ name: 'join_meeting',
55
+ endpoint: 'POST /v1/meetings',
56
+ title: 'Send an agent to a meeting',
57
+ description: 'The agent joins a Zoom, Google Meet or Microsoft Teams meeting as a named participant (bot_name, default the agent\'s name), through the user\'s Attendee (connect_meeting_integration first). ' +
58
+ 'THIS PUTS A BOT INTO A REAL MEETING AND SPENDS CREDIT ONCE IT IS LET IN: confirm with the user before calling it. ' +
59
+ 'By default the agent speaks only when someone says its name (respond_when "addressed"); use "always" for a one-to-one meeting. ' +
60
+ 'Nothing is charged while the bot joins or waits to be admitted; once in, it is billed like a realtime session until it leaves. ' +
61
+ 'Returns the meeting with status joining; poll get_meeting for waiting_room, in_meeting, ended or failed (with error). The transcript is on get_call with the same id.',
62
+ input: {
63
+ agent_id: z.string().describe('The agent that joins.'),
64
+ meeting_url: z.string().describe('The meeting\'s join link, e.g. https://meet.google.com/abc-defg-hij, https://zoom.us/j/123?pwd=…, or a Teams meetup-join link.'),
65
+ bot_name: z.string().optional().describe('The name shown in the meeting. Defaults to the agent\'s name.'),
66
+ respond_when: z.enum(['addressed', 'always']).optional().describe('"addressed" (default): speak only after its name is said, and briefly after it last spoke. "always": answer whatever it hears.'),
67
+ wake_names: z.array(z.string()).max(5).optional().describe('Extra names that address the agent, e.g. how people shorten it.'),
68
+ signed_in: z.boolean().optional().describe('Sign the bot in before it joins (Meet and Teams). Defaults to the integration\'s signed_in_bots setting; true on Zoom is refused.'),
69
+ lead_id: z.string().optional().describe('Existing lead to attribute the meeting to.'),
70
+ metadata: arbitraryFields.describe('Echoed on the call and its callCompleted webhook. Not shown to the model.'),
71
+ max_duration_seconds: z.number().int().min(60).max(14400).optional().describe('Cap on time in the meeting once admitted. Default 3600.'),
72
+ waiting_room_timeout_seconds: z.number().int().min(30).max(3600).optional().describe('How long to wait to be admitted. Default 600.'),
73
+ idempotency_key: idempotencyKey,
74
+ },
75
+ annotations: annotate.spend,
76
+ scope: 'calls:write',
77
+ handler: (client, { idempotency_key, ...body }) => client.post('/v1/meetings', compact(body), { idempotencyKey: idempotency_key, idempotent: true }),
78
+ }),
79
+ defineTool({
80
+ name: 'list_meetings',
81
+ endpoint: 'GET /v1/meetings',
82
+ title: 'List meetings',
83
+ description: 'Meetings agents were sent to, newest first, with their status (joining, waiting_room, in_meeting, ended, failed).',
84
+ input: { ...pagination },
85
+ annotations: annotate.read,
86
+ scope: 'calls:read',
87
+ handler: (client, args) => client.get('/v1/meetings', args),
88
+ }),
89
+ defineTool({
90
+ name: 'get_meeting',
91
+ endpoint: 'GET /v1/meetings/{id}',
92
+ title: 'Retrieve a meeting',
93
+ description: 'Where the bot is, or how it ended: status, bot_state (Attendee\'s own), end_reason, error, duration_seconds and cost_micros. Use get_call with the same id for the transcript.',
94
+ input: { id: id.describe('The meeting id returned by join_meeting.') },
95
+ annotations: annotate.read,
96
+ scope: 'calls:read',
97
+ handler: (client, { id }) => client.get(`/v1/meetings/${encodeURIComponent(id)}`),
98
+ }),
99
+ defineTool({
100
+ name: 'leave_meeting',
101
+ endpoint: 'POST /v1/meetings/{id}/leave',
102
+ title: 'Leave a meeting',
103
+ description: 'The agent leaves the meeting now. A bot still joining or waiting is called off. Billing stops when it leaves.',
104
+ input: { id: id.describe('The meeting id.') },
105
+ annotations: annotate.writeIdempotent,
106
+ scope: 'calls:write',
107
+ handler: (client, { id }) => client.post(`/v1/meetings/${encodeURIComponent(id)}/leave`, {}),
108
+ }),
109
+ ];
110
+ //# sourceMappingURL=meetings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meetings.js","sourceRoot":"","sources":["../../src/tools/meetings.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -4,4 +4,4 @@
4
4
  * User-Agent once said 0.2.1 through the 0.3.0 release because it was a second
5
5
  * literal nobody bumped.
6
6
  */
7
- export declare const VERSION = "0.9.0";
7
+ export declare const VERSION = "0.11.0";
package/dist/version.js CHANGED
@@ -4,5 +4,5 @@
4
4
  * User-Agent once said 0.2.1 through the 0.3.0 release because it was a second
5
5
  * literal nobody bumped.
6
6
  */
7
- export const VERSION = '0.9.0';
7
+ export const VERSION = '0.11.0';
8
8
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wixzel-voice-mcp",
3
- "version": "0.9.0",
3
+ "version": "0.11.0",
4
4
  "description": "MCP server for Wixzel Voice: lets Claude, Cursor or any MCP client build voice agents, place real phone calls over your own SIP trunk, manage leads and campaigns, and read usage over the Wixzel Voice API.",
5
5
  "mcpName": "com.wixzel/voice",
6
6
  "license": "MIT",