🎁 Get the FREE AI Skills Starter Guide β€” Subscribe β†’
BytesAgainBytesAgain
πŸ¦€ ClawHub

Telebiz Mcp

by @acastellana

Access Telegram data via MCP using the telebiz-tt browser client. Lists chats, reads messages, searches, manages folders, and sends messages through an authenticated Telegram session.

Versionv0.1.0
Downloads2,610
Stars⭐ 1
TERMINAL
clawhub install telebiz-mcp-skill

πŸ“– About This Skill


name: telebiz-mcp description: Access Telegram data via MCP using the telebiz-tt browser client. Lists chats, reads messages, searches, manages folders, and sends messages through an authenticated Telegram session. metadata: {"clawdbot":{"emoji":"πŸ“±"}}

telebiz-mcp

MCP integration for Telegram via telebiz-tt browser client.

Quick Rules (read this first)

  • Rate limits are strict: max 20 calls/request, 30 calls/min, 500ms between calls, heavy ops 1s.
  • For adding many chats to folders: do NOT use batchAddToFolder with multiple chatIds (known bug). Loop addChatToFolder sequentially.
  • For CRM linking: linkEntityToChat is unstable in our tests. We observed company failing with Validation error, and at one point organization succeeding β€” but later organization also failed. Treat linkEntityToChat as unreliable until upstream clarifies schema/feature flags.
  • Prefer reversible operations and clean up test artifacts (folders, groups) immediately.
  • Architecture

    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β”‚ Clawdbot     │────▢│ MCP Server       │────▢│ WebSocket Relay β”‚
    β”‚ (mcporter)   β”‚     β”‚ (stdio)          β”‚     β”‚ (port 9716)     β”‚
    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                                           β”‚
                                                           β–Ό
                                                  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                                                  β”‚ Browser         β”‚
                                                  β”‚ (telebiz-tt)    β”‚
                                                  β”‚ [executor]      β”‚
                                                  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
    

    Quick Setup

    Prerequisites

  • Node.js 18+
  • Telegram account
  • 1. Install telebiz-mcp

    npm install -g @telebiz/telebiz-mcp
    

    2. Open Telebiz in browser

    Go to https://telebiz.io and login with your Telegram account.

    3. Start the HTTP server

    cd ~/clawd/skills/telebiz-mcp
    ./start-http.sh
    

    This starts a persistent server that:

  • Runs telebiz-mcp internally
  • Keeps browser connection alive
  • Exposes HTTP API on port 9718
  • 4. Enable MCP in Telebiz

    In telebiz.io: Settings β†’ Agent β†’ Local MCP

    The status should show "Connected" once the server is running.

    4. Verify connection

    # Quick health check
    cd ~/clawd/skills/telebiz-mcp
    npm run health

    Should show:

    πŸ“± Telebiz MCP Status

    ────────────────────

    Relay: βœ… Running

    Executor: βœ… Connected

    Tools: 31 available

    5. Test via mcporter

    cd ~/clawd
    mcporter call telebiz.listChats limit:5
    

    Health Monitoring

    Manual Check

    # Check status
    npm run health

    JSON output for automation

    node dist/health.js --json

    Monitor Script

    The monitor tracks state changes and can be used with cron:

    # Check and alert on changes
    npm run monitor

    Quiet mode - only output on state change

    node dist/monitor.js --quiet

    JSON output

    node dist/monitor.js --json

    Exit codes:

  • 0 = Healthy (relay up, executor connected)
  • 1 = Degraded (relay up, executor disconnected)
  • 2 = Down (relay not running)
  • 3 = State changed (for alerting)
  • Cron Integration

    Add to crontab for periodic monitoring:

    # Check every 5 minutes, alert on changes
    */5 * * * * cd ~/clawd/skills/telebiz-mcp && node dist/monitor.js --quiet >> /var/log/telebiz-monitor.log 2>&1
    

    Heartbeat Integration

    Add to HEARTBEAT.md for Clawdbot monitoring:

    ### Telebiz MCP (every 2h)
    
  • [ ] Run: cd ~/clawd/skills/telebiz-mcp && npm run health
  • [ ] If degraded/down: Alert Albert via Telegram
  • Available Tools

    Chat Tools

    | Tool | Description | |------|-------------| | listChats | List chats with filters (type, unread, archived, etc.) | | getChatInfo | Get detailed chat information | | getCurrentChat | Get currently open chat | | openChat | Navigate to a chat | | archiveChat | Archive a chat | | unarchiveChat | Unarchive a chat | | pinChat | Pin a chat | | unpinChat | Unpin a chat | | muteChat | Mute notifications | | unmuteChat | Unmute notifications | | deleteChat | Delete/leave chat ⚠️ |

    Message Tools

    | Tool | Description | |------|-------------| | sendMessage | Send text message (markdown supported) | | forwardMessages | Forward messages between chats | | deleteMessages | Delete messages ⚠️ | | searchMessages | Search globally or in a chat | | getRecentMessages | Get message history | | markChatAsRead | Mark all messages as read |

    Folder Tools

    | Tool | Description | |------|-------------| | listFolders | List all chat folders | | createFolder | Create a new folder | | addChatToFolder | Add chat to folders | | removeChatFromFolder | Remove chat from folders | | deleteFolder | Delete a folder ⚠️ |

    Member Tools

    | Tool | Description | |------|-------------| | getChatMembers | List group/channel members | | addChatMembers | Add users to group | | removeChatMember | Remove user from group | | createGroup | Create a new group |

    User Tools

    | Tool | Description | |------|-------------| | searchUsers | Search by name/username | | getUserInfo | Get user details |

    Batch Tools

    | Tool | Description | |------|-------------| | batchSendMessage | Send to multiple chats | | batchAddToFolder | Add multiple chats to folder | | batchArchive | Archive multiple chats |

    Usage Examples

    Find chats waiting for my reply

    mcporter call telebiz.listChats iAmLastSender=false hasUnread=true limit:20
    

    Find stale conversations I started

    mcporter call telebiz.listChats iAmLastSender=true lastMessageOlderThanDays:7 limit:20
    

    Search all messages

    mcporter call telebiz.searchMessages query="invoice" limit:20
    

    Search in specific chat

    mcporter call telebiz.searchMessages query="meeting" chatId=-1001234567890 limit:10
    

    Send message

    mcporter call telebiz.sendMessage chatId=-1001234567890 text="Hello from Clawdbot!"
    

    Get recent messages

    mcporter call telebiz.getRecentMessages chatId=-1001234567890 limit:50
    

    Paginate through history

    # Page 1 (newest 50)
    mcporter call telebiz.getRecentMessages chatId=-1001234567890 limit:50 offset:0

    Page 2 (messages 51-100)

    mcporter call telebiz.getRecentMessages chatId=-1001234567890 limit:50 offset:50

    Organize chats

    # List folders
    mcporter call telebiz.listFolders

    Add chats to folder

    mcporter call telebiz.batchAddToFolder chatIds='["-1001234","-1001235"]' folderId:5

    Rate Limiting

    The browser enforces rate limits to prevent Telegram flood protection:

  • Max calls per request: 20
  • Max calls per minute: 30
  • Min delay between calls: 500ms
  • Delay for heavy operations (send/forward/delete): 1s
  • (These values come from the Telebiz UI and are the effective limits we observed in practice.)

    Known Issues / Workarounds (Feb 2026)

    batchAddToFolder fails for multiple chatIds

    Observed behavior:
  • batchAddToFolder(folderId, chatIds=[one]) works (or reports alreadyIncluded)
  • batchAddToFolder(folderId, chatIds=[two or more]) fails with: "Error: Failed to update folder"
  • Repro confirmed for both:
  • - Auto + another group - Auto + a private chat

    Workaround: loop sequentially:

  • addChatToFolder(chatId=A, folderIds=[folderId])
  • addChatToFolder(chatId=B, folderIds=[folderId])
  • linkEntityToChat is unstable / schema mismatch

    Observed behavior (Feb 2026):
  • linkEntityToChat returns "Validation error" for entityType=deal, contact, and company.
  • In one run, using entityType="organization" successfully linked a HubSpot company to a chat β€” but later organization also returned "Validation error".
  • Implication: this tool is either behind a feature flag, has changing server-side validation, or the published schema/enums don’t match what the backend expects.

    Workaround:

  • Prefer linking via createContact/createDeal/createCompany (these link to the chat at creation time).
  • Use associateEntities to connect deal↔company/contact.
  • Don’t depend on linkEntityToChat until upstream provides a stable contract + better error messages.
  • Troubleshooting

    Relay not starting

    # Check if port is in use
    ss -tlnp | grep 9716

    Kill existing process

    pkill -f "relay.js"

    Start fresh

    ./start-relay.sh

    Browser not connecting

    1. Verify relay is running: npm run health 2. Check browser console (F12) for WebSocket errors 3. Ensure MCP is enabled in Settings β†’ Agent β†’ Enable MCP 4. Try refreshing the telebiz-tt page

    "Executor not connected" error

    The browser tab with telebiz-tt must be:
  • Open and visible (not suspended)
  • Logged into Telegram
  • MCP enabled in settings
  • Rate limit errors

  • Reduce batch sizes
  • Add delays between operations
  • Be more specific in filters to reduce API calls
  • Session expired

    If Telegram session expires: 1. Refresh the telebiz-tt browser page 2. Re-login if prompted 3. Re-enable MCP in settings

    Configuration

    Environment Variables

    | Variable | Default | Description | |----------|---------|-------------| | TELEBIZ_PORT | 9716 | Relay WebSocket port | | TELEBIZ_RELAY_URL | ws://localhost:9716 | Relay URL for MCP server | | TELEBIZ_STATE_FILE | ~/.telebiz-mcp-state.json | Monitor state file |

    mcporter Config

    Located at ~/clawd/config/mcporter.json:

    {
      "mcpServers": {
        "telebiz": {
          "url": "http://localhost:9718/mcp"
        }
      }
    }
    

    Note: Use the HTTP URL (not stdio) to avoid spawning conflicts.

    Security Notes

  • The browser holds your Telegram session - keep it secure
  • Don't expose the relay port (9716) to the internet
  • Review tool calls before executing destructive operations
  • Rate limits help prevent accidental spam
  • βš™οΈ Configuration

    Environment Variables

    | Variable | Default | Description | |----------|---------|-------------| | TELEBIZ_PORT | 9716 | Relay WebSocket port | | TELEBIZ_RELAY_URL | ws://localhost:9716 | Relay URL for MCP server | | TELEBIZ_STATE_FILE | ~/.telebiz-mcp-state.json | Monitor state file |

    mcporter Config

    Located at ~/clawd/config/mcporter.json:

    {
      "mcpServers": {
        "telebiz": {
          "url": "http://localhost:9718/mcp"
        }
      }
    }
    

    Note: Use the HTTP URL (not stdio) to avoid spawning conflicts.

    πŸ“‹ Tips & Best Practices

    Relay not starting

    # Check if port is in use
    ss -tlnp | grep 9716

    Kill existing process

    pkill -f "relay.js"

    Start fresh

    ./start-relay.sh

    Browser not connecting

    1. Verify relay is running: npm run health 2. Check browser console (F12) for WebSocket errors 3. Ensure MCP is enabled in Settings β†’ Agent β†’ Enable MCP 4. Try refreshing the telebiz-tt page

    "Executor not connected" error

    The browser tab with telebiz-tt must be:
  • Open and visible (not suspended)
  • Logged into Telegram
  • MCP enabled in settings
  • Rate limit errors

  • Reduce batch sizes
  • Add delays between operations
  • Be more specific in filters to reduce API calls
  • Session expired

    If Telegram session expires: 1. Refresh the telebiz-tt browser page 2. Re-login if prompted 3. Re-enable MCP in settings