Loading skill
Install any skill in seconds. Free to start, no credit card required.
Get Started Free →**Feature**: 042-twilio-voice-mcp
.claude/skills/automateyournetwork-twilio-inbound-voice-skill/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 101% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 25% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 63% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 3% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 43% | 0% |
Feature: 042-twilio-voice-mcp Priority: P2 User Stories: US5 (Inbound Conversations), US6 (Voice Commands)
Enable John to call NetClaw's Twilio number and have a bidirectional voice conversation for status queries and network commands.
This skill activates when:
John's Phone
│
▼
Twilio (Inbound Call)
│
▼
Webhook: POST /webhooks/twilio/voice
│
├─► Authenticate Caller ID
│ └─► Not whitelisted? → Reject with message
│
├─► Generate Greeting TwiML
│ └─► "Hello John, this is NetClaw. How can I help?"
│
└─► Start Media Stream
│
▼
WebSocket: /webhooks/twilio/media-stream
│
├─► Audio In → Whisper STT → Text
│
├─► Text → Claude → Response
│
└─► Response → Twilio TTS → Audio OutCall Arrives at Twilio Number
│
├─► Twilio sends webhook to NetClaw
│
├─► Authenticate caller against whitelist
│ └─► Rejected? → Play rejection message, hangup
│
├─► Play greeting via TwiML <Say>
│
├─► Connect Media Stream for real-time audio
│
├─► [Loop] Conversation
│ │
│ ├─► Receive audio chunk
│ │
│ ├─► Transcribe via Whisper API
│ │
│ ├─► Process query/command
│ │ └─► Network queries, status checks, commands
│ │
│ ├─► Generate response
│ │
│ └─► Speak via Twilio TTS
│
└─► On hangup: Log conversation to Memory MCPInitial call handler - returns TwiML.
Request: Twilio form-encoded data (CallSid, From, To, etc.)
Response (authenticated):
xml<?xml version="1.0" encoding="UTF-8"?> <Response> <Say voice="Polly.Matthew">Hello John, this is NetClaw. How can I help you?</Say> <Connect> <Stream url="wss://your-server/webhooks/twilio/media-stream" /> </Connect> </Response>
Response (rejected):
xml<?xml version="1.0" encoding="UTF-8"?> <Response> <Say voice="Polly.Matthew">This number is not authorized to call NetClaw. Goodbye.</Say> <Hangup /> </Response>
Real-time bidirectional audio stream.
Inbound Events:
start: Call connected, media format infomedia: Audio chunk (mulaw, 8kHz, base64)stop: Call endedOutbound Events:
media: Response audio chunkJohn can issue network commands during the call:
John: "Restart the monitoring agent"
NetClaw: "You want me to restart the monitoring agent. Say 'yes' to confirm or 'no' to cancel."
John: "Yes"
NetClaw: "Restarting monitoring agent... Done. Agent is now running."Hello John, this is NetClaw. How can I help you?Your network status:
{device_count} devices monitored.
{healthy_count} operational.
{incident_count} active incidents.
Would you like more details?You want me to {action_description}.
Say 'yes' to confirm or 'no' to cancel.I'm sorry, I couldn't complete that request.
Error: {error_summary}.
Would you like to try something else?Goodbye John. This conversation has been logged.[Call connects]
NetClaw: "Hello John, this is NetClaw. How can I help you?"
John: "What's the status of my network?"
NetClaw: "Your network status: 47 devices monitored. 45 operational,
2 with warnings. No active incidents. The warnings are on
switch-3 and ap-lobby-1 due to high memory usage."
John: "Run a health check on switch-3"
NetClaw: "You want me to run a health check on switch-3.
Say 'yes' to confirm or 'no' to cancel."
John: "Yes"
NetClaw: "Running health check on switch-3...
Check complete. CPU: 23%, Memory: 78%,
All interfaces up. The high memory is within normal range."
John: "Thanks, goodbye"
NetClaw: "Goodbye John. This conversation has been logged."
[Call ends]Other measured skills in the registry, with their headline benchmark lift.