Model Context Protocol · Pebble
pebble-mcp gives Claude — or any MCP client — a real toolbox for the revived Pebble ecosystem: search the appstore, quantize art to the 64-color palette, plan fonts, convert SVG to PDC, and drive the emulator to build, install, and screenshot a watchapp end to end.
What it does
Each tier lights up only when its prerequisites are present, and capabilities() reports
what's live. The pure-Python tiers run anywhere an MCP client runs — including phone and web hosts with
no shell — so you can quantize your logo to Pebble colors from claude.ai with nothing installed locally.
Query the live Pebble appstore, filter by emery compatibility, compare apps by hearts, and pull any app's .pbw straight into the emulator.
Quantize any image to the exact 2-bit palette, prep art for the watch screen / menu icon / appstore banner, find the nearest GColor, plan fonts, and validate SVG→PDC.
Run whole screenshot flows against the emulator — one call returns metadata plus every frame as a viewable image — or step it manually with build, install, input, and log tools.
Authenticated actions against your own Rebble account: heart apps, publish a build with the new pebble publish, and push timeline pins — each behind an explicit confirmation.
The signature trick
store_search or an app id — filtered to what runs on your watch.
store_download_pbw pulls the .pbw the API points to.
A pbw flow step sideloads it and presses buttons — kill+wipe baked in.
flow_run returns every frame as an image the model can read.
Where it stands
Built on the official MCP Python SDK, stdlib-first so Tier 1 installs light. Two rounds of adversarial hardening closed real path-traversal escapes, decompression-bomb and download-size DoS vectors, and an import-time crash — every fix landed as a failing test first. The design tier already found and corrected a real bug in a shipping watchface (a mislabeled GColor).
Try it (once published)
An MCP server is a small local program your client launches for you — not something you run or keep alive. Point any MCP client at it and the tools appear next to the built-ins.
// .mcp.json — today, from a local checkout { "mcpServers": { "pebble-mcp": { "command": "uv", "args": ["run", "--directory", "path/to/pebble-mcp", "pebble-mcp"] } } } // after PyPI — the whole install is the config line { "mcpServers": { "pebble-mcp": { "command": "uvx", "args": ["pebble-mcp"] } } }
Before we ship
Phase 1 (build) and Phase 2 (hardening) are done. What stands between here and uvx pebble-mcp working for a stranger: