Install
$ agentstack add mcp-patterai-awesome-claude-call ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Give Claude Code a phone number. Make outbound calls, get rung when work is done, talk to your agent from anywhere.
A Claude Code plugin that bundles an MCP server built on Patter. The plugin layer holds no voice code — it composes existing telephony.
What it does
Three flows, one plugin install, real phone calls.
| Flow | What happens | Example | |---|---|---| | Claude → third party | Outbound. Claude dials, negotiates against an objective, and returns a structured outcome. | /claude-call:call-me +15555550200 book a table for 2 at 8pm Saturday | | Claude → you | Stop hook. When the long task finishes, Claude rings you with a summary you can talk back to. | /claude-call:notify-me +15555550100 | | You → Claude | Inbound. Dial your Twilio number from anywhere, drop straight into a voice conversation with the active session. | /claude-call:serve-me |
Every outbound prompt includes a hard-coded AI disclosure on the first turn, every phone number is redacted to last-4 in logs, and every credential lives in a mode-0600 file in your home directory.
Requirements
| Requirement | Why | |---|---| | Twilio Account SID, Auth Token, and a phone number you own | Carrier — this is how the call leaves your machine. | | OpenAI API key | Default openai_realtime voice engine. | | Claude Code 2.0+, Node 20+, macOS or Linux | Runtime. Windows via WSL is untested. |
Optional alternatives, pick at most one:
- ElevenLabs ConvAI — needs
ELEVENLABS_API_KEYandELEVENLABS_AGENT_ID. - Pipeline mode — Deepgram STT, ElevenLabs TTS, OpenAI LLM (all three keys).
Install
Open any Claude Code session (terminal, desktop app, or IDE extension) and run:
/plugin marketplace add https://github.com/PatterAI/awesome-claude-call
/plugin install claude-call@claude-call
/claude-call:setup
/exit
That is the entire setup. The four steps:
- Add the marketplace. Clones this repo into
~/.claude/plugins/. - Install the plugin. Registers the bundled MCP server, slash commands, hooks, and the
phone-agentsubagent. Nonpm installis required — the server ships with pre-builtdist/files. - Configure credentials. The wizard asks for Twilio Account SID, Auth Token, phone number, and an OpenAI key. If a
.envalready has those, it can import them directly. Credentials land in~/.claude-call/credentials(mode0600) and are never stored anywhere else. - Restart the session. The bundled MCP server picks up the new credentials on the next
claudelaunch.
Then place a call:
/claude-call:call-me +15551234567 say hello and confirm the line works
The Cloudflare tunnel spins up lazily on the first outbound call — no manual webhook setup, no ngrok.
> Already have credentials? Skip to step 4. > Updating an existing install? Re-run /claude-call:setup, then /exit.
Quick start
> /claude-call:call-me +15555550200 ask if there is a table for 2 at 8pm tonight
Claude dispatches the phone-agent subagent, dials, has the conversation, and reports back:
Confirmed. Table for 2 at 20:00 tonight, under "Smith".
Transcript: 4 turns - Duration: 28s - Cost: $0.04
Slash commands
| Command | Behavior | |---|---| | /claude-call:call-me | Outbound call to a third party with autonomous goal pursuit. | | /claude-call:notify-me | Arms a Stop hook. Claude calls you when the current task finishes. | | /claude-call:notify-me-cancel | Disarms /claude-call:notify-me. | | /claude-call:dial-me-on-blocked | Arms a Notification hook. Claude calls you whenever it stalls on permission or idle prompts. | | /claude-call:dial-me-on-blocked-cancel | Disarms /claude-call:dial-me-on-blocked. | | /claude-call:calls | Lists recent calls (status, duration, cost). | | /claude-call:serve-me | Arms the inbound voice agent — callers reach Claude. | | /claude-call:serve-me-cancel | Disarms inbound. |
Numbers must be E.164, e.g. +15555550100.
How it works
Claude Code session
/claude-call:* slash commands phone-agent subagent Stop / Notification / SessionStart hooks
\ | /
\ | /
v v v
stdio MCP transport
|
v
bundled server (server/, ~800 LOC TS)
make_call - call_third_party - get_calls - get_transcript
|
v
Patter SDK + Cloudflare tunnel (lazy, first call)
|
v
Twilio - PSTN
The plugin layer is roughly 700 lines of shell and markdown. The bundled server in server/ is roughly 800 lines of TypeScript that wraps the getpatter SDK directly — no external patter-mcp repo required.
Port discovery probes a range ([8002, 8099] by default) and picks one that is bindable on 127.0.0.1 and silent on ::1. The dual check is load-bearing — probing only IPv4 would miss a Docker IPv6 hijack; probing only IPv6 would miss a stray IPv4 conflict.
Configuration
| Path or var | Default | Purpose | |---|---|---| | ~/.claude-call/credentials | — | Telephony credentials (mode 0600). Managed by /claude-call:setup. | | ~/.claude-call/calls.ndjson | — | Append-only call history. | | ~/.claude-call/log.ndjson | — | Append-only event log (phone numbers redacted). | | ~/.claude-call/inbound-armed | — | Flag file. Created by /claude-call:serve-me, removed by its cancel command. | | CLAUDE_CALL_STATE_DIR | ~/.claude-call/state | Flag-file directory for armed hooks. | | CLAUDE_CALL_LOG | ~/.claude-call/log.ndjson | Override the log path. |
Privacy and security
| Guarantee | How it's enforced | |---|---| | AI disclosure on every outbound call | Hard-coded into outbound system prompts on the first turn. Non-overridable in v0.2. | | Phone numbers redacted to last-4 in all logs | cc_redact_phone runs on every log line that touches a number. | | Credentials file mode 0600 | Server refuses to start if the file is world- or group-readable. | | State directory mode 0700 | Created with mkdir -m 0700 — owner-only. | | No surprise outbound HTTP from the plugin | Only Twilio, OpenAI / ElevenLabs / Deepgram, and Cloudflare's tunnel control plane (when serving inbound or after the first outbound call). | | Rate limits and budget caps | Enforced upstream by Patter. |
Development
make install-dev # verify bats + jq + node are installed
make ci # full CI: server build + typecheck + test + bats
make server-test # bundled server tests only
make test # bats tests only
make lint # shellcheck (best-effort)
GitHub Actions CI runs on every push and PR (Ubuntu and macOS matrix). Manual end-to-end smoke tests live in [tests/e2e.md](tests/e2e.md) and require real Twilio credentials.
Project docs
| Doc | What's in it | |---|---| | [CHANGELOG.md](CHANGELOG.md) | Versioned change log. | | [tests/e2e.md](tests/e2e.md) | Manual end-to-end smoke-test checklist. | | [SECURITY.md](SECURITY.md) | How to report a security issue. | | [CITATION.cff](CITATION.cff) | Cite this work. |
License
[MIT](LICENSE) © 2026 PatterAI. Built on Patter.
Source & license
This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: PatterAI
- Source: PatterAI/awesome-claude-call
- License: MIT
- Homepage: https://patterai.github.io/awesome-claude-call/
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.