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 recent community issues