Voxrn is a browser-native voice + SMS platform with an MCP-driven agent runtime. This skill registers Voxrn as an outbound MCP server in your OpenClaw workspace, so the agent can place calls, send messages, manage contacts, and watch live agent sessions from any bridged chat.
Reach for these tools when the user asks to:
ToolArgsUse it forcall.place``{ to: E.164, taskBrief?: string, voiceProfileId?: string }Dial out — agent runs the call following the task briefcall.list_activenoneShow currently-live calls in the workspacecall.end``{ callSid: string }Hard-kill an active call by SIDtranscript.stream``{ callSid: string }Subscribe to live captions for a callmessage.send``{ to: E.164, body: string }Send an SMScontact.search``{ q: string }Free-text search across name, number, tagcontact.upsert``{ name, number, tags?, notes? }Create or update a contactbalance.checknoneRead the workspace balance in USD
Set these env vars (or use OpenClaw's secrets manager):
bash
export VOXRN_API_KEY="vxk_..." # mint at https://voxrn.com/enterprise/dashboard/agents
export VOXRN_BASE_URL="https://voxrn.com" # optional; defaults to prod
Or:
bash
openclaw config secrets set voxrn_api_key vxk_...
The skill's mcp.json reads ${VOXRN_API_KEY} at MCP-registration time so the secret never reaches the agent's prompt window.
contact.search { q: "Atlas" } and ask which match before placing the call.call.place. Default rate-card multiplier is 1.25× over carrier; international calls can be more. Either ask "ok if this costs ~$X for a 2-minute call?" or run balance.check first.taskBrief. Don't reformat — the brief travels straight to the agent runtime.call.end unless the user explicitly said "kill it now". Action is destructive and audit-logged.${VOXRN_API_KEY} so the agent never sees the secret.User: call my plumber and ask if Thursday morning works for the kitchen sink
text
agent: contact.search { q: "plumber" }
→ [{ id: "c-12", name: "Atlas Plumbing", number: "+14155551234", tags: ["plumber"] }]
agent: balance.check {}
→ { usd: 23.40 }
agent: "Calling Atlas Plumbing at +1 415 555 1234 to ask about Thursday morning availability. Estimated cost: ~$0.04. Going ahead."
agent: call.place {
to: "+14155551234",
taskBrief: "Call Atlas Plumbing on the user's behalf. Ask if Thursday morning is available to fix a kitchen sink leak. If yes, confirm a 9am window. If no, ask what's their next opening this week."
}
→ { callSid: "CAabc...", reservedUsd: 0.04 }
agent: "Call placed. SID CAabc... — I'll let you know when it ends."
User: kill the call to Mina, the agent's stuck
text
agent: call.list_active {}
→ [{ callSid: "CAxyz...", to: "+14155557890", durationSeconds: 142, billedUsd: 0.05 }]
agent: "I see one active call to +1 415 555 7890 — duration 2:22, $0.05 spent. End it?"
user: yes
agent: call.end { callSid: "CAxyz..." } → { ok: true }
User: text Mina that the meeting moved to 2pm tomorrow
text
agent: contact.search { q: "Mina" }
→ [{ id: "c-1", name: "Mina Hart", number: "+14155557890" }]
agent: message.send { to: "+14155557890", body: "Hey Mina — meeting moved to 2pm tomorrow. — Sent via Voxrn" }
→ { messageSid: "SMabc...", segments: 1, billedUsd: 0.0079 }
agent: "Sent."
401 Unauthorized from a Voxrn tool — your API key is wrong, expired, or the workspace it belongs to has been removed. Mint a fresh key at https://voxrn.com/enterprise/dashboard/agents → API keys.caller_audio_failed. Check call.list_active for state. The Voxrn live monitor mirrors this view at https://voxrn.com/enterprise/dashboard/agents.balance.check returns 0 — top up the workspace via Stripe or USDC at https://voxrn.com/account → Billing.