CallMe: Claude Code Plugin for Phone Calls—Quick Setup

CallMe – The Minimal Claude Code Plugin for Phone Calls

If you’ve ever wished Claude could finish a task and then call you to discuss the next steps, CallMe turns that wish into reality. It is an ultra‑lightweight open‑source plugin that turns Claude Code into a Voice‑Enabled assistant. Whether you want to stay in the loop after a code review or get instant feedback on a feature, CallMe gives you a phone ring instead of an email or Slack message.

The plugin supports two popular voice‑API providers – Telnyx (recommended for its low cost) and Twilio – and uses ngrok to expose local webhooks securely. Once set up, the plugin exposes four convenient tools to your prompts:

Tool What it does
initiate_call Start a new phone call
continue_call Ask a follow‑up question
speak_to_user Speak without waiting for a reply
end_call Terminate the conversation

Below is a complete, step‑by‑step tutorial that will have CallMe ringing in your pocket in minutes.


Prerequisites

Item Why you need it
A phone number The number Claude will dial from
A Telnyx or Twilio account Access to voice API and webhook management
An OpenAI account TTS (Text‑to‑Speech) and STT (Speech‑to‑Text) services
ngrok account Tunnel local HTTP server to the public internet
git and a modern CLI Clone the repo and run commands

All providers give you a free tier, making the cost negligible during testing.


1️⃣ Get the Provider Set Up

  1. Visit portal.telnyx.com and verify your account.
  2. Order a phone number (~$1/month).
  3. Create a Voice API application:
  4. Webhook URL: https://<your‑ngrok‑url>/twiml
  5. API version: v2
  6. Copy the Application ID and API Key.
  7. (Optional) In Account Settings → Keys & Credentials, copy the Public Key for webhook signing.

Option B: Twilio (alternative)

  1. Sign up at twilio.com and grab the free trial number.
  2. Copy the Account SID and Auth Token from the dashboard.

2️⃣ Configure Environment Variables

Create a JSON file at ~/.claude/settings.json (recommended) with the following structure:

{
  "env": {
    "CALLME_PHONE_PROVIDER": "telnyx",
    "CALLME_PHONE_ACCOUNT_SID": "YOUR_APPID_OR_SID",
    "CALLME_PHONE_AUTH_TOKEN": "YOUR_API_KEY_OR_TOKEN",
    "CALLME_PHONE_NUMBER": "+15551234567",        
    "CALLME_USER_PHONE_NUMBER": "+15559876543",    
    "CALLME_OPENAI_API_KEY": "sk-…",
    "CALLME_NGROK_AUTHTOKEN": "YOUR_NGROK_TOKEN"
  }
}

Tip: For Twilio simply switch the CALLME_PHONE_PROVIDER value and replace the two SID/Token entries.

If you opted for the optional webhook signing, add:

"CALLME_TELNYX_PUBLIC_KEY": "YOUR_PUBLIC_KEY"

All other environment variables are optional and have sensible defaults.


3️⃣ Install the Plugin

# In Claude Code
/plugin marketplace add ZeframLou/call-me
/plugin install callme@callme

Restart Claude Code to load the new tools.


4️⃣ Run the Local MCP Server

The plugin bundles a lightweight MCP (Multi‑Channel Provider) server that automatically spins an ngrok tunnel.

cd call-me
bn run dev   # (or bun run dev if bun is installed)

The server will log the public URL; this is your webhook endpoint.


5️⃣ Start a Call

In your Claude prompt, you can now invoke the tools. For example:

You finished the auth flow! Call me to discuss next steps.

Claude will respond with:

{
  "tool": "initiate_call",
  "arguments": {
    "message": "Hey! I finished the auth system. What should I work on next?"
  }
}

Claude will place the call, ring your phone, and let you speak. As you converse, you can *

continue_call
* or use *
speak_to_user
* to handle non‑blocking speech.


6️⃣ Cost Snapshot

Item Telnyx Twilio
Outbound per minute ~$0.007 ~$0.014
Phone number per month ~$1 ~$1.15
OpenAI TTS/ STT ~$0.02/min Same
Totals ~$0.03–$0.04/min ~$0.04–$0.05/min

All numbers are estimates and vary with usage volume.


7️⃣ Troubleshooting Guide

Issue Likely Cause Fix
Claude won’t use the tool Environment variables missing Add all mandatory vars to settings.json
No call rings Wrong webhook URL Ensure the URL matches the ngrok output
Audio glitches Phone number not verified Re‑verify provider number
ngrok errors Auth token wrong Re‑generate and set CALLME_NGROK_AUTHTOKEN
Tool name mismatch Using older Claude Code Update to the latest plugin

Check claude --debug for detailed MCP logs.


8️⃣ Advanced Usage

Custom TTS Voice

Add a line to your env:

"CALLME_TTS_VOICE": "onyx"   // options: alloy, echo, fable, onyx, nova, shimmer

Using a Custom ngrok Domain

If you have a paid ngrok plan, set:

"CALLME_NGROK_DOMAIN": "mycustom.ngrok.io"

The MCP server will bind to that domain.


9️⃣ Scaling & Deployment

While the local MCP server works great for prototypes, you can containerize the server or expose it via a cloud function. The repository already contains a Dockerfile and a bun run dev command for easy Docker builds.

docker build -t callme .
docker run --env-file ~/.claude/settings.json -p 3333:3333 callme

Once deployed, point your provider’s webhook URL to the public endpoint.


📌 Conclusion

CallMe gives Claude the missing human touch in the form of a real phone call, combining natural language understanding, TTS/STT, and telephony into one minimal effort. Whether you’re building a remote‑first startup, orchestrating a distributed team, or just want a more engaging way to interact with Claude, the plugin delivers instant, hands‑free communication.

Ready to give it a whirl? Clone the repo, set up Telnyx or Twilio, and let Claude ring your phone. Happy calling!

Original Article: View Original

Share this article