Telegram Notifier (Botfather)

Use botfather bot to notify yourself on Telegram.

Telegram Notifier MCP Server

An MCP server that lets an LLM send messages and files to a user via a Telegram bot, and read incoming messages. No external HTTP or Telegram libraries — just the native fetch API and the official MCP SDK.

Quick Start

No cloning or building required — just add the config to your MCP client.

1. Create a Telegram Bot

  1. Open Telegram and message @BotFather
  2. Send /newbot and follow the prompts to name your bot
  3. Copy the bot token you receive (e.g., 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11)

2. Find Your Chat ID

  1. Send any message to your new bot on Telegram
  2. Open the following URL in your browser, replacing YOUR_BOT_TOKEN with your actual token:
    https://api.telegram.org/botYOUR_BOT_TOKEN/getUpdates
    
  3. In the JSON response, find "chat":{"id": 123456789} — that number is your chat ID

Tip: For group chats, add the bot to the group, send a message, and check the same URL. Group chat IDs are negative numbers (e.g., -1001234567890).

3. Add to Your MCP Client

Claude Desktop

Add this to your Claude Desktop config file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "telegram-notifier": {
      "command": "npx",
      "args": ["telegram-notifier-mcp"],
      "env": {
        "TELEGRAM_BOT_TOKEN": "your-bot-token-here",
        "TELEGRAM_CHAT_ID": "your-chat-id-here"
      }
    }
  }
}

Claude Code

Add to your project's .mcp.json or ~/.claude.json:

{
  "mcpServers": {
    "telegram-notifier": {
      "command": "npx",
      "args": ["telegram-notifier-mcp"],
      "env": {
        "TELEGRAM_BOT_TOKEN": "your-bot-token-here",
        "TELEGRAM_CHAT_ID": "your-chat-id-here"
      }
    }
  }
}

Codex CLI

You can configure Codex CLI in either of these ways:

Option A: Add it manually in ~/.codex/config.toml

[mcp_servers.telegram-notifier]
command = "npx"
args = ["telegram-notifier-mcp"]

[mcp_servers.telegram-notifier.env]
TELEGRAM_BOT_TOKEN = "your-bot-token-here"
TELEGRAM_CHAT_ID = "your-chat-id-here"

Option B: Add it with a CLI command

codex mcp add telegram-notifier \
  --env TELEGRAM_BOT_TOKEN=your-bot-token-here \
  --env TELEGRAM_CHAT_ID=your-chat-id-here \
  -- npx telegram-notifier-mcp

That's it — your LLM can now send you Telegram notifications.

Configuration

The server uses two environment variables:

VariableRequiredDescription
TELEGRAM_BOT_TOKENYesBot token from @BotFather
TELEGRAM_CHAT_IDNoDefault chat ID. Can be overridden per-tool call via the chatId parameter.

The server will exit with an error if TELEGRAM_BOT_TOKEN is not set. If TELEGRAM_CHAT_ID is not set, you must pass chatId to every tool call.

Tools

send_message

Send a text message to a Telegram chat.

ParameterTypeRequiredDescription
textstringYesThe message text to send
chatIdstringNoTarget chat ID (overrides TELEGRAM_CHAT_ID)
parseModestringNoMarkdown, MarkdownV2, or HTML
disableNotificationbooleanNoSend silently without notification sound

send_document

Send a file/document to a Telegram chat.

ParameterTypeRequiredDescription
filePathstringYesAbsolute path to the file
chatIdstringNoTarget chat ID (overrides TELEGRAM_CHAT_ID)
captionstringNoCaption for the document
parseModestringNoMarkdown, MarkdownV2, or HTML
disableNotificationbooleanNoSend silently without notification sound

send_photo

Send a photo/image to a Telegram chat.

ParameterTypeRequiredDescription
filePathstringYesAbsolute path to the image file
chatIdstringNoTarget chat ID (overrides TELEGRAM_CHAT_ID)
captionstringNoCaption for the photo
parseModestringNoMarkdown, MarkdownV2, or HTML
disableNotificationbooleanNoSend silently without notification sound

send_video

Send a video to a Telegram chat.

ParameterTypeRequiredDescription
filePathstringYesAbsolute path to the video file
chatIdstringNoTarget chat ID (overrides TELEGRAM_CHAT_ID)
captionstringNoCaption for the video
parseModestringNoMarkdown, MarkdownV2, or HTML
disableNotificationbooleanNoSend silently without notification sound

send_audio

Send an audio file to a Telegram chat.

ParameterTypeRequiredDescription
filePathstringYesAbsolute path to the audio file
chatIdstringNoTarget chat ID (overrides TELEGRAM_CHAT_ID)
captionstringNoCaption for the audio
parseModestringNoMarkdown, MarkdownV2, or HTML
disableNotificationbooleanNoSend silently without notification sound

get_updates

Check for new messages sent to the bot. Only returns messages received since the last check.

ParameterTypeRequiredDescription
limitnumberNoMax messages to retrieve (1-100, default 10)
timeoutnumberNoLong-polling timeout in seconds (0-30, default 0). Set >0 to wait for new messages.

File Downloads

When a message contains media (photo, document, video, audio, voice message, or sticker), the server automatically downloads the file to ~/.telegram-notifier-mcp/downloads/ and includes the local path in the output. This lets the LLM read or process the file directly.

  • Files are saved as <timestamp>-<original_filename> to avoid collisions
  • Photos are downloaded at the highest available resolution
  • Telegram Bot API limits downloads to 20 MB
  • If a download fails, the output falls back to just labeling the media type

Testing with the MCP Inspector

You can test the server interactively using the MCP Inspector:

TELEGRAM_BOT_TOKEN="your-token" TELEGRAM_CHAT_ID="your-chat-id" \
  npx @modelcontextprotocol/inspector npx telegram-notifier-mcp

This opens a browser UI where you can invoke each tool and see the results.

Error Handling

The server handles errors gracefully and returns descriptive messages:

ScenarioBehavior
Missing TELEGRAM_BOT_TOKENServer exits at startup with instructions
Missing chat ID (no env var, no parameter)Returns isError: true with message
File not foundReturns isError: true with the file path
File exceeds 50 MBReturns isError: true with file size
Telegram API errorReturns isError: true with Telegram's error description

All server logs go to stderr so they never interfere with the stdio MCP transport on stdout.

File Size Limits

Telegram enforces a 50 MB limit for file uploads via the Bot API. The server validates file size before uploading and returns an error if the limit is exceeded.

Development

git clone https://github.com/AdeshAtole/telegram-notifier-mcp
cd telegram-notifier-mcp
npm install
npm run build

# Watch mode — rebuilds on file changes
npm run dev

Publishing

Releases are published to npm automatically via GitHub Actions when you create a GitHub release.

Setup:

  1. Add your npm token as a repository secret named NPM_TOKEN in GitHub Settings > Secrets and variables > Actions
  2. Bump the version in package.json
  3. Create a new GitHub release — the workflow will build and publish to npm

License

MIT

Related Servers