
Claude Code Channels
- 2 installs
- 3 repo stars
- Updated August 5, 2026
- broomva/skills
claude-code-channels is a Claude skill that sets up Telegram and Discord messaging bots to relay messages into a running Claude Code session via MCP plugins, including access control and troubleshooting.
About
claude-code-channels sets up messaging channels that push messages from Telegram and Discord into a running Claude Code session through MCP server plugins. It walks a 6-step universal workflow: create a bot, install the plugin, configure the token, launch the session with --channels, pair the account, and lock down access. A developer uses it to control or receive Claude Code output from a chat app, and to troubleshoot MCP reconnects and token issues. It matters because it lets a coding-agent session be driven remotely from a phone or a Discord server.
- Sets up Telegram and Discord messaging channels that push messages into a running Claude Code session via MCP plugins
- Covers bot creation, plugin install, token config, and access control (pairing, allowlists, guild channels)
- Includes troubleshooting for MCP server startup failures and a tmux background-service recipe
Claude Code Channels by the numbers
- 2 all-time installs (skills.sh)
- Ranked #1,839 of 2,715 Automation & Workflows skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
claude-code-channels capabilities & compatibility
- Capabilities
- telegram bot setup · discord bot setup · mcp plugin config · access control
- Works with
- slack
- Use cases
- orchestration
What claude-code-channels says it does
Claude Code Channels pushes messages from external platforms (Telegram, Discord) into a running Claude Code session via MCP server plugins.
Known race condition — server may fail on cold start but reconnect fine.
Regardless of platform, setup follows 6 steps:
npx skills add https://github.com/broomva/skills --skill claude-code-channelsAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 2 |
|---|---|
| repo stars | ★ 3 |
| Last updated | August 5, 2026 |
| Repository | broomva/skills ↗ |
What it does
Connect Claude Code to Telegram or Discord so a session can be driven and monitored from a chat app.
Who is it for?
Developers who want to drive or monitor a Claude Code session from Telegram or Discord
Skip if: API-key mode; it requires a claude.ai account and Claude Code v2.1.80+
When should I use this skill?
The user asks to connect Claude Code to Telegram or Discord, configure a messaging bot, set up channel access, or troubleshoot an MCP server failure.
What you get
A running Claude Code session receives and responds to messages from paired, allowlisted Telegram or Discord users.
- configured telegram or discord bot
- access-control policy
- background tmux session
By the numbers
- 6-step universal setup workflow
- 3 access policy modes: pairing/allowlist/disabled
Files
Claude Code Channels Setup
Claude Code Channels pushes messages from external platforms (Telegram, Discord) into a running Claude Code session via MCP server plugins.
Prerequisites
- Claude Code v2.1.80+
- Bun runtime
- A claude.ai account (not API key mode)
Platform Selection
Ask which platform(s) the user wants, then follow the relevant reference:
- Telegram: See references/telegram.md
- Discord: See references/discord.md
Both can run simultaneously:
claude --channels plugin:telegram@claude-plugins-official,plugin:discord@claude-plugins-officialUniversal Workflow
Regardless of platform, setup follows 6 steps:
1. Create bot on the platform's developer portal 2. Install plugin: /plugin install <platform>@claude-plugins-official 3. Configure token: /<platform>:configure <token> 4. Launch session: claude --channels plugin:<platform>@claude-plugins-official 5. Pair account: DM the bot, get a code, run /<platform>:access pair <code> 6. Lock down: /<platform>:access policy allowlist
Troubleshooting
MCP Server Shows "failed" on Startup
Known race condition — server may fail on cold start but reconnect fine.
Fix: Run /mcp, navigate to the failed server, select Reconnect.
Persistent failures — verify the bot token:
# Telegram
TOKEN=$(grep TELEGRAM_BOT_TOKEN ~/.claude/channels/telegram/.env | cut -d= -f2)
curl -s "https://api.telegram.org/bot$TOKEN/getMe"
# Discord
TOKEN=$(grep DISCORD_BOT_TOKEN ~/.claude/channels/discord/.env | cut -d= -f2)
curl -s -H "Authorization: Bot $TOKEN" https://discord.com/api/v10/users/@meIf unauthorized/401, regenerate the token and update ~/.claude/channels/<platform>/.env.
Plugin Not Found
Add the official marketplace first:
/plugin marketplace add anthropics/claude-plugins-officialBot Not Responding
1. Session must be running with --channels flag 2. /mcp must show the server as "connected" 3. Telegram: verify token with BotFather 4. Discord: enable Message Content Intent in Developer Portal → Bot → Privileged Gateway Intents
Dependency Issues
Pre-install manually:
cd ~/.claude/plugins/cache/claude-plugins-official/<platform>/<version>
bun install --no-summaryRunning as Background Service (tmux)
# Start
tmux new-session -d -s claude-<platform> \
'claude --dangerously-skip-permissions --channels plugin:<platform>@claude-plugins-official'
# Attach / Detach
tmux attach -t claude-<platform> # Ctrl+b then d to detach
# After startup, if MCP failed: /mcp → select server → ReconnectAccess Control
Both platforms share the same model. Replace <platform> with telegram or discord.
| Command | Effect |
|---|---|
/<platform>:access | Show current state |
/<platform>:access pair <code> | Approve pairing |
/<platform>:access deny <code> | Reject pairing |
/<platform>:access allow <id> | Add user by ID |
/<platform>:access remove <id> | Remove user |
/<platform>:access policy <mode> | pairing / allowlist / disabled |
/<platform>:access group add <id> | Enable group/channel |
/<platform>:access group add <id> --no-mention | Enable without requiring @mention |
/<platform>:access group rm <id> | Disable group/channel |
/<platform>:access set <key> <value> | Configure delivery settings |
State Files
~/.claude/channels/<platform>/
├── .env # Bot token (mode 0o600)
├── access.json # Policy, allowlist, groups, pending
├── approved/ # Approved user ID → chat ID mapping
└── inbox/ # Downloaded attachmentsDiscord Channel Setup
Step 1: Create a Discord Bot
1. Go to Discord Developer Portal 2. Click New Application, name it 3. Go to Bot in the sidebar, create a username 4. Click Reset Token, copy it (shown only once) 5. Critical: Scroll to Privileged Gateway Intents, enable Message Content Intent — without this, messages arrive with empty content and the bot silently ignores them
Step 2: Invite the Bot to a Server
Go to OAuth2 → URL Generator:
- Select
botscope - Enable permissions: View Channels, Send Messages, Send Messages in Threads, Read Message History, Attach Files, Add Reactions
- For channel/thread creation, also enable: Manage Channels, Create Public Threads, Create Private Threads, Manage Threads
Generate the URL with the desired permissions. Replace CLIENT_ID with the application ID:
https://discord.com/oauth2/authorize?client_id=CLIENT_ID&permissions=395405544528&scope=botThe permission value 395405544528 includes all recommended permissions.
Step 3: Install the Plugin
/plugin install discord@claude-plugins-officialIf not found:
/plugin marketplace add anthropics/claude-plugins-official
/plugin install discord@claude-plugins-officialStep 4: Configure the Token
/discord:configure <token>This saves DISCORD_BOT_TOKEN=... to ~/.claude/channels/discord/.env.
Manual alternative:
mkdir -p ~/.claude/channels/discord
printf 'DISCORD_BOT_TOKEN=<token>\n' > ~/.claude/channels/discord/.env
chmod 600 ~/.claude/channels/discord/.envStep 5: Launch with Channel Flag
claude --channels plugin:discord@claude-plugins-officialImportant: The Discord MCP server may show as "failed" on initial startup (race condition). After launch, run /mcp, navigate to plugin:discord:discord, and select Reconnect. It connects successfully on retry.
Step 6: Pair Your Account
1. DM the bot on Discord 2. Bot replies with a 6-character pairing code 3. In Claude Code: /discord:access pair <code>
Step 7: Lock Down
/discord:access policy allowlistDiscord-Specific Notes
Verify Token
TOKEN=$(grep DISCORD_BOT_TOKEN ~/.claude/channels/discord/.env | cut -d= -f2)
curl -s -H "Authorization: Bot $TOKEN" https://discord.com/api/v10/users/@me | python3 -m json.toolGuild Channels
Discord guild channels are opt-in by channel ID (not guild ID). Enable Developer Mode (User Settings → Advanced) to copy IDs via right-click.
/discord:access group add <channel_id> # Responds to @mentions only
/discord:access group add <channel_id> --no-mention # Responds to all messages
/discord:access group add <channel_id> --allow id1,id2 # Restrict to specific users
/discord:access group rm <channel_id> # DisableThreads inherit their parent channel's opt-in — no separate entry needed.
Listing Server Channels via API
To programmatically list channels and their IDs:
TOKEN=$(grep DISCORD_BOT_TOKEN ~/.claude/channels/discord/.env | cut -d= -f2)
# List guilds
curl -s -H "Authorization: Bot $TOKEN" https://discord.com/api/v10/users/@me/guilds
# List channels in a guild (type 0 = text, 2 = voice, 4 = category)
curl -s -H "Authorization: Bot $TOKEN" https://discord.com/api/v10/guilds/GUILD_ID/channelsCreating Channels and Threads via API
The bot can create channels and threads if it has Manage Channels permission:
TOKEN=$(grep DISCORD_BOT_TOKEN ~/.claude/channels/discord/.env | cut -d= -f2)
# Create a text channel
curl -s -X POST "https://discord.com/api/v10/guilds/GUILD_ID/channels" \
-H "Authorization: Bot $TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "channel-name", "type": 0, "topic": "Channel description"}'
# Create a thread (type 11 = public thread)
curl -s -X POST "https://discord.com/api/v10/channels/CHANNEL_ID/threads" \
-H "Authorization: Bot $TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "thread-name", "type": 11, "auto_archive_duration": 1440}'
# Send a message in a channel or thread
curl -s -X POST "https://discord.com/api/v10/channels/CHANNEL_OR_THREAD_ID/messages" \
-H "Authorization: Bot $TOKEN" \
-H "Content-Type: application/json" \
-d '{"content": "Hello from the bot!"}'After creating a channel, add it to access.json for the bot to respond there. Threads inherit from their parent channel automatically.
Tools Available
| Tool | Purpose |
|---|---|
reply | Send to channel, auto-chunks at 2000 chars, supports file attachments (max 10, 25MB each) |
react | Add emoji reaction (Unicode or custom <:name:id>) |
edit_message | Edit bot's own messages (no push notification) |
fetch_messages | Pull recent history (max 100, oldest-first) |
download_attachment | Download message attachments to inbox |
Delivery Settings
/discord:access set ackReaction 🔨 # Seen acknowledgment (empty string disables)
/discord:access set replyToMode first # Thread first chunk only (first/all/off)
/discord:access set textChunkLimit 2000 # Discord hard limit is 2000
/discord:access set chunkMode newline # Split at paragraph boundaries
/discord:access set mentionPatterns '["^hey claude\\b"]'Multiple Bot Instances
To run multiple bots with different tokens and separate allowlists, set DISCORD_STATE_DIR to a different directory per instance:
DISCORD_STATE_DIR=~/.claude/channels/discord-bot2 claude --channels plugin:discord@claude-plugins-officialRecommended Discord Permission Value
395405544528 includes:
- View Channels, Send Messages, Embed Links, Read Message History
- Attach Files, Add Reactions, Send Messages in Threads
- Create Public/Private Threads, Manage Threads, Manage Channels
Telegram Channel Setup
Step 1: Create a Telegram Bot
1. Open Telegram, search for @BotFather 2. Send /newbot 3. Choose a display name and username (must end in bot) 4. BotFather replies with a bot token like 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11 5. Copy the token
Step 2: Install the Plugin
/plugin install telegram@claude-plugins-officialIf not found:
/plugin marketplace add anthropics/claude-plugins-official
/plugin install telegram@claude-plugins-officialStep 3: Configure the Token
/telegram:configure <token>This saves TELEGRAM_BOT_TOKEN=... to ~/.claude/channels/telegram/.env.
Manual alternative:
mkdir -p ~/.claude/channels/telegram
printf 'TELEGRAM_BOT_TOKEN=<token>\n' > ~/.claude/channels/telegram/.env
chmod 600 ~/.claude/channels/telegram/.envStep 4: Launch with Channel Flag
claude --channels plugin:telegram@claude-plugins-officialStep 5: Pair Your Account
1. Open Telegram and DM the bot 2. Bot replies with a 6-character pairing code 3. In Claude Code: /telegram:access pair <code>
Step 6: Lock Down
/telegram:access policy allowlistTelegram-Specific Notes
Verify Token
TOKEN=$(grep TELEGRAM_BOT_TOKEN ~/.claude/channels/telegram/.env | cut -d= -f2)
curl -s "https://api.telegram.org/bot$TOKEN/getMe" | python3 -m json.toolGroup Chats
Enable a group by chat ID (negative number for groups):
/telegram:access group add -1001654782309
/telegram:access group add -1001654782309 --no-mentionTools Available
| Tool | Purpose |
|---|---|
reply | Send message to chat, auto-chunks long text |
react | Add emoji reaction (Telegram fixed whitelist only) |
edit_message | Edit bot's own messages |
download_attachment | Fetch photo/file to inbox |
Delivery Settings
/telegram:access set ackReaction 👀 # Seen acknowledgment
/telegram:access set replyToMode first # Thread first chunk only
/telegram:access set textChunkLimit 4096 # Max chars per message
/telegram:access set chunkMode newline # Split at paragraph boundaries
/telegram:access set mentionPatterns '["^hey claude\\b"]'Limitations
- Telegram Bot API has no message history or search
- Photos are auto-downloaded to
~/.claude/channels/telegram/inbox/ - Bot can only see messages in groups where it's a member and has message access
Related skills
FAQ
Why does the MCP server show 'failed' on startup?
It is a known race condition; the server may fail on cold start but reconnect fine. Run /mcp, select the failed server, and choose Reconnect.
What are the prerequisites?
Claude Code v2.1.80+, the Bun runtime, and a claude.ai account (not API key mode).