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.
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
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: OmniCommanderMCP
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
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
This server cannot be deployed
Maintenance
Related MCP Connectors
Private networking for AI agents: networks, nodes, commands, files, services via hosted MCP.
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.
One MCP server for the services your AI needs: memory, files, Microsoft 365, kanban and more.
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.
Related MCP Servers
- AlicenseCqualityBmaintenanceEnables AI agents to manage system updates, application installations, and remote host orchestration through MCP tools.263MIT
- AlicenseBqualityDmaintenanceEnables 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
- AlicenseBqualityBmaintenanceEnables AI agents to directly access native macOS services, media, system health, and administration tools through a local MCP server.4018 npm1MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI clients to securely operate a local machine via MCP or REST, providing file read/write, Playwright browser automation, and shell/service administration.3MIT