Wired to the new Changelog table on the F.A.S.C. Saltcorn site's REST API (Bearer token auth). Household-only (not in PUBLIC_TOOLS) — the public bot doesn't get to write to the site. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> |
||
|---|---|---|
| docs | ||
| tests | ||
| .env.example | ||
| .gitignore | ||
| compose.yaml | ||
| conftest.py | ||
| Dockerfile | ||
| LICENSE | ||
| README.md | ||
| requirements-dev.txt | ||
| requirements.txt | ||
| server.py | ||
Boxxo Tools MCP
A single MCP server exposing the homelab tools that Boxxo (the F.A.S.C. household
assistant) uses — weather/time, media status, service health, and Home Assistant read + scoped
control. Because it speaks MCP, the same tools work across
any MCP/OpenAPI client: Open WebUI (via the mcpo proxy), Home Assistant Assist, Claude Desktop,
LibreChat, and more — instead of being re-implemented per frontend.
Built with Claude (Opus 4.8). The tool logic is ported 1:1 from the original Open WebUI Python tools so behaviour is identical.
What's inside (17 tools)
| Group | Tools |
|---|---|
| Utility | get_current_datetime, get_weather, get_forecast |
| Media status (read-only) | get_active_downloads, get_arr_queue, get_recently_added |
| Service health (read-only) | check_service, check_all_services |
| Home Assistant | reads: get_entity_state, list_entities · scoped control: set_light, set_switch, activate_scene, run_script, set_climate_temperature, set_media_volume, control_media |
Reads are safe. HA control is domain-scoped and requires an explicit, resolved target — ambiguous or unknown names are refused (never guesses), and each action is confirmed by re-reading the entity.
Run it
Quick start (Docker)
# 1. build the image (DockHand can't build — build on a host and reference the tag)
docker build -t boxxo-tools-mcp:latest .
# 2. configure secrets
cp .env.example boxxo.env # then edit boxxo.env with your qBit/Sonarr/Radarr/HA creds
# 3. run — mcpo wraps the MCP server and serves OpenAPI on :8100
docker compose up -d
# 4. check
curl -s http://localhost:8100/openapi.json | python3 -c "import sys,json;print(len(json.load(sys.stdin)['paths']),'tools')"
Wire it into Open WebUI
Admin → Settings → Tools → add an OpenAPI tool server:
- URL:
http://<host>:8100 - Auth: Bearer, key = your
MCPO_API_KEY
Then attach the tools to your model (e.g. Boxxo).
Personalize (change these for your setup)
boxxo.env— all endpoints + credentials (qBit/Sonarr/Radarr/HA) and weather defaults.server.py→SERVICES— the fleet map forservice_health(name → URL). Edit to match your services.- Weather —
WEATHER_LOCATION/WEATHER_TZ/WEATHER_UNITSinboxxo.env.
Notes
- Runs the MCP server over stdio;
mcpoexposes each tool as an OpenAPI endpoint. - HA control tools default to safe read-then-act with a settle-poll (slow BRMesh/Govee/Alexa devices confirm state slowly).
License
GPL-3.0-or-later.