MCP channel notifications from Telegram plugin silently dropped (inbound broken, outbound works)

Resolved 💬 3 comments Opened Mar 27, 2026 by LenRipski Closed Mar 30, 2026

Summary

The Telegram plugin (v0.0.4) successfully receives messages from Telegram (typing indicator fires, gate passes), calls mcp.notification({ method: 'notifications/claude/channel', ... }), but the notification never surfaces in the Claude Code conversation. Outbound tool calls (reply, react, edit_message) work perfectly.

Environment

  • Claude Code v2.1.85
  • macOS (Darwin 25.3.0)
  • Plugin: telegram@claude-plugins-official v0.0.4
  • Transport: StdioServerTransport

Steps to reproduce

  1. Install the Telegram plugin from the official marketplace
  2. Configure bot token and add a user to the allowlist in access.json
  3. Send a message from the allowlisted Telegram user to the bot
  4. Observe: typing indicator appears (bot receives message, gate passes), but the message never appears in the Claude Code conversation

What we verified

  • Single plugin process running (no duplicate/zombie processes)
  • Bot token valid (getMe returns clean)
  • User on allowlist (gate returns action: 'deliver')
  • 409 on manual getUpdates confirms process holds polling lock
  • Outbound MCP tool calls succeed (reply sends messages)
  • Server declares experimental: { 'claude/channel': {} } capability correctly
  • mcp.notification() call at server.ts:925 fires (typing indicator at line 908 proves code reaches that point)
  • The .catch() at line 945 does not appear to fire (no stderr output)

Expected behavior

Messages should appear in the conversation as <channel source="telegram" ...> tags.

Actual behavior

Messages are silently dropped. The notification goes over stdio but Claude Code does not surface it.

Workaround

None currently. Restarting Claude Code, killing processes, and re-pairing have been attempted 17+ times across multiple sessions with no change in behavior.

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