
Telegram MCP
io.github.n24q02mPublished by GitHub account n24q02mv4.23.0Updated Oct 29, 2026
Telegram for AI agents: messages, chats, media, and contacts in bot and user-account modes.
Overview
Telegram MCP server that lets an AI assistant send and manage messages, chats, media and contacts via a bot token or a user account.
- What you can do
- Send, edit, delete, forward, pin, react to, search and browse message history
- List, create, join, leave and administer chats, groups and channels, including members and forum topics
- Send photos, files, voice notes and videos, and download media from messages
- List, search and add contacts, and block or unblock users in user mode
- Read server status, adjust runtime settings and clear cache, plus built-in help and documentation resources
- When to use it
- Useful when an assistant should work inside Telegram: drafting and sending messages, triaging chats and channels, forwarding or pinning content, or pulling media and history into a workflow. Bot mode suits channel and group automation; user-account mode is needed for acting as a person, including contact blocking.
- Requirements
- Runs locally over stdio via uvx (Python package n24q02m-telegram) or Docker. Bot mode needs TELEGRAM_BOT_TOKEN; user mode needs a phone number plus OTP and optional 2FA, with TELEGRAM_API_ID and TELEGRAM_API_HASH optionally overriding a bundled API pair. Credentials can be saved with the telegram auth command or supplied by environment variable. Optional HTTP mode with bearer-token auth.
Installation
In SourceWeft
- Open Telegram MCP in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
telegram
mcp-name: io.github.n24q02m/better-telegram-mcp
Telegram for AI agents: messages, chats, media, and contacts in bot and user-account modes.
[Mode] [CI] [codecov] [PyPI] [Docker] [License: Apache-2.0]
[Python] [Telegram] [MCP] [semantic-release] [Renovate]
Sister projects from n24q02m (click to expand)
Table of contents
- Features
- Install
- Setup
- Smithery
- Configuration
- HTTP mode
- CLI
- Tools
- Comparison
- Security
- Build from Source
- Trust Model
- License
Features
- Dual mode -- Bot API (httpx) for bots, MTProto (Telethon) for user accounts
- 6 tools with action dispatch:
message,chat,media,contact,config,help - Auto-detect mode -- Set a bot token for bot mode, or a phone number for user mode
- Local CLI auth --
telegram authhandles the bot token, or phone + OTP + 2FA, on the machine that runs the server - Stdio or HTTP -- stdio by default; HTTP with no-auth (loopback only), a single bearer token, or per-user tokens
- Tool annotations -- Each tool declares
readOnlyHint,destructiveHint,idempotentHint,openWorldHint - MCP Resources -- Documentation available as
telegram://docs/*resources - Security hardened -- SSRF protection, path traversal prevention, error sanitization, prompt-injection boundary tags on Telegram content
Install
The package is n24q02m-telegram (formerly better-telegram-mcp; the old
package receives one final release then freezes). The MCP Registry id stays
io.github.n24q02m/better-telegram-mcp, the Docker image is
n24q02m/telegram, and the legacy better-telegram-mcp command is kept as an
alias of telegram. Local data moves once from ~/.better-telegram-mcp to
~/.telegram on first start.
Install matrix
Install with AI agent -- paste this to your AI coding agent:
Install MCP server
telegramfollowing the steps at https://raw.githubusercontent.com/n24q02m/claude-plugins/main/plugins/better-telegram-mcp/setup-with-agent.md
Setup
Credentials are configured on the machine that runs the server.
Bot mode: set TELEGRAM_BOT_TOKEN in the client config, or save it once:
User mode: sign in interactively with your phone number. Telegram sends an OTP; a 2FA password is prompted if the account has one. The Telethon session is stored on disk.
Check the result with telegram status. The server reads saved credentials at
startup, so restart it after telegram auth. Without any credentials the
stdio server prints these instructions to stderr and exits with status 1.
Smithery
Also listed on Smithery.
Per smithery.yaml, Smithery starts the server over stdio with
uvx --python 3.13 n24q02m-telegram and takes no install-time configuration
(empty configSchema). Credentials come from the TELEGRAM_BOT_TOKEN env var or
a prior telegram auth (see Setup).
Configuration
Settings load from TELEGRAM_-prefixed environment variables (Pydantic Settings).
Env vars take precedence over credentials saved by telegram auth.
There is no TELEGRAM_PASSWORD env var: telegram auth prompts for the 2FA
password and never stores it in the environment.
HTTP mode
telegram --http serves MCP at /mcp and an unauthenticated GET /health.
Settings live in ~/.telegram/config.toml:
Create a token hash with telegram token hash (it reads the token from stdin
or a prompt, never from the command line). In multi mode, add users by
editing users.toml and restarting the server:
Then authorize Telegram for that user on the server machine:
To reach a server on another machine, put it behind a TLS-terminating reverse
proxy or a private network and use token or multi auth.
CLI
The telegram console script (installed by uvx / pip; better-telegram-mcp
is a legacy alias) starts the MCP server when run without a subcommand. Flags
that are not a subcommand are passed through to the server (for example
--http, --host, --port).
--user selects the storage namespace (default default, used by stdio and
the no-auth / token HTTP modes). Unknown subcommands exit with status 2.
Tools
MCP Resources
Comparison
How telegram stacks up against direct competitors in each pillar:
Security
- SSRF Protection -- All URLs validated against internal/private IP ranges, DNS rebinding blocked
- Path Traversal Prevention -- File paths validated, sensitive directories blocked
- Session File Security -- 600 permissions; the 2FA password is prompted, never stored in env vars
- Error Sanitization -- Credentials and bot tokens are never leaked in error messages or logs
- Prompt-injection boundaries -- Telegram content returned by tools is wrapped in untrusted-content tags
Build from Source
Trust Model
The project does not operate a hosted Telegram endpoint. The server runs on infrastructure you control, and credentials never leave that machine.
Anyone with access to your OS user account can read these files.
License
Apache-2.0 -- See LICENSE.
Source: README.md at commit 1942026
Tools
0Version history
2- v4.23.0LatestOct 29, 2026
- v4.22.0Sep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts