PyAI Voice AI

io.github.atomsaiPublished by GitHub account atomsaiv0.5.1Updated Oct 25, 2026

User-approved phone calls, speech, transcription and voice agents with PyAI OAuth.

VerifiedStreamable HTTPWeb executableCommunication & Collaboration

Overview

AI-generated overview

PyAI Voice AI lets an assistant place user-approved phone calls and work with speech, transcription and voice agents through PyAI, using OAuth sign-in.

What you can do
Place phone calls that the user approves before they go out, through the PyAI service. Work with speech and voice agents, and turn audio into transcriptions. Connect either to the hosted PyAI endpoint or to a local process started with npx. Sign in through PyAI OAuth rather than a pasted key.
When to use it
Useful when an assistant needs to make or handle real phone calls, produce or process speech, or transcribe audio, and the user is willing to approve each call and sign in to PyAI.
Requirements
A PyAI account with OAuth sign-in, which is required. Either the remote endpoint at api.pyai.com or a local process run with npx from the @pyai/mcp package, which needs Node.js. Network access to PyAI.
Before you install
Calls are placed to real phone numbers through a third party, so audio and call details go to PyAI; the user must approve each call. OAuth grants the server access to the PyAI account, so review the scopes requested. Calls may cost money depending on the PyAI plan.

Installation

In SourceWeft

  1. Open PyAI Voice AI in the dashboard and add it to a workspace.
  2. Connect the required credentials. They are stored privately and never shown on public pages.
  3. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.atomsai%2Fpyai/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config. The client completes OAuth sign-in on first connect.

{
  "mcpServers": {
    "pyai-voice-ai": {
      "type": "http",
      "url": "https://api.pyai.com/mcp"
    }
  }
}

README

This repository has no README.

Tools

57

openapi_get

Openapi Get

Fetch live API operation discovery with a SHA-256 digest. Supply path and method for one operation and its referenced schemas, or include_document=true for the entire contract. Pin sha256 to detect contract drift. No API key required.

Parameterspathmethodsha256include_document

create_sandbox_key

Create Sandbox Key

Create a NEW isolated sandbox only when the user asks to try PyAI without an account. Local stdio only. Adopts the key privately for this session; never returns the secret. Prefer pyai login to use an existing workspace.

Parameterslabel

get_started

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.

Takes no parameters.

whoami

Who Am I

Introspect the active key (GET /v1/me): org, environment (test/live), granted scopes, and rate-limit/credit posture. Text is concise; authorized IDs remain in structuredContent. Use verbose=true for identity details. Use it to self-diagnose a 401/403/402.

Parametersverbose

list_models

List Models

List the available PyAI models (catalog). No arguments.

Takes no parameters.

list_voices

List Voices

List PyAI stock + cloned voices. Optionally filter by gender or region. Use a returned voice id as the `voice` for synthesize_speech.

Parametersgenderregion

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.

Parametersinputrequiredmodelvoiceoutput_pathresponse_format

create_transcription_job

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.

Parametersmodelcall_idchanneldiarizepack_idaudio_urlrequiredcustomer_namecall_directionoutput_formats

get_transcription_job

Get Transcription Job

Get the status + result of a transcription job by id.

Parametersjob_idrequired

configure_amd

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.

Parameterswebhook_urlaggressiveness

list_amd_calls

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.

Parameterslimitsession_label

get_amd_call

Get AMD Call

Get one PyAI AMD decision by call id (GET /v1/amd/calls/{id}): who/what answered, with the reason.

Parameterscall_idrequired

enable_recap

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.

Parametersenabledwebhook_urldefault_pack_id

create_recap

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.

Parameterscall_idrequiredpack_idutterancesrequiredcustomer_namecall_direction

get_recap

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).

Parameterscall_idrequired

list_recap_calls

List Recap Calls

List recent Recap records (GET /v1/recap/calls). Requires recap:read and Recap enabled.

Parameterslimitstatus

omni_list_calls

Omni List Calls

List Omni sessions, including inbound calls. Filter by session_label and preserve each returned call_id.

Parameterslimitcursorsession_label

omni_get_call

Omni Get Call

Read an Omni session's transcript, recording availability and summary. For outbound calls use artifacts.omni_call_id from calls_get.

Parameterscall_idrequired

omni_get_summary

Omni Get Summary

Read the structured summary for an Omni call when generated; a missing summary is not an empty result.

Parameterscall_idrequired

omni_get_transcript

Omni Get Transcript

Read the complete Omni call transcript through the authenticated API.

Parameterscall_idrequired

omni_get_recording

Omni Get Recording

Get the canonical authenticated recording resource URL. Requires response=url. This URL is not public playable audio; recording must have been enabled.

Parameterscall_idrequiredresponserequired

telephony_search_numbers

Telephony Search Numbers

Search available managed numbers and inspect provisioning requirements before purchase.

Parameterslimitcountrycontainsarea_code

telephony_list_numbers

Telephony List Numbers

List owned numbers and current Agent bindings before changing inbound routing.

Parametersinclude_released

telephony_buy_number

Telephony Buy Number

