Plug Claude Code into Telegram, Discord, or iMessage with plugin MCP servers. Setup walkthroughs and the async mobile workflows that make it worth wiring up.
Problem: You are on the train. Your laptop is at home grinding through a 40-minute build. It hits you that the test suite needed a flag you never set. Pick your poison: wait until you are back at the desk, or SSH in from the phone and fumble a terminal through a 6-inch screen.
Not a developer at all? Same trap, different shape. You are running a business with Claude Code wired up as your generalist helper: calendar, marketing drafts, task triage, spreadsheet updates, quick reports. Every request still starts with sitting down at the terminal. There is no way to message your assistant from the phone between meetings the way you would text a real EA.
Quick Win: Wire your Claude Code session to Telegram (or iMessage if you are on macOS) and message it from the phone the way you would text a coworker:
claude --channels plugin:telegram@claude-plugins-official
Fire off "add the --coverage flag to the test script in package.json" from Telegram. The message lands in Claude, the edit happens, and the reply comes back in the same chat. Your session keeps humming locally with full access to files, MCP servers, and project config.
Channels is a plugin-based Claude Code feature that pipes messages from Telegram, Discord, or iMessage straight into a live Claude Code session running on your own machine. The session handles each request against your local filesystem, MCP tools, and git, then replies through the same messaging app. Anthropic announced it on March 20, 2026 as a research preview. Telegram and Discord shipped first. iMessage support dropped a week later. The plugin shape means more platforms can join without new plumbing.
Under the hood the idea is simple. An MCP server bridges your Claude Code session to the messaging platform. A message to your bot on Telegram or Discord gets forwarded to Claude. Claude runs the request against your local environment (files, tools, git, everything), then replies back through the same channel.
Nothing here runs in the cloud. The session lives on your machine. The messaging app is the window into it, much like Remote Control uses claude.ai and the mobile app as a window into your local session. Same principle, different surface.
The original announcement on X pulled real traction, and the community read was clear: this pushes dev workflows toward async and mobile-first. The loudest request at launch was iMessage, and Anthropic shipped it inside a week.
Reach for Channels when: native mobile notifications matter, the work is async (fire off a request, check back later), or team-based access through Discord guild channels is what you need. Also reach for Channels when you want a hackable, extensible system you can bend to fit your workflow.
Reach for Remote Control when: you want the full claude.ai interface, rich formatting, file previews, and a chat UI that already feels familiar. Setup is one command instead of bot creation, and it plays nice with the Claude mobile app from minute one.
Thariq from the Claude Code team put it plainly in the announcement thread: "We want to give you a lot of different options in how you talk to Claude remotely. Channels is more focused on devs who want something hackable."
The flow follows the MCP pattern that Claude Code already uses for tool extensions:
Install a channel plugin (Telegram, Discord, or iMessage). Each runs as an MCP server.
Launch Claude Code with the --channels flag. That activates the plugin.
The MCP server connects to the messaging platform (polling for Telegram, WebSocket for Discord).
A message arrives, the server wraps it as a <channel> event, and pushes it into your Claude Code session.
Claude runs the request against your full local environment.
Claude replies via tools the MCP server exposes (reply, react, edit_message).
Security has two layers. Every channel plugin keeps a sender allowlist. Only user IDs you have paired and approved can push a message in. Everything else drops silently. And --channels decides which servers are actually on for a given session. A config entry in .mcp.json is not enough to let a server push messages. It also has to be named in --channels.
Team and Enterprise plans add another gate. Org admins control channel availability through a channelsEnabled managed setting. Off by default. Has to be turned on on purpose.
One detail that bites people: hitting a permission prompt while you are away from the terminal pauses the session until you approve it locally. If full unattended operation is the goal, --dangerously-skip-permissions bypasses prompts. Use that only in environments you already trust.
Worth keeping in mind: Claude's replies travel through the messaging platform's servers. When you are working with proprietary code or sensitive credentials, be intentional about what you ask Claude to output through a channel. The fakechat localhost option (below) keeps every byte on your machine for the sensitive work.
Telegram setup runs about 5 minutes. You need Bun installed (the MCP server runs on Bun) and a Claude Code session signed in with a claude.ai account rather than an API key.
This writes TELEGRAM_BOT_TOKEN=... to .claude/channels/telegram/.env inside your project. You can also set the variable in your shell before launching Claude Code (shell wins).
Photos: Inbound photos get pulled to ~/.claude/channels/telegram/inbox/ automatically. The assistant can read them straight from there. Send as "File" (long-press in Telegram) if you need the uncompressed original.
File attachments: The reply tool can send files back. Images render inline, other types ship as documents. Max 50MB per file.
Typing indicator: Telegram shows "botname is typing..." while Claude is working. Unexpectedly handy for telling whether Claude is still thinking or has stalled on a permission prompt.
No message history: The Telegram Bot API does not expose history or search. Messages only arrive in real time. Anything sent while the session was down is gone.
Discord takes a few more steps because an application has to exist in the Developer Portal first, and the bot has to be invited to a server. Budget around 10 minutes.
Still in the Bot settings, scroll to Privileged Gateway Intents and enable Message Content Intent. Skip this and the bot receives messages with empty content.
Message history: Discord's fetch_messages tool can pull recent channel history (up to 100 messages per call, oldest-first). That is the real differentiator versus Telegram. If the session restarts, Claude can catch up on what it missed.
Attachment handling: Attachments are not pre-downloaded. The assistant sees metadata (name, type, size) and calls download_attachment when it actually needs the file.
Guild channels: Discord supports server/guild channels on top of DMs. That opens team collaboration where multiple people talk to Claude through one shared channel.
Custom emoji reactions: The react tool supports both Unicode emoji and custom server emoji in <:name:id> format.
Threading: The reply tool accepts reply_to for native Discord threading. That keeps conversations organized when multiple people are pinging the same channel.
iMessage is the newest of the three, added after waves of community demand after the first Telegram and Discord release. The shape is very different: no bot token, no external service, no pairing code. The plugin reads the Messages database on your Mac directly and sends replies via AppleScript.
Important: iMessage requires macOS. The plugin reads ~/Library/Messages/chat.db and steers Messages.app through AppleScript. There is no Windows or Linux path.
The plugin has to read the Messages database. Open System Settings > Privacy & Security > Full Disk Access and switch it on for your terminal app (Terminal.app, iTerm2, Warp, whichever one runs Claude Code for you).
Fastest sanity check: text yourself from any Apple device. Self-chat (messaging your own number) skips the access control entirely and works with zero extra setup.
First time Claude sends a reply, macOS pops an Automation prompt asking whether your terminal app may control Messages.app. Click OK. One-time approval.
macOS native: No external service, no bot token, no developer portal. The plugin rides on your existing Messages setup.
Self-chat works instantly: Texting yourself is the zero-config path. No pairing code, no allowlist entry.
Identity detection from the Messages database: Instead of the pairing flow Telegram and Discord use, the iMessage plugin identifies senders by reading the Messages database. The handle stored in chat.db is how it knows who wrote what.
Add senders by handle: Phone numbers (+15551234567) and Apple IDs both work with /imessage:access allow.
AppleScript-based replies: Outbound messages go through Messages.app via AppleScript, so replies show up as normal iMessages from your account.
Kick off a heavy build, a big test run, or a multi-agent workflow at your desk. Walk away. When Claude finishes (or hits a wall), the notification pops on your phone through Telegram, Discord, or iMessage. Send the next instruction without touching a laptop.
Reviewing a PR on your phone and spotting a typo in a config file is the classic example. No need to save it for later. Message your bot: "Change the Redis port in docker-compose.yml from 6380 to 6379 and commit it." Claude makes the edit, commits, and confirms.
Spin up a Discord guild channel where your whole team can talk to one shared Claude Code session. Great for pair-debugging: one person describes the issue and Claude digs in with full access to the codebase. Everyone in the channel watches it happen.
Channels plus scheduled tasks forms a strong async pattern. Schedule Claude to run the test suite every hour, pipe results through Telegram, and pause for your call if something breaks. You check in when it fits your day.
Not every Claude Code setup is about code. If you have wired Claude up as a productivity helper with MCP connections to your calendar, email, CRM, or project management tools, Channels turns it into something much closer to a real EA. Ask "what's my priority list for today?" from Telegram while grabbing coffee. Have it draft a follow-up email to a client between meetings. Tell it to reshuffle your afternoon based on an urgent Slack thread. The mental model shifts from "sit at the terminal, type a command" to "text the assistant whenever something comes up."
Pipe CI results into your session through a channel. When a build fails, Claude can read the logs, spot the cause, and either patch it right then or message you with a diagnosis. This goes past passive notifications because Claude already holds your full project context.
The plugin surface is not capped at the three official channels. Anthropic publishes a Channels reference for building custom ones. Any MCP server that speaks the channel protocol can push events into Claude Code.
During the research preview, --channels only accepts plugins from an Anthropic-maintained allowlist. To run a channel you are building yourself, use the --dangerously-load-development-channels flag. That lets you iterate on custom integrations without waiting for official blessing.
The fakechat plugin ships as a development demo. It runs a chat UI on localhost with no external dependencies, so you can test the full channel flow before wiring up a real platform:
This is a research preview. Rough edges come with the territory:
The session has to stay up: Close the terminal or stop the claude process and the channel goes dark. Messages sent while the session was down are lost (Telegram) or queued until the bot is back (Discord, via fetch_messages).
Permission prompts block from afar: When Claude needs permission approval, it waits until you approve at the terminal. The --dangerously-skip-permissions flag works but carries the obvious risks.
Allowlisted plugins only: For the preview, only plugins from claude-plugins-official pass --channels. Custom channels need the development flag.
No persistent background mode: A terminal session still has to be open. Pairing this with tmux, screen, or a background process is the current workaround.
Platform-specific gaps: Telegram has no message history API. Discord takes more setup steps. iMessage only runs on macOS and needs Full Disk Access. Every platform brings its own constraints.
Anthropic has described this as a feature "we'll be expanding more on." The plugin shape points at future platforms (Slack and WhatsApp have both come up) and the channel reference docs confirm that community-built channels are part of the plan.
Channels is a plugin-based feature that connects Claude Code sessions to messaging apps like Telegram, Discord, and iMessage. You message the app, Claude runs the request against your local dev environment, and replies come back in the same chat. Code and tools never leave your machine.
You need a claude.ai Pro or Max subscription. API key auth is not supported. The Telegram, Discord, and iMessage plugins themselves are free and open source.
Remote Control puts the full claude.ai web interface on top of your local session. Channels does the same thing but with messaging apps (Telegram, Discord, iMessage) as the surface. Both sessions stay local. Remote Control is one command to stand up. Channels asks for more plugin setup in return for native notifications and a lot more room to hack.
Yes, via three different paths. Remote Control plugs into the Claude mobile app. Channels plugs into Telegram, Discord, or iMessage. Web sessions at claude.ai/code run fully in the cloud. All three reach Claude Code from any device with a browser or the right app.
Telegram, Discord, and iMessage are the three official platforms as of March 2026. The plugin shape was built for expansion, and the community has already floated Slack and WhatsApp. You can also build your own channel using the Channels reference.
If you are already comfortable with MCP servers and Claude Code plugins, this setup will feel like home. Pick the platform you live in most:
Telegram for the fastest setup (5 minutes, no server invite required)
Discord for message history, guild channels, or team collaboration
iMessage if you are on macOS and want zero-config native messaging with no outside service
Fakechat for testing the flow locally before committing to a real platform
Start with DM-only access and the allowlist policy. Once that feels solid, branch out into guild channels on Discord or group chats on Telegram for the broader use cases.
Channels mark a shift in how developers work with their coding environment. Instead of sitting at the terminal, you message it. Instead of waiting on a build, you get pinged. Instead of bouncing between phone and workstation, you work from wherever you happen to be.
The "code from your phone" promise has been floating around for years. Between Channels, Remote Control, and scheduled tasks, Claude Code is quietly turning it into a real thing, one interface at a time.