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.

D
Caution
42/100

Phony

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

Code Verified⚡ Live Monitored: not connected

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

Is this your MCP?

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.

// key findings
🚨
Secret credentials may flow to a network call
2 flows detected: API_SECRET, TWILIO_AUTH_TOKEN. We can’t prove the destination matches the brand the credential belongs to.
🚨
Known vulnerabilities in dependencies: 1 critical, 14 high
Affects packages this MCP installs at runtime. Upgrade or remove the affected dependency.
🔐
You'll be asked for 4 credentials: API_SECRET, ELEVENLABS_API_KEY, ELEVENLABS_POSTCALL_WEBHOOK_SECRET, TWILIO_AUTH_TOKEN
These are read from process.env at runtime. Make sure you trust where they’ll be sent.
// tools this server exposes90 tools

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-call

Trigger an outbound phone call via Twilio

list-calls

List and filter call history (active and completed calls)

get-call-transcript

Get the current transcript and details of a specific call

get-call-events

Get detailed Twilio event logs for a specific call

hold-call

Place an active call on hold

resume-call

Resume a call that is on hold

hangup-call

Hangup an active call

inject-context

Inject additional context or instructions into an active call

list-contexts

List all context templates

get-context

Get a specific context template by ID

create-context

Create a new context template

update-context

Update an existing context template

delete-context

Delete a context template

list-available-numbers

List all available Twilio phone numbers that can be configured

list-incoming-configs

List all incoming call handler configurations

create-incoming-handler

Create a new incoming call handler for a phone number

update-incoming-handler

Update an existing incoming call handler

delete-incoming-handler

Delete an incoming call handler

phony_create_call

Create 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_calls

List call history with optional filtering

phony_get_call

Get detailed information about a specific call including transcript and events

phony_hold_call

Put an active call on hold

phony_resume_call

Resume a call that is on hold

phony_hangup_call

End an active call

phony_inject_context

Inject additional instructions/context into an active call

phony_request_operator_context

Put 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_dtmf

Send DTMF (phone keypad) tones to an active call. Useful for navigating IVR menus, entering codes, or pressing phone buttons.

phony_get_call_transcript

Get the conversation transcript for a call

phony_delete_call

Delete a call record from the database by its call SID

phony_delete_calls

Delete multiple call records from the database matching the given filters. At least one filter is required.

phony_search_calls

Search call records by text content. Searches call context, system instructions, and conversation transcripts.

phony_emergency_shutdown

EMERGENCY: Terminate ALL active calls immediately. Use this as a safety measure if calls are running uncontrolled or consuming excessive credits.

phony_list_contexts

List saved context templates for reusable call configurations

phony_get_context

Get a specific context template by ID

phony_create_context

Create a new reusable context template

phony_update_context

Update an existing context template

phony_delete_context

Delete a context template

phony_get_call_events

Get detailed Twilio event logs from a call for debugging

phony_get_call_instructions

Get the system and call instructions that were used for a specific call

phony_get_system_status

Get system health and statistics

phony_list_available_numbers

List all Twilio phone numbers and their configuration status

phony_list_incoming_configs

List all configured incoming call handlers

phony_create_incoming_config

Configure 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_config

Update an existing incoming call configuration

phony_delete_incoming_config

Remove incoming call configuration from a phone number

phony_ivr_preflight_set

