TL;DR: Claude Code Channels are MCP servers that push events into your running Claude Code session from the outside world. Right now (research preview), you can connect Telegram and Discord. You install them as plugins, pair your account with a security code, and launch Claude with the --channels flag. Claude sees incoming messages, does the work, and replies back through the same platform. Channels only work while your session is running — for always-on, use a background process or persistent terminal.
Why AI Coders Need to Know This
Here is a scenario every builder has lived through: you push a deploy on Friday evening, close your laptop, and go have dinner. At 11 PM your CI/CD pipeline fails. You don't see it until Saturday morning. By then, you've forgotten the context of what you changed, and debugging takes three times as long.
Now imagine this instead: your CI pipeline sends a failure alert to a Telegram bot. That bot pushes the alert directly into your running Claude Code session. Claude sees the error, reads the failing test output, traces it back to the file you changed, and either fixes it or has a detailed diagnosis waiting for you — all while you were eating tacos.
That is what Claude Code Channels unlock. They turn Claude from something you talk to at the terminal into something that listens to the world and reacts on your behalf.
Until now, agentic coding meant Claude could take actions inside your project — read files, write code, run commands. Channels add the other direction: the outside world can now push information into Claude. And Claude can push responses back out. It is two-way communication between your AI coding partner and everything else.
What Channels Actually Are
If you have read our guide on MCP servers, you know that MCP gives Claude the ability to connect to external tools and data. Channels are a specific type of MCP server — one that pushes events into your session instead of waiting for Claude to ask for something.
Think of it like this:
- Regular MCP server: Claude reaches out when it needs something. "Hey database, give me the user count." Claude asks, the server answers.
- Channel: The outside world reaches in when something happens. "Hey Claude, someone just sent you a Telegram message." The channel pushes, Claude reacts.
The key difference: channels are event-driven. You do not need to be at the terminal typing prompts. Events arrive on their own — a Telegram message, a Discord notification, a webhook from your deploy pipeline — and Claude processes them as they come in.
And channels are two-way. When Claude processes an incoming message, it can reply back through the same channel. If someone asks a question on Discord, Claude's response appears in Discord — not just in your terminal. You see the tool call and a confirmation in the terminal, but the actual reply goes out on the platform where the message came from.
What You Need
Before setting up any channel, make sure you have:
- Claude Code v2.1.80 or later — channels require this version. Check with
claude --version. - claude.ai authentication — you must be logged in with a claude.ai account (Pro or Max subscription). Console and API key authentication is not supported for channels.
- Bun runtime — the pre-built channel plugins are Bun scripts. Check with
bun --version. If you don't have it, install it from bun.sh — it takes about 10 seconds. - Team/Enterprise users: your organization admin must explicitly enable channels in managed settings before you can use them.
Real Scenarios: When Channels Change Everything
Channels sound abstract until you see what they actually enable. Here are real situations where this feature matters:
Your deploy fails at 2 AM
Your CI pipeline sends failure notifications to a Telegram channel. With channels enabled, that notification goes straight into Claude's session. Claude reads the error log, checks the git diff, identifies the breaking change, and either applies a fix or writes up a detailed diagnosis — all before you wake up.
A teammate asks Claude a question on Discord
Your team has a Discord server with a "ask-claude" channel. Anyone on the allowlist can drop a question, and Claude responds in Discord with full project context. It is like having a senior developer on call 24/7 who actually knows your codebase.
You monitor a webhook while away from terminal
You set up a Telegram bot that receives webhooks from your payment provider. When a payment fails, the alert hits Claude's session. Claude checks the relevant handler code, looks for recent changes that might have caused it, and sends you a Telegram summary of what it found.
You talk to Claude from your phone
You are on the couch, away from your computer. You open Telegram on your phone and type: "Hey, add input validation to the registration form we built today." Claude reads the message, finds the registration form component, adds the validation, and replies back in Telegram: "Done — added email format check, password minimum length, and required field validation to RegistrationForm.jsx."
Setting Up the Telegram Channel
Telegram is the simplest channel to set up. Here is the full process, step by step.
Step 1: Create a Telegram Bot
Open Telegram and search for BotFather (it is an official Telegram bot that creates other bots). Send it /newbot. Give your bot a display name like "My Claude Bot" and a username ending in bot (like myclaudebot). BotFather gives you a token — a long string that looks like 123456789:ABCdefGHIjklMNOpqrsTUVwxyz. Copy it. You will need it in a moment.
Step 2: Install the Telegram Plugin
Open Claude Code in your project directory and run:
Inside Claude Code
/plugin install telegram@claude-plugins-official
This downloads and registers the Telegram channel plugin from Anthropic's official plugin marketplace.
Step 3: Configure Your Token
Still inside Claude Code, run the configure command with the token BotFather gave you:
Inside Claude Code
/telegram:configure 123456789:ABCdefGHIjklMNOpqrsTUVwxyz
This saves the token to .claude/channels/telegram/.env in your project. You can also set it as an environment variable (TELEGRAM_BOT_TOKEN) in your shell before launching Claude Code — whichever you prefer.
Step 4: Restart with Channels Enabled
Exit Claude Code and restart it with the --channels flag:
Terminal Command
claude --channels plugin:telegram@claude-plugins-official
This starts the Telegram plugin, which begins polling for messages sent to your bot. Without this flag, the plugin is installed but not active.
Step 5: Pair Your Account
Open Telegram on your phone or desktop and send any message to your bot. The bot replies with a pairing code — a short code that proves you are the person who controls this Telegram account.
Back in Claude Code, approve the pairing:
Inside Claude Code
# Enter the pairing code the bot gave you
/telegram:access pair ABC123
# Lock it down — only your paired account can send messages
/telegram:access policy allowlist
That last command is important. It sets the access policy to allowlist only, meaning only sender IDs you have explicitly approved can push messages into your Claude session. Everyone else gets silently dropped.
You're Done
That's it. Send a message to your bot on Telegram — something like "What files are in my project?" — and watch it appear in your Claude Code terminal. Claude reads it, does the work, and the response shows up back in Telegram.
Setting Up the Discord Channel
Discord setup has a few more steps because Discord requires you to create a bot application through their developer portal. But the core flow is the same.
Step 1: Create a Discord Bot
Go to the Discord Developer Portal. Click New Application and give it a name. In the Bot section, create a username, then click Reset Token and copy the token.
Step 2: Enable Message Content Intent
Still in your bot's settings, scroll down to Privileged Gateway Intents and enable Message Content Intent. This lets your bot read the actual text of messages people send — without it, your bot can see that a message was sent but not what it says.
Step 3: Invite the Bot to Your Server
Go to OAuth2 > URL Generator. Select the bot scope and enable these permissions:
- View Channels
- Send Messages
- Send Messages in Threads
- Read Message History
- Attach Files
- Add Reactions
Open the generated URL in your browser to add the bot to your Discord server.
Step 4: Install, Configure, and Launch
The rest follows the same pattern as Telegram:
Inside Claude Code
# Install the Discord plugin
/plugin install discord@claude-plugins-official
# Configure with your bot token
/discord:configure YOUR_DISCORD_BOT_TOKEN
Exit and restart with the channel flag:
Terminal Command
claude --channels plugin:discord@claude-plugins-official
Step 5: Pair Your Account
DM your bot on Discord. It replies with a pairing code. Back in Claude Code:
Inside Claude Code
/discord:access pair YOUR_CODE
/discord:access policy allowlist
Done. Messages sent to your bot on Discord now arrive in your Claude Code session, and Claude's replies go back to Discord.
Running Multiple Channels at Once
You can run Telegram and Discord (or any combination of channels) at the same time. Just pass them all to the --channels flag, space-separated:
Terminal Command
claude --channels plugin:telegram@claude-plugins-official plugin:discord@claude-plugins-official
Claude sees messages from both platforms and responds through whichever one the message came from. Telegram messages get Telegram replies. Discord messages get Discord replies.
Making Channels Always-On
There is one critical thing to understand: channels only work while your Claude Code session is running. Close the terminal, and the channel goes silent. Your Telegram bot stops responding. Discord messages pile up unread.
For an always-on setup, you need Claude Code running continuously. Here are the practical options:
Option 1: tmux or screen (simplest)
Start a persistent terminal session using tmux or screen, launch Claude Code with channels inside it, then detach. The session keeps running even when you close your terminal window or disconnect from SSH.
# Start a tmux session
tmux new -s claude-channels
# Inside tmux, launch Claude with channels
claude --channels plugin:telegram@claude-plugins-official
# Detach with Ctrl+B, then D
# Reattach later with: tmux attach -t claude-channels
Option 2: Background process
Run Claude Code as a background process on a machine that stays on — a home server, a VPS, or a Mac Mini in the closet. Combine with --dangerously-skip-permissions if you trust the environment and want Claude to act without asking.
Permission Warning
If Claude hits a permission prompt while you are away from the terminal, the session pauses until you approve locally. For fully unattended use, --dangerously-skip-permissions bypasses all prompts — but only use this in environments you completely trust. This gives Claude full read/write/execute access to your project.
Security: Who Can Send Messages to Claude?
Security is built into channels at every level. Here is how it works:
Sender Allowlists
Every channel plugin maintains a sender allowlist. Only Telegram or Discord user IDs that you have explicitly approved can push messages into your session. Everyone else is silently dropped — no error message, no response, nothing. Random people who find your bot cannot interact with your Claude session.
Pairing Codes
To get on the allowlist, you go through a pairing flow: send a message to the bot, get a one-time code, and approve it inside Claude Code. This proves that the person requesting access actually has direct contact with whoever is running the Claude session.
The --channels Flag
Even if a channel plugin is installed, it does not receive messages unless you explicitly enable it with the --channels flag when starting Claude Code. Being in your .mcp.json config is not enough — you have to opt in per session. This means you control exactly which channels are active every time you start Claude.
Enterprise Controls
On Team and Enterprise plans, channels are disabled by default. An admin must explicitly enable them in managed settings before anyone in the organization can use them. This gives IT and security teams a kill switch. Even after channels are enabled org-wide, individual users still control which channels are active per session with the --channels flag.
| 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 |
Admins enable channels from claude.ai → Admin settings → Claude Code → Channels, or by setting channelsEnabled to true in managed settings.
Try It First: The Fakechat Demo
Not ready to set up Telegram or Discord? Anthropic ships a demo channel called fakechat that runs entirely on your local machine. No external accounts, no tokens, no configuration. It is the fastest way to see how channels work.
Quick Fakechat Setup
# Inside Claude Code, install the demo plugin
/plugin install fakechat@claude-plugins-official
# Exit and restart with the channel
claude --channels plugin:fakechat@claude-plugins-official
# Open your browser to http://localhost:8787
# Type a message — it appears in your Claude session
# Claude replies — the response appears in the browser
Fakechat is a simple chat UI that runs on localhost:8787. You type in the browser, the message hits Claude, and Claude's reply shows up in the browser. It is a sandbox for understanding the push-and-reply flow before you connect a real platform.
What AI Gets Wrong About Claude Code Channels
This feature is brand new, and even AI assistants will give you bad information about it. Here is what to watch for:
"Channels work with API keys"
Wrong. Channels require claude.ai login — a Pro or Max subscription authenticated through claude.ai. Console and API key authentication is not supported. If you see instructions telling you to set an ANTHROPIC_API_KEY for channels, they are incorrect.
"Channels keep running after you close the terminal"
Wrong. Channels only work while a Claude Code session is actively running. Close your terminal and the channel goes silent. For always-on behavior, you need a persistent session (tmux, screen, or a background process). This is the number one thing people misunderstand about channels.
"Anyone can message your Claude bot"
Wrong. Channels use sender allowlists. Only user IDs you have explicitly paired and approved can push messages into your session. Everyone else is silently dropped. You have to deliberately add people to the allowlist.
"This replaces MCP servers"
Wrong. Channels are MCP servers — a specific kind that pushes events in instead of waiting to be called. Regular MCP servers (database connections, API tools, file system access) still work exactly the same way alongside channels. They are complementary, not competing.
"You can use any chat platform as a channel"
Not yet. During the research preview, only plugins from Anthropic's official allowlist work with --channels. Right now that means Telegram, Discord, and fakechat. You can build custom channels, but you need to use the --dangerously-load-development-channels flag to test them. More platforms will likely come as the feature matures.
How Channels Fit Into the Bigger Picture
If you are following the Claude Code Beginners Guide, you already know the basics: Claude reads your project, writes code, runs commands, and follows instructions from your CLAUDE.md file. You know about MCP servers that give Claude access to databases, APIs, and external tools.
Channels add the missing piece: inbound communication. Before channels, you had to be at the terminal to tell Claude what to do. Now the world can tell Claude what to do — through platforms you already use — and Claude can respond without you being there.
The progression looks like this:
- Claude Code basics — Claude reads your project and writes code when you ask.
- MCP servers — Claude can reach out to databases, APIs, and external services.
- Channels — External services can reach in to Claude, and Claude can respond back.
- AI pair programming — The full picture: Claude as an autonomous partner that monitors, reacts, and builds — with you providing direction, not keystrokes.
This is what agentic coding actually looks like in practice. Not just an AI that answers your questions, but an AI that is wired into your entire workflow — watching CI, responding to teammates, reacting to alerts — while you focus on the parts that need a human brain.
Research Preview Notice
Claude Code Channels are in research preview as of March 2026. The --channels flag syntax, the protocol contract, and the plugin allowlist may change based on feedback. During the preview, only plugins from Anthropic's official claude-plugins-official marketplace are allowed. Report issues on the Claude Code GitHub repository.
FAQ
Claude Code Channels are MCP servers that push external events — like Telegram messages, Discord messages, CI alerts, and webhook notifications — directly into a running Claude Code session. Claude reads the events and can reply back through the same channel, creating a two-way communication bridge between your AI coding assistant and the outside world.
During the research preview, Claude Code Channels supports Telegram and Discord. Both are installed as plugins using /plugin install inside a Claude Code session. There is also a fakechat demo channel for testing the feature locally before connecting a real platform. You can also build your own custom channel.
No. Channel events only arrive while a Claude Code session is actively running. If you close your terminal or exit Claude Code, channels stop receiving messages. For always-on behavior, run Claude Code in a background process, a persistent terminal session using tools like tmux or screen, or a headless server.
Yes. Every channel plugin maintains a sender allowlist — only people you have specifically approved can push messages into your session. Everyone else is silently dropped. You pair your account using a one-time code, then lock down access with an allowlist policy. On Team and Enterprise plans, admins must explicitly enable channels before anyone can use them.
Yes. The pre-built channel plugins (Telegram, Discord, fakechat) are Bun scripts, so you need the Bun runtime installed on your system. Check with bun --version in your terminal. If it is not installed, visit bun.sh for installation instructions. Bun is free and installs in seconds.
Next Step
Start with fakechat. Install the plugin, restart with --channels, open localhost:8787, and send a message. You will see the full push-and-reply cycle in under two minutes — and you will immediately understand why this feature matters. Then move to Telegram or Discord when you are ready for the real thing.