Deploy OpenCode AI with a Telegram Bot interface using Docker.
git clone https://github.com/asmal95/opencode-docker.git
cd opencode-docker
cp .env.example .env
nano .envSet your credentials:
TELEGRAM_BOT_TOKEN— Telegram bot token from @BotFatherOPENAI_COMPATIBLE_BASE_URL— Your AI provider endpoint (see below)OPENAI_COMPATIBLE_API_KEY— Your API keyOPENCODE_SERVER_PASSWORD— Server authentication passwordMCP_SERVER_TOKEN— MCP server authentication token (required for cron features)
docker compose -f docker-compose.deploy.yaml up -ddocker compose -f docker-compose.deploy.yaml logs -fYour Telegram bot should respond to messages.
asmal95/opencode-platform:latest— OpenCode AI serverasmal95/telegram-bot:latest— Telegram bot sidecar
- Docker 20.10+
- Docker Compose 2.0+
- Telegram bot token
- AI API key (any OpenAI-compatible provider)
- Server password (
OPENCODE_SERVER_PASSWORD)
The bot works with any OpenAI-compatible API. Examples:
| Provider | BASE_URL |
|---|---|
| OpenRouter | https://api.openrouter.ai/v1 |
| Ollama (local) | http://host.docker.internal:11434/v1 |
| llama.cpp | http://YOUR_IP:8080/v1 |
| LM Studio | http://localhost:1234/v1 |
OpenCode server uses HTTP Basic Auth:
OPENCODE_SERVER_PASSWORD=your-strong-password- Username:
opencode(default) - The Telegram bot automatically includes the auth header
- Protects the API from unauthorized access
The Telegram Bot includes an MCP (Model Context Protocol) server for scheduling recurring tasks. The OpenCode agent can use MCP tools to create reminders, scheduled reports, and periodic checks.
- cron_add — Schedule a recurring task
- cron_list — List all scheduled jobs
- cron_delete — Delete a scheduled job
- cron_run — Manually trigger a job immediately
Additional variables for MCP server:
MCP_SERVER_PORT— Port for MCP server (default:8765)MCP_SERVER_TOKEN— Authentication token for MCP requests (required)MCP_SERVER_DB— Path to SQLite database for cron storage (default:/opt/bot/cron.db)
Ask the bot to schedule a task:
"Remind me every day at 9 AM to check the server status"
The agent will create a cron job that automatically executes and delivers results to your chat.
| File | Use case |
|---|---|
docker-compose.deploy.yaml |
DockerHub images (recommended) |
docker-compose.yaml |
Build from source (with bot) |
# Logs
docker compose -f docker-compose.deploy.yaml logs -f
# Restart
docker compose -f docker-compose.deploy.yaml restart
# Stop
docker compose -f docker-compose.deploy.yaml down
# Update
docker compose -f docker-compose.deploy.yaml pull
docker compose -f docker-compose.deploy.yaml up -dbash deploy.shTelegram User --> Telegram Bot (aiogram) --> OpenCode (port 4096, Basic Auth) --> AI Provider
- Telegram Bot: Receives messages from Telegram, forwards to OpenCode
- OpenCode: Processes requests, manages sessions, calls AI providers
- AI Provider: Any OpenAI-compatible API (Ollama, OpenRouter, llama.cpp, etc.)
- Non-root containers
- Isolated Docker network
read_onlyfilesystemno-new-privilegesenabled- Phone-home domains blocked
- HTTP Basic Auth on OpenCode server
- API keys in environment variables only
MIT