Register (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_get

Get the registered dtmfPreflight for a specific phone number (if any).

phony_ivr_preflight_list

List all registered IVR preflights (enabled + disabled).

phony_ivr_preflight_delete

Delete the registered preflight for a phone number. phony_create_call will no longer auto-apply it.

phony_ivr_preflight_disable

Soft-disable a registered preflight (entry kept, but no longer auto-applied). Use phony_ivr_preflight_set to re-enable.

phony_lookup_number

Look 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_get

Get 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_set

Upsert 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_list

List 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_clear

Delete 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_numbers

List all available Twilio phone numbers in the account

phony_search_messages

Search SMS messages by text content using full-text search

phony_send_sms

Send an SMS/MMS message to a phone number. Supports text and media (images, files, etc.)

phony_list_messages

List SMS message history with optional filtering

phony_get_message

Get detailed information about a specific SMS message

phony_get_conversation

Get all SMS messages between two phone numbers (conversation history)

phony_create_group_conversation

Create 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_conversations

List 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_details

Get 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_messages

Get 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_participant

Add 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_participant

Remove 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_name

Update 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_message

Delete a single SMS message from the database by its message SID

phony_delete_messages

Delete multiple SMS messages from the database matching the given filters. At least one filter is required.

phony_send_group_sms

Post 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_tags

Add tags to a call, SMS, or voicemail record. Tags are normalized to lowercase. Duplicates are ignored.

phony_remove_tags

Remove tags from a call, SMS, or voicemail record

phony_search_by_tags

Find calls, SMS messages, and/or voicemails by tags. Can search across all record types or a specific type.

phony_list_voicemails

List voicemail messages with optional filtering by phone number, read status, date range, etc.

phony_get_voicemail

Get detailed information about a specific voicemail including transcription

phony_mark_voicemail_read

Mark a voicemail as read

phony_mark_voicemail_unread

Mark a voicemail as unread

phony_delete_voicemail

Delete a voicemail message

phony_delete_voicemails

Delete multiple voicemail messages from the database matching the given filters. At least one filter is required.

phony_get_unread_voicemail_count

Get the count of unread voicemails for a phone number

phony_search_voicemails

Search voicemails by transcription text

phony_webhook_create

Create 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_list

List all configured phony webhook routes. Optionally filter by eventType or enabled state.

phony_webhook_get

Get full details of a single webhook config by name.

phony_webhook_update

Update fields on an existing webhook config.

phony_webhook_delete

Delete a webhook config by name.

phony_webhook_test

Fire 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_types

Return 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_deliveries

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

// known CVEs in dependencies1 critical14 high5 medium11 low

Disclosed vulnerabilities in this server's declared npm dependencies (via OSV). Whether each is reachable depends on the installed versions.

criticalvitest@2.1.9GHSA-5xrq-8626-4rwp

When Vitest UI server is listening, arbitrary file can be read and executed

high@modelcontextprotocol/sdk@1.8.0GHSA-8r9q-7v3j-jr4g

Anthropic's MCP TypeScript SDK has a ReDoS vulnerability

high@modelcontextprotocol/sdk@1.8.0GHSA-w48q-cv73-mx4w

Model Context Protocol (MCP) TypeScript SDK does not enable DNS rebinding protection by default

highaxios@1.8.4GHSA-35jp-ww65-95wh

axios Vulnerable to Full Man-in-the-Middle via Prototype Pollution Gadget in `config.proxy`

highaxios@1.8.4GHSA-3g43-6gmg-66jw

axios Vulnerable to Credential Theft and Response Hijacking via Prototype Pollution Gadget in Config Merge

Depend on this server? Get alerted when its CVEs change.Watch this server free →
// environment variables
To run this server yourself, you supply these values. They go in your own MCP client configuration and stay on your machine. The secret label means the value is sensitive, not that the server mishandles it.
🔐 secretAPI_SECRETWebhook security secret (randomly generated if not set)
configATC_BROKER_URL
configDEFAULT_INCOMING_CALL_MESSAGE
configDEFAULT_INCOMING_CALL_VOICE
configELEVENLABS_AGENT_PHONE_NUMBER_ID
🔐 secretELEVENLABS_API_KEY
configELEVENLABS_DEFAULT_AGENT_ID
configELEVENLABS_DEFAULT_VOICE_ID
🔐 secretELEVENLABS_POSTCALL_WEBHOOK_SECRET
configENABLE_TEST_RECEIVER
configMAX_CONCURRENT_CALLS
configMAX_CONCURRENT_INCOMING_CALLS
configMAX_CONCURRENT_OUTGOING_CALLS
configMAX_INCOMING_CALL_DURATION
configMAX_OUTGOING_CALL_DURATION
configPUBLIC_URLYour public URL for Twilio callbacks (e.g., https://your-domain.com)
configRECORD
configSMS_ENABLED_NUMBERS
configSMS_FAILOVER_NUMBERS
configSMS_PROXY_ENABLED
configSMS_PROXY_TARGET_NUMBERS
configSMS_RECONCILIATION_INTERVAL_MS
configSMS_RECONCILIATION_LOOKBACK_MS
configTEST_PHONE_NUMBER
configTWILIO_ACCOUNT_SIDYour Twilio account SID
🔐 secretTWILIO_AUTH_TOKENYour Twilio auth token
configTWILIO_MESSAGING_SERVICE_SID
configTWILIO_NUMBERYour Twilio number (in E.164 format)
configWEBHOOK_HEALTH_SWEEP_INTERVAL_MS
Deployment configuration, supplied by whoever hosts the server. Users are not asked for these.
deployMONGODB_URI
deployPORT
// quality suggestions

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

// full audit trail
The findings above are the summary. The full trail, every check we ran, each deduction, the network hosts observed and the dependency advisories, goes to verified publishers, along with an alert whenever a new one lands. Verified publishers can also review each finding and dispute it in one click. Publisher corrections have sharpened several of our checks this month, because the maintainer knows the codebase better than any scanner.
// improvement guidance — verified publishers only
We have 7 concrete improvements we can share with the publisher of this MCP. Each comes with specific guidance to raise the trust score.
// embed badge in your README
[![M8ven Verified](https://m8ven.ai/badge/mcp/sackio/phony?variant=verified)](https://m8ven.ai/mcp/sackio/phony)
Shows verification status without the grade. Want the grade badge instead? Remove ?variant=verified from the URL.
commit: 4c395cee0aa4e0149b9cc690dc01e55a3721959f
code hash: d1ab903be0a10837c6c5fc55d2b66c064b6dff11f76648608e86da3601f02851
view raw JSON →
Check MCPs from inside your assistant
Tool Check · MCP

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
check_toolsearch_toolscompare_toolsrecommend_alternativescheck_publisherreport_concern
How to add it →Free · no account needed · works in any MCP client