telegram-call-mcp
Places real Telegram voice calls to a configured user, synthesizes the provided message via TTS, plays it aloud (optionally repeated), and returns the call status (answered, no_answer, busy, declined, error).
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@telegram-call-mcpcall me and say the deploy finished"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
telegram-call-mcp
An MCP server that lets AI agents place
real Telegram voice calls and speak a message aloud. The agent calls one
tool — make_call — with the text and a repeat count; the server synthesizes
speech (any TTS model on OpenRouter, default
fish-audio/s1), rings the owner's
Telegram, waits for them to pick up, plays the message, and hangs up.
Built for "wake me up if production is on fire" scenarios: text notifications are easy to sleep through, a ringing phone is not.
Agent ──make_call("DB is down", repeat=2)──▶ telegram-call-mcp
│ 1. TTS via OpenRouter (mp3)
│ 2. ffmpeg → WAV 48kHz mono
│ 3. Telegram P2P call (py-tgcalls)
▼
📞 owner's phone rings,
message plays twiceThe tool
make_call
Argument | Type | Required | Description |
| string | yes | Text to speak. Markdown, URLs, emojis and long IDs are stripped; truncated to |
| int 1–10 | no (default 2) | How many times to play the message, with a 2s pause between repeats. |
Returns a structured result:
{ "status": "answered", "detail": "message played in full", "message_spoken": "DB is down" }status is one of answered, no_answer, busy, declined, error. An
unanswered call means the message was not delivered — the agent can decide
to retry or fall back to texting.
Related MCP server: telegram-commandcode
Requirements
Python 3.10+
ffmpeg (with ffprobe) in
PATH—brew install ffmpeg/apt install ffmpegA dedicated Telegram account for the server (bots can't make calls, so it signs in as a real user account; see Security notes)
An OpenRouter API key for TTS
Setup
1. Install
pip install telegram-call-mcp # or: pipx install / uv tool installOr from source:
git clone https://github.com/maloleg/telegram-call-mcp
cd telegram-call-mcp
pip install .2. Get Telegram API credentials
Sign in at my.telegram.org with the account that will be making the calls (a spare/dedicated account, not your own).
Open API development tools, create an application (any name, URL can be left empty).
Note the
api_idandapi_hash.
3. Sign in once
export TELEGRAM_API_ID=123456
export TELEGRAM_API_HASH=abcdef...
export CALL_TARGET_USER_ID=111111111 # your own numeric Telegram user id
export OPENROUTER_API_KEY=sk-or-...
telegram-call-mcp loginThe login prompts for the phone number, the code Telegram sends, and the 2FA
password if enabled, then saves a session file to
~/.telegram-call-mcp/telegram.session.
Not sure about your numeric user id? Ask @userinfobot on Telegram.
The caller and the callee must be different accounts. Telegram cannot call itself. Sign the server in with a dedicated account and point
CALL_TARGET_USER_IDat your personal one.
On the receiving account, allow calls from non-contacts (Settings → Privacy → Calls → Everybody) or add the server's account to your contacts — otherwise Telegram rejects the call before it ever rings.
4. Add to your MCP client
Claude Code:
claude mcp add telegram-call \
--env TELEGRAM_API_ID=123456 \
--env TELEGRAM_API_HASH=abcdef... \
--env CALL_TARGET_USER_ID=111111111 \
--env OPENROUTER_API_KEY=sk-or-... \
-- telegram-call-mcpClaude Desktop / any JSON-config client (claude_desktop_config.json):
{
"mcpServers": {
"telegram-call": {
"command": "telegram-call-mcp",
"env": {
"TELEGRAM_API_ID": "123456",
"TELEGRAM_API_HASH": "abcdef...",
"CALL_TARGET_USER_ID": "111111111",
"OPENROUTER_API_KEY": "sk-or-..."
}
}
}
}That's it. Ask the agent to "call me and say the deploy finished" to test.
Configuration reference
Variable | Required | Default | Description |
| ✅ | — | From my.telegram.org |
| ✅ | — | From my.telegram.org |
| ✅ | — | Numeric Telegram user id to call |
| ✅ | — | OpenRouter API key for TTS |
|
| Any TTS model on OpenRouter's | |
| — | Voice name, if the model supports it | |
|
| Any OpenAI-compatible audio API works | |
| — |
| |
|
| Session file location (without | |
|
| Seconds to wait for the callee to answer | |
|
| Pause between repeats, seconds | |
|
| Message length cap after sanitization | |
|
| stderr logging verbosity |
Security notes
The session file is full access to the Telegram account. It is created with your user permissions in
~/.telegram-call-mcp/; treat it like a private key. Use a dedicated account so a leak never exposes your personal chats.The tool can only call the one user id fixed in the server config — the agent cannot choose an arbitrary callee, dial numbers, or send messages.
The message text passes through OpenRouter for synthesis; don't have agents speak secrets aloud.
Automating a user account is subject to Telegram's terms; a dedicated account keeps any risk away from your personal one.
Troubleshooting
Symptom | Cause / fix |
Tool error: session not authorized | Run |
| Direct MTProto is blocked in your network. Set |
Call connects but there is silence / | The voice media stream (UDP to Telegram relays) is blocked. A SOCKS proxy is not enough — voice traffic bypasses it. Run your VPN in TUN / system-tunnel mode so UDP is routed too. |
| The callee's privacy settings reject calls from non-contacts, or the two accounts are the same. |
ffmpeg not found | Install ffmpeg and make sure |
TTS HTTP 401/402 | Bad or out-of-credit |
Development
python -m venv .venv && .venv/bin/pip install -e ".[dev]"
.venv/bin/mypy src
LOG_LEVEL=DEBUG .venv/bin/telegram-call-mcp # run on stdioThe call machinery lives in caller.py (Telethon + py-tgcalls, pinned to
2.3.3 — private-call APIs are version-sensitive), TTS and audio prep in
tts.py, tool definition in server.py.
License
MIT
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Tools
Related MCP Servers
- Alicense-qualityAmaintenanceMCP server with persistent memory, voice understanding, multi-thread orchestration, and remote control via Telegram for AI assistants.Last updated2,2995MIT
- Alicense-qualityBmaintenanceMCP server for Telegram integration with Command Code, enabling AI agents to send messages, photos, files, and read updates via Telegram.Last updated1MIT
- Flicense-qualityCmaintenanceMCP server that enables AI agents to send messages, photos, polls, and receive replies via Telegram with persistence and rate limiting.Last updated46
- Alicense-qualityDmaintenanceAn MCP server enabling AI agents to interact with users via Telegram, supporting message and image sending, inline quick replies, and waiting for user responses.Last updated16MIT
Related MCP Connectors
Telegram bridge for your MCP-compatible agent. Bidirectional, no LLM in our stack.
Give AI agents real phone numbers, messages, and voice calls via MCP.
Official MCP server for OmniDimension. Drive voice agents, dispatch calls, and run bulk campaigns.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/maloleg/telegram-call-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server