wixzel-phone-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PORT | No | HTTP port when --http is given without one. Default 3939. | 3939 |
| WIXZEL_API_KEY | Yes | Your Wixzel Phone API key. Required for stdio; the fallback for HTTP. | |
| WIXZEL_API_VERSION | No | Optional Wixzel-Version date pin, e.g. 2026-09-01. | |
| WIXZEL_API_BASE_URL | No | Base URL for the Wixzel API. Point at a self-hosted API for development. | https://api.phone.wixzel.com |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_enginesA | What the platform can serve right now, with per-unit prices in micro-USD. Each engine is composed (needs stt + llm + tts models) or realtime (one model). Call this before create_agent rather than guessing model ids: an engine whose provider is degraded disappears from this list before calls start failing. No scope needed beyond a valid key. |
| list_agentsA | List the voice agents on this account. Cursor-paginated: pass next_cursor as starting_after for the next page. Requires scope |
| get_agentA | Fetch one agent by id, including its full voice configuration and prompt. Requires scope |
| create_agentA | Create a voice agent. Pick models with list_engines first: an unavailable or mistyped model is rejected with unsupported_model. voice is either a composed pipeline {stt, llm, tts} or a single {realtime} model, never both. Requires scope |
| update_agentA | Change an agent. Only the fields you send are changed; omit the rest. Sending voice replaces the whole voice object. Requires scope |
| delete_agentA | Permanently delete an agent. Phone numbers and campaigns pointing at it stop working. Not reversible. Requires scope |
| place_callA | Dial a real phone number over the account's SIP trunk and connect the agent. THIS SPENDS MONEY AND MAKES A PHONE RING: confirm with the user before calling it. Credit is reserved up front; an underfunded account is refused with insufficient_credits and nothing is dialled. Returns the call record immediately with status queued or ringing; poll get_call for progress, transcript and cost. Needs an agent (create_agent), a SIP trunk (create_sip_trunk) and a phone number on it (create_phone_number), either as from_number_id or as the agent's outbound_phone_number_id. Requires scope |
| list_callsA | List calls in summary form (no transcript). Filter by status, direction, agent, campaign, engine, phone number or time window. Use get_call for the full record of one call. Requires scope |
| get_callA | The full call record: status, duration, cost_micros, recording_url, summary, transcript, transfers, and any provider errors. If the call did not connect, failure_code (a Q.850 cause: 17 busy, 19 no answer, 21 rejected by carrier, 34 congestion, 102 timeout) and failure_reason say what to do about it. Requires scope |
| get_call_transcriptA | Just the transcript of a call, as a list of {role, content, timestamp} turns. Requires scope |
| hangup_callA | Hang up a live call. Billing stops when the call ends. Returns the updated call record. Requires scope |
| delete_callA | Remove a call log with its transcript and recording, as a caller's erasure request needs. The usage rows that billed it are kept (they carry no content). A call still in progress cannot be deleted; hang it up first. Not reversible. Requires scope |
| list_sip_trunksA | List the account's SIP trunks. Each carries platform_ip (allowlist it with the carrier for outbound) and origination_uri (point the carrier at it for inbound). Requires scope |
| get_sip_trunkA | Fetch one SIP trunk by id. The password is never returned. Requires scope |
| create_sip_trunkA | Connect the user's own carrier (Twilio, Telnyx, Plivo, any SIP provider). Wixzel does not resell telephony. After creating, tell the user to allowlist the returned platform_ip with their carrier (for outbound) and to set the carrier's origination URI to origination_uri (for inbound). Then run check_sip_trunk_status. Requires scope |
| update_sip_trunkA | Change a SIP trunk. Only the fields you send are changed. Requires scope |
| delete_sip_trunkA | Remove a SIP trunk. Phone numbers on it can no longer make or take calls. Not reversible. Requires scope |
| check_sip_trunk_statusA | Diagnose a trunk: Asterisk's own qualify result and a live network probe, side by side. Where they disagree is the diagnosis. A carrier that ignores unauthenticated OPTIONS shows probe.reachable false while Asterisk reports it healthy; that is normal. Read-only and free. Use this first when calls fail with carrier rejections. Requires scope |
| test_sip_trunkA | Send a TCP connect or unauthenticated SIP OPTIONS to the carrier from the platform and record the outcome on the trunk. Puts traffic on a third party. A negative result is not proof the trunk is broken: many carriers drop unauthenticated probes. Prefer check_sip_trunk_status. Requires scope |
| get_sip_trunk_logsA | The SIP engine's recent events for this account: registration, call setup, and carrier rejections with their cause. A live in-memory ring buffer, not an audit trail. Poll with since_id set to the last_id of the previous response to get only new entries. Requires scope |
| list_phone_numbersA | List the phone numbers registered on this account, with the SIP trunk each rides on and the agent (if any) answering inbound calls. Requires scope |
| get_phone_numberA | Fetch one phone number record by id. Requires scope |
| create_phone_numberA | Register a number you already own with your carrier, on one of your SIP trunks. Wixzel does not sell numbers. Set inbound_agent_id to have an agent answer calls to it; without it inbound calls are rejected. For inbound to ring at all, the carrier must also be pointed at the trunk's origination_uri (see get_sip_trunk). Requires scope |
| update_phone_numberB | Change a phone number's label, trunk or inbound agent. Only the fields you send are changed. Requires scope |
| delete_phone_numberA | Remove a phone number from the account. Agents using it as their outbound number can no longer place calls. Not reversible. Requires scope |
| list_leadsA | List leads (contacts). Filter by tag or free-text search. Cursor-paginated. Requires scope |
| get_leadA | Fetch one lead by id. Requires scope |
| create_leadA | Create one lead. For many at once use import_leads. Requires scope |
| update_leadA | Change a lead. Only the fields you send are changed. Requires scope |
| delete_leadA | Permanently delete a lead. Not reversible. Requires scope |
| import_leadsA | Create up to 1,000 leads in one request. Rows are validated individually: malformed rows come back in errors with their index, and the rest are still created. Check failed_count in the result. Requires scope |
| list_campaignsA | List outbound calling campaigns with their status (idle, scheduled, running, completed, stopped, paused) and lead_count. Requires scope |
| get_campaignA | Fetch one campaign by id. Requires scope |
| create_campaignA | Create a campaign that will call every listed lead with an agent. Creating does NOT dial anyone: call start_campaign when the user is ready to spend. Without scheduled_at the campaign is ready to start immediately. Requires scope |
| start_campaignA | Begin calling every lead on the campaign. THIS SPENDS MONEY AND MAKES REAL PHONES RING, one call per lead: confirm with the user before calling it. Refused with insufficient_credits when the balance cannot cover the run. Requires scope |
| pause_campaignA | Stop placing new calls and hang up any the campaign still has in flight. Requires scope |
| delete_campaignA | Permanently delete a campaign. Pause it first if it is running. Not reversible. Requires scope |
| list_knowledge_basesA | List knowledge bases. Attach one to an agent with knowledge_base_id on create_agent or update_agent. Requires scope |
| get_knowledge_baseA | Fetch one knowledge base with its full content. Requires scope |
| create_knowledge_baseA | Create a knowledge base of facts and FAQs an agent can draw on during calls. Requires scope |
| update_knowledge_baseA | Change a knowledge base. Only the fields you send are changed. Sending faqs replaces the whole list. Requires scope |
| delete_knowledge_baseA | Permanently delete a knowledge base. Agents referencing it lose that context. Not reversible. Requires scope |
| list_appointmentsA | List appointments booked by agents or created directly, with status scheduled, completed or canceled. Requires scope |
| get_appointmentA | Fetch one appointment by id. Requires scope |
| create_appointmentB | Book an appointment against a lead and agent. Requires scope |
| update_appointmentA | Reschedule or annotate an appointment. Only the fields you send are changed. Requires scope |
| delete_appointmentA | Permanently delete an appointment. To cancel but keep the record, update its status to canceled instead. Not reversible. Requires scope |
| get_balanceA | The account's prepaid credit: balance_micros, held_micros (reserved by live calls) and available_micros. Micro-USD: 1,000,000 = $1.00. Check this before placing calls or starting campaigns. Requires scope |
| list_ledger_entriesA | Every movement on the account (topup, usage, refund, adjustment, promo, overage, chargeback), with balance_after_micros. Balances reconcile exactly. Requires scope |
| create_topupA | Start a top-up. Returns a checkout_url that a HUMAN must open to pay; credit lands once payment settles, not when this returns. Never open the URL or attempt payment yourself. Confirm the amount with the user first. Requires scope |
| get_usage_summaryA | Total spend over a period, broken down by component, provider and model. total_micros is micro-USD; total_display is human-readable. Requires scope |
| list_usage_eventsA | Every billable line, itemised. Filter by session_id (from a call record) to see exactly what one call cost and why: the sum of a call's events equals what was debited. Requires scope |
| list_api_keysA | List the account's API keys with their scopes, spend limits and last use. Secrets are never returned, only a prefix and last four characters. Requires scope |
| create_api_keyA | Mint a new scoped key. The secret is returned ONCE in the result and cannot be retrieved again: hand it to the user immediately and do not log it elsewhere. A key cannot grant scopes the calling key does not hold (scope_escalation). Grant only what the integration needs; billing:write authorises spending money. Requires scope |
| rotate_api_keyA | Issue a replacement secret. The old key keeps working for 24 hours so a deploy can roll over without a gap. The new secret is returned once; hand it to the user immediately. Requires scope |
| revoke_api_keyA | Revoke immediately, with no grace period. Anything still using it starts failing at once, including this MCP server if it is the key in use. Not reversible. Requires scope |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| quickstart | Walk through connecting a carrier, registering a number, building an agent and placing a first call, checking in with the user at each step that costs money or needs their credentials. |
| diagnose_call | Pull the call record, its usage events, the trunk status and recent SIP logs, and explain what happened and what to change. |
| spend_report | Summarise what the account spent over a period, by component and by call, in plain dollars. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| guide | How the pieces fit together, the order to set them up in, and which tools spend money. |
| connection | Which API base URL this server talks to and whether the key is live or test. Never includes the key. |