Claude Code Telegram Notifier MCP Server
by hsynj
README.md
# Claude Code Telegram Notifier MCP Server š¤š²
[](LICENSE)
[](https://www.typescriptlang.org/)
[](https://modelcontextprotocol.io/)
A **Model Context Protocol (MCP)** server that connects **Claude Code** and **Claude Desktop** to **Telegram**. Receive real-time push notifications on your phone or desktop whenever Claude starts long tasks, hits key milestones, encounters blockers, or finishes work ā perfect for when you are away from your keyboard (AFK).
---
## ⨠Features
- š **Proactive Notifications**: Claude notifies you automatically about task status without manual intervention.
- š¦ **Status Types**:
- `info` ā¹ļø: Task started, background work initiated.
- `success` ā
: Milestone reached, task completed.
- `warning` ā ļø: Non-critical issue, retry, or blocker.
- `action_required` šØ: Human intervention needed (approval, missing API key, confirmation).
- š”ļø **Resilient Delivery**: Automatic fallback to plain text if Markdown entity parsing fails due to unescaped code or paths.
- āļø **Dual Configuration**: Supports both `.env` file and MCP configuration `env` block.
- š **Universal Compatibility**: Works with Claude Code CLI and Claude Desktop app.
---
## š Prerequisites
1. **Node.js** (v18 or higher) & **npm**
2. **Telegram Bot Token**:
- Open Telegram and message [@BotFather](https://t.me/BotFather).
- Send `/newbot` and follow the instructions to create your bot.
- Copy the API token provided.
3. **Telegram User ID**:
- Message [@userinfobot](https://t.me/userinfobot) or [@rawdatabot](https://t.me/rawdatabot) to get your numeric Telegram User ID.
---
## š Installation & Setup
### 1. Clone & Build
```bash
git clone git@github.com:hsynj/ClaudeCode-Telegram-MCPTool.git
cd ClaudeCode-Telegram-MCPTool
npm install
npm run build
```
### 2. Configure Environment
Copy the example environment file and fill in your credentials:
```bash
cp .env.example .env
```
Edit `.env`:
```env
BOT_TOKEN=123456789:ABCdefGhIJKlmNoPQRsTUVwxyZ
ADMIN_ID=987654321
```
*Note: You can also specify these variables directly in your Claude configuration files.*
---
## š ļø Configuration with Claude
### Option A: Claude Code CLI
Add the server to Claude Code using `claude mcp add`:
```bash
claude mcp add telegram-notifier node /ABSOLUTE_PATH_TO/ClaudeCode-Telegram-MCPTool/dist/index.js -e BOT_TOKEN=YOUR_BOT_TOKEN -e ADMIN_ID=YOUR_ADMIN_ID
```
Or manually configure your MCP settings file (e.g. `~/.claude/mcp.json` or project-level `.claude/settings.json`):
```json
{
"mcpServers": {
"telegram-notifier": {
"command": "node",
"args": [
"/ABSOLUTE_PATH_TO/ClaudeCode-Telegram-MCPTool/dist/index.js"
],
"env": {
"BOT_TOKEN": "YOUR_BOT_TOKEN",
"ADMIN_ID": "YOUR_ADMIN_ID"
}
}
}
}
```
### Option B: Claude Desktop App
Edit `claude_desktop_config.json`:
- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
- **Linux**: `~/.config/Claude/claude_desktop_config.json`
- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
```json
{
"mcpServers": {
"telegram-notifier": {
"command": "node",
"args": [
"/ABSOLUTE_PATH_TO/ClaudeCode-Telegram-MCPTool/dist/index.js"
],
"env": {
"BOT_TOKEN": "YOUR_BOT_TOKEN",
"ADMIN_ID": "YOUR_ADMIN_ID"
}
}
}
}
```
---
## š§ Automating Proactive Notifications in Claude Code
To make Claude proactively notify you while working, add a rule to `~/.claude/rules/telegram-notifier.md`:
```markdown
# Telegram Notifier Rule
You MUST proactively use the `send_telegram_update` MCP tool to notify the user in the following situations, without the user explicitly asking:
1. **When starting a multi-step or long-running task:** Let the user know you have started working. Use `status: "info"`.
2. **When reaching significant milestones:** If you've completed a major part of a larger task (e.g. "Finished setting up the database, now moving to API routes"). Use `status: "success"`.
3. **When you encounter a blocker or need human intervention:** If a test fails repeatedly, an API key is missing, or you are stuck and need advice. Use `status: "warning"` or `action_required`.
4. **When you need approval:** If you are about to run a destructive command, modify a critical file, or do something that requires explicit permission. Use `status: "action_required"`.
5. **When the task is completely finished:** Let the user know the work is done and they can review it. Use `status: "success"`.
Assume the user is AFK and relies on Telegram notifications to track progress.
```
---
## š§ MCP Tool Specification
### `send_telegram_update`
Sends a formatted notification to your Telegram chat.
| Parameter | Type | Required | Description |
| :--- | :--- | :--- | :--- |
| `project` | `string` | **Yes** | Name of the project or repository being worked on. |
| `message` | `string` | **Yes** | Detailed status log, explanation, or required action. |
| `status` | `string` | **Yes** | One of `info`, `success`, `warning`, `action_required`. |
| `title` | `string` | No | Short headline (defaults to `"Update"`). |
#### Message Format Example:
```text
ā
Milestone Completed
š Project: my-web-app
Database migrations applied and all 24 unit tests passed.
Status: success
```
---
## šØāš» Development
```bash
# Run in development mode with ts-node
npm run dev
# Compile TypeScript
npm run build
# Start compiled server
npm start
```
---
## š License
This project is licensed under the [MIT License](LICENSE).
TDQS
A4.2/5.0
Scored across 1 tool
Disambiguation5/5
With only a single tool, there is no possibility of confusion or misselection between tools. The tool's purpose is self-evident and unambiguous.
Naming Consistency5/5
The lone name send_telegram_update follows a clear verb_noun snake_case convention. With one tool there is no inconsistency to speak of.
Tool Count3/5
A single tool is borderline thin for a server, though the notifier's scope is narrow. One send operation arguably covers the entire purpose, but it leaves little room for nuance.
Completeness4/5
Sending a notification is the only real operation for a notifier, so the surface covers the domain's core action. Minor gaps exist (e.g. no distinct channels for errors vs. progress), but the stated use cases are handled.
Maintenance
ActivityMaintained
ResponsivenessNo issues