pebble-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PEBBLE_API_TOKEN | No | Optional API token for authenticated operations (Tier 4). Required for token-gated, network-mutating operations. If not set, Tier 4 tools are not available. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| capabilitiesA | Report which pebble-mcp capability tiers are available in this environment. tier1_appstore is always true (pure HTTPS). tier2_design requires Pillow.
tier3_devloop requires the |
| store_appA | Full metadata for one appstore app or watchface by its id. Returns hearts, author, description, the list of compatible hardware
platforms (with a |
| store_collectionA | List a named store collection, paginated, as compact summaries.
|
| store_categoryA | List apps in a store category (e.g. |
| store_developerA | List every app published by one developer, paginated, as compact
id/title/type/author/hearts summaries with a |
| store_searchA | Search the store by keyword — CLIENT-SIDE, with real limits. The live appstore API has NO search endpoint, so this does not do a
true full-text search. Instead it fetches a bounded candidate pool
from the relevant store listings (the Consequences to keep in mind:
|
| store_compareA | Bulk-fetch several apps by id and return a side-by-side comparison table for competitive research.
|
| store_download_pbwA | Download an app's latest-release Creates |
| image_quantizeA | Quantize an image to the Pebble 64-color palette; return stats + preview. Args:
source: a filesystem path, a base64 string, or a Returns a stats object (colors used, per-pixel distance) plus the quantized preview image (2× nearest-neighbor upscale when small). |
| image_prepA | Resize/letterbox an image to a named target, quantize, and preview it. Args:
source: filesystem path, base64, or Returns a stats object (target size, colors used, distance) plus the prepared preview image (2× nearest-neighbor upscale when small). |
| color_nearestA | Nearest of the 64 Pebble GColors to an arbitrary color. Args:
color: a hex string ( Returns the matched GColor name, hex, C constant, packed ARGB8 byte, sunlight-corrected display hex, and sRGB distance to the input. |
| palette_swatchA | Render a labeled grid of color swatches to a PNG for eyeballing. Args:
colors: hex strings and/or |
| font_planA | Recommend Pebble system fonts for a UI role or a literal string. Pass a role like Pass literal text instead (e.g.
Zero-argument sharp edge: this never touches the network or a toolchain -- it's pure lookup, always available regardless of capability tier. |
| pdc_convertA | Convert an SVG icon/vector to a Pebble Draw Command (.pdc) file. Validates PDC's known constraints before attempting conversion, so a bad SVG comes back as a structured violation list -- never a broken or silently-wrong .pdc. Supported SVG elements: g, layer, path (straight-line commands M/L/H/V/Z only -- flatten curves first), rect, polyline, polygon, line, circle. Not supported: gradients, masks, clip paths, filters, embedded text/images, and any transform other than translate(x, y). On success, returns the .pdc file as base64 ( Next move on failure: fix the listed elements/attributes in the SVG (flatten curves to polylines, remove gradients/masks, replace text with outlined paths) and call again -- this tool never guesses at a lossy conversion. |
| flow_runA | Run a gallery-style flow spec against the emery emulator and return every screenshot. Parses Returns a JSON metadata block — flow name, out_dir, per-shot
{app, name, path, duration_s}, plus Refuses any flow requesting more than 40 shots (runaway guard). SAFETY — live-write hazard. flow_run drives REAL apps that can fire REAL
network POSTs. A flow against an app with server-mutating screens must
NEVER confirm a live-send action (e.g. |
| flow_validateA | Parse a flow spec WITHOUT running it — a cheap pre-check. Returns a step summary (step_count, shot_count, steps_by_type, and whether it exceeds the 40-shot flow_run cap) on success, or a clear parse error naming the offending 1-based line. Needs no emulator, so it is the right tool to validate a flow before spending an emulator run. |
| emu_screenshotA | Capture one screenshot of the running emery emulator as an image. Optional |
| emu_inputA | Send one input to the running emulator.
|
| emu_logsA | Capture emulator logs, bounded — never a firehose. Streams |
| pebble_buildA | Build a Pebble app project and return structured results. Runs |
| pebble_installA | Install an app into the emulator, starting it if needed. target is either a project directory (built first if needed) or a
path to a prebuilt .pbw file; relative paths resolve against the
workspace root. The emulator is killed and wiped first — the
reliable-launch lesson — so expect a few seconds of startup.
Requires the |
| emu_startA | Boot the Pebble emulator for the given platform (default emery). Idempotent-ish: if one is already running this reconnects/restarts.
Requires the |
| emu_stopA | Shut down the running emulator; wipe=True also clears its storage. Wiping is the fix for most emulator flakiness (apps not launching,
stale state). Requires the |
| project_newA | Scaffold a new, immediately buildable Pebble project. Writes the files directly (pure Python -- no
Returns |
| project_infoA | Summarize an existing Pebble project from its Returns |
| project_add_resourceA | Add a resource to a project and register it in Copies |
| project_set_metaA | Edit a project's
|
| design_reviewA | Critique a Pebble screenshot against the design system. Analyzes one screenshot and returns an actionable, compact critique:
palette adherence (what fraction of pixels are exact GColors, and the
most-common off-palette colors with their nearest GColor), per-region
contrast/legibility judged against the sunlight-corrected display values
(the reflective LCD reads duller than sRGB), role guidance vs the
This is a heuristic, not a human designer: it reasons about color statistics, never glyphs — it flags pairs that look illegible and colors that are off-palette or role-inappropriate; confirm the hero-value hierarchy by eye. Returns a JSON critique block plus the analyzed image. |
| project_smoke_testA | Build, install, and screenshot a project — the one-call "does it run?". Builds A failed build returns built=false with the compiler errors and skips
install — so this is also the fastest "did my change compile" check.
Requires the |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| platforms | Per-platform Pebble display specs (emery, basalt, chalk, diorite). |
| colors | The 64-color Pebble palette table plus our house role guidance. |
| fonts | System font keys/sizes/usage guidance distilled from DESIGN.md. |
| wire_conventions | The reusable delimited wire-string pattern for a Pebble companion protocol. |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/dbonomo/pebble-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server