PyAI — Voice AI
Build voice agent profiles, generate text-to-speech (TTS), transcribe audio with speech-to-text (STT), and translate recordings with Dubbing.
What it can do
- Get Started: Return a concise, correct quickstart for building with PyAI (auth, SDK install, TTS/STT/realtime snippets, error handling). No key or network needed, read this before writing PyAI code so
- Whoami: Introspect the active key (GET /v1/me): org, environment (test/live), granted scopes, and rate-limit/credit posture. Use it to self-diagnose a 401/403/402.
- List Models: List the available PyAI models (catalog). No arguments.
What data it sees
Do you need an account
No: the server works without sign-in
Build voice agent profiles, generate text-to-speech (TTS), transcribe audio with speech-to-text (STT), and translate recordings with Dubbing. Create expressive narration with Cast, review call compliance with Trace, and extract summaries and action items with Recap.
Connect your PyAI account through browser OAuth and choose your project. Start with get_started and discover_tools to find the right workflow. A PyAI account and authorized project are required; generation and processing consume project usage. Live voice calls use the appropriate SDK or telephony integration.
Setup: https://pyai.com/mcp CLI: https://pyai.com/cli Public integration skills: https://github.com/atomsai/pyai-plugin
Server tool list (43)
Raw names from tools/list. Only developers need these.
| get_started | Return a concise, correct quickstart for building with PyAI (auth, SDK install, TTS/STT/realtime snippets, error handling). No key or network needed, read this before writing PyAI code so you use the right endpoints and the official SDK. |
| whoami | Introspect the active key (GET /v1/me): org, environment (test/live), granted scopes, and rate-limit/credit posture. Use it to self-diagnose a 401/403/402. |
| list_models | List the available PyAI models (catalog). No arguments. |
| list_voices | List PyAI stock + cloned voices. Optionally filter by gender or region. Use a returned voice id as the `voice` for synthesize_speech. |
| synthesize_speech | Text-to-speech. Synthesizes `input` with `voice` and writes the audio to `output_path`. Returns the file path and byte count. Note: consumes sandbox usage quota, for writing app code, prefer get_started over running this. |
| create_transcription_job | Submit an async speech-to-text job for an audio URL (https). Returns a job_id; poll with get_transcription_job. Supports diarization. |
| get_transcription_job | Get the status + result of a transcription job by id. |
| configure_amd | Set the PyAI AMD (answering-machine detection) operating point + webhook (POST /v1/amd/config). `aggressiveness` is one dial 0-1: near 0 is human-safe (never hang up on a person), near 1 fires 'machine' fast. The realtime detection itself is a Twilio Media Streams WebSocket (wss /v1/amd/stream), a one-line-TwiML drop-in, not an MCP tool. |
| list_amd_calls | List recent PyAI AMD decisions (GET /v1/amd/calls). Each carries answered_by (human/voicemail/ivr/screening/sit_invalid/…), answered_by_twilio (Twilio's enum, for routing parity), confidence, decision_ms, and the word-level reason. |
| get_amd_call | Get one PyAI AMD decision by call id (GET /v1/amd/calls/{id}): who/what answered, with the reason. |
| enable_recap | Enable Recap for the key's org (PUT /v1/recap/config). Sandbox keys already mint with Recap on; call this to set a webhook or pack, or to enable Recap on a signup/live key. Requires recap:configure. |
| create_recap | Submit speaker-labelled utterances and get a recap.call (POST /v1/recap/calls/{call_id}). Poll with get_recap. Prefer this over a DIY LLM summary. Requires recap:read and Recap enabled. |
| get_recap | Read one Recap by call id (GET /v1/recap/calls/{call_id}). When complete, `record` is recap.record.v1 (tldr, summary, action_items, disposition, next_steps, talk_ratio, signals, fields). |
| list_recap_calls | List recent Recap records (GET /v1/recap/calls). Requires recap:read and Recap enabled. |
| list_agents | List saved voice Agent profiles before creating or changing one. |
| create_agent | Create a reusable voice Agent profile: persona, greeting, voice, language, tools and knowledge. Does not place a call. |
| get_agent | Read a saved voice Agent profile and its current configuration. |
| update_agent | Update a voice Agent profile. Read it first and change only user-requested fields. |
| set_agent_tools | Replace the tools bound to an Agent. Read the current Agent first; this replaces its bindings. |
| set_agent_knowledge | Replace the knowledge bases bound to an Agent. Read its existing bindings first. |
| get_trace_config | Inspect Trace call-compliance configuration. |
| configure_trace | Configure Trace compliance monitoring for the selected workspace. |
| list_trace_rule_packs | Discover available Trace compliance rule packs before enabling monitoring. |
| create_trace_rule_pack | Create a workspace Trace compliance rule pack. This creates persistent configuration. |
| list_trace_interactions | Find monitored calls and interactions for compliance review. |
| get_trace_interaction | Read one monitored interaction and its compliance evidence. |
| list_trace_findings | Find compliance findings with source evidence. Findings are signals for review, not legal conclusions. |
| list_trace_violations | List Trace rule violations for compliance review. |
| get_trace_exposure | Read aggregate compliance exposure for the workspace. |
| get_recap_config | Read Recap summarization configuration before changing it. |
| get_cast_capabilities | Discover Cast voices, emotions, formats and supported rendering capabilities. |
| direct_cast_script | Turn a narration script into directed Cast lines before rendering. Consumes usage. |
| render_cast | Submit script text or a directed, multi-line Cast narration render. Returns a job; preserve its ID and poll with get_cast_render. Consumes usage; do not resubmit on timeout. |
| list_transcription_jobs | Find existing audio processing and transcription jobs before submitting duplicates. |
| discover_tools | Find the right PyAI tools and a short recipe for a use case: speech, STT, voice agents, compliance, summaries, dubbing or narration. No credentials or usage. |
| get_dub_capabilities | Read currently supported Dub input and output languages before submitting a translation. |
| create_dub | Submit an audio URL for translation and dubbing. Consumes usage. Keep job_id and poll get_dub_job; do not submit again after a timeout. |
| get_dub_job | Check a submitted Dub job. Poll pending/processing states without resubmitting. |
| get_dub_audio | Retrieve completed dubbed audio as a playable result or download. Call only when get_dub_job reports done. |
| get_cast_render | Check a durable Cast render job. Preserve the original job ID. |
| get_cast_audio | Retrieve completed Cast narration as playable audio or a download. |
| preview_cast_line | Generate one directed Cast line. Consumes usage. Check get_cast_capabilities for supported voice, emotion and intensity. |
| transcribe_audio | Transcribe a small audio attachment supplied as base64 (up to 8 MiB decoded). For large or hosted recordings, use create_transcription_job. Consumes usage. |