Purchase a managed number. Requires explicit user approval (confirm=true) and a stable idempotency_key. May incur recurring charges; regulatory or billing setup may require Console.

Parametersbodyrequiredconfirmidempotency_keyrequired

telephony_bind_number

Telephony Bind Number

Bind an owned number to an Agent using body.agent_id; null unassigns. Read existing bindings first. Changes inbound routing.

Parametersidrequiredbodyrequired

telephony_create_call

Telephony Create Call

Place a real outbound call only to a user-authorized destination. Requires confirm=true and a stable idempotency_key. This is not a sandbox simulation. Preserve the returned ID; never redial after an uncertain timeout.

Parametersbodyrequiredconfirmidempotency_keyrequired

calls_list

Calls List

List outbound calls and normalized network outcomes before retrying a dispatch.

Parameterslimit

calls_get

Calls Get

Read the current state of an outbound call by returned ID. dispatch_unknown needs inspection, not another call. Recap and Omni recordings are separate resources.

Parametersidrequired

list_agents

List Agents

List saved voice Agent profiles before creating or changing one.

Takes no parameters.

create_agent

Create Agent

Create a reusable voice Agent profile: persona, greeting, voice, language, tools and knowledge. Does not place a call.

Parametersbodyrequired

get_agent

Get Agent

Read a saved voice Agent profile and its current configuration.

Parametersidrequired

update_agent

Update Agent

Update a voice Agent profile. Read it first and change only user-requested fields.

Parametersidrequiredbodyrequired

set_agent_tools

Set Agent Tools

Replace the tools bound to an Agent. Read the current Agent first; this replaces its bindings.

Parametersidrequiredbodyrequired

set_agent_knowledge

Set Agent Knowledge

Replace the knowledge bases bound to an Agent. Read its existing bindings first.

Parametersidrequiredbodyrequired

get_trace_config

Get Trace Config

Inspect Trace call-compliance configuration.

Parametersagent_id

configure_trace

Configure Trace

Configure Trace compliance monitoring for the selected workspace.

Parametersbodyrequired

list_trace_rule_packs

List Trace Rule Packs

Discover available Trace compliance rule packs before enabling monitoring.

Takes no parameters.

create_trace_rule_pack

Create Trace Rule Pack

Create a workspace Trace compliance rule pack. This creates persistent configuration.

Parametersbodyrequired

list_trace_interactions

List Trace Interactions

Find monitored calls and interactions for compliance review.

Parameterslimitcursorverdictagent_id

get_trace_interaction

Get Trace Interaction

Read one monitored interaction and its compliance evidence.

Parametersidrequired

list_trace_findings

List Trace Findings

Find compliance findings with source evidence. Findings are signals for review, not legal conclusions.

Parameterslimitactioncursorcheck_idseverityinteraction_id

list_trace_violations

List Trace Violations

List Trace rule violations for compliance review.

Parameterslimitcursorrule_idseverityinteraction_id

get_trace_exposure

Get Trace Exposure

Read aggregate compliance exposure for the workspace.

Parameterswindow_days

get_recap_config

Get Recap Config

Read Recap summarization configuration before changing it.

Takes no parameters.

get_cast_capabilities

Get Cast Capabilities

Discover Cast voices, emotions, formats and supported rendering capabilities.

Takes no parameters.

direct_cast_script

Direct Cast Script

Turn a narration script into directed Cast lines before rendering. Consumes usage.

Parametersbodyrequired

render_cast

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.

Parametersbodyrequired

list_transcription_jobs

List Transcription Jobs

Find existing audio processing and transcription jobs before submitting duplicates.

Parameterslimitcursor

discover_tools

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.

Parameterstaskquery

get_dub_capabilities

Get Dub Capabilities

Read currently supported Dub input and output languages before submitting a translation.

Takes no parameters.

create_dub

Create Dub

Fetch audio from the user-authorized HTTPS source URL and start a translation and dubbing job. Accesses an external source and consumes usage. Keep job_id and poll get_dub_job; do not submit again after a timeout.

Parameterssource_urlrequiredsource_langrequiredtarget_langrequired

get_dub_job

Get dubbing job status

Retrieve the status and available results of an existing dubbing job by job_id. This read does not start or repeat a job. Poll pending/processing states without resubmitting.

Parametersjob_idrequired

get_dub_audio

Get Dub Audio

Retrieve completed dubbed audio as a playable result or download. Call only when get_dub_job reports done.

Parametersjob_idrequired

get_cast_render

Get Cast Render

Check a durable Cast render job. Preserve the original job ID.

Parametersjob_idrequired

get_cast_audio

Get Cast Audio

Retrieve completed Cast narration as playable audio or a download.

Parametersjob_idrequired

preview_cast_line

Preview Cast Line

Generate one directed Cast line. Consumes usage. Check get_cast_capabilities for supported voice, emotion and intensity.

Parameterstextrequiredvoicerequiredemotionrequiredintensityrequired

transcribe_audio

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.

Parametersfilenamerequiredlanguageaudio_base64required

Version history

2
  1. v0.5.1LatestOct 25, 2026
  2. v0.3.3Sep 16, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listed15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

    Declare a license in the repository or the registry entry.