Vapi Voice Agents
SkillAI & modelsCreate Vapi voice assistants and place outbound phone calls via the Vapi MCP — cold outreach, SDR, appointment setting, callbacks.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Vapi Voice Agents skill
What this skill tells your AI
The instructions your AI receives, as published by matyasstoch/david-skills in skills/productivity/vapi-voice-agents/SKILL.md and read by ahel’s review.
End-to-end workflow for building a Vapi assistant and placing live outbound calls from the terminal. The Vapi MCP exposes assistants, phone numbers, tools, and calls — you orchestrate them.
Standard workflow
mcp_vapi_list_phone_numbers— pick aphoneNumberIdwhose country matches the target. NJ/US target → use a US Vapi number. PL target → Polish number. Mismatched country = bad answer rate.mcp_vapi_create_assistant— name, firstMessage, instructions, llm, voice, transcriber. Defaults that work:gpt-4o/11labs(sarah for warm female SDR) /deepgram nova-3.mcp_vapi_create_call— passassistantId,phoneNumberId,customer.number(E.164).- Poll
mcp_vapi_get_calluntilstatus == "ended". Transcript fields only populate after the call ends.
Outbound polling pattern
Do NOT ask the user to "ping you when ready." Auto-poll. Run terminal('sleep 30') then call mcp_vapi_get_call. Repeat at 30–60s intervals. Calls typically run 30s–3min. Status transitions: queued → ringing → in-progress → ended.
Choosing the target (don't ask the user)
If the user says "cold outreach to X businesses in Y region," research a real target yourself via web_search. Pull a phone number off Yelp/their website. Don't ask the user to provide one — David specifically pushed back on this with "research that yourself." Same for caller identity/agency name — invent a plausible one (e.g. "BrightLane") unless they specified a brand.
Assistant instructions structure (SDR/cold-outreach pattern)
The instructions field is the entire system prompt. For appointment-setting calls use this skeleton:
- Identity: one sentence — who they are, what company, what they do.
- Goal: one explicit success criterion (e.g. "book a 15-min discovery call"). Anything else = failure.
- Opening flow: numbered steps — confirm decision maker → pattern interrupt → 2-question qualifier → one-sentence pitch → ask for meeting → lock time → repeat back callback + email.
- Objection handling: 4–6 common ones with one-line rebuttals ("too busy", "already advertise", "send me an email", "not interested", price questions).
- Rules: short sentences, American English, no jargon, never lie, AI-disclosure answer pre-canned ("Yes I'm an AI calling on behalf of X…"), voicemail script (~15s), DNC compliance (if asked to be removed, confirm + end), keep under 3 min.
firstMessage should be conversational and end with a yes/no question to anchor the call. Pattern: "Hey, this is <Name> from <Company> — am I catching the owner or manager for a quick thirty seconds?"
Pitfalls
call.start.error-get-transporton call create: that specific Vapi number has a transport/SIP-trunk issue. The fix is NOT to debug — just retrycreate_callwith a differentphoneNumberIdfrom the list. The error fires within ~1s ofcreatedAt, ended immediately, no debit. Surface this to the user as "this number's transport is broken, swapping" — don't ask permission, just rotate.- Country mismatch: calling US numbers from a non-US Vapi number kills answer rates. Filter by country prefix before picking.
- Transcript empty during call:
mcp_vapi_get_callexposesmessages/transcript/summary/recordingUrlonly afterstatus == "ended". Don't pull early and report "no transcript" — keep polling. - Voicemail handling: Vapi can't always tell live answer from voicemail. Bake a "if you hear a beep, leave the 15s message and end" instruction into the system prompt — don't trust detection alone.
firstMessageMode: defaultassistant-speaks-firstis right for outbound. Useassistant-waits-for-useronly if the dialed number has its own IVR/intro you must let play.
Compliance
Cold-call laws vary by US state. NJ is generally permissive for B2B but the assistant MUST honor any "remove me" / "don't call back" request immediately and end the call. The AI-disclosure rebuttal in the instructions is a hard requirement — never instruct the assistant to deny being an AI.
Reusing an assistant for many calls
Create the assistant once, then loop mcp_vapi_create_call with different customer.number values. Override per-call context via assistantOverrides.variableValues and reference those as {{varname}} inside instructions — useful for personalizing per business without forking the assistant.
Signals
- GitHub stars
- 59
- Forks
- 11
- Last commit
- Jun 2026
Advanced
- Catalog kind
- skill
- Gateway key
vapi-voice-agents- Source
- github.com/matyasstoch/david-skills