Pixoo MCP Server

Pixoo MCP Server

Enables programmatic control of Divoom Pixoo LED matrices to display layered pixel art, animations, and hardware-rendered scrolling text. Users can compose complex visual scenes, push images, and manage device settings like brightness and channels through an LLM.

Category
Visit Server

README

<div align="center"> <img src="example-output/hello_from_claude.png" alt="Hello from Claude on Pixoo 64" width="128" /> <h1>@cyanheads/pixoo-mcp-server</h1> <p><b>Your Pixoo, programmable via LLM</b></p> <p>Compose and push pixel art, animations, and text to Divoom Pixoo LED matrices via MCP.</p> <div>4 Tools ยท STDIO & Streamable HTTP</div> </div>

<div align="center">

Version MCP Spec License TypeScript Bun

</div>


๐Ÿ› ๏ธ Tools Overview

This server provides 4 tools for composing and pushing visual content to Pixoo displays:

Tool Description Annotations
pixoo_compose Compose a scene from layered elements (text, images, sprites, shapes, bitmaps, pixels) and push to device. Supports multi-frame animation with per-element keyframes. destructiveHint
pixoo_push_image Load a single image file (PNG, JPEG, WebP, GIF, AVIF, TIFF, SVG), resize to the display grid, and push to the device. destructiveHint
pixoo_text Push native on-device scrolling text overlay via the device's built-in fonts. Overlays persist across channel switches. destructiveHint
pixoo_control Read or change device settings (brightness, channel, screen on/off, clock face). Call with no parameters to read config. idempotentHint

Both pixoo_compose and pixoo_push_image auto-switch the device to the custom channel before pushing.

๐Ÿš€ Getting Started

MCP Client Settings

Add the following to your MCP client configuration file (e.g., claude_desktop_config.json). Clients have different ways to configure servers, so refer to your client's documentation for specifics.

Be sure to set PIXOO_IP to the IP address of your Pixoo device on the local network.

Claude Code

claude mcp add pixoo-mcp-server -e PIXOO_IP=YOUR_DEVICE_IP -- bunx @cyanheads/pixoo-mcp-server@latest

Using bunx (Bun)

{
  "mcpServers": {
    "pixoo-mcp-server": {
      "type": "stdio",
      "command": "bunx",
      "args": ["@cyanheads/pixoo-mcp-server@latest"],
      "env": {
        "PIXOO_IP": "192.168.1.100",
        "PIXOO_SIZE": "64",
        "MCP_TRANSPORT_TYPE": "stdio",
        "MCP_LOG_LEVEL": "info"
      }
    }
  }
}

Streamable HTTP Configuration

MCP_TRANSPORT_TYPE=http
MCP_HTTP_PORT=3010

Prerequisites

  • Bun v1.2.0+
  • A Divoom Pixoo device on the same local network

Development Environment Setup

  1. Clone the repository:
git clone https://github.com/cyanheads/pixoo-mcp-server.git
cd pixoo-mcp-server
  1. Install dependencies:
bun install
  1. Configure environment:
cp .env.example .env
# Edit .env and set PIXOO_IP to your device's IP address
  1. Run:
bun run dev:stdio    # Development (hot reload)
bun run devcheck     # Lint, format, typecheck, audit
bun run rebuild && bun run start:stdio  # Production

โœจ Features

  • Full Compose Pipeline: Layer text, images, sprites, shapes, bitmaps, and individual pixels โ€” static or animated up to 40 frames.
  • Animation Keyframes: Per-element property animation with linear interpolation for numbers, color lerping for hex values, and snap transitions for booleans.
  • Sprite Support: Load sprite sheets with automatic downsampling and optional body/dark color overrides via @cyanheads/pixoo-toolkit.
  • Bitmap Font Rendering: Built-in standard (5x7) and compact (3x5) pixel fonts for crisp text at any display size.
  • Auto-Save Previews: Optionally save PNG previews (static) or animated GIFs to a configurable output directory.
  • Native Text Overlays: Hardware-rendered scrolling text via device firmware โ€” persists across channel switches with configurable font, alignment, and speed.

Built on the mcp-ts-template โ€” declarative tool definitions, structured error handling, pluggable auth (JWT/OAuth), swappable storage backends, OpenTelemetry observability, and typed DI.

โš™๏ธ Configuration

Key environment variables:

Variable Description Default
PIXOO_IP IP address of the Pixoo device on the local network (required)
PIXOO_SIZE Display resolution: 16, 32, or 64 64
PIXOO_OUTPUT_DIR Directory for auto-saved preview images output/
MCP_TRANSPORT_TYPE Transport: stdio or http stdio
MCP_HTTP_PORT HTTP server port 3010
MCP_HTTP_HOST HTTP server hostname 127.0.0.1
MCP_AUTH_MODE Authentication mode: none, jwt, or oauth none
STORAGE_PROVIDER_TYPE Storage backend: in-memory, filesystem, supabase, cloudflare-r2, cloudflare-kv, cloudflare-d1 in-memory
MCP_LOG_LEVEL Log level (trace, debug, info, warn, error, fatal, silent) debug
OTEL_ENABLED Enable OpenTelemetry instrumentation false

๐ŸŽจ Tool Details

pixoo_compose

The primary tool. Compose a scene from layered elements and push to the device. Elements are drawn back-to-front.

{
  "background": "black",
  "elements": [
    { "type": "rect", "x": 0, "y": 0, "w": 64, "h": 20, "color": "#1a1a2e" },
    {
      "type": "text",
      "text": "Hello!",
      "x": 0,
      "y": 6,
      "color": "white",
      "font": "standard",
      "centered": true
    },
    {
      "type": "bitmap",
      "x": 28,
      "y": 40,
      "scale": 2,
      "palette": ["", "#ff4488", "#cc2266"],
      "data": ["0120210", "1111111", "1111111", "0111110", "0011100", "0001000"]
    }
  ]
}

Element types: text, image, sprite, rect, circle, line, bitmap, pixels

Animation: Set frames > 1 and add animate keyframes to elements:

{
  "frames": 10,
  "speed": 150,
  "elements": [
    {
      "type": "text",
      "text": "Hello",
      "x": 0,
      "y": 2,
      "color": "#ffffff",
      "centered": true,
      "animate": {
        "color": [
          [0, "#ffffff"],
          [5, "#ff8800"],
          [9, "#ffffff"]
        ]
      }
    }
  ]
}

Output options: Set output to an absolute path to save a preview PNG (static) or GIF (animated). Set push: false to skip device push and only save previews.

See docs/pixoo-mcp-server.md for full element and animation documentation.

pixoo_push_image

Shortcut to load and push a single image file. Supports PNG, JPEG, WebP, GIF, AVIF, TIFF, and SVG.

{ "path": "/path/to/image.png", "fit": "contain", "kernel": "nearest" }
Option Values Default
fit contain, cover, fill contain
kernel nearest, lanczos3, mitchell nearest

pixoo_text

Native on-device scrolling text with hardware rendering. Overlays render on top of the current display content and persist across channel switches.

{ "text": "Hello World", "color": "#00ff00", "speed": 50, "direction": "left" }

Use different IDs (0โ€“19) to stack multiple overlays. Set clear: true to remove an overlay.

pixoo_control

Read or change device settings. Call with no parameters to read current config.

{ "brightness": 75, "channel": "custom" }

โš ๏ธ Device Quirks

  • ~1 push/sec recommended โ€” device may freeze after ~300 rapid pushes
  • Channel must be custom to display pushed content โ€” compose and push_image auto-switch
  • Text overlays persist across channel switches โ€” use clear: true to remove
  • Max ~40 animation frames for stability
  • ~5s "Loading.." overlay when a new animation starts
  • GIF ID reset before each push โ€” handled automatically by the toolkit

๐Ÿ“š References

Contributing

Issues and PRs welcome. Please run bun run devcheck && bun test before submitting.

License

Apache 2.0

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured