Claude Code Channels are MCP servers that push outside events, chat messages, webhooks, alerts, into a running Claude Code session so it can reply through the same channel. Available from version 2.1.80, they connect Telegram, Discord, or any webhook-enabled service to your terminal, turning a single-player session into a two-way messaging hub.
What you will be able to do
- Install and run the fakechat plugin to confirm channels work on your machine before touching a real platform
- Set up a Telegram bot, pair your own account to it, and lock it down with an allowlist policy
- Set up a Discord bot through its OAuth flow, pair it, and lock it down with an allowlist policy
- Run Telegram and Discord channels at the same time in one Claude Code session, with replies routed to the correct platform automatically
- Write a custom webhook channel server in TypeScript with the MCP SDK so CI, GitHub, or monitoring events reach Claude as they happen
Before you start
- Claude Code v2.1.80 or later, confirmed by running claude --version
- claude.ai authentication (Console and API key auth do not support channels); Pro/Max users add the --channels flag, Team/Enterprise users need an admin to set channelsEnabled: true
- Bun runtime installed (curl -fsSL https://bun.sh/install | bash) and available in your shell PATH
- For custom channels: familiarity with the @modelcontextprotocol/sdk package and a bot token from BotFather (Telegram) or the Discord Developer Portal
Reference
| Task | Command |
|---|---|
| Install fakechat plugin | /plugin install fakechat@claude-plugins-official |
| Start Claude Code with fakechat | claude --channels plugin:fakechat@claude-plugins-official |
| Configure Telegram bot token | /telegram:configure |
| Lock Telegram to your account | /telegram:access policy allowlist |
| Configure Discord bot token | /discord:configure |
| Lock Discord to your account | /discord:access policy allowlist |
| Run Telegram and Discord together | claude --channels plugin:telegram@claude-plugins-official plugin:discord@claude-plugins-official |
| Load a custom channel (dev preview) | claude --dangerously-load-development-channels server:webhook-channel |
Common errors and fixes
| What goes wrong | The fix |
|---|---|
| "fakechat MCP failed" with a red X after install | Bun isn't in PATH yet; run exec /bin/zsh and source ~/.zshrc (or open a new terminal), then restart Claude Code with the --channels command |
| fakechat test won't load in the browser | Port 8787 is already in use by a leftover process; run lsof -i :8787 to check, then lsof -ti :8787 | xargs kill and restart |
| Discord bot can't read message text | "Message Content Intent" under Privileged Gateway Intents was left off when creating the bot; it's easy to miss and must be enabled |
| Anyone can message your Claude Code session | Without an allowlist policy, anyone who finds your bot's username can send it messages; run /telegram:access policy allowlist or /discord:access policy allowlist |
| Custom channel metadata attribute goes missing | Meta keys must be identifiers (letters, digits, underscores only); keys with hyphens are silently dropped from the |
Read the full walkthrough
The complete lesson, with screenshots and any downloads, is published on Substack as part of Claude Code Masterclass: Build AI Systems Without Writing Code.
More in this section
Continue the course
Browse all lessons in the Claude Code Masterclass: Build AI Systems Without Writing Code course, or subscribe to the GenAI Unplugged newsletter to get new lessons in your inbox.