PyAI Voice AI
NPM · @PYAI/MCP · 2 COMPONENTS · SCANNED SEP 20
Speech, transcription, voice agents, Trace, Recap, dubbing and narration with browser OAuth.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security98
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 31 of 96 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency19
- Repository check failed: the declared repository URL returned HTTP 404. See how to fix → View diagnostics → Fail
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 7 days ago).Pass
- Security-disclosure policy not yet verified: we couldn't inspect the source repository.Unverified
Schema Quality & AI Usability84
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Tool/resource definitions use about 2744 tokens (~59/item across 46 items; 44 tools + 2 resources), lean.Pass
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management40
- Stability observed for 12 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage86
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 58% of tool parameters carry a description.Partial
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 44 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 46 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the PyAI Voice AI MCP server?
PyAI Voice AI runs locally as an npm package, launched with npx -y @pyai/mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · @pyai/mcp
claude mcp add atomsai-pyai -- npx -y @pyai/mcp
{
"mcpServers": {
"atomsai-pyai": {
"command": "npx",
"args": [
"-y",
"@pyai/mcp"
]
}
}
} {
"servers": {
"atomsai-pyai": {
"command": "npx",
"args": [
"-y",
"@pyai/mcp"
]
}
}
} codex mcp add atomsai-pyai -- npx -y @pyai/mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"atomsai-pyai": {
"type": "local",
"command": [
"npx",
"-y",
"@pyai/mcp"
],
"enabled": true
}
}
} openclaw mcp add atomsai-pyai --command npx --arg -y --arg @pyai/mcp
mcp_servers:
atomsai-pyai:
command: "npx"
args: ["-y", "@pyai/mcp"] {
"McpServers": {
"atomsai-pyai": {
"Transport": "stdio",
"Command": "npx",
"Arguments": [
"-y",
"@pyai/mcp"
]
}
}
} assistant mcp add atomsai-pyai -t stdio -c npx -a -y @pyai/mcp
{
"mcpServers": {
"atomsai-pyai": {
"command": "npx",
"args": [
"-y",
"@pyai/mcp"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 20 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 37 to 40. That category is still filling its 30-day observation window: 11 days of observed history at the previous scan, 12 at this one. The score rises as the window fills, whether or not the server changes.
- 18 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 30 to 33. That category is still filling its 30-day observation window: 9 days of observed history at the previous scan, 10 at this one. The score rises as the window fills, whether or not the server changes.
- 16 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.
- 13 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.
- 11 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.
- 9 Sept 26 +16
- Tool safety: pass → unverified ▼ security
- Malware scan: unverified → pass ▲ security
- Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet. security
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- Schema quality: 100 → unverified ▼ functional
- Stability: unverified → 0.03 ▲ functional
- Package version: 0.3.0 → 0.3.3 functional
- Package version: 0.3.0 → 0.3.2 functional
- 8 Sept 26 50
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 20 Sept 2026 · Analysed npm/@pyai/mcp@0.3.3
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | npm |
Background: How many MCP packages publish verified provenance →
Dependencies 96 packages
| Packages resolved | 96 |
|---|---|
| Stale | 31 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
configure_amd Configure AMD ~143
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.
| Name | Type | Req | Description |
|---|---|---|---|
| aggressiveness | number | – | Operating point 0-1 (default 0.25). |
| webhook_url | string | – | https URL to POST amd.call.completed events to. |
No output schema declared.
No examples provided.
configure_trace Configure Trace ~48
Configure Trace compliance monitoring for the selected workspace.
| Name | Type | Req | Description |
|---|---|---|---|
| body | object | yes | Per-agent Trace config (spec §5.1). May be wrapped as { agent_id, config } or sent raw. |
No output schema declared.
No examples provided.
create_agent Create Agent ~61
Create a reusable voice Agent profile: persona, greeting, voice, language, tools and knowledge. Does not place a call.
| Name | Type | Req | Description |
|---|---|---|---|
| body | object | yes | Writable agent fields. On update, present fields are set, `null` clears, absent fields are untouched. |
No output schema declared.
No examples provided.
create_dub Create Dub ~81
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.
| Name | Type | Req | Description |
|---|---|---|---|
| source_lang | string | yes | Source language from get_dub_capabilities. |
| source_url | string | yes | – |
| target_lang | string | yes | Target language from get_dub_capabilities. |
No output schema declared.
No examples provided.
create_recap Create Recap ~103
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.
| Name | Type | Req | Description |
|---|---|---|---|
| call_direction | string | – | – |
| call_id | string | yes | Stable id you will read back. |
| customer_name | string | – | – |
| pack_id | string | – | – |
| utterances | array | yes | – |
No output schema declared.
No examples provided.
create_sandbox_key Create Sandbox Key ~80
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.
| Name | Type | Req | Description |
|---|---|---|---|
| label | string | – | Optional label (e.g. your app name) shown in the PyAI console. |
No output schema declared.
No examples provided.
create_trace_rule_pack Create Trace Rule Pack ~43
Create a workspace Trace compliance rule pack. This creates persistent configuration.
| Name | Type | Req | Description |
|---|---|---|---|
| body | object | yes | An authored rule pack in the Trace DSL (rule_pack_schema.json). |
No output schema declared.
No examples provided.
create_transcription_job Create Transcription Job ~159
Submit an async speech-to-text job for an audio URL (https). Returns a job_id; poll with get_transcription_job. Supports diarization.
| Name | Type | Req | Description |
|---|---|---|---|
| audio_url | string | yes | https URL of the audio to transcribe. |
| call_direction | string | – | – |
| call_id | string | – | Stable id for the post-call Recap. Defaults to the job id. |
| channel | boolean | – | Dual-channel (stereo) per-channel speakers. |
| customer_name | string | – | – |
| diarize | boolean | – | Single-track speaker diarization. |
| model | string | – | – |
| output_formats | array | – | Defaults to [json]. |
| pack_id | string | – | Optional Recap pack (default sales_outbound). |
No output schema declared.
No examples provided.
direct_cast_script Direct Cast Script ~31
Turn a narration script into directed Cast lines before rendering. Consumes usage.
| Name | Type | Req | Description |
|---|---|---|---|
| body | object | yes | – |
No output schema declared.
No examples provided.
discover_tools Discover Tools ~71
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.
| Name | Type | Req | Description |
|---|---|---|---|
| query | string | – | Product name or task, e.g. “translate audio”, “voice agent”, “TTS”. |
No output schema declared.
No examples provided.
enable_recap Enable Recap ~99
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.
| Name | Type | Req | Description |
|---|---|---|---|
| default_pack_id | string | – | Defaults to sales_outbound. |
| enabled | boolean | – | Defaults to true. |
| webhook_url | string | – | https URL for recap.complete events. |
No output schema declared.
No examples provided.
get_agent Get Agent ~40
Read a saved voice Agent profile and its current configuration.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Agent id, e.g. `agent_7f3a…`. |
No output schema declared.
No examples provided.
get_amd_call Get AMD Call ~57
Get one PyAI AMD decision by call id (GET /v1/amd/calls/{id}): who/what answered, with the reason.
| Name | Type | Req | Description |
|---|---|---|---|
| call_id | string | yes | The call id the decision was recorded under. |
No output schema declared.
No examples provided.
get_cast_audio Get Cast Audio ~40
Retrieve completed Cast narration as playable audio or a download.
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | yes | The ID returned by the original submission; do not invent one. |
No output schema declared.
No examples provided.
get_cast_capabilities Get Cast Capabilities ~22
Discover Cast voices, emotions, formats and supported rendering capabilities.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_cast_render Get Cast Render ~42
Check a durable Cast render job. Preserve the original job ID.
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | yes | The ID returned by the original submission; do not invent one. |
No output schema declared.
No examples provided.
get_dub_audio Get Dub Audio ~51
Retrieve completed dubbed audio as a playable result or download. Call only when get_dub_job reports done.
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | yes | The ID returned by the original submission; do not invent one. |
No output schema declared.
No examples provided.
get_dub_capabilities Get Dub Capabilities ~24
Read currently supported Dub input and output languages before submitting a translation.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_dub_job Dubbing ~46
Check a submitted Dub job. Poll pending/processing states without resubmitting.
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | yes | The ID returned by the original submission; do not invent one. |
No output schema declared.
No examples provided.
get_recap Get Recap ~82
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).
| Name | Type | Req | Description |
|---|---|---|---|
| call_id | string | yes | The call_id passed to create_recap or the Hear job. |
No output schema declared.
No examples provided.
get_recap_config Get Recap Config ~20
Read Recap summarization configuration before changing it.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_started Get Started ~61
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.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_trace_config Get Trace Config ~35
Inspect Trace call-compliance configuration.
| Name | Type | Req | Description |
|---|---|---|---|
| agent_id | string | – | Agent to read config for; omit for the org default. |
No output schema declared.
No examples provided.
get_trace_exposure Get Trace Exposure ~31
Read aggregate compliance exposure for the workspace.
| Name | Type | Req | Description |
|---|---|---|---|
| window_days | integer | – | Trailing window in days. |
No output schema declared.
No examples provided.
get_trace_interaction Get Trace Interaction ~29
Read one monitored interaction and its compliance evidence.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | The call_id. |
No output schema declared.
No examples provided.
get_transcription_job Get Transcription Job ~38
Get the status + result of a transcription job by id.
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | yes | The job_id from create_transcription_job. |
No output schema declared.
No examples provided.
list_agents List Agents ~19
List saved voice Agent profiles before creating or changing one.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_amd_calls List AMD Calls ~106
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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Max results (1-100, default 20). |
| session_label | string | – | Filter by the opaque connect-URL/TwiML tag. |
No output schema declared.
No examples provided.
list_models List Models ~20
List the available PyAI models (catalog). No arguments.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_recap_calls List Recap Calls ~59
List recent Recap records (GET /v1/recap/calls). Requires recap:read and Recap enabled.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Max results (1-100, default 20). |
| status | string | – | – |
No output schema declared.
No examples provided.
list_trace_findings List Trace Findings ~71
Find compliance findings with source evidence. Findings are signals for review, not legal conclusions.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | – | – |
| check_id | string | – | – |
| cursor | string | – | – |
| interaction_id | string | – | – |
| limit | integer | – | – |
| severity | string | – | – |
No output schema declared.
No examples provided.
list_trace_interactions List Trace Interactions ~48
Find monitored calls and interactions for compliance review.
| Name | Type | Req | Description |
|---|---|---|---|
| agent_id | string | – | – |
| cursor | string | – | – |
| limit | integer | – | – |
| verdict | string | – | – |
No output schema declared.
No examples provided.
list_trace_rule_packs List Trace Rule Packs ~21
Discover available Trace compliance rule packs before enabling monitoring.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_trace_violations List Trace Violations ~56
List Trace rule violations for compliance review.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | – |
| interaction_id | string | – | – |
| limit | integer | – | – |
| rule_id | string | – | – |
| severity | string | – | – |
No output schema declared.
No examples provided.
list_transcription_jobs List Transcription Jobs ~61
Find existing audio processing and transcription jobs before submitting duplicates.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | Opaque token from a previous page's `next_cursor`. Omit for the first page. |
| limit | integer | – | Max items to return (1-100). |
No output schema declared.
No examples provided.
list_voices List Voices ~81
List PyAI stock + cloned voices. Optionally filter by gender or region. Use a returned voice id as the `voice` for synthesize_speech.
| Name | Type | Req | Description |
|---|---|---|---|
| gender | string | – | Filter by voice gender (e.g. female, male). |
| region | string | – | Filter by accent/region (e.g. en_us, en_gb). |
No output schema declared.
No examples provided.
preview_cast_line Preview Cast Line ~67
Generate one directed Cast line. Consumes usage. Check get_cast_capabilities for supported voice, emotion and intensity.
| Name | Type | Req | Description |
|---|---|---|---|
| emotion | string | yes | Supported emotion. |
| intensity | – | yes | – |
| text | string | yes | Narration text. |
| voice | string | yes | A supported Cast voice. |
No output schema declared.
No examples provided.
render_cast Render Cast ~53
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.
| Name | Type | Req | Description |
|---|---|---|---|
| body | object | yes | – |
No output schema declared.
No examples provided.
set_agent_knowledge Set Agent Knowledge ~39
Replace the knowledge bases bound to an Agent. Read its existing bindings first.
| Name | Type | Req | Description |
|---|---|---|---|
| body | array | yes | – |
| id | string | yes | – |
No output schema declared.
No examples provided.
set_agent_tools Set Agent Tools ~42
Replace the tools bound to an Agent. Read the current Agent first; this replaces its bindings.
| Name | Type | Req | Description |
|---|---|---|---|
| body | array | yes | – |
| id | string | yes | – |
No output schema declared.
No examples provided.
synthesize_speech Synthesize Speech ~132
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.
| Name | Type | Req | Description |
|---|---|---|---|
| input | string | yes | Text to synthesize. |
| model | string | – | Defaults to pyai-speak. |
| output_path | string | – | Absolute file path to write the audio to. |
| response_format | string | – | Defaults to wav. |
| voice | string | – | Voice id from list_voices. Omit for the account default. |
No output schema declared.
No examples provided.
transcribe_audio Transcribe Audio ~79
Transcribe a small audio attachment supplied as base64 (up to 8 MiB decoded). For large or hosted recordings, use create_transcription_job. Consumes usage.
| Name | Type | Req | Description |
|---|---|---|---|
| audio_base64 | string | yes | Base64-encoded audio bytes, without a data: prefix. |
| filename | string | yes | – |
| language | string | – | – |
No output schema declared.
No examples provided.
update_agent Update Agent ~60
Update a voice Agent profile. Read it first and change only user-requested fields.
| Name | Type | Req | Description |
|---|---|---|---|
| body | object | yes | Writable agent fields. On update, present fields are set, `null` clears, absent fields are untouched. |
| id | string | yes | – |
No output schema declared.
No examples provided.
whoami Who Am I ~53
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.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
What is the PyAI Voice AI MCP server?
PyAI Voice AI is an MCP server listed in the public MCP registry as io.github.atomsai/pyai. Speech, transcription, voice agents, Trace, Recap, dubbing and narration with browser OAuth. This page covers its npm package (@pyai/mcp).
Is the PyAI Voice AI MCP server safe to use?
PyAI Voice AI scores 71 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the PyAI Voice AI MCP server expose?
PyAI Voice AI exposes 44 tools: create_sandbox_key, get_started, whoami, list_models, list_voices, and 39 more. Their descriptions and schemas cost roughly 2,604 tokens of context every time the server is loaded.
Is the PyAI Voice AI MCP server still maintained?
PyAI Voice AI is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the PyAI Voice AI MCP server under?
PyAI Voice AI declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.