voice_callLABSCO SUMMARY
Calls that report back, not just calls that fire.
The callback server is what makes this more than a send-and-hope wrapper: Vonage's events land somewhere you can query, so "did that call connect" has an answer. Note the real-world constraint — the callback URL must be reachable from Vonage, so a production deployment needs a public address, and every call and message bills to your Vonage account.
What it is
An MCP server that turns a model's decision into a real phone call or text message via Vonage. Two tools do the work, and the project ships a second piece most telephony wrappers omit: a callback server that receives Vonage's event notifications so you can see what happened after the call was placed.
What you get
- A voice call placed to a number, with the language and speaking style passed as parameters — the README's own example is asking for a British accent —
voice_call - An SMS sent to a number —
send_sms - A callback server on port 8080 that receives and stores Vonage voice events fired when a call starts, completes or errors
- Endpoints to work with those events afterwards:
GET /eventslists them with pagination,GET /events/{event_id}returns one,DELETE /eventsclears them, andGET /is a health check
Requirements
A Vonage account and four credentials: VONAGE_API_KEY, VONAGE_API_SECRET, VONAGE_APPLICATION_ID and a private key file at VONAGE_PRIVATE_KEY_PATH, plus VONAGE_LVN for the virtual number you send from. VONAGE_API_URL and VONAGE_SMS_URL point at the voice and SMS endpoints. CALLBACK_SERVER_URL is the address Vonage posts events back to — http://localhost:8080 in development, and a public URL in production, which is what ngrok http 8080 is for. Python 3.13+, or docker compose up --build.
Setup effort
Run a container — build the image from the repository, then point your client at it
USE CASES
Having an assistant read something out over the phone
Place the call with the text and the voice parameters you want, rather than reading it yourself.
Falling back to text when a call is the wrong medium
Send the same content as an SMS from your virtual number in one call.
Finding out what happened to a call
Read the stored Vonage events for start, completion and errors instead of guessing from the tool's return value.
Testing the callback path before deploying
Expose the local callback port publicly with a tunnel and point the callback URL at it, so events arrive during development too.
2 tools
Listed in project docs. Your client may show a different list.
send_smsBEFORE YOU INSTALL
What to know first
Tools you get
2 tools named in the project's documentation.
Requires
- docker on PATH
- Python 3.13+
- VONAGE_API_KEY in your environment
- VONAGE_API_SECRET in your environment
- VONAGE_APPLICATION_ID in your environment
- VONAGE_PRIVATE_KEY_PATH in your environment
- VONAGE_LVN in your environment
Where it runs
The documented client runs the server on your machine.
INSTALLATION
Connect your client
Build the image from the repository, then point your client at it.
Server setup
git clone https://github.com/khan2a/telephony-mcp-server
cd telephony-mcp-serverCreate a .env file in the clone with your Vonage credentials: VONAGE_API_KEY, VONAGE_API_SECRET, VONAGE_APPLICATION_ID, VONAGE_PRIVATE_KEY_PATH, VONAGE_LVN, VONAGE_API_URL, VONAGE_SMS_URL and CALLBACK_SERVER_URL.
docker build -t telephony-mcp-server .MCP Clients
Claude Desktop
{
"mcpServers": {
"telephony": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--init",
"-e",
"DOCKER_CONTAINER=true",
"telephony-mcp-server"
]
}
}
}The configuration on this page does not set VONAGE_API_KEY, VONAGE_API_SECRET, VONAGE_APPLICATION_ID, VONAGE_PRIVATE_KEY_PATH and VONAGE_LVN; the project's instructions put them in a .env file. Check which folder the server reads that file from before you rely on it.