Skip to main content
Glama

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 twice

The tool

make_call

Argument

Type

Required

Description

message

string

yes

Text to speak. Markdown, URLs, emojis and long IDs are stripped; truncated to MAX_MESSAGE_LENGTH (default 500 chars).

repeat

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 PATHbrew install ffmpeg / apt install ffmpeg

  • A 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 install

Or from source:

git clone https://github.com/maloleg/telegram-call-mcp
cd telegram-call-mcp
pip install .

2. Get Telegram API credentials

  1. Sign in at my.telegram.org with the account that will be making the calls (a spare/dedicated account, not your own).

  2. Open API development tools, create an application (any name, URL can be left empty).

  3. Note the api_id and api_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 login

The 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_ID at 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-mcp

Claude 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

TELEGRAM_API_ID

From my.telegram.org

TELEGRAM_API_HASH

From my.telegram.org

CALL_TARGET_USER_ID

Numeric Telegram user id to call

OPENROUTER_API_KEY

OpenRouter API key for TTS

TTS_MODEL

fish-audio/s1

Any TTS model on OpenRouter's /audio/speech endpoint

TTS_VOICE

Voice name, if the model supports it

TTS_BASE_URL

https://openrouter.ai/api/v1

Any OpenAI-compatible audio API works

TELEGRAM_PROXY

socks5://host:port or http://host:port for MTProto (Telethon ignores HTTP_PROXY)

TELEGRAM_SESSION_PATH

~/.telegram-call-mcp/telegram

Session file location (without .session)

CALL_ANSWER_TIMEOUT

45

Seconds to wait for the callee to answer

CALL_REPEAT_PAUSE

2

Pause between repeats, seconds

MAX_MESSAGE_LENGTH

500

Message length cap after sanitization

LOG_LEVEL

INFO

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 telegram-call-mcp login with the same env vars the MCP client uses.

Connection to Telegram failed at startup

Direct MTProto is blocked in your network. Set TELEGRAM_PROXY to a local SOCKS/HTTP proxy.

Call connects but there is silence / error (TelegramServerError) after ~10s of "REFLECTOR" log lines

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.

declined immediately, phone never rang

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 ffmpeg/ffprobe are in the PATH visible to your MCP client.

TTS HTTP 401/402

Bad or out-of-credit OPENROUTER_API_KEY.

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 stdio

The 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

Install Server
A
license - permissive license
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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