Releases: louisho5/picobot
Release list
v0.2.0
What's Changed
- Feature: add MCP server support (stdio + HTTP transports) (thanks to @Fybre)
New Features
Picobot now supports MCP (Model Context Protocol) servers as agent tools! 🎉
Connect any MCP-compliant server and its tools are automatically registered in the agent at startup — no code changes required.
One-time setup
Add an entry to ~/.picobot/config.json under mcpServers:
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"]
}
}
}MCP Tools and Transports
Supported Transports
1. Stdio - Spawns a local process and communicates over stdin/stdout. Works with npx, uvx, plain binaries, and docker run.
{
"mcpServers": {
"via-npx": { "command": "npx", "args": ["-y", "@some/mcp-server"] },
"via-uvx": { "command": "uvx", "args": ["some-mcp-server"] },
"via-binary": { "command": "/usr/local/bin/my-mcp-server", "args": [] },
"via-docker": { "command": "docker", "args": ["run", "--rm", "-i", "mcp/some-image"] }
}
}Docker note:
Always include -i in Docker args. Without -i, Docker closes stdin immediately and the MCP handshake fails.
2. HTTP - Connects to a remote MCP server over Streamable HTTP or SSE.
{
"mcpServers": {
"via-remote": {
"url": "https://mcp.example.com/mcp",
"headers": { "Authorization": "Bearer YOUR_TOKEN" }
}
}
}Transport Fields
| Field | Description |
|---|---|
| command | Executable to spawn (stdio transport). Name on $PATH or absolute path. |
| args | Arguments passed to the command. |
| url | HTTP endpoint for the MCP server (HTTP transport). |
| headers | HTTP headers attached to every request (e.g. Authorization). |
If both
commandandurlare set, command takes precedence.
MCP Tool Behavior
- Tools are connected when the agent starts (
gatewayoragentcommand). - If a server fails to connect, picobot logs the error and continues — other tools remain unaffected.
- All connections are cleanly shut down when the gateway exits.
See CONFIG.md for the full configuration reference.
Full Changelog: v0.1.10...v0.2.0
Thanks to all contributors!
v0.1.10
What's Changed
- Feat: add Slack channel with allowlist for users and channels @rickyelopez
- Docs: add
docs/folder — move docs and images out of the repo root - Fix: update Docker entrypoint
New Features
Picobot now works on Slack! 🎉
Uses Socket Mode — no public HTTP endpoint required. Works behind NAT, on a home server, or anywhere picobot already runs.
One-time setup
./picobot channels loginChoose 3 for Slack, then follow the prompts — it will ask for your App Token, Bot Token, and optional allowlists. The config is updated automatically.
Notes: the picobot channels login command also works for Telegram, Discord & WhatsApp too.
Or edit config.json manually
{
"channels": {
"slack": {
"enabled": true,
"appToken": "xapp-1-AAAAAAAAAAAAAAAAAAAA",
"botToken": "xoxb-AAAAAAAAAA-AAAAAAAAAA-AAAAAAAAAAAAAAAAAAAAAA",
"allowUsers": ["U0123456789"],
"allowChannels": ["C0123456789"]
}
}
}| Field | Description |
|---|---|
| appToken | App-Level Token for Socket Mode (xapp-...) |
| botToken | Bot Token for the Web API (xoxb-...) |
| allowUsers | List of Slack user IDs allowed to chat. Empty [] = anyone |
| allowChannels | List of Slack channel IDs allowed. Empty [] = all. DMs ignore this list |
How the bot responds:
- In channels — when @-mentioned
See HOW_TO_START.md for the full step-by-step Slack setup guide.
For Docker
Or set the variables in your .env file when using Docker Compose.
Full Changelog: v0.1.9...v0.1.10
Thanks for all contributors!
v0.1.9
What's Changed
- Fix: llama.cpp compatibility issue
- Fix: LM Studio compatiblity
- Update: enhance web search features
Full Changelog: v0.1.8...v0.1.9
v0.1.8
What's Changed
- Update: refactor memory management tools and enhance tool call for memory operations
- Update: improve error handling with golangci-lint
Full Changelog: v0.1.7...v0.1.8
v0.1.7
What's Changed
- Feature: Tool execution logging has been added to the agent's tool registry. Every call now logs start, success/failure, duration and result size. Thanks to @Fybre
- Feature: When the agent invokes a tool in a user-facing session, the bot sends interim status messages back over the same communication channel.
New Features
Picobot now works more transparently and debuggably:
Console logs show exactly which tool was called, with arguments and timings.
In-chat notifications relay "Running…", "done" or "failed" messages to the user during tool execution.
Full Changelog: v0.1.6...v0.1.7
v0.1.6
v0.1.5
What's Changed
- Feature: add Makefile for local builds
- Feature: add channel system commands, become simple and have an easier guide for user to login and enable for any of the message channels at first time
- Feat: add WhatsApp channel with typing indicator and onboard subcommand by @thrapt in #18
New Features
Picobot now works on WhatsApp! 🎉
Uses your personal WhatsApp account via linked device — no business API or extra phone number needed. Just scan a QR code and you're in.
One-time setup
./picobot channels login- Choose
3for WhatsApp setup - Scan the QR code from your phone (Settings → Linked Devices → Link a Device). The config is updated automatically — no manual editing required.
Notes: the
picobot channels logincommand also works for Telegram, Discord & WhatsApp too.
Or edit config.json manually (First time need to run above command)
{
"channels": {
"whatsapp": {
"enabled": true,
"dbPath": "~/.picobot/whatsapp.db",
"allowFrom": ["169032883908635"]
}
}
}Note:
allowFromuses LID numbers, not phone numbers. Runpicobot gatewayand check the startup log to find your LID:whatsapp: connected as 85298765432 (LID: 169032883908635)
IMPORTANT If you wants to connect with a new device, remove the
whatsapp.dbfile, and runpicobot channels loginagain
For Docker
docker compose run --rm -it picobot channels login
docker compose down
docker compose up -d"Normal" vs "Lite" builds
Since the WhatsApp integration adds approximately 13 MB to the binary, we realized that there may be other heavy packages in the future that are optional for users. Therefore, we now ship two variants:
| Variant | Command | Size | |
|---|---|---|---|
| Full (default) | go build ./cmd/picobot |
✅ | ~22 MB |
| Lite | go build -tags lite ./cmd/picobot |
Not included | ~9 MB |
Use make build to cross-compile all platforms and variants at once. The lite variant is designed for IoT and resource-constrained environments. Future heavy integrations will follow the same pattern.
Full Changelog: v0.1.4-preview...v0.1.5
Thanks to @thrapt !
v0.1.4-preview
What's Changed
- Feat: add configurable provider timeout by @Fybre in #13
- Feat: Discord Channel by @vishnuprasanth-j in #15
New Features
Picobot now works on Discord! Give it a try below :)
Add discord channel by editing config at config.json:
{
"channels": {
"discord": {
"enabled": true,
"token": "YOUR_DISCORD_BOT_TOKEN",
"allowFrom": ["YOUR_DISCORD_USER_ID"]
}
}
}For docker, start discord channel with below
docker run -d --name picobot \
-e OPENAI_API_KEY="your-key" \
-e OPENAI_API_BASE="https://openrouter.ai/api/v1" \
-e PICOBOT_MODEL="google/gemini-2.5-flash" \
-e DISCORD_BOT_TOKEN="MTIzNDU2..." \
-e DISCORD_ALLOW_FROM="123456789012345678" \
-v ./picobot-data:/home/picobot/.picobot \
louisho5/picobot:latestFull Changelog: v0.1.3-preview...v0.1.4-preview
Thanks so much to all the contributors!
v0.1.3-preview
Full Changelog: v0.1.2-preview...v0.1.3-preview
v0.1.2-preview
Breaking Changes:
- The attributes
ollamaandopenrouterhave been removed. - Use the attribute
openaiinstead to configure all OpenAI-compatible API base endpoints such as OpenRouter, Ollama, llama.cpp, LM Studio, etc.
Example configuration:
"providers": {
"openai": {
"apiKey": "sk-or-v1-YOUR_KEY",
"apiBase": "https://openrouter.ai/api/v1"
}
}For Docker
Now switched to OPENAI_API_BASE and OPENAI_API_BASE
Docker Run
docker run -d --name picobot \
-e OPENAI_API_KEY="your-key" \
-e OPENAI_API_BASE="https://openrouter.ai/api/v1" \
-e PICOBOT_MODEL="google/gemini-2.5-flash" \
-e TELEGRAM_BOT_TOKEN="your-telegram-token" \
-v ./picobot-data:/home/picobot/.picobot \
--restart unless-stopped \
louisho5/picobot:latestAll config, memory, and skills are persisted in ./picobot-data on your host.
Docker Compose
Create a docker-compose.yml:
services:
picobot:
image: louisho5/picobot:latest
container_name: picobot
restart: unless-stopped
environment:
- OPENAI_API_KEY=your-key
- OPENAI_API_BASE=https://openrouter.ai/api/v1
- PICOBOT_MODEL=google/gemini-2.5-flash
- TELEGRAM_BOT_TOKEN=your-telegram-token
- TELEGRAM_ALLOW_FROM=your-user-id
volumes:
- ./picobot-data:/home/picobot/.picobotThen run:
docker compose up -d