Omniscio

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

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.

Who is let through, and what stands in the way.
Your accountWhat happens
claude.ai Pro or Max, no organizationAvailable. You opt in per session with --channels
claude.ai Team or EnterpriseBlocked until an Owner enables channels for the organization
Console with API key authenticationPermitted by default, and blocked only when the organization deploys managed settings, until channelsEnabled is true
Amazon Bedrock, Google Cloud's Agent Platform, Microsoft FoundryNot 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.

  1. 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.
  2. 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.
  3. Run /telegram:configure <token>. The token is saved to ~/.claude/channels/telegram/.env; setting TELEGRAM_BOT_TOKEN in your shell before launching does the same job.
  4. 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.
  5. 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 allowlist so 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:.

Every known reason a channel does not register, and what to do about it.
What you seeWhat it meansThe fix
Channels are not currently availableThe build's availability check came back off for this accountNothing local turns it on. Availability is rolling out gradually, so report it and retry later
Channels are not available on Bedrock, Vertex, or FoundrySomething routed the session onto a third-party providerSign 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 itThe organization has not switched channels on, or deploys managed settings without channelsEnabledAn Owner enables channels in Organization settings > Claude Code > Channels, or sets channelsEnabled: true
server <name> not in --channels list for this sessionThe server is configured but was not named for this sessionRestart with it in --channels; being in .mcp.json is not enough on its own
plugin <name> is not on the approved channels allowlistThe plugin is not on the Anthropic-maintained listUse 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 listAn admin replaced the list with the organization's own, and this plugin is not on itAn 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 marketplacesName the marketplace you actually installed from, or install from the marketplace you named
server did not declare claude/channel capabilityThe server is an ordinary MCP server, not a channelDeclare claude/channel in its capabilities, or use a plugin that already does
this connection's protocol version has no channel delivery pathThe channel server negotiated MCP protocol revision 2026-07-28, which cannot carry unsolicited notificationsFor 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-channelsThe entry you passed does not resolve to a serverName 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 available on 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 ignored followed by the unavailable line, and a channelsEnabled entry 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/channel capability, 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_NEGOTIATION setting. 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 printed 2.1.312 (Claude Code); claude --help, whose 314 lines contain no --channels; and bun --version, which printed 1.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.