Skip to main content

Claude Code <-> Telegram bridge

Project description

claude-tg

Claude Code CLI <-> Telegram bridge. Chat with Claude Code from your phone — full agentic experience through Telegram with token-level streaming.

Install

pip install claude-tg

Quick Start

export TELEGRAM_BOT_TOKEN="your_bot_token"   # from @BotFather
export TELEGRAM_CHAT_ID="your_chat_id"       # your Telegram user ID
export CLAUDE_WORK_DIR="/path/to/project"    # optional, defaults to cwd

claude-tg

On first run, the built-in MCP server for file sending is auto-registered in Claude Code.

Commands

Command Description
/clear Reset session (new context)
/compact Compact conversation context
/cancel Stop current task
/cost Show session cost
/model <name> Switch model (no args = show current)
/restart Full process restart (picks up CLI/config changes)

Inline Cancel button is shown on every message during processing.

Media

  • Photos — sent to Claude as file references, Claude can read/analyze them
  • Documents — same for files (PDF, code, etc.)

Voice Messages

Voice messages are transcribed via Groq Whisper API and sent to Claude as text.

# Install with voice support
pip install 'claude-tg[voice]'

# Set your Groq API key (free at console.groq.com)
export GROQ_API_KEY="your_groq_api_key"

Without GROQ_API_KEY, the bot replies with a setup hint when a voice message is received.

Triggers (External Prompts)

Enable a localhost HTTP server so cron jobs, scripts, or other processes can inject prompts into your chat:

export CLAUDE_TG_TRIGGER_PORT=9357   # any free port

Then trigger from anywhere:

curl -s -d "Run the /morning skill" localhost:9357
# → ok
  • The response appears as a normal chat message — you can reply and continue the conversation
  • If Claude is busy, the prompt queues and processes after the current task
  • Localhost only — not exposed to the network

File Sending (MCP)

Claude can send files back to you via the built-in MCP server:

  • send_telegram_file(file_path, caption?, temp_file?) — sends a file to your Telegram
  • temp_file=True (default) — file is deleted after sending (for generated/temporary files)
  • temp_file=False — file is preserved (for existing project files)

The MCP server (claude-tg-mcp) is auto-registered on launch. No manual setup needed.

Running as Root (VPS / Servers)

Claude Code CLI blocks --dangerously-skip-permissions for root. claude-tg handles this automatically:

  • Non-root — uses --dangerously-skip-permissions as usual
  • Root — uses --allowedTools with dynamically discovered MCP servers (reads ~/.claude.json and .mcp.json)

All registered MCP servers and built-in tools are allowed automatically. No hardcoded server names.

Configuration

Env var Default Description
TELEGRAM_BOT_TOKEN required Bot token from @BotFather
TELEGRAM_CHAT_ID required Your Telegram user ID
CLAUDE_WORK_DIR cwd Working directory for Claude
CLAUDE_TG_VERBOSE 0 Show tool results (1 to enable)
CLAUDE_TG_MODEL Override Claude model
CLAUDE_TG_MAX_BUDGET Max budget in USD
CLAUDE_TG_SESSION_TIMEOUT 3600 Auto-reset after N seconds of inactivity
CLAUDE_TG_UPDATE_INTERVAL 2.0 Telegram message update interval (seconds)
GROQ_API_KEY Groq API key for voice transcription
CLAUDE_TG_TRIGGER_PORT Localhost port for external triggers (e.g. 9357)
CLAUDE_TG_MCP_EXCLUDE Comma-separated MCP servers to exclude (e.g. telegram,garmin)
CLAUDE_TG_MCP_CONFIG Explicit MCP config JSON path (overrides auto-generation)

MCP Isolation

When running claude-tg alongside an interactive claude CLI session in the same directory, both processes start duplicate MCP servers from the same .mcp.json. Servers with exclusive resources (e.g. Telegram's Telethon session, Garmin tokens) will deadlock.

Automatic isolation — just list the conflicting servers to exclude:

export CLAUDE_TG_MCP_EXCLUDE="telegram"

# Or via CLI
claude-tg --mcp-exclude telegram,garmin

claude-tg reads your .mcp.json at startup, removes the excluded servers, and passes an auto-generated config via --strict-mcp-config. New servers added to .mcp.json are automatically available — no manual sync needed.

For full control, you can also provide an explicit config file via CLAUDE_TG_MCP_CONFIG (takes precedence over --mcp-exclude).

Systemd (VPS deployment)

# Install
uv tool install 'claude-tg[voice]'

# Create service
cat > /etc/systemd/system/claude-tg.service << 'EOF'
[Unit]
Description=Claude TG
After=network-online.target

[Service]
Type=simple
EnvironmentFile=/path/to/.env
Environment=PATH=/root/.local/bin:/usr/local/bin:/usr/bin
ExecStart=/root/.local/bin/claude-tg --work-dir /root
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

systemctl enable --now claude-tg

Features

  • Token-level streaming with adaptive rate limiting
  • Automatic message chaining for long outputs (splits at ~3800 chars)
  • Photo, file, and voice message support
  • Built-in MCP server for sending files back to the user
  • Inline cancel button on every message
  • Message queuing — send messages while Claude is working, they process after
  • Session auto-reset after inactivity
  • Compact tool call display with emoji icons
  • Root-compatible — auto-discovers and allows all MCP tools
  • Auto-registration of MCP server in Claude Code
  • In-place restart via /restart (no need to touch the server)
  • External triggers — cron/scripts can inject prompts via localhost HTTP

Requirements

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

claude_tg-0.4.2.tar.gz (19.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

claude_tg-0.4.2-py3-none-any.whl (18.1 kB view details)

Uploaded Python 3

File details

Details for the file claude_tg-0.4.2.tar.gz.

File metadata

  • Download URL: claude_tg-0.4.2.tar.gz
  • Upload date:
  • Size: 19.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for claude_tg-0.4.2.tar.gz
Algorithm Hash digest
SHA256 65942b2071357b4e236fdaa5a4f96f85d140b4334053e1c5fa54e30d2724f9e0
MD5 6e08a3932b0c579cd7e5a3c20ae9880b
BLAKE2b-256 5ed79fa26b2867721d67332680af4fef88cba0dd31ca9728d0f0ad1bab668183

See more details on using hashes here.

Provenance

The following attestation bundles were made for claude_tg-0.4.2.tar.gz:

Publisher: publish.yml on MerkulovDaniil/claude-tg

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file claude_tg-0.4.2-py3-none-any.whl.

File metadata

  • Download URL: claude_tg-0.4.2-py3-none-any.whl
  • Upload date:
  • Size: 18.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for claude_tg-0.4.2-py3-none-any.whl
Algorithm Hash digest
SHA256 f3e30fec9fe600982f284ce6844f8e64b7c68f4c3bcb5fc1abd3b84b135079f9
MD5 fbd3f70b1c17b04ee019f7d581b24209
BLAKE2b-256 c0794739aaecd95a88962e42d0ebe462af38bd0257311f7488146ba9d07ff36d

See more details on using hashes here.

Provenance

The following attestation bundles were made for claude_tg-0.4.2-py3-none-any.whl:

Publisher: publish.yml on MerkulovDaniil/claude-tg

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page