Skip to main content
Glama
aralroca
by aralroca
README.md
# Telegram Confirmation MCP Bridge

A simple bridge to request human confirmation via Telegram from an MCP agent (like Antigravity).

## Antigravity Configuration

To add this server to your Antigravity configuration (or any MCP client), use the following JSON block.

You need to replace:

- `<ABSOLUTE_PATH>` with the absolute path where you cloned this repository.
- `<YOUR_VERCEL_URL>` with your Vercel deployment URL (e.g., `https://my-telegram-bot.vercel.app`).

```json
{
  "mcpServers": {
    "telegram-bot": {
      "command": "node",
      "args": ["<ABSOLUTE_PATH>/telegram-bot-mcp/mcp-server.js"],
      "env": {
        "VERCEL_URL": "https://<YOUR_VERCEL_URL>"
      }
    }
  }
}
```

### Explanation

This script (`mcp-server.js`) acts as a **local proxy**. The agent communicates with it via `stdio` (standard), and the script makes HTTP requests to your Vercel backend, managing the question delivery and the polling (active waiting) for the response.

---

## Architecture

1. **Agent (Local)** → calls `ask_telegram_confirmation`
2. **Local Proxy (`mcp-server.js`)** → calls `POST /api/confirm` on Vercel
3. **Vercel** → sends a message to the Telegram Bot
4. **User** → replies YES/NO on mobile
5. **Telegram** → calls the Webhook `POST /api/webhook` on Vercel
6. **Vercel** → saves the response in Redis (Upstash)
7. **Local Proxy** → receives the response by polling `GET /api/confirm-status`
8. **Agent** → receives the result "User replied: YES"

---

## Installation and Deployment

### 1. Clone and Prepare

```bash
git clone https://github.com/aralroca/telegram-bot-mcp.git
cd telegram-bot-mcp
npm install
```

### 2. Configure Telegram

1. Talk to `@BotFather` to create a bot (`/newbot`).
2. Save the `BOT_TOKEN`.
3. Get your `CHAT_ID` (send a message to the bot and check `https://api.telegram.org/bot<TOKEN>/getUpdates`).

### 3. Deploy to Vercel

```bash
npm run deploy
```

Configure environment variables in Vercel:

- `BOT_TOKEN`: Your Telegram token.
- `CHAT_ID`: Your chat ID.
- `ALLOWED_USER_ID`: Your numeric user ID (for security).

Configure **Upstash Redis** (from Vercel Marketplace) for persistence.

### 4. Configure Webhook

Once deployed, register the Telegram webhook using your Vercel URL:

```
https://api.telegram.org/bot<BOT_TOKEN>/setWebhook?url=https://<YOUR_VERCEL_URL>/api/webhook
```

---

## Troubleshooting and Tips

### 1. Vercel "401 Unauthorized"

If the agent receives a 401 error, it's likely due to **Vercel Deployment Protection**.

- Go to your Vercel Dashboard → **Settings** → **Deployment Protection**.
- **Disable "Vercel Authentication"**.
- This allows the local MCP proxy and Telegram webhooks to reach your API.

### 2. Forbidden (403)

Make sure the `ALLOWED_USER_ID` in your Vercel environment variables matches your actual Telegram User ID. You can find your ID by sending a message to `@userinfobot`.

### 3. State Persistence (Redis)

This bridge uses **Redis** to keep track of questions while waiting for your reply.

- Use the **Vercel Marketplace** to add **Upstash Redis**.
- Ensure it's **Connected** to your project in the **Storage** tab.
- We support both REST protocol (`UPSTASH_REDIS_REST_URL`) and standard Redis protocol (`REDIS_URL`).
- **Redeploy** your project after connecting the storage.

### 4. Continuous Polling (Wait state)

If the agent stays in a "Waiting" state even after you reply "YES":

- Check if Redis is correctly initialized by visiting `https://<YOUR_VERCEL_URL>/health`.
- You should see `"redis_initialized": true`.

### 5. Stable URLs

Always use the **Production Domain** (e.g., `my-project.vercel.app`) in your Antigravity configuration `VERCEL_URL` environment variable. Using the specific deployment URL (the one with the hash) will stop working after your next deploy.

## How to use with an Agent

To trigger the confirmation, you should invoke the MCP server by its name (defined in your configuration, e.g., `telegram-bot`) in your prompt. This helps the agent select the correct tool.

**Example Prompts:**

- _"Use **telegram-bot** to ask for my confirmation before deleting any file."_
- _"Tell **telegram-bot** to send me a confirmation request to proceed with the deployment."_

**What happens next:**

1. The agent will call the tool from the `telegram-bot` server.
2. You will receive a message from your bot on Telegram: `Should I proceed? Reply: YES / NO`.
3. The agent will stay in a "waiting" state while polling Vercel.
4. Once you reply **YES** or **NO** on your phone, the agent will receive the answer and continue its task.

TDQS

B3/5.0

Scored across 1 tool

Disambiguation5/5

With only one tool, there is no possibility of ambiguity or overlap between tools. The tool's purpose—sending a yes/no confirmation question via Telegram—is clearly distinct by default.

Naming Consistency5/5

A single tool inherently has perfect naming consistency, as there are no other tools to compare it against. The name 'ask_telegram_confirmation' follows a clear verb_noun pattern.

Tool Count2/5

One tool is too few for a server named 'Telegram MCP Bridge,' which implies broader Telegram functionality. This feels thin and incomplete for the apparent scope of bridging Telegram interactions.

Completeness1/5

The tool set is severely incomplete for a Telegram bridge. It lacks basic operations like sending messages, receiving updates, managing chats, or handling files, leaving major gaps in the domain coverage.

Maintenance

ActivityInactive
ResponsivenessNo issues