Push events into a running session with channels
Source: Hacker News
A channel is an MCP server that pushes events into your running Claude Code session, so Claude can react to things that happen while you’re not at the terminal. Channels can be two‑way: Claude reads the event and replies back through the same channel, like a chat bridge. Events only arrive while the session is open, so for an always‑on setup you run Claude in a background process or persistent terminal.
You install a channel as a plugin and configure it with your own credentials. Telegram and Discord are included in the research preview.
When Claude replies through a channel, you see the inbound message in your terminal but not the reply text. The terminal shows the tool call and a confirmation (e.g., “sent”), and the actual reply appears on the other platform.
This page covers:
- Supported channels: Telegram and Discord setup
- Install and run a channel with fakechat, a localhost demo
- Who can push messages: sender allowlists and how you pair
- Enable channels for your organization on Team and Enterprise
To build your own channel, see the Channels reference.
Supported channels
Each supported channel is a plugin that requires Bun. For a hands‑on demo of the plugin flow before connecting a real platform, try the fakechat quickstart.
- Telegram
- Discord
You can also build your own channel for systems that don’t have a plugin yet.
Quickstart
Fakechat is an officially supported demo channel that runs a chat UI on localhost, with no authentication and no external service to configure.
- Install and enable fakechat.
- Type in the browser; the message arrives in your Claude Code session.
- Claude replies, and the reply shows up back in the browser.
After you’ve tested the fakechat interface, try out the real integrations:
Prerequisites
- Claude Code installed and authenticated – see the quickstart guide.
- Bun installed (the pre‑built channel plugins are Bun scripts). Verify with
bun --version; if that fails, install Bun. - Team/Enterprise users: your organization admin must enable channels in managed settings (see the Enterprise controls section).
If Claude hits a permission prompt while you’re away from the terminal, the session pauses until you approve locally. For unattended use, the --dangerously-skip-permissions flag bypasses prompts, but only use it in trusted environments.
Security
Every approved channel plugin maintains a sender allowlist: only IDs you’ve added can push messages; all others are silently dropped.
Telegram and Discord bootstrap the allowlist by pairing:
- Find your bot in Telegram or Discord and send it any message.
- The bot replies with a pairing code.
- In your Claude Code session, approve the code when prompted.
- Your sender ID is added to the allowlist.
You also control which servers are enabled for each session with the --channels flag. On Team and Enterprise plans, your organization controls availability with the channelsEnabled setting (see Enterprise controls).
Being listed in .mcp.json isn’t enough to push messages; the server must also be named in --channels.
Enterprise controls
Channels are governed by the channelsEnabled setting in managed settings.
| Plan type | Default behavior |
|---|---|
| Pro / Max (no organization) | Channels available; users opt‑in per session with --channels. |
| Team / Enterprise | Channels disabled until an admin explicitly enables them. |
Enable channels for your organization
Admins can enable channels from claude.ai → Admin settings → Claude Code → Channels, or by setting channelsEnabled to true in managed settings.
Once enabled, users in the organization can use --channels to opt channel servers into individual sessions. If the setting is disabled or unset, the MCP server still connects and its tools work, but channel messages won’t arrive. A startup warning informs the user to have an admin enable the setting.
Research preview
Channels are a research preview feature. Availability is rolling out gradually, and the --channels flag syntax and protocol contract may change based on feedback.
During the preview, --channels only accepts plugins from an Anthropic‑maintained allowlist. The approved plugins are in the claude-plugins-official repository. If you pass an unapproved plugin, Claude Code starts normally but the channel won’t register, and a startup notice explains why.
To test a channel you’re building, use the --dangerously-load-development-channels flag. See the Test during the research preview documentation for details.
Report issues or feedback on the Claude Code GitHub repository.
Next steps
Once you have a channel running, explore these related features:
- Build your own channel for systems that don’t have plugins yet.
- Remote Control to drive a local session from your phone instead of forwarding events into it.
- Scheduled tasks to poll on a timer instead of reacting to pushed events.