Skip to main content
Glama
aqeelshamz

wixzel-phone-mcp

by aqeelshamz

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
PORTNoHTTP port when --http is given without one. Default 3939.3939
WIXZEL_API_KEYYesYour Wixzel Phone API key. Required for stdio; the fallback for HTTP.
WIXZEL_API_VERSIONNoOptional Wixzel-Version date pin, e.g. 2026-09-01.
WIXZEL_API_BASE_URLNoBase 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

CapabilityDetails
tools
{
  "listChanged": true
}
prompts
{
  "listChanged": true
}
resources
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
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 agents:read.

get_agentA

Fetch one agent by id, including its full voice configuration and prompt.

Requires scope agents:read.

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 agents:write.

update_agentA

Change an agent. Only the fields you send are changed; omit the rest. Sending voice replaces the whole voice object.

Requires scope agents:write.

delete_agentA

Permanently delete an agent. Phone numbers and campaigns pointing at it stop working. Not reversible.

Requires scope agents:write.

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 calls:write.

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 calls:read.

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 calls:read.

get_call_transcriptA

Just the transcript of a call, as a list of {role, content, timestamp} turns.

Requires scope calls:read.

hangup_callA

Hang up a live call. Billing stops when the call ends. Returns the updated call record.

Requires scope calls:write.

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 calls:write.

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 sip_trunks:read.

get_sip_trunkA

Fetch one SIP trunk by id. The password is never returned.

Requires scope sip_trunks:read.

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 sip_trunks:write.

update_sip_trunkA

Change a SIP trunk. Only the fields you send are changed.

Requires scope sip_trunks:write.

delete_sip_trunkA

Remove a SIP trunk. Phone numbers on it can no longer make or take calls. Not reversible.

Requires scope sip_trunks:write.

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 sip_trunks:read.

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 sip_trunks:write.

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 sip_trunks:read.

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 phone_numbers:read.

get_phone_numberA

Fetch one phone number record by id.

Requires scope phone_numbers:read.

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 phone_numbers:write.

update_phone_numberB

Change a phone number's label, trunk or inbound agent. Only the fields you send are changed.

Requires scope phone_numbers:write.

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 phone_numbers:write.

list_leadsA

List leads (contacts). Filter by tag or free-text search. Cursor-paginated.

Requires scope leads:read.

get_leadA

Fetch one lead by id.

Requires scope leads:read.

create_leadA

Create one lead. For many at once use import_leads.

Requires scope leads:write.

update_leadA

Change a lead. Only the fields you send are changed.

Requires scope leads:write.

delete_leadA

Permanently delete a lead. Not reversible.

Requires scope leads:write.

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 leads:write.

list_campaignsA

List outbound calling campaigns with their status (idle, scheduled, running, completed, stopped, paused) and lead_count.

Requires scope campaigns:read.

get_campaignA

Fetch one campaign by id.

Requires scope campaigns:read.

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 campaigns:write.

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 campaigns:write.

pause_campaignA

Stop placing new calls and hang up any the campaign still has in flight.

Requires scope campaigns:write.

delete_campaignA

Permanently delete a campaign. Pause it first if it is running. Not reversible.

Requires scope campaigns:write.

list_knowledge_basesA

List knowledge bases. Attach one to an agent with knowledge_base_id on create_agent or update_agent.

Requires scope knowledge_bases:read.

get_knowledge_baseA

Fetch one knowledge base with its full content.

Requires scope knowledge_bases:read.

create_knowledge_baseA

Create a knowledge base of facts and FAQs an agent can draw on during calls.

Requires scope knowledge_bases:write.

update_knowledge_baseA

Change a knowledge base. Only the fields you send are changed. Sending faqs replaces the whole list.

Requires scope knowledge_bases:write.

delete_knowledge_baseA

Permanently delete a knowledge base. Agents referencing it lose that context. Not reversible.

Requires scope knowledge_bases:write.

list_appointmentsA

List appointments booked by agents or created directly, with status scheduled, completed or canceled.

Requires scope appointments:read.

get_appointmentA

Fetch one appointment by id.

Requires scope appointments:read.

create_appointmentB

Book an appointment against a lead and agent.

Requires scope appointments:write.

update_appointmentA

Reschedule or annotate an appointment. Only the fields you send are changed.

Requires scope appointments:write.

delete_appointmentA

Permanently delete an appointment. To cancel but keep the record, update its status to canceled instead. Not reversible.

Requires scope appointments:write.

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 billing:read.

list_ledger_entriesA

Every movement on the account (topup, usage, refund, adjustment, promo, overage, chargeback), with balance_after_micros. Balances reconcile exactly.

Requires scope billing:read.

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 billing:write.

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 usage:read.

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 usage:read.

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 api_keys:read.

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 api_keys:write.

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 api_keys:write.

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 api_keys:write.

Prompts

Interactive templates invoked by user choice

NameDescription
quickstartWalk 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_callPull the call record, its usage events, the trunk status and recent SIP logs, and explain what happened and what to change.
spend_reportSummarise what the account spent over a period, by component and by call, in plain dollars.

Resources

Contextual data attached and managed by the client

NameDescription
guideHow the pieces fit together, the order to set them up in, and which tools spend money.
connectionWhich API base URL this server talks to and whether the key is live or test. Never includes the key.