That is the difference between driving a display blind and iterating on it: the frame returns as an image content block, so a scene can be adjusted before anyone looks at the hardware. The design brief tool is an unusual and sensible addition — legibility rules and an animation budget for a 64-pixel grid, delivered before the first attempt rather than after three bad ones. Two things are not previewable and worth knowing: the scrolling overlay uses the device's own font rendering, and the minimum push interval exists because the hardware will freeze if you hammer it.
A control and rendering server for Divoom Pixoo LED displays on your local network. Seven tools cover text, full scene composition, images, device-native overlays and device state — and the render tools return the frame as an image block so you inspect what the display will show.
- Styled text pushed to the display with theme, gradient, shadow, outline and auto-fit, returned as a rendered frame for inspection (pixoo_display_text).
- Full scene composition: layered text, icons, widgets, shapes, bitmaps, images and sprites, with per-element effects and keyframes, static or animated, rendering back-to-front in array order (pixoo_compose_scene).
- An image loaded from an absolute local path or an https URL, resized to the grid, with the resampling kernel chosen for the job — nearest-neighbour to keep pixel art crisp, lanczos3 or mitchell for photographs — and the downsampled result returned so you see exactly what the device got (pixoo_push_image).
- Device-native scrolling overlays set or cleared on any of 20 slots, using the display's own fonts across 115 font IDs, persisting across channel switches until explicitly cleared (pixoo_overlay_text).
- Device state read or changed in one call: brightness from 0 to 100, screen on or off, channel and clock face — call it with no parameters to just read (pixoo_control_device).
- Discovery of Pixoo devices on the local network through Divoom's cloud endpoint, for the one-time job of finding the IP (pixoo_discover_devices).
- Craft guidance before you author anything: legibility rules, palette discipline, layout zones, an animation budget, and next-tool suggestions based on the device's current state (pixoo_design_brief).
A Divoom Pixoo display — Pixoo-64, Pixoo-32 or Pixoo-16 — on the same network as the server, and its IP in PIXOO_IP. Run discovery once to find it; that call reaches Divoom's cloud endpoint, so it needs internet, while everything after it is local. PIXOO_SIZE tells the renderer whether the grid is 16, 32 or 64. Bun v1.3.2 or newer, or Node.js v24+, launched with `bunx` or `npx @cyanheads/pixoo-mcp-server`; a Docker image and an HTTP transport on port 3010 are the alternatives. Rendering with push disabled works with no device configured at all — useful for previewing before the hardware is on the desk. PIXOO_PUSH_MIN_INTERVAL_MS defaults to 1000 and exists to stop rapid-fire commands freezing the device.
One command — npx -y @cyanheads/pixoo-mcp-server
