loading…
Search for a command to run...
loading…
Enables programmatic control of Divoom Pixoo LED matrices to display layered pixel art, animations, and hardware-rendered scrolling text. Users can compose comp
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.
Your Pixoo, programmable via LLM
Compose and push pixel art, animations, and text to Divoom Pixoo LED matrices via MCP.
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.
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 mcp add pixoo-mcp-server -e PIXOO_IP=YOUR_DEVICE_IP -- bunx @cyanheads/pixoo-mcp-server@latest
{
"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"
}
}
}
}
MCP_TRANSPORT_TYPE=http
MCP_HTTP_PORT=3010
git clone https://github.com/cyanheads/pixoo-mcp-server.git
cd pixoo-mcp-server
bun install
cp .env.example .env
# Edit .env and set PIXOO_IP to your device's IP address
bun run dev:stdio # Development (hot reload)
bun run devcheck # Lint, format, typecheck, audit
bun run rebuild && bun run start:stdio # Production
standard (5x7) and compact (3x5) pixel fonts for crisp text at any display size.Built on the mcp-ts-template — declarative tool definitions, structured error handling, pluggable auth (JWT/OAuth), swappable storage backends, OpenTelemetry observability, and typed DI.
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 |
pixoo_composeThe 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_imageShortcut 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_textNative 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_controlRead or change device settings. Call with no parameters to read current config.
{ "brightness": 75, "channel": "custom" }
custom to display pushed content — compose and push_image auto-switchclear: true to removeIssues and PRs welcome. Please run bun run devcheck && bun test before submitting.
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"pixoo-mcp-server": {
"command": "npx",
"args": []
}
}
}Web content fetching and conversion for efficient LLM usage.
Retrieval from AWS Knowledge Base using Bedrock Agent Runtime.
Provides auto-configuration for setting up an MCP server in Spring Boot applications.
A very streamlined mcp client that supports calling and monitoring stdio/sse/streamableHttp, and can also view request responses through the /logs page. It also