Minimal plugin that lets Claude Code call you on the phone.
Start a task, walk away. Your phone/watch rings when Claude is done, stuck, or needs a decision.

You'll need: - Phone provider: Telnyx or Twilio - OpenAI API key: For speech-to-text (and text-to-speech if not using Kokoro) - ngrok account: Free at ngrok.com (for webhook tunneling)
Choose one of the following:
Option A: Telnyx (Recommended - 50% cheaper)
https://your-ngrok-url/twiml and API version to v2Environment variables for Telnyx:
CALLME_PHONE_PROVIDER=telnyx
CALLME_PHONE_ACCOUNT_SID=<Application ID>
CALLME_PHONE_AUTH_TOKEN=<API Key>
CALLME_TELNYX_PUBLIC_KEY=<Public Key> # Optional: enables webhook security
Option B: Twilio (Not recommended - need to buy $20 of credits just to start and more expensive overall)
Environment variables for Twilio:
CALLME_PHONE_PROVIDER=twilio
CALLME_PHONE_ACCOUNT_SID=<Account SID>
CALLME_PHONE_AUTH_TOKEN=<Auth Token>
Add these to ~/.claude/settings.json (recommended) or export them in your shell:
{
"env": {
"CALLME_PHONE_PROVIDER": "telnyx",
"CALLME_PHONE_ACCOUNT_SID": "your-connection-id-or-account-sid",
"CALLME_PHONE_AUTH_TOKEN": "your-api-key-or-auth-token",
"CALLME_PHONE_NUMBER": "+15551234567",
"CALLME_USER_PHONE_NUMBER": "+15559876543",
"CALLME_OPENAI_API_KEY": "sk-...",
"CALLME_NGROK_AUTHTOKEN": "your-ngrok-token"
}
}
| Variable | Description |
|---|---|
CALLME_PHONE_PROVIDER |
telnyx (default) or twilio |
CALLME_PHONE_ACCOUNT_SID |
Telnyx Connection ID or Twilio Account SID |
CALLME_PHONE_AUTH_TOKEN |
Telnyx API Key or Twilio Auth Token |
CALLME_PHONE_NUMBER |
Phone number Claude calls from (E.164 format) |
CALLME_USER_PHONE_NUMBER |
Your phone number to receive calls |
CALLME_OPENAI_API_KEY |
OpenAI API key (required for STT; also for TTS unless using Kokoro) |
CALLME_NGROK_AUTHTOKEN |
ngrok auth token for webhook tunneling |
| Variable | Default | Description |
|---|---|---|
CALLME_TTS_PROVIDER |
openai |
TTS engine: openai or kokoro (free, local — see Kokoro TTS) |
CALLME_TTS_VOICE |
onyx / af_bella |
Voice name (default depends on TTS provider) |
CALLME_KOKORO_URL |
- | URL of existing Kokoro instance (e.g. http://localhost:8880/v1). If unset, auto-starts Docker container |
CALLME_PORT |
0 (auto) |
Local HTTP server port (0 = OS picks a free port) |
CALLME_NGROK_DOMAIN |
- | Custom ngrok domain (paid feature) |
CALLME_TRANSCRIPT_TIMEOUT_MS |
180000 |
Timeout for user speech (3 minutes) |
CALLME_STT_SILENCE_DURATION_MS |
800 |
Silence duration to detect end of speech |
CALLME_TELNYX_PUBLIC_KEY |
- | Telnyx public key for webhook signature verification (recommended) |
/plugin marketplace add ZeframLou/call-me
/plugin install callme@callme
Restart Claude Code. Done!
Claude Code CallMe MCP Server (local)
│ │
│ "I finished the feature..." │
▼ ▼
Plugin ────stdio──────────────────► MCP Server
│
├─► ngrok tunnel
│
▼
Phone Provider (Telnyx/Twilio)
│
▼
Your Phone rings
You speak
Text returns to Claude
The MCP server runs locally and automatically creates an ngrok tunnel for phone provider webhooks.
initiate_callStart a phone call.
const { callId, response } = await initiate_call({
message: "Hey! I finished the auth system. What should I work on next?"
});
continue_callContinue with follow-up questions.
const response = await continue_call({
call_id: callId,
message: "Got it. Should I add rate limiting too?"
});
speak_to_userSpeak to the user without waiting for a response. Useful for acknowledging requests before time-consuming operations.
await speak_to_user({
call_id: callId,
message: "Let me search for that information. Give me a moment..."
});
// Continue with your long-running task
const results = await performSearch();
// Then continue the conversation
const response = await continue_call({
call_id: callId,
message: `I found ${results.length} results...`
});
end_callEnd the call.
await end_call({
call_id: callId,
message: "Perfect, I'll get started. Talk soon!"
});
| Service | Telnyx | Twilio |
|---|---|---|
| Outbound calls | ~$0.007/min | ~$0.014/min |
| Phone number | ~$1/month | ~$1.15/month |
Plus API costs (same for both phone providers): - Speech-to-text: ~$0.006/min (OpenAI gpt-4o-transcribe) - Text-to-speech: ~$0.02/min (OpenAI TTS) or free with Kokoro
Total: ~$0.03-0.04/minute with OpenAI TTS, ~$0.01-0.02/minute with Kokoro
Kokoro is a free, local text-to-speech engine that runs via Docker. No TTS API key needed — just set one env var (note: CALLME_OPENAI_API_KEY is still required if you use the OpenAI API for speech-to-text):
CALLME_TTS_PROVIDER=kokoro
Auto-setup: If Docker is installed and port 8880 is free, the plugin automatically pulls and starts the Kokoro container on first use.
Existing instance: If you already have Kokoro running (or want a custom port), point to it:
CALLME_TTS_PROVIDER=kokoro
CALLME_KOKORO_URL=http://localhost:8880/v1
Voices: Kokoro has different voices than OpenAI. Query available voices at http://localhost:8880/v1/audio/voices. Popular choices: af_bella, af_sky, am_adam. Set with CALLME_TTS_VOICE.
Requirements: Docker (for auto-setup) or an existing Kokoro instance.
~/.claude/settings.json)claude --debugCALLME_NGROK_AUTHTOKEN is correctCALLME_PORT=3334cd server
bun install
bun run dev
MIT
$ claude mcp add call-me \
-- python -m otcore.mcp_server <graph>