Phony (sackio/phony) is an MCP server listed on the M8ven Trust Index. It scores 42 out of 100, grade D. It declares 90 tools. No publisher has claimed this listing.
An MCP server enabling AI assistants to make voice calls, send SMS/MMS, and manage group conversations using Twilio and OpenAI.
Caution. Specific findings reduced this grade. They are listed on the page. Grades reflect the full trust pyramid: code, verification depth, and reputation. New projects cap at C until adoption is earned.
How we verified
Verified is a snapshot. Live keeps it current, and builds your track record.
⚡ Connect GitHub → continuous verification on every pushwhy connect →Who stands behind it
sackio
Source: Glama
Claim it to get a verified publisher badge, a free copy of our full audit findings, and direct contact for any high-priority issues we find. Or connect your repo for our deepest verification, Live Monitored: read-only, revoke anytime. What we access →
Install from
The grade above is for the source repository. Registries can serve a different version, so we mark the ones we were not able to read.
These names and descriptions are the publisher's own, read from the source code. We print them as written. Our assessment is the findings above, not this list.
trigger-callTrigger an outbound phone call via Twilio
list-callsList and filter call history (active and completed calls)
get-call-transcriptGet the current transcript and details of a specific call
get-call-eventsGet detailed Twilio event logs for a specific call
hold-callPlace an active call on hold
resume-callResume a call that is on hold
hangup-callHangup an active call
inject-contextInject additional context or instructions into an active call
list-contextsList all context templates
get-contextGet a specific context template by ID
create-contextCreate a new context template
update-contextUpdate an existing context template
delete-contextDelete a context template
list-available-numbersList all available Twilio phone numbers that can be configured
list-incoming-configsList all incoming call handler configurations
create-incoming-handlerCreate a new incoming call handler for a phone number
update-incoming-handlerUpdate an existing incoming call handler
delete-incoming-handlerDelete an incoming call handler
phony_create_callCreate an outbound phone call with an ElevenLabs AI voice assistant. Two modes: "advanced" (default) — Phony hosts a WebSocket bridge with mid-call control (DTMF for IVR navigation, mid-call context injection); works on the typical business number that has an IVR. "native" — ElevenLabs hosts the cal…
phony_list_callsList call history with optional filtering
phony_get_callGet detailed information about a specific call including transcript and events
phony_hold_callPut an active call on hold
phony_resume_callResume a call that is on hold
phony_hangup_callEnd an active call
phony_inject_contextInject additional instructions/context into an active call
phony_request_operator_contextPut the call on hold and request additional context from the human operator. The call will remain on hold until the operator provides the requested information.
phony_send_dtmfSend DTMF (phone keypad) tones to an active call. Useful for navigating IVR menus, entering codes, or pressing phone buttons.
phony_get_call_transcriptGet the conversation transcript for a call
phony_delete_callDelete a call record from the database by its call SID
phony_delete_callsDelete multiple call records from the database matching the given filters. At least one filter is required.
phony_search_callsSearch call records by text content. Searches call context, system instructions, and conversation transcripts.
phony_emergency_shutdownEMERGENCY: Terminate ALL active calls immediately. Use this as a safety measure if calls are running uncontrolled or consuming excessive credits.
phony_list_contextsList saved context templates for reusable call configurations
phony_get_contextGet a specific context template by ID
phony_create_contextCreate a new reusable context template
phony_update_contextUpdate an existing context template
phony_delete_contextDelete a context template
phony_get_call_eventsGet detailed Twilio event logs from a call for debugging
phony_get_call_instructionsGet the system and call instructions that were used for a specific call
phony_get_system_statusGet system health and statistics
phony_list_available_numbersList all Twilio phone numbers and their configuration status
phony_list_incoming_configsList all configured incoming call handlers
phony_create_incoming_configConfigure a phone number to handle incoming calls. Supports three modes: AI conversation (default), message-only (play message and hang up), or voicemail (record and transcribe messages).
phony_update_incoming_configUpdate an existing incoming call configuration
phony_delete_incoming_configRemove incoming call configuration from a phone number
phony_ivr_preflight_setRegister (or update) the dtmfPreflight Twilio sendDigits string for a target phone number. phony_create_call will auto-apply this preflight when called against that number without an explicit dtmfPreflight. Use for barge-in-disabled IVRs that need precisely-timed carrier-level DTMF (e.g. Petco 603-8…
phony_ivr_preflight_getGet the registered dtmfPreflight for a specific phone number (if any).
phony_ivr_preflight_listList all registered IVR preflights (enabled + disabled).
phony_ivr_preflight_deleteDelete the registered preflight for a phone number. phony_create_call will no longer auto-apply it.
phony_ivr_preflight_disableSoft-disable a registered preflight (entry kept, but no longer auto-applied). Use phony_ivr_preflight_set to re-enable.
phony_lookup_numberLook up line type (mobile/landline/voip/tollFree/...) and carrier for one or more phone numbers via Twilio Lookup v2. USE THIS BEFORE ANY BULK SMS: landlines silently bounce (30005/30006) and repeated undeliverable sends hurt carrier reputation. Returns per-number {lineType, carrier, smsViable} plus…
phony_smart_route_getGet the active smart-route thread for a proxy-target sender (Ben/Laura). Returns null if no active thread. Used by the phony session to decide whether to reuse the last-routed agent or pick a new one when a fresh sms.needs_routing event arrives.
phony_smart_route_setUpsert the active smart-route thread for a proxy-target sender. Sets targetSession, resets expiresAt, optionally records topic + appends latest inbound body to recentMessages (trimmed to last 10). Call after each routing decision.
phony_smart_route_listList all active smart-route threads (i.e. all Ben/Laura threads currently routed to an agent). Sorted by most-recently-updated first. Useful when an agent DMs the phony session back with a reply — phony looks up which fromNumber to SMS the reply to.
phony_smart_route_clearDelete the active smart-route thread for a proxy-target sender. Use when a conversation is explicitly closed, or when the routed agent tells phony "I'm done" and you want the next inbound to re-route fresh.
phony_list_numbersList all available Twilio phone numbers in the account
phony_search_messagesSearch SMS messages by text content using full-text search
phony_send_smsSend an SMS/MMS message to a phone number. Supports text and media (images, files, etc.)
phony_list_messagesList SMS message history with optional filtering
phony_get_messageGet detailed information about a specific SMS message
phony_get_conversationGet all SMS messages between two phone numbers (conversation history)
phony_create_group_conversationCreate a true group MMS conversation via the Twilio Conversations API. The Twilio number (Phony) joins as a projectedAddress system participant; each external phone number joins as a native SMS participant. Messages posted into the resulting Conversation fan out to all externals as a single native g…
phony_list_conversationsList conversations this Phony instance is tracking. Returns a unified view of both group MMS Conversations (stored with a Twilio CH-SID and slug) and 1-on-1 internal conversation pairings. Groups include participant list, slug, and last activity timestamp.
phony_get_conversation_detailsGet full details for a specific conversation. Accepts a Twilio Conversation SID (CH…) for group conversations, a group slug (with or without braces, e.g. "{9630-grp}" or "9630-grp"), or the internal 1-on-1 conversationId (conv_…). Returns participants, friendlyName, slug, message count, and last act…
phony_get_conversation_messagesGet all messages in a conversation, in chronological order. Accepts the same reference formats as phony_get_conversation_details (CH-SID, slug, or conv_…). For group conversations this pulls every inbound from any external participant plus every outbound Phony posted into the thread.
phony_add_participantAdd an external phone number to a group Conversation. The new participant immediately joins the native group MMS thread — Twilio notifies them on next message. Updates the group's stored participant list and slug metadata.
phony_remove_participantRemove an external phone number from a group Conversation. They will no longer receive group messages; the other externals see them leave via their native Messages app. Updates the group's stored participant list.
phony_update_group_nameUpdate a group Conversation's friendlyName in Twilio. This is an internal label (visible in Twilio Console and the Phony UI); participant phones do NOT see the name because native Messages groups have no shared name field.
phony_delete_messageDelete a single SMS message from the database by its message SID
phony_delete_messagesDelete multiple SMS messages from the database matching the given filters. At least one filter is required.
phony_send_group_smsPost a message into a group Conversation. Twilio fans this out as native group MMS to every external participant as a single thread on their phones (authored by Phony's number). The message does NOT go to Phony's internal proxy targets (Ben/Laura) if they are already in the group — they see it nativ…
phony_add_tagsAdd tags to a call, SMS, or voicemail record. Tags are normalized to lowercase. Duplicates are ignored.
phony_remove_tagsRemove tags from a call, SMS, or voicemail record
phony_search_by_tagsFind calls, SMS messages, and/or voicemails by tags. Can search across all record types or a specific type.
phony_list_voicemailsList voicemail messages with optional filtering by phone number, read status, date range, etc.
phony_get_voicemailGet detailed information about a specific voicemail including transcription
phony_mark_voicemail_readMark a voicemail as read
phony_mark_voicemail_unreadMark a voicemail as unread
phony_delete_voicemailDelete a voicemail message
phony_delete_voicemailsDelete multiple voicemail messages from the database matching the given filters. At least one filter is required.
phony_get_unread_voicemail_countGet the count of unread voicemails for a phone number
phony_search_voicemailsSearch voicemails by transcription text
phony_webhook_createCreate an outbound webhook for phony events. Fires HTTP POST to `url` when an event matches `eventTypes` AND `filters`. Events are POSTed as a stable envelope: `{event, event_id, occurred_at, source, data, reply?}`. If `hmacSecret` is set, body is signed with HMAC-SHA256 in `X-Hub-Signature-256`. Se…
phony_webhook_listList all configured phony webhook routes. Optionally filter by eventType or enabled state.
phony_webhook_getGet full details of a single webhook config by name.
phony_webhook_updateUpdate fields on an existing webhook config.
phony_webhook_deleteDelete a webhook config by name.
phony_webhook_testFire a synthetic event through the real dispatcher path against the named webhook config. Verifies HMAC, headers, and retry path end-to-end. If `sampleEvent` is omitted, uses the webhook's first eventType with all required fields filled with `test-*` sentinels.
phony_webhook_list_event_typesReturn the live catalog of every phony event type and its payload shape. Use this to discover what you can subscribe to and what fields each event carries.
phony_webhook_recent_deliveriesReturn the most recent delivery attempts (status_code, duration, error) for a webhook config — or all configs if `name` is omitted. Powers operator debugging without log access.
Disclosed vulnerabilities in this server's declared npm dependencies (via OSV). Whether each is reachable depends on the installed versions.
When Vitest UI server is listening, arbitrary file can be read and executed
Anthropic's MCP TypeScript SDK has a ReDoS vulnerability
Model Context Protocol (MCP) TypeScript SDK does not enable DNS rebinding protection by default
axios Vulnerable to Full Man-in-the-Middle via Prototype Pollution Gadget in `config.proxy`
axios Vulnerable to Credential Theft and Response Hijacking via Prototype Pollution Gadget in Config Merge
API_SECRETWebhook security secret (randomly generated if not set)ATC_BROKER_URLDEFAULT_INCOMING_CALL_MESSAGEDEFAULT_INCOMING_CALL_VOICEELEVENLABS_AGENT_PHONE_NUMBER_IDELEVENLABS_API_KEYELEVENLABS_DEFAULT_AGENT_IDELEVENLABS_DEFAULT_VOICE_IDELEVENLABS_POSTCALL_WEBHOOK_SECRETENABLE_TEST_RECEIVERMAX_CONCURRENT_CALLSMAX_CONCURRENT_INCOMING_CALLSMAX_CONCURRENT_OUTGOING_CALLSMAX_INCOMING_CALL_DURATIONMAX_OUTGOING_CALL_DURATIONPUBLIC_URLYour public URL for Twilio callbacks (e.g., https://your-domain.com)RECORDSMS_ENABLED_NUMBERSSMS_FAILOVER_NUMBERSSMS_PROXY_ENABLEDSMS_PROXY_TARGET_NUMBERSSMS_RECONCILIATION_INTERVAL_MSSMS_RECONCILIATION_LOOKBACK_MSTEST_PHONE_NUMBERTWILIO_ACCOUNT_SIDYour Twilio account SIDTWILIO_AUTH_TOKENYour Twilio auth tokenTWILIO_MESSAGING_SERVICE_SIDTWILIO_NUMBERYour Twilio number (in E.164 format)WEBHOOK_HEALTH_SWEEP_INTERVAL_MSMONGODB_URIPORTTool annotations
No tools have read-only/destructive annotations
Add readOnlyHint or destructiveHint annotations to every tool so hosts can warn users before invoking.
All four hints declared on every tool
90/90 tools missing one or more hints — trigger-call (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); list-calls (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); get-call-transcript (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint), +87 more. OpenAI's directory rejects tools where any of the four hints are missing or non-boolean.
For every tool, set all four hints (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) to explicit true/false values that match the handler’s actual behaviour.
Tests exist
No test files found
Add tests that exercise each declared tool.
Secrets stay with their owner
1 secret sent to a request target we could not resolve (API_SECRET → dynamic) — often a configured endpoint, not necessarily third-party
Audit where credentials are sent. A NOTION_TOKEN should only reach api.notion.com — never a third-party host.
Secrets not logged
3 secret values sent to log
Redact or omit secret values from log output.
Production dependencies are patched
0 critical, 14 high severity in production deps — @modelcontextprotocol/sdk@1.8.0 (high), @modelcontextprotocol/sdk@1.8.0 (high)
Run npm audit fix, or upgrade the affected packages to a non-vulnerable version.
Dev dependencies
1 critical/high in dev-only deps (does not ship to users)
Upgrade dev dependencies when convenient.
Dependency freshness
6/24 production deps abandoned (no release in 2+ years): node-vad@2022-05-11 (4.3y), perf_hooks@2022-05-12 (4.3y), express-ws@2022-06-17 (4.2y)
Claim the listing to review these findings one by one and send us a correction where you disagree, straight to the team. Claiming also means we tell you when the grade moves, and reach you first if we find anything urgent.
[](https://m8ven.ai/mcp/sackio/phony)?variant=verified from the URL.Vetting this one by hand? Tool Check is an MCP that scores other MCPs. Add it once and ask Claude, ChatGPT, or any MCP client to grade a server, surface CVEs, check the publisher, and suggest safer alternatives — before you install.
https://m8ven.ai/api/mcp/tool-check