ZimaTools
Provides tools for managing Docker containers on ZimaOS over SSH, including listing, starting, stopping, restarting, viewing logs, and retrieving container information.
Includes a legacy/historical Home Assistant integration located under legacy/ha/.
Provides GPU lease management and status reporting via nvidia-smi, including exclusive GPU acquisition, release, queue listing, and client priority adjustments.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ZimaToolsshow me the GPU status and current lease queue"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ZimaTools
Native ZimaOS app: MCP server (HTTP), web dashboard, and exclusive GPU lease arbiter.
Popcorn has priority over Ollama and agents. Only one GPU lease at a time.
Repo: https://github.com/bobdivx/zimatools
Based on: zimaos-cursor-mcp v0.0.2 (history preserved).
Stack
Monorepo pnpm workspaces
apps/mcp— TypeScript, mcp-framework0.2.x, HTTP Stream (/mcp) + optional stdioREST bridge Hono (
/api/*) for the UIapps/web— Astro + Preact + Tailwind CSS + DaisyUISingle public port via Docker Compose (web proxies MCP + API)
Related MCP server: Systems Manager
Architecture
zimatools/
apps/mcp/ MCP server + REST + GPU arbiter
apps/web/ Astro/Preact/DaisyUI UI (+ reverse proxy in Docker)
docker/ Dockerfiles
docker-compose.yml
docker-compose.gpu.ymlService | Access | Role |
Public entry | 8484 → | UI + proxy ( |
MCP (localhost) |
| HTTP stream |
REST (localhost) |
| Hono API |
Deploy on ZimaOS / CasaOS
Docker Hub images: bobdivx/zimatools-mcp + bobdivx/zimatools-web.
One public port (8484). web uses network_mode: service:mcp (sidecar): both share one network namespace, so the proxy reaches API/MCP on 127.0.0.1. This avoids CasaOS DNS/bridge isolation that causes 502 Bad Gateway.
Validated on ZimaOS / CasaOS with Docker Hub images bobdivx/zimatools-mcp:latest and bobdivx/zimatools-web:latest.
Steps
Uninstall any previous ZimaTools app (free port
8484).CasaOS → Apps → install a custom app.
Prefer the YAML tab: paste the compose below as-is, then install.
Or use the Form tab and match this checklist:
CasaOS field |
|
|
Image |
|
|
Network type |
|
|
Port mapping |
| (empty — no ports) |
Main service / Web URL | Main = | — |
Verify:
curl -s http://127.0.0.1:8484/health
# {"ok":true,"service":"zimatools",...}Open in a browser: http://<nas>:8484/ (dashboard) and http://<nas>:8484/mcp (setup page with Cursor instructions).
Compose YAML (copy/paste)
services:
mcp:
image: bobdivx/zimatools-mcp:latest
restart: always
ports:
- "8484:8080"
environment:
MCP_TRANSPORT: http
MCP_HOST: "0.0.0.0"
MCP_PORT: "8765"
MCP_ENDPOINT: /mcp
MCP_CORS_ORIGIN: "*"
API_PORT: "8766"
API_CORS_ORIGIN: "*"
ZIMAOS_API_BASE: http://127.0.0.1
ZIMAOS_API_TOKEN: ""
ZIMAOS_SSH_PASSWORD: ""
volumes:
- /var/run/docker.sock:/var/run/docker.sock
web:
image: bobdivx/zimatools-web:latest
restart: always
network_mode: "service:mcp"
depends_on:
- mcp
environment:
HOST: "0.0.0.0"
PORT: "8080"
API_UPSTREAM: http://127.0.0.1:8766
MCP_UPSTREAM: http://127.0.0.1:8765
x-casaos:
hostname: ""
index: /
is_uncontrolled: false
main: mcp
port_map: "8484"
scheme: http
title:
custom: ZimaToolsEndpoints after install
Use | URL |
Dashboard |
|
MCP setup page (browser) |
|
MCP endpoint (Cursor / agents) |
|
REST health |
|
Browsers get the setup page on GET /mcp (Accept: text/html). MCP clients (POST / session / SSE) are proxied to the MCP server.
Optional env on mcp: set ZIMAOS_API_TOKEN (file tools) and ZIMAOS_SSH_PASSWORD (Docker tools).
Port conflicts (“ports already in use”)
CasaOS often rewrites the YAML on save. Keep these rules:
Rule | Why |
Publish |
|
| If set to |
Do not add a second | Duplicate publish → “ports already in use” |
Do not add extra | Keep the sidecar simple |
Free the port, then reinstall:
docker ps --format '{{.Names}}\t{{.Ports}}' | grep -E '8484|8765|8766'
docker rm -f $(docker ps -aq --filter name=zimatools) 2>/dev/null
# In CasaOS: fully uninstall the old ZimaTools appIf 8484 is still taken, change only mcp.ports and port_map (e.g. 18484:8080 and port_map: "18484"). MCP URL becomes http://<nas>:18484/mcp.
502 Bad Gateway
The web proxy cannot reach the API. Check the Form tab:
web→ Network type =service:mcp(notbridge)web→ no port mappingsmcp→8484 → 8080Upstreams on
web:http://127.0.0.1:8766andhttp://127.0.0.1:8765
Then recreate / restart the app.
Optional NVIDIA GPU
Requires nvidia-container-toolkit. Add under the mcp service:
runtime: nvidia
environment:
NVIDIA_VISIBLE_DEVICES: all
NVIDIA_DRIVER_CAPABILITIES: utility,computeLocal development
Requirements: Node.js 20+, pnpm 10 (corepack enable).
git clone https://github.com/bobdivx/zimatools.git
cd zimatools
cp .env.example .env
# fill ZIMAOS_API_BASE / ZIMAOS_API_TOKEN / SSH if needed
pnpm install
pnpm --filter @zimatools/mcp buildTwo terminals:
pnpm dev:mcp # MCP HTTP :8765 + REST :8766
pnpm dev:web # UI :4321 (proxies /api, /health, /mcp)Stdio (local Cursor only):
pnpm --filter @zimatools/mcp dev:stdioLocal Docker build (without Hub pull):
docker compose up -d --build
# GPU: docker compose -f docker-compose.yml -f docker-compose.gpu.yml up -d --buildMCP endpoint (HTTP)
Transport: Streamable HTTP (http-stream), not stdio-only.
Production URL for agents:
http://<nas>:8484/mcpBrowser setup UI (same path): open
http://<nas>:8484/mcpin Chrome/FirefoxDev (direct MCP process):
http://localhost:8765/mcpMethods:
POST/GET/DELETE/OPTIONSCORS open by default (
MCP_CORS_ORIGIN=*,MCP_HOST=0.0.0.0)
Cursor / DevForge (mcp.json)
Add to ~/.cursor/mcp.json (or your client MCP settings):
{
"mcpServers": {
"zimatools": {
"url": "http://zimacube.local:8484/mcp"
}
}
}Then reload MCP / restart Cursor. Tools gpu.* and ZimaOS file/Docker tools should appear.
Local stdio (no NAS)
{
"mcpServers": {
"zimatools": {
"command": "node",
"args": ["<path>/apps/mcp/dist/index.js", "--stdio"],
"env": {
"ZIMAOS_API_BASE": "http://zimacube.local",
"ZIMAOS_API_TOKEN": "..."
}
}
}
}REST (same GPU tools)
Via the public proxy: http://<nas>:8484/...
GET /healthGET /api/gpu/statusPOST /api/gpu/acquire{ "client": "popcorn" }POST /api/gpu/release{ "client": "popcorn" }GET /api/gpu/queuePOST /api/gpu/priority{ "client": "ollama", "priority": 50 }GET /api/apps— inventaire conteneursGET /api/apps/watchdog— config + état watchdog imagesPATCH /api/apps/watchdog{ "enabled": true, "intervalMinutes": 60 }POST /api/apps/watchdog/run— scan manuel (pull + recreate si digest change)POST /api/apps/webhook— déclenchement immédiat (headerAuthorization: Bearer $IMAGE_WEBHOOK_SECRETouX-Webhook-Secret) ; body optionnel{ "image": "repo:tag" }GET /api/docker/containers
MCP tools
ZimaOS files (API)
read_file_from_zimaos, list / write / edit / search / mkdir / stats — see apps/mcp/src/tools/.
Docker (SSH or docker.sock)
list_docker_containers_zimaos, start / stop / restart / logs / info.
GPU (in-memory queue + nvidia-smi)
Tool | Role |
| nvidia-smi + lease + queue. If |
| Exclusive lease. Higher priority preempts. |
| Release and promote the queue. |
| Current lease + queue. |
| Client priority (default popcorn=100, ollama=50, agents=25). |
Model: one holder. Popcorn steals the GPU from Ollama / agents; the previous holder is re-queued.
v0 limits
Queue and priorities are in-memory (lost on restart).
nvidia-smiCSV parse; otherwise fake GPUstub-gpu.No real stop/restart of Ollama or GPU containers yet.
Docker UI list: SSH if configured, otherwise placeholder.
Environment variables
See .env.example.
Variable | Default | Role |
|
|
|
|
| Internal MCP Streamable HTTP |
|
| Bind address |
|
| MCP path |
|
| Internal REST (Hono) |
|
| Web → API proxy target |
|
| Web → MCP proxy target |
| (empty) | Browser API base; empty = same-origin |
| (empty) | Public MCP URL override |
| — | File tools |
| — | Docker tools over SSH |
Build
pnpm build
pnpm --filter @zimatools/web buildLegacy Home Assistant integration: legacy/ha/.
License
TBD. Issues: https://github.com/bobdivx/zimatools/issues
This server cannot be deployed
Maintenance
Related MCP Connectors
Protocol-native energy infrastructure orchestration for AI data centers. Provides 46 MCP tools across 8 grid protocols (IEC-61850, DNP3, Modbus, OCPP, OpenADR, IEEE 2030.5, IEC 60870-5-104, ICCP) with 5 core API primitives: connect, dispatch, settle, comply, and intel. Enables AI agents to programmatically interact with substations, grid interfaces, and energy assets for real-time workload-grid coordination.
Remote MCP server exposing 330 production AI-agent services for web/data processing, validation, AI utilities, blockchain/crypto utilities, and x402 pay-per-use access.
Paid remote MCP for persistent AI agent memory, analytics, checkout, and search-readiness.
Paid deterministic utilities and automation services for AI agents via MCP and x402.
Related MCP Servers
- AlicenseAqualityDmaintenanceA comprehensive MCP server that enables AI models to perform local file operations, command execution, and task management across multiple platforms. It features advanced capabilities like row-level file editing, directory searching, and system monitoring with built-in security filters.1321 npmMulan Permissive Software , Version 2
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to manage system updates, application installations, and remote host orchestration through MCP tools.3MIT
- AlicenseBqualityCmaintenanceEnables full local computer control from MCP clients, including terminal commands, file system operations, application management, screen capture, and input device automation across Windows, macOS, and Linux.27MIT
- AlicenseBqualityAmaintenanceEnables AI agents to directly access native macOS services, media, system health, and administration tools through a local MCP server.40184 npmMIT