OmniscioGuidesClaude Code channels
Claude Code channels: push events into a running session
A channel is an MCP server that pushes messages, alerts and webhooks into a Claude Code session you already have open, so Claude can act on something that happened while you were away. Channels are a research preview as we read the documentation on October 27, 2026: availability is rolling out gradually, and the flags do not appear in claude --help yet. This page covers what a channel is, who can use one, the steps that turn one on, and every way a channel refuses to register, with the fix each one has.
Sources read October 27, 2026. By the Omniscio team. Updated .
Find the situation you are in
- I want to know what a channel is and where the event actually lands.
- I want to know whether my plan can use one, and what an admin has to switch on.
- I want to turn one on for Telegram, Discord or iMessage.
- Claude Code says channels are not currently available, or my bot never answers.
- I want to know who can push into my session once it is running.
- I already use Remote Control and want to know which one I need.
- I searched for channels inside Omniscio and landed on something else.
Most people arrive at the fourth line. The short answer is that the feature is a preview, the switch is on Anthropic's side rather than yours, and there are nine other causes that each print their own message. If you are here to build your own channel rather than connect one, the reference page is the one Anthropic writes for that, and this page stops at connecting what already exists.
What a channel is
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 are not at the terminal. The traffic can run both ways: Claude reads the event and replies back through the same channel, which is what makes a chat bridge possible. Events only arrive while the session is open, so an always-on setup means running Claude in a background process or a persistent terminal.
What separates a channel from the other ways of reaching Claude Code is where the event lands. Instead of a separate session that Claude Code starts for the job, or a source Claude has to poll on a timer, the message arrives in the session you already have open. You install a channel as a plugin and give it your own credentials; Telegram, Discord and iMessage ship in the preview, and each is a plugin you enable by name.
One detail surprises people the first time. When Claude replies through a channel, the terminal shows the inbound message, the tool call and a short confirmation such as sent. The reply text itself is not printed there. It appears on the platform the event came from, which is why a terminal that looks quiet after a question is usually working exactly as designed.
Two shapes are documented, and they use the same plumbing. A chat bridge is two-way: you ask from Telegram, Discord or iMessage, and the answer comes back in the same chat while the work runs on your machine against your real files. A webhook receiver is one-way: a CI run, an error tracker or a deploy pipeline posts to a local port, and the payload arrives where Claude already has your files open and remembers what you were debugging.
Who can use channels
Channels require Anthropic authentication through claude.ai or a Console API key. They are not available on Amazon Bedrock, Google Cloud's Agent Platform or Microsoft Foundry, and Team and Enterprise organizations have to enable them explicitly. On every account that is allowed, one rule still applies: no channel runs until a user opts it in for that session with --channels.
| Your account | What happens |
|---|---|
| claude.ai Pro or Max, no organization | Available. You opt in per session with --channels |
| claude.ai Team or Enterprise | Blocked until an Owner enables channels for the organization |
| Console with API key authentication | Permitted by default, and blocked only when the organization deploys managed settings, until channelsEnabled is true |
| Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry | Not available at all, whatever the plan |
An Owner turns them on from Organization settings > Claude Code > Channels, which needs the Owner role, or by setting channelsEnabled to true in managed settings. One consequence is worth knowing before you debug anything else. If the setting is disabled or unset, the MCP server still connects and its tools keep working, but channel messages never arrive, and a startup warning tells the user to have an admin enable the setting.
Anthropic documents no minimum Claude Code version for channels. What it does document is that neither --channels nor --dangerously-load-development-channels appears in claude --help while the feature is in preview, and that both flags work even though they are not listed. The version numbers in this corner of the docs belong to permission relay rather than to the feature itself: before v2.1.234 a channel that set the relay capability to false was treated as having declared it, and clients on v2.1.211 and later sanitise the description and the input preview they relay.
How to turn a channel on
Five steps connect Telegram. Discord needs those five with its own names and two more in front of them, and they are the two people skip: in the bot's settings, scroll to Privileged Gateway Intents and enable Message Content Intent, then open the OAuth2 URL generator, select the bot scope, and add the bot to your server. A Discord bot without those two reads as configured and receives nothing. Before any of it, Bun has to be installed, because the prebuilt channel plugins are Bun scripts: run bun --version and install it if that fails.
- Create the bot on the platform and copy its token. On Telegram that is BotFather's
/newbot; on Discord it is the Bot section of the Developer Portal. - Run
/plugin install telegram@claude-plugins-official, and choose the user scope when the install asks, so the plugin is available across all your projects. - Run
/telegram:configure <token>. The token is saved to~/.claude/channels/telegram/.env; settingTELEGRAM_BOT_TOKENin your shell before launching does the same job. - Exit Claude Code and restart it with the flag:
claude --channels plugin:telegram@claude-plugins-official. Several plugins can be named at once, separated by spaces. - Send the bot any message, take the pairing code it replies with, and run
/telegram:access pair <code>. Then lock it down with/telegram:access policy allowlistso only your account can push.
Two failures have their own wording, and both are ordinary. If the install reports Marketplace "claude-plugins-official" not found, add it with /plugin marketplace add anthropics/claude-plugins-official and retry; if it reports Plugin "<name>" not found in marketplace, your local catalogue is stale, so run /plugin marketplace update claude-plugins-official and retry. If the bot never answers at all, check that Claude Code is running with --channels: the bot can only reply while the channel is active.
iMessage is the one that needs no bot and no external service, and it is macOS only. It is installed and started the same way, with /plugin install imessage@claude-plugins-official and then claude --channels plugin:imessage@claude-plugins-official, and it has no configure step. It reads the Messages database at ~/Library/Messages/chat.db, so the first read triggers a macOS prompt for Full Disk Access; granting it under System Settings > Privacy & Security > Full Disk Access is the fix when the server exits immediately with authorization denied. Texting yourself then bypasses access control with no setup, and other contacts are added by handle with /imessage:access allow, as a phone number in +country form or an Apple ID email.
To try the whole flow before connecting a real platform, fakechat is an officially supported demo channel: it runs a chat UI on localhost:8787 with nothing to authenticate. For a channel you are building yourself, the development flag loads it for a session after a confirmation prompt, and it only works in an interactive session, because a non-interactive run with -p or the Agent SDK ignores the flag and the channel does not register.
When a channel will not register: the message and the fix
Anthropic documents the conditions but not the wording, so the lines below were read out of a current build on this machine rather than from the documentation: Claude Code 2.1.312, on October 27, 2026. Most rows are tied to a documented condition and carry the fix that condition has. Two come from the build only, with no matching paragraph in the documentation: the marketplace mismatch, and an entry that resolves to no server at all. Most of them arrive twice: once on the startup screen, and once in the MCP log as a line beginning Channel notifications skipped:.
| What you see | What it means | The fix |
|---|---|---|
Channels are not currently available | The build's availability check came back off for this account | Nothing local turns it on. Availability is rolling out gradually, so report it and retry later |
Channels are not available on Bedrock, Vertex, or Foundry | Something routed the session onto a third-party provider | Sign in with claude.ai or a Console API key, because channels do not run on those providers |
Channels are not enabled for your org, with Inbound messages will be silently dropped beneath it | The organization has not switched channels on, or deploys managed settings without channelsEnabled | An Owner enables channels in Organization settings > Claude Code > Channels, or sets channelsEnabled: true |
server <name> not in --channels list for this session | The server is configured but was not named for this session | Restart with it in --channels; being in .mcp.json is not enough on its own |
plugin <name> is not on the approved channels allowlist | The plugin is not on the Anthropic-maintained list | Use one of the official plugins, or load your own with the development flag while it is in preview |
plugin <name> is not on your org's approved channels list | An admin replaced the list with the organization's own, and this plugin is not on it | An admin adds the plugin and its marketplace to allowedChannelPlugins |
you asked for plugin:<name>@<marketplace> but the installed plugin is ... | The plugin you named and the one installed come from different marketplaces | Name the marketplace you actually installed from, or install from the marketplace you named |
server did not declare claude/channel capability | The server is an ordinary MCP server, not a channel | Declare claude/channel in its capabilities, or use a plugin that already does |
this connection's protocol version has no channel delivery path | The channel server negotiated MCP protocol revision 2026-07-28, which cannot carry unsolicited notifications | For a stdio server, set MCP_PROTOCOL_NEGOTIATION to legacy, which keeps every server on the earlier handshake |
no MCP server configured with that name or server: entries need --dangerously-load-development-channels | The entry you passed does not resolve to a server | Name it in plugin:name@marketplace form for a plugin, or allow server: entries with the development flag |
The first row is the one this page exists for, and it is the only one with no fix on your side. Anthropic describes the feature as a research preview whose availability is rolling out gradually, and the check that prints that line reads a server-side rollout flag together with an account entitlement rather than anything in your settings file. That is why the reports below show the same version working one day and refusing the next, and why an organization on Team or Enterprise can move it only by asking an Owner. Anthropic asks for issues and feedback on the Claude Code GitHub repository, which is the route for the case where none of the other rows applies.
Who can push into your session
Two controls stand between a stranger and your session. First, a sender allowlist: only IDs you have added can push messages, and everyone else is silently dropped. Telegram and Discord build that list by pairing, and iMessage lets your own messages through automatically and takes other contacts by handle. Second, the per-session opt-in: your organization can enable channels and a server can sit in .mcp.json, and neither makes it push, because the server also has to be named in --channels.
On top of those two, the same sender allowlist decides who can approve tool use. A channel that declares the relay capability can carry tool approval prompts to you, which is what lets you approve work while you are away from the terminal, and that same door lets anyone on the allowlist approve or deny tool use in your session. Anthropic's advice is to allow only senders you trust with that authority, and this is the part to think about before you add anyone. Without relay, a permission prompt pauses the session until you answer it at the terminal.
One more limit applies to unattended work. Run channels in non-interactive mode with -p and the tools that need terminal input, such as multiple-choice questions and plan mode approval, are disabled, so the session never stalls waiting for an answer that cannot arrive.
Channels next to the features they look like
Several Claude Code features reach outside the terminal, and Anthropic's own comparison sets channels beside four of them. Cloud sessions run a task in a fresh sandbox cloned from GitHub, and Claude in Slack spawns a cloud session from an @Claude mention in a channel or a thread. A standard MCP server is something Claude queries during a task, with nothing pushed into the session. Remote Control lets you drive a session that is already running from claude.ai or the Claude mobile app. A channel is the fifth shape: an outside system pushes an event in, and Claude answers through the same bridge.
The distinction that matters when you are choosing is the direction of the traffic, and it decides the page you need. If you want to steer a session while you are away from the desk, that is the driving direction and the Remote Control guide covers it, including the account and organization messages that stop it from starting. If an outside system has news for a session that is already open, that is a channel.
Two neighbours are easy to confuse for channels and are not. Claude Code telling you that it needs you is a notification, which the notifications guide covers, and the traffic there runs the other way. And a channel is installed like any other plugin, so the install command, the marketplace and the scope question all come from the plugins guide.
What people are reporting
These are issues in Anthropic's tracker as we write this, not Anthropic statements, and none of them is a fix this page can offer you. They are worth reading because they are the same story from four angles: an account that is set up correctly, a version that worked, and a channel that still will not register.
- Issue 105326, opened 2026-10-27: a Telegram channel on a Max plan started printing
Channel notifications skipped: channels feature is not currently availableon 2026-10-25 and has done so in about twenty sessions since, on a version that worked the day before. Open, no reactions, no comments. - Issue 36503, open since 2026-03-20: the startup screen reports channels are not available while the plugin keeps polling the platform correctly, and inbound messages never reach Claude. 37 reactions, 49 comments, which makes it the busiest report in this group.
- Issue 36460, open since 2026-03-20: a personal Max plan prints
--channels ignoredfollowed by the unavailable line, and achannelsEnabledentry in managed settings changes nothing. 34 reactions, 24 comments. - Issue 74303, opened 2026-07-04 and closed 2026-08-29: the same line on a Max account with the plugin, the token, the pairing and the allowlist all in place, and the reporter's own conclusion that it looks like the server-side flag is not enabled for the account. No reactions, 2 comments.
Read those together and the pattern is the one the documentation implies. Two of them were filed on the same day in March and are still open with dozens of reactions, and the newest one reports the state flipping on a setup that had worked the day before. Treat the line as a status report about the preview rather than a fault in your configuration, and check the other rows above first, because they are the ones you can actually clear.
Where this page stops
This page owns connecting an existing channel to a session, and the reasons that fails. Four neighbours own the rest.
- Driving a running session from somewhere else is the Remote Control guide, which covers the account and organization errors on that path.
- Being told that Claude needs you, rather than being pushed an event, is the notifications guide.
- Installing plugins, marketplaces and the scope question belong to the plugins guide, and adding an MCP server to the MCP server guide.
- A session that will not start at all on a third-party provider is the Bedrock and Vertex guide.
For building your own channel rather than connecting one, Anthropic writes a separate reference page that covers the capability, the notification format and the reply tools, and this page deliberately stops at the plugin boundary. Anything else about Claude Code is in the other Claude Code guides.
Omniscio, and the other meaning of channels
Omniscio is the desktop app we make for running many Claude Code sessions at once, and it has a channels feature of its own that means something different. There, a channel is any integration that delivers messages into Omniscio: Slack, RSS, webhooks, Drive, Sheets and the rest. Each one gets a space in the sidebar, a conversation list with unread counts, a reader and a status, and a channel that cannot start raises an inbox alert instead of failing with no word to you. So a search for channels inside the app finds that system, not this feature.
The two do not currently meet. Omniscio starts every Claude Code session with a fixed argument list, and --channels is not in it; the flag appears nowhere in the application's source on the day we checked. Anthropic documents that a server has to be named in --channels to push anything, so on the source as it stands today no channel can deliver into a session Omniscio started. If you want a channel, run that session in a terminal and start it there.
The Omniscio side of the shared name is written up in the unified channel system page, with the Telegram and Slack integrations beside it. For everything else the app does, the features page has the list and the download page has the installers.
Sources
Every Claude Code behaviour on this page rests on one of these, and each was read on the date beside it.
- Push events into a running session with channels, for what a channel is, the research preview, the plan and organization rules, the five steps, the security model and the comparison with neighbouring features. Read October 27, 2026.
- Channels reference, for the
claude/channelcapability, the development flag, the permission relay version floors and the allowlist note. Read October 27, 2026. - MCP, for the protocol-revision rule and the
MCP_PROTOCOL_NEGOTIATIONsetting. Read October 27, 2026. - Settings, for managed settings, the mechanism the two channel keys are set in. The keys themselves are documented on the channels page. Read October 27, 2026.
- Remote Control, for the boundary between driving a session and pushing into one. Read October 27, 2026.
- Plugin troubleshooting, for the marketplace and plugin-not-found install failures. Read October 27, 2026.
- claude-plugins-official, for the plugin sources the install commands name, and Bun for the runtime the prebuilt plugins need. Read October 27, 2026.
- The four issue pages linked above, each read on October 27, 2026, with its state, reaction count and comment count taken from the issue itself.
- Omniscio's own unified channel system page, read on October 27, 2026, and the source files named in the fact ledger for the spawn claim.
- Three captures on this machine on October 27, 2026:
claude --version, which printed2.1.312 (Claude Code);claude --help, whose 314 lines contain no--channels; andbun --version, which printed1.3.14.
This area moves while the preview runs. Anthropic says the flag syntax and the protocol contract may change, so if a release note mentions channels, re-read the channels page before trusting a copy of this one from last month.
Common questions
What are channels in Claude Code?
A channel is an MCP server that pushes events into a running Claude Code session, so Claude can act on something that happened elsewhere while you were away. Telegram, Discord and iMessage are the three official plugins in the research preview, and the same mechanism carries a webhook from CI or a monitoring tool. The event lands in the session you already have open.
Why does Claude Code say channels are not currently available?
That line is the build's own availability check answering no, and Anthropic describes channels as a research preview whose availability is rolling out gradually. Nothing in your own settings turns it on, because the check reads a server-side rollout flag together with an account entitlement. The open reports show people on a Max plan meeting it while the same version worked days earlier. When the cause is your authentication path or your organization, you get a different line instead, and every one is listed with its fix on this page.
Which plans and accounts can use channels?
An account authenticated through claude.ai or a Console API key. A Pro or Max account with no organization is let through and opts in per session with --channels. Team and Enterprise are blocked until an Owner enables channels, and a Console organization that deploys managed settings is blocked until channelsEnabled is true. Channels are not available on Amazon Bedrock, Google Cloud's Agent Platform or Microsoft Foundry.
How do I turn channels on?
Install the channel's plugin with /plugin install, configure its token, then restart Claude Code with --channels and the plugin name. Bun has to be installed first, because the prebuilt plugins are Bun scripts, and on a Team or Enterprise account an admin has to enable channels. Restarting with the flag is the step people miss: a server that is only in .mcp.json never pushes anything.
How are channels different from Remote Control?
They run in opposite directions. Remote Control lets you drive a session that is already running from claude.ai or the Claude mobile app. A channel lets an outside system push an event into that session, and Claude can answer through the same channel like a chat bridge. Anthropic's own comparison sets the two side by side, and the Remote Control guide on this site covers the driving direction.