[BUG] plugin:telegram@claude-plugins-official reports connected but does not poll Bot API in claude 2.1.126
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
Summary
When claude is started with --channels plugin:telegram@claude-plugins-official in version 2.1.126, the Telegram plugin completes its MCP handshake successfully (/mcp UI shows plugin:telegram:telegram · ✔ connected) and prints the standard "Listening for channel messages from: plugin:telegram@claude-plugins-official" banner, but the plugin does not actually poll the Telegram Bot API for incoming messages. Messages sent to the bot accumulate in the API's getUpdates queue and are never delivered to the running claude session.
Downgrading to claude 2.1.114 resolves the issue immediately with no other changes.
Reproduction
- Install claude 2.1.126:
npm install -g @anthropic-ai/claude-code@2.1.126 - Start claude with the Telegram channel:
claude --channels plugin:telegram@claude-plugins-official --dangerously-skip-permissions - Send a message to your Telegram bot from your account
- Observe: claude session shows the "Listening" banner, /mcp lists telegram as connected, but the inbound message never appears in the session pane (no
← telegram · …line, no agent activity). - Downgrade:
npm install -g @anthropic-ai/claude-code@2.1.114 - Restart claude with the same flags
- Observe: queued messages (sometimes hours old) deliver immediately and the session responds normally. Subsequent messages also flow.
Environment
- claude version (broken): 2.1.126
- claude version (working): 2.1.114
- Plugin:
plugin:telegram@claude-plugins-officialv0.0.5 - macOS: Tahoe 26.4.1
- Hardware: Mac mini (Apple Silicon)
- Run context: launchd LaunchAgent → frank-runner.sh → tmux → frank-loop.sh → claude. Reproduction also confirmed when claude is launched directly from an interactive shell, not just via the LaunchAgent.
Diagnostic notes
--debugflag shows the plugin connecting successfully:
[DEBUG] MCP server "plugin:telegram:telegram": Successfully connected (transport: stdio) in 338ms
[DEBUG] MCP server "plugin:telegram:telegram": Connection established with capabilities: {"hasTools":true,"hasPrompts":false,"hasResources":false,"hasResourceSubscribe":false,"serverVersion":{"name":"telegram","version":"1.0.0"}}
[DEBUG] [MCP] Server "plugin:telegram:telegram" connected with subscribe=false
[DEBUG] MCP server "plugin:telegram:telegram": Channel notifications registered
No subsequent log entries for the plugin, no errors, no Bot API call attempts.
lsof -nP -p $CLAUDE_PIDshows TCP connections to the Anthropic LLM API (160.79.104.10:443x N) but no connections to Telegram's IP ranges (149.154.x.xor91.108.x.x) at any point, even with extended sampling.- Bot API confirms messages were posted to the bot:
https://api.telegram.org/bot<TOKEN>/getUpdatesreturns the queued messages until they are manually consumed by another client. - Other MCP plugins in the same session work correctly (Supabase, Playwright, Context7, Sequential-thinking, etc.).
Impact
For users running claude as a long-lived agent with Telegram as the operator-control channel (the use case --channels was designed for), this regression silently disables remote control. The plugin appears healthy in every UI surface but is functionally dead. We spent ~6 hours debugging across two days assuming the failure was elsewhere (launchd, TCC, plugin config, lsof artifacts, macOS Tahoe permissions) before isolating it to the version bump.
Workaround
Pin to 2.1.114 until a fix ships:
npm install -g @anthropic-ai/claude-code@2.1.114
And avoid running claude update while pinned.
What Should Happen?
When claude --channels plugin:telegram@claude-plugins-official is started and the Telegram MCP plugin reports as connected (visible in /mcp UI as ✔ connected), the plugin should poll the Telegram Bot API's getUpdates endpoint and deliver inbound messages to the running claude session. Messages should appear in the session pane as ← telegram · <chat_id>: <message> and the agent should be able to respond.
This works correctly in 2.1.114 and worked correctly in earlier versions. In 2.1.126, the plugin appears connected but no Bot API polling actually occurs, so messages never reach the session.
The plugin's MCP handshake completes and reports as connected, but the plugin never polls the Telegram Bot API. Inbound messages accumulate in the bot's getUpdates queue and are never delivered to the claude session. No errors are surfaced anywhere; the only signal is that messages don't arrive.
Error Messages/Logs
Steps to Reproduce
- Install claude 2.1.126:
npm install -g @anthropic-ai/claude-code@2.1.126
- Verify the version:
claude --version
(should report 2.1.126)
- Start claude with the Telegram channel and the channel plugin enabled:
claude --channels plugin:telegram@claude-plugins-official --dangerously-skip-permissions
- Confirm the plugin reports as connected by typing /mcp inside the session and observing:
plugin:telegram:telegram · ✔ connected
- Send a Telegram message to your bot from your personal Telegram account.
- Wait 60+ seconds and observe: the message does NOT appear in the claude session pane (no
← telegram · …line, no agent activity), even though the bot's getUpdates queue contains the message.
- Downgrade to 2.1.114:
npm install -g @anthropic-ai/claude-code@2.1.114
- Restart claude with the same flags as step 3.
- Observe: queued messages (sometimes hours old) deliver immediately to the session pane and the agent responds normally.
Reproduced multiple times across two separate Mac mini sessions on macOS Tahoe 26.4.1, both via launchd LaunchAgent and direct interactive shell launch.
Claude Model
Opus
Is this a regression?
Yes, this worked in a previous version
Last Working Version
_No response_
Claude Code Version
2.1.126 (broken). Confirmed working in 2.1.114.
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Terminal.app (macOS)
Additional Information
_No response_
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