MCP channel notifications (notifications/claude/channel) not surfaced to conversation

Resolved 💬 10 comments Opened Mar 21, 2026 by solejay Closed May 23, 2026

Description

MCP server-to-client notifications using the notifications/claude/channel method are successfully sent by the MCP server but never surfaced as <channel> tags in the conversation.

Environment

  • macOS (Darwin 25.3.0)
  • Claude Code (latest as of 2026-03-21)
  • Telegram channel plugin (claude-plugins-official/telegram v0.0.1)

Steps to Reproduce

  1. Install and configure the Telegram channel plugin
  2. Pair a Telegram user via /telegram:access pair <code>
  3. Send a message from the paired Telegram user to the bot

Expected Behavior

The message should appear in the Claude Code conversation as a <channel source="telegram" ...> tag, allowing the assistant to see and respond to it.

Actual Behavior

The message never appears. The assistant receives no <channel> tag.

Debugging Performed

  • MCP tool calls work finereply, react, edit_message tools all function correctly (request/response path is healthy)
  • Bot is polling Telegram — confirmed via active TCP connections to Telegram API servers and pending_update_count: 0
  • Gate check passes — sender is in allowFrom, gate returns deliver
  • mcp.notification() succeeds — added debug logging to server.ts confirming:

``
2026-03-21T06:18:05.507Z handleInbound called: text="Hi" from=126616686
2026-03-21T06:18:05.508Z gate result: deliver
2026-03-21T06:18:05.509Z sending mcp.notification for chat_id=126616686
2026-03-21T06:18:05.510Z mcp.notification sent successfully
``

  • MCP stdio pipes are connected — verified via lsof showing unix socket FDs for stdin/stdout/stderr between Claude Code and the bun server process
  • The experimental capability is advertised — server declares experimental: { 'claude/channel': {} } in capabilities

Conclusion

The MCP server correctly sends notifications/claude/channel notifications over stdio. Claude Code receives them (no error thrown) but does not inject them as <channel> tags into the conversation. This was tested across multiple Claude Code restarts and a full plugin reinstall.

🤖 Generated with Claude Code

View original on GitHub ↗

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