Claude Code Telegram Bridge
Claude Code ↔ Telegram Bridge
Claude Code用のセッションピン型Telegramブリッジです。ボットはターミナルセッションと同じだけ生き続けます——起動して、使って、閉じる。常駐デーモンは不要です。
これは公式のClaude Code Telegramチャンネルプラグインのフォークで、セキュリティパッチと、tmux + Tailscaleを使ったポータブルなデプロイ構成を備えています。
仕組み
Phone (Telegram)
│
▼
┌─────────────────────┐
│ server.ts │ Standalone MCP HTTP server
│ Polls Telegram │ Runs as a systemd user unit
│ Queues messages │ Starts/stops with the pin
└──────────┬──────────┘
│ SSE (/events)
▼
┌─────────────────────┐
│ proxy.ts │ Stdio MCP proxy
│ Bridges to Claude │ Spawned by Claude Code
│ Owns the pin lock │ One session at a time
└──────────┬──────────┘
│ stdio
▼
┌─────────────────────┐
│ Claude Code │ Your session
│ Reads messages │ Calls reply/react/edit
│ Full tool access │ Permission buttons in TG
└─────────────────────┘ピン設計: 同時に1つのClaudeセッションだけがボットを所有できます。tgpinはロックファイルを取得し、ポーラーを起動し、セッション終了時に両方を解放します。これにより、2つのポーラーが同じTelegramトークンをめぐって競合したときに発生する409 Conflictを防ぎます。
セキュリティパッチ
上流プラグインには情報開示の問題があります:/start、/help、/statusコマンドがアクセスゲートの実行前に登録されます。dmPolicy: "allowlist"の下では、ボットを見つけた見知らぬ人が、Claude Codeブリッジであることを説明する親切な応答を受け取ります——ボットが存在し、何をするのかが漏洩します。
パッチはcommandMuted()ガードを追加します:allowlistまたはdisabledモードでは、allowlistに登録されていないユーザーからのコマンドは静かに破棄されます。ペアリングモードでは、通常どおり動作します(/startが新しいユーザーがペアリング方法を学ぶ手段だからです)。
これは+15行、削除なし、git diffで確認できます。
セットアップ
前提条件
Claude Code CLIがインストールされていること
Bunランタイム
@BotFatherから取得したTelegramボットトークン
1. サーバーをインストール
mkdir -p ~/.claude/telegram-server
cp server.ts proxy.ts package.json ~/.claude/telegram-server/
cd ~/.claude/telegram-server && bun install2. ボットトークンを設定
mkdir -p ~/.claude/channels/telegram
echo "TELEGRAM_BOT_TOKEN=YOUR_TOKEN_HERE" > ~/.claude/channels/telegram/.env
chmod 600 ~/.claude/channels/telegram/.env3. systemdユーザーユニットをインストール
mkdir -p ~/.config/systemd/user
cp telegram-mcp.service ~/.config/systemd/user/
systemctl --user daemon-reloadサービスは有効化しないでください — tgpinが自動的に開始・停止します。有効化するとボットが不死身になり、ピン設計と競合します。
4. ランチャーをインストール
cp tgpin ~/bin/tgpin
chmod +x ~/bin/tgpin
# Optional: alias in your .bashrc
echo 'alias tg="~/bin/tgpin"' >> ~/.bashrc5. アクセスをロック(推奨)
デフォルトでは、ボットはペアリングモードです——DMを送ってきた誰にでもペアリングコードが渡されます。自分のTelegramユーザーIDにロックするには:
cat > ~/.claude/channels/telegram/access.json << 'EOF'
{
"dmPolicy": "allowlist",
"allowFrom": ["YOUR_TELEGRAM_USER_ID"],
"groups": {},
"pending": {}
}
EOFユーザーIDは、Telegramで@userinfobotにメッセージを送信すると確認できます。
使い方
セッションを開始
tg # start Claude with Telegram bridge
tg --continue # resume the last conversationポータブルアクセス(tmux + Tailscale + Termius)
本当の力は、スマホからSSHでこれを実行することにあります。スタックは以下のとおり:
Tailscale — メッシュVPN。スマホとマシンがプライベートネットワーク上で互いを認識します。ポートフォワーディングもパブリックIPも不要。個人利用は無料です。
Termius — Android/iOS用SSHクライアント。キー認証、永続セッション、Tailscaleアドレスに対応。無料ティアで十分です。
tmux — ターミナルマルチプレクサ。SSH切断後もセッションは存続します。
# On your machine (once):
tmux new -s claude
tg
# Detach: Ctrl+B, then D
# From your phone (Termius → Tailscale IP):
ssh your-machine
tmux attach -t claudetmuxセッションが存在する限り、ボットは稼働し続けます。SSHの切断では死にません。tmuxセッションを閉じるとボットも終了します——これが設計です。
ワークフロー: バスに乗っているとき、スマホでTermiusを開き、Tailscale経由でマシンにSSH接続し、tmuxセッションにアタッチ——ClaudeがTelegram上で稼働します。Termiusを閉じてもtmuxセッションは持続し、ボットは動き続けます。後でどこからでも再開できます。
権限の処理
ツール呼び出しはTelegramの承認/拒否ボタンとして表示されます。セッションは--permission-mode defaultで実行されるため、破壊的な操作(ファイル書き込み、シェルコマンド)は実行前に明示的なタップが必要です。
アーキテクチャの決定
なぜセッションピン型なのか?
常駐ボットは、リソースを消費し、古いコンテキストに基づいて行動する可能性のある常駐Claudeセッションを意味します。ピン設計では、必要なときにボットが稼働し、不要なときは停止します。これは制限ではなく、機能です。
なぜ2つのファイル(server.ts + proxy.ts)なのか?
サーバーはsystemdユニットとして実行され、Telegramのポーリング接続を保持します。プロキシはClaudeによってstdio MCPトランスポートとして起動されます。分離することで:
サーバーはClaudeから独立して再起動できる
プロキシは実行中のサーバーに再接続できる
Claudeセッションの再起動中にポーリング状態が失われない
なぜWebhookではないのか?
WebhookにはパブリックURL、TLS、ポートフォワーディングが必要です。ロングポーリングはどこでも動作します——NATの内側、ラップトップ、VPS。マシン自体以外のインフラはゼロです。
トークンにつき1つのポーラー
TelegramのBot APIは、2つのプロセスが同じトークンをポーリングすると409 Conflictを返します。ロックファイル(pinned.lock)がポーラーを厳密に1つに制限します。セッションがクリーンアップなしでクラッシュした場合、次のtgpinが古いPIDを検出してロックを回収します。
ファイル
ファイル | 目的 |
| スタンドアロンMCP HTTPサーバー — Telegramをポーリングし、メッセージをキューし、ツールを提供 |
| Stdio MCPプロキシ — サーバーとClaudeを橋渡しし、ピンのライフサイクルを管理 |
| 依存関係: grammy、MCP SDK、express、zod |
| ランチャースクリプト — ピンを取得し、チャンネルをロードしたClaudeを起動 |
| サーバー用のsystemdユーザーユニット |
ライセンス
Apache-2.0(上流のClaude Code Telegramプラグインと同じ)。
連絡先
GitHub: Swigler
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Human-in-the-loop for AI coding agents — ask questions, get approvals via Slack.
Build and deploy websites, Telegram and Discord bots from chat via the DreamAgent platform.
Trade Robinhood through natural language in Claude Code.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Swigler/claude-telegram-bridge'
If you have feedback or need assistance with the MCP directory API, please join our Discord server