Skip to main content
Glama
dbonomo
by dbonomo

pebble-mcp

An MCP server for the Pebble smartwatch ecosystem: appstore search, a 64-color design toolkit, and the local dev loop (build → emulator → screenshot flows) exposed as typed tools usable from any MCP host — Claude Code, Claude Desktop, claude.ai, or any other agent — not just a shell. The demo above is a single flow_run: it installs a real appstore app (Hubble) onto the emery emulator, drives the buttons, and captures each screen — all through MCP.

Install

Once published to PyPI, no checkout is needed — uvx runs it on demand. Add this to your MCP host's config (e.g. a Claude Code .mcp.json):

{
  "mcpServers": {
    "pebble-mcp": {
      "command": "uvx",
      "args": ["pebble-mcp"]
    }
  }
}

To run from a local checkout instead (development, or before the PyPI release):

{
  "mcpServers": {
    "pebble-mcp": {
      "command": "uv",
      "args": ["run", "--directory", "/absolute/path/to/pebble-mcp", "pebble-mcp"]
    }
  }
}

Quickstart (Claude Code)

# from PyPI (once published)
claude mcp add pebble-mcp -- uvx pebble-mcp

# or from a local checkout
claude mcp add pebble-mcp -- uv run --directory /absolute/path/to/pebble-mcp pebble-mcp

Then, in a session, ask the agent to call capabilities() to see which tiers are live, or store_search("weather") to hit the appstore immediately.

Related MCP server: Code Contractor MCP Server

Capability tiers

The server registers tools in four tiers and probes the environment at startup, so an agent only ever sees the tools it can actually run.

  • Tier 1 — Appstore (pure HTTPS, no auth, always on): store_search, store_app, store_collection, store_category, store_developer, store_compare, store_download_pbw.

  • Tier 2 — Design toolkit (pure Python + Pillow): color_nearest, palette_swatch, image_quantize, image_prep, font_plan, pdc_convert. Pillow is a core dependency, so this tier is normally always on; capabilities() still probes for it and degrades gracefully if it is somehow absent.

  • Tier 3 — Dev loop (requires the pebble CLI on PATH): pebble_build, pebble_install, emu_start, emu_stop, emu_screenshot, emu_input, emu_logs, flow_validate, and the crown jewel flow_run — run a gallery-style flow spec and get every screenshot back as MCP images. These tools register only when pebble is found.

  • Tier 4 — Authenticated (requires PEBBLE_API_TOKEN; off by default): reserved for token-gated, network-mutating operations (heart an app, publish, timeline pins). Detected by capabilities(); opt-in only.

Read-only reference is also exposed as MCP resources: pebble://colors, pebble://fonts, pebble://platforms, pebble://wire-conventions.

The capabilities() tier probe

Call the capabilities() tool first. It reports which tiers are live in the running environment (tier1_appstore, tier2_design, tier3_devloop, tier4_auth) so an agent can plan its work instead of calling a tool that isn't wired up. Tier 1 is always true; the rest reflect Pillow, the pebble CLI, and PEBBLE_API_TOKEN respectively.

Development

uv sync            # install deps (+ dev group: pytest, ruff)
uv run pytest      # run the test suite
uv run ruff check  # lint

The pebble_mcp/examples/flows/ directory holds sample flow specs (used by the tests and as living documentation of the flow format, including the # SAFETY RULES (live-write hazards — DO NOT TRIGGER): convention that flow authors should follow for any app with server-mutating screens).

License

MIT — see LICENSE. Copyright (c) 2026 Daniel Bonomo.


Not affiliated with, endorsed by, or sponsored by Core Devices or Rebble. "Pebble" and related marks belong to their respective owners.

Available Tools

29 tools
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 pebble CLI on PATH. tier4_auth requires PEBBLE_API_TOKEN to be set. Also reports the server version.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of disclosing behavior. It accurately describes that this is a read-only introspection tool that reports environment capabilities and server version, and gives specific conditions for each tier. No side effects or hidden behavior are implied.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, front-loaded with the main purpose, and uses structured bullets-like sentences to explain each tier. Every sentence adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (no params, no side effects) and has an output schema, so return values need not be detailed. The description fully covers the tool's purpose, tier logic, and version reporting. Nothing important is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so the baseline is 4. The description adds sufficient context about what the tool inspects, making the lack of parameters clear and expected.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it reports available capability tiers, with specific detail on each tier's conditions. This distinguishes it from all sibling tools, which are operational (emu, store, build, etc.).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains the prerequisites for each tier (e.g., tier2 requires Pillow, tier4 requires token), giving clear context on when and how to interpret results. It doesn't explicitly list alternatives, but no alternatives exist for capability checking.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

color_nearestA

Nearest of the 64 Pebble GColors to an arbitrary color.

Args: color: a hex string ("#RRGGBB" / "RRGGBB" / shorthand) or an "r,g,b" triple. background: optional background color; when given, the contrast ratio and legibility of the matched color on it are also reported.

Returns the matched GColor name, hex, C constant, packed ARGB8 byte, sunlight-corrected display hex, and sRGB distance to the input.

ParametersJSON Schema
NameRequiredDescriptionDefault
colorYes
backgroundNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description reveals key behavioral aspects: it returns multiple representations (name, hex, C constant, packed byte, sunlight-corrected hex, sRGB distance) and optionally reports contrast ratio. It does not discuss error handling, but for a pure lookup tool this is a minor omission.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-organized: a one-line purpose, an Args explanation, and a Returns list. Every sentence adds useful information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read-only tool with an output schema, the description fully covers input formats, optional behavior, and output values. No significant gaps remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has zero descriptions, so the description fully compensates by detailing the accepted color formats (hex with/or without hash, shorthand, or r,g,b triple) and explaining the background parameter for contrast/legibility reporting. This is richer than the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence clearly states the tool maps an arbitrary color to the nearest of 64 Pebble GColors. It uses a specific verb/resource combination and distinguishes itself from sibling tools by its focused palette conversion purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for when you need to find a Pebble GColor nearest to an arbitrary color, but it does not explicitly mention when not to use it or offer alternatives among sibling tools. Lacks explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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 pebble://colors house roles, and a prioritized suggestion list.

source is a filesystem path, base64, or a data: URI of the image — OR the literal 'emulator' to capture and analyze the running emery screen (needs the pebble CLI; see capabilities()). regions sets the N×N contrast grid (default 3).

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYes
regionsNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description takes on full responsibility for behavioral disclosure. It openly states this is a heuristic, not a human designer, explains it reasons only about color statistics and not glyphs, and advises visual confirmation for hero-value hierarchy. It also discloses the need for the pebble CLI in emulator mode and describes the output as a JSON critique plus image.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded with the primary purpose. It uses separate paragraphs for parameters, limitations, and return values without fluff. Every sentence contributes to the agent's ability to invoke the tool correctly, making the length justified.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers input types, parameter semantics, return value contents, and limitations, which is strong given no annotations and no output schema. It does not detail the exact JSON structure or error behavior, but for selection and invocation purposes it is sufficiently complete to guide an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description fully explains both parameters. It details the accepted formats for `source` (filesystem path, base64, data URI, or 'emulator') and the meaning of `regions` (N×N contrast grid, default 3), adding crucial context beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource phrase: 'Critique a Pebble screenshot against the design system.' It clearly states the tool's function and differentiates it from siblings like color_nearest or image_quantize by focusing on holistic design system compliance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool (analyzing screenshots for design adherence) and even includes a cross-reference to capabilities() for emulator capture requirements. However, it does not explicitly mention when not to use it or name alternative tools for simpler tasks, so it lacks full exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

emu_inputA

Send one input to the running emulator.

action is 'press', 'longpress', or 'tap'. 'press'/'longpress' require button (one of back/up/select/down); 'longpress' also requires duration_ms (> 0). 'tap' fires an accelerometer tap and takes no button or duration. Button and action names are validated.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
buttonNo
duration_msNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden. It discloses validation of button/action names and the specific semantics of each action, but it does not state side effects or whether this mutates emulator state (though implied).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-organized, with the main purpose in the first sentence and parameter details following in a clear, structured manner. No redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with simple parameters and the provided descriptions, this is complete. It covers all parameter semantics, preconditions ('running emulator'), and validation behavior. The presence of an output schema means return values need not be described.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides no descriptions (0% coverage), so the description fully compensates. It explains all valid values for 'action', the allowed 'button' choices, the requirement and constraints for 'duration_ms', and that 'tap' requires neither.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Send') and identifies the resource ('the running emulator'). It clearly distinguishes from sibling tools like emu_screenshot and emu_logs by focusing on input injection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided for when to use emu_input versus alternatives such as emu_screenshot or emu_start. The description explains internal action modes (press/longpress/tap) but does not compare with other tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

emu_logsA

Capture emulator logs, bounded — never a firehose.

Streams pebble logs for at most seconds, optionally cutting at the first line containing until_pattern (matched), and clamps the result to the last max_bytes bytes (truncated).

ParametersJSON Schema
NameRequiredDescriptionDefault
secondsNo
max_bytesNo
until_patternNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It explains the bounded streaming, optional early cut on pattern match, and clamping to max_bytes, including the resulting 'matched' and 'truncated' flags. It does not cover error scenarios or return format, but the output schema likely handles that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The opening line is a concise summary, and the second paragraph provides detailed parameter behavior in just two sentences. Every word earns its place, with no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a log retrieval tool, the description covers the core behavior and parameters succinctly. The presence of an output schema shifts the burden of return-value documentation, so the description is sufficiently complete, though it omits details like log ordering or what happens if the pattern is never found.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, so the description fully compensates by explaining each parameter: 'seconds' limits duration, 'until_pattern' triggers early termination, and 'max_bytes' clamps the result size. This adds significant meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Capture emulator logs' and immediately adds the key qualifier 'bounded — never a firehose,' which distinguishes it from other emulator tools like emu_screenshot or emu_input. It is specific about the resource and the action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use guidance or alternatives are mentioned. While the description implies its use for collecting logs, it does not explain when to choose this over other logging approaches or any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

emu_screenshotA

Capture one screenshot of the running emery emulator as an image.

Optional name sets the file basename (.png appended if absent). Errors clearly if no emulator is running or the emulator is wedged.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses the optional name behavior, .png appending, and the failure modes for a missing or wedged emulator. It doesn't describe the return format or where the image is saved, but the core behavior is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the main purpose, then optional parameter behavior, then error cases. Every sentence earns its place with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one optional parameter, no output schema), the description covers the essential aspects: what it does, how the parameter works, and when it fails. This is complete for an agent to select and invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only says 'name' is a string or null with a default of null (0% coverage). The description adds substantial meaning: 'Optional name sets the file basename (.png appended if absent),' explaining the purpose and default behavior of the sole parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Capture' with a clear resource: 'one screenshot of the running emery emulator as an image.' This distinguishes it from sibling tools like emu_start, emu_input, emu_logs, and emu_stop, which handle lifecycle, input, or logs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies a prerequisite: an emulator must be running. It also states it errors clearly if no emulator is running or it's wedged. This gives clear context for when to use the tool, though it doesn't explicitly name alternatives or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

emu_startA

Boot the Pebble emulator for the given platform (default emery).

Idempotent-ish: if one is already running this reconnects/restarts. Requires the pebble CLI on PATH.

ParametersJSON Schema
NameRequiredDescriptionDefault
platformNoemery

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of disclosing behavioral traits. It adds valuable context: the operation is idempotent-ish (will reconnect/restart if running) and requires the pebble CLI. This goes beyond a basic 'what it does' statement, though it omits details like boot time or failure behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is highly concise, using three short sentences to convey the core action, idempotency, and a prerequisite. Every sentence earns its place, and the main verb is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one optional parameter, output schema present), the description is mostly complete with the action, default, idempotency, and requirement. It could enumerate platform choices, but the output schema covers return values, so the gap is not critical.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, and the description only mentions 'given platform (default emery)' without explaining valid platform values or any semantics. It adds the default value but does not help the agent understand what to pass for 'platform'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool boots the Pebble emulator, names the resource and action, and distinguishes it from siblings like emu_stop, emu_screenshot, and pebble_build. It also notes the default platform, providing a specific scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides context by mentioning idempotent behavior and a prerequisite (pebble CLI on PATH), which helps the agent understand execution conditions. However, it does not explicitly mention when to use this tool versus alternatives or exclude any cases, so guidance is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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 pebble CLI on PATH.

ParametersJSON Schema
NameRequiredDescriptionDefault
wipeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the full burden. It discloses the main effect (shutdown), the wipe behavior (clears storage), and the CLI requirement. It could add what happens with unsaved state or error conditions, but for a simple stop tool this is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler, front-loaded with the core action. Every sentence serves a purpose: the first states the primary function, the second explains the wipe option and the prerequisite.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter stop tool, the description is complete: it covers the action, the optional flag, and the external dependency. It does not specify what happens if no emulator is running, but that is a minor gap given the simple scope.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has only one boolean parameter, 'wipe', with zero coverage in the schema descriptions. The description fully explains the parameter: 'wipe=True also clears its storage' and adds why it matters (fixes flakiness). This compensates entirely for the low schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb+resource: 'Shut down the running emulator', immediately clarifying the tool's function. It also mentions the wipe option, which distinguishes it from sibling tools like emu_start and emu_screenshot.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear usage context: 'Wiping is the fix for most emulator flakiness' explains when to enable wipe. It also notes the prerequisite of the pebble CLI. However, it does not explicitly contrast with alternatives like emu_start or mention when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

flow_runA

Run a gallery-style flow spec against the emery emulator and return every screenshot.

Parses flow_text (see pebble_mcp.flow for the line format), installs each app/pbw onto the emulator with the kill+wipe-first discipline, drives the buttons/waits, and captures the shot steps. Project dirs in app steps resolve against the repo root (parent of the pebble-mcp package dir, overridable via PEBBLE_MCP_REPO_ROOT). out_dir defaults to a fresh tempdir.

Returns a JSON metadata block — flow name, out_dir, per-shot {app, name, path, duration_s}, plus retries and wedge_recoveries — followed by one MCP image per shot.

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. press select on a "submit" / "send" screen or inside a value picker that commits on confirm). The convention is a # SAFETY RULES (live-write hazards — DO NOT TRIGGER): comment block at the top of every flow file; the bundled example flows under pebble_mcp/examples/flows/ show the pattern — follow their rules. Capturing those screens is fine; confirming them is not.

ParametersJSON Schema
NameRequiredDescriptionDefault
out_dirNo
flow_textYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description takes on the full burden of behavioral disclosure. It covers installation discipline (kill+wipe-first), environment variable override, default tempdir, the 40-shot guard, the metadata return format, and an extensive live-write hazard warning. This is far beyond a typical tool description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but each paragraph carries distinct information: what it does, how it executes, what it returns, its guard, and its safety rules. It's structured with paragraph breaks and front-loaded with the main purpose, so the length is justified.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is complex (executes flows, installs apps, captures screenshots, has safety hazards), and the description addresses all major aspects: input format reference, output structure, execution behavior, limits, and safety. Given no output schema, the description conveys the return shape. It is complete for an agent to use effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Both parameters are described beyond the schema: flow_text is identified as a flow spec with a reference to the line format, and out_dir is explained as defaulting to a fresh tempdir. While the exact flow_text syntax is externalized to a reference, the description gives enough context for an agent to understand what to pass.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+object and output: 'Run a gallery-style flow spec against the emery emulator and return every screenshot.' This clearly distinguishes it from sibling tools like flow_validate (validation) and emu_input (individual button presses).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool (running a flow and capturing screenshots) and includes safety exclusions about never confirming live-write actions. However, it doesn't explicitly name alternatives or contrast with flow_validate/emu_screenshot, so it falls short of the strictest 'when vs when-not' standard.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
flow_textYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses that it does not execute the flow, returns a summary (step_count, shot_count, steps_by_type, cap check), reports parse errors with 1-based line numbers, and requires no emulator. This is substantial behavioral context, though it omits permission/side-effect statements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose ('Parse a flow spec WITHOUT running it — a cheap pre-check'), followed by return details and usage guidance. All sentences are relevant, but the second sentence is slightly long and could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (one parameter) and the description covers purpose, behavior, return summary, error handling, and usage context. An output schema exists, so return values need not be detailed. It is complete for a validation tool, though it could mention edge cases or implicit limitations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has one parameter (flow_text) with no description, and the description only refers to it as 'flow spec.' It does not explain the format or syntax of the flow spec, so the description adds minimal meaning beyond the parameter name. Since schema coverage is 0%, it partially compensates but not fully.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool parses a flow spec without running it, explicitly distinguishes it from flow_run (the sibling execution tool), and describes the resulting step summary and error behavior. This is a specific verb+resource with strong sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description says 'Needs no emulator, so it is the right tool to validate a flow before spending an emulator run,' which clearly indicates when to use it (before executing a flow) and implies the alternative is running the flow. It does not explicitly state when not to use it or name alternatives by tool name, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

font_planA

Recommend Pebble system fonts for a UI role or a literal string.

Pass a role like "hero numerals", "body label", "title", "timer", "clock face numerals", "hint", or "button label" (curated from this project's DESIGN.md type scale) to get an ordered list of FONT_KEY_* candidates -- no resource cost, they're baked into firmware.

Pass literal text instead (e.g. "15:37" or "Rest 90s") to check it against every system font's glyph coverage: numbers-only fonts (the LECO family, and the Bitham/Roboto "_NUMBERS"/"_SUBSET" variants) that can't render the text are flagged with fits: false and missing_glyphs instead of being silently recommended. Either way, the response includes minimal_character_regex -- the tight characterRegex for a custom TTF font that ships only the glyphs actually used (the classic "[0-9:]" clock-digit trick from developer.repebble.com/guides/app-resources/fonts/).

size_hint (pixels) sorts candidates by closeness to that size. style filters/prefers a weight substring, e.g. "bold".

Zero-argument sharp edge: this never touches the network or a toolchain -- it's pure lookup, always available regardless of capability tier.

ParametersJSON Schema
NameRequiredDescriptionDefault
styleNo
size_hintNo
role_or_textYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full transparency burden and does so thoroughly. It discloses that the tool is a 'pure lookup' with 'no resource cost,' never touches the network or toolchain, and does not silently recommend fonts when glyphs are missing—instead flagging 'fits: false' and 'missing_glyphs'. It also explains the optional sorting/filtering effects of size_hint and style.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than average, but every sentence adds value—detailing input modes, output contents, parameter effects, and availability. It is well-structured with clear paragraphs and example code-like strings, and despite length, there is no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema, and 0% schema description coverage, the description is remarkably complete. It covers purpose, both invocation paths, response elements (ordered FONT_KEY_* list, minimal_character_regex), parameter semantics, and operational constraints. An agent can confidently select and invoke this tool based solely on the description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description fully compensates. It explains role_or_text with concrete examples and directs the check behavior, defines size_hint as 'sorts candidates by closeness to that size,' and defines style as 'filters/prefers a weight substring, e.g. bold.' All three parameters receive meaningful semantics beyond their bare titles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Recommend Pebble system fonts for a UI role or a literal string.' It clearly distinguishes two usage modes (role vs. literal text) and even lists example roles, leaving no ambiguity about the tool's function. No sibling tool handles fonts, so differentiation is inherent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit guidance on when to pass a role ('Pass a role like...') versus literal text ('Pass literal text instead...'), including expected outcomes for each. It also notes the tool is 'always available regardless of capability tier,' which is a useful when-to-use signal. It does not explicitly name alternatives, but none relevant exist among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

image_prepA

Resize/letterbox an image to a named target, quantize, and preview it.

Args: source: filesystem path, base64, or data: URI of the source image. target: "emery" (200×228), "menu-icon" (25×25), "appstore-banner" (720×320), or any platform name. fit: "contain" (letterbox) or "cover" (center-crop). dither: "floyd-steinberg" (default), "none", or "ordered". corrected: preview in sunlight-corrected display values.

Returns a stats object (target size, colors used, distance) plus the prepared preview image (2× nearest-neighbor upscale when small).

ParametersJSON Schema
NameRequiredDescriptionDefault
fitNocontain
ditherNofloyd-steinberg
sourceYes
targetNoemery
correctedNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses input formats, fit modes, dither options, a corrected-display flag, and the exact return shape including a preview upscale behavior. It does not mention error conditions or side effects, but for a non-destructive image processing tool this is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with an executive summary followed by a bullet-style args list and a one-sentence return description. Every line adds information; there is no filler or repetition of schema defaults.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no annotations and no output schema, the description covers all five parameters, their options, and the return value in enough detail for an agent to invoke the tool correctly. It also notes an edge case (2× upscaling for small images), making it complete for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description compensates fully by explaining each parameter: source accepts path/base64/data URI, target includes named dimensions, fit explains contain vs cover, dither lists all allowed values, and corrected is described as sunlight-display preview. This is exactly the meaning the schema lacks.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific, multi-verb purpose: 'Resize/letterbox an image to a named target, quantize, and preview it.' This distinguishes it from sibling tools like image_quantize by including resize, letterbox, target dimensions, and preview output.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies usage for image preparation to named targets, but it does not explicitly state when to use this tool versus alternatives such as image_quantize or color_nearest. There are no exclusions or alternative recommendations, so guidance is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

image_quantizeA

Quantize an image to the Pebble 64-color palette; return stats + preview.

Args: source: a filesystem path, a base64 string, or a data: URI of the source image (hosts without a filesystem send base64). dither: "floyd-steinberg" (default), "none", or "ordered". corrected: preview in the sunlight-corrected display values instead of the bright uncorrected palette (reporting is unaffected).

Returns a stats object (colors used, per-pixel distance) plus the quantized preview image (2× nearest-neighbor upscale when small).

ParametersJSON Schema
NameRequiredDescriptionDefault
ditherNofloyd-steinberg
sourceYes
correctedNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, but the description discloses key behaviors: it returns a stats object and preview image, details dithering options, explains the 'corrected' parameter's effect on preview while noting reporting is unaffected, and mentions 2× upscaling for small images. This gives the agent a clear picture of what will happen.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a compact docstring with explicit Args and Returns sections. It front-loads the main purpose in the first sentence and uses no filler. Every sentence adds value, from parameter semantics to return details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description must convey all relevant context. It covers inputs, outputs, defaults, and edge-case behavior (upscale, corrected preview). It does not mention error conditions, but for this tool's complexity, the description is sufficiently complete for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema only provides types and defaults. The description compensates fully by explaining each parameter: 'source' accepts a filesystem path, base64, or data URI; 'dither' lists three options with default; 'corrected' explains sunlight-corrected preview behavior. This adds significant meaning over the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Quantize an image to the Pebble 64-color palette; return stats + preview.' This clearly distinguishes from sibling tools like color_nearest or image_prep by specifying the exact palette and output.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for use: quantization of an image to a specific palette, with an input-format note for hosts without filesystems. However, it does not explicitly name alternative tools or exclusionary conditions, so it falls short of the highest bar.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

palette_swatchA

Render a labeled grid of color swatches to a PNG for eyeballing.

Args: colors: hex strings and/or "r,g,b" triples (1..64 of them). labels: optional captions, one per color; defaults to each color's palette name (or its hex when off-palette).

ParametersJSON Schema
NameRequiredDescriptionDefault
colorsYes
labelsNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full responsibility for disclosure. It adds meaningful context by specifying that labels default to palette names, and it limits the color count to 1..64. However, it does not mention side effects like file output or error handling, which would be expected for a tool that generates a PNG.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with a one-sentence summary, followed by a clean Args section. Every sentence contributes necessary information, and it is appropriately sized for a two-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the tool's purpose, parameters, and defaults, which is sufficient for a simple rendering tool. It doesn't specify how the PNG is delivered (e.g., file path or base64) or the exact grid layout, but these are secondary details. Given the output schema is absent, the description is mostly complete but could add one line about the output channel.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides no parameter descriptions, so the description fully compensates. It explains that colors accept hex strings or "r,g,b" triples with a count constraint, and it clarifies that labels are optional with a default behavior. This is exactly the kind of semantic enrichment needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb and resource: "Render a labeled grid of color swatches to a PNG for eyeballing." This distinguishes the tool from siblings like color_nearest or image_quantize by emphasizing visualization for human inspection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase "for eyeballing" provides a clear context for when the tool is appropriate, but there is no explicit mention of alternatives or when not to use it. It lacks the explicit exclusions that would earn a 5, but the use case is well implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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 (pdc_base64) plus size_bytes, image width/height, num_commands, and any non-fatal warnings (e.g. odd coordinates -- PDC recommends an even-integer coordinate grid for crisp rendering). On failure, valid is false, pdc_base64 is absent, and violations lists exactly what to fix, one entry per offending element/attribute.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
svg_textYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully discloses behavior: it validates known constraints before conversion, returns structured violations instead of a broken file, reports non-fatal warnings (odd coordinates), and on failure lists exactly what to fix. It also states the tool 'never guesses at a lossy conversion,' setting explicit expectations about failure handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well-organized, with clear sections: purpose, validation behavior, supported/unsupported features, success/failure output, and next-step advice. Every sentence adds value, and the structure allows an agent to quickly extract the important constraints and response contract.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (format conversion with many constraints), the lack of an output schema, and zero annotations, the description is remarkably complete. It covers input requirements, failure modes, success output fields, warnings, and remediation steps. An agent has enough context to decide when to invoke this tool and what to do with the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has only one parameter, svg_text, with no description (0% coverage). The description compensates by explaining what the SVG input should contain—supported element types, unsupported transforms, and required pre-processing (flatten curves). It implicitly defines svg_text as the SVG XML string and provides concrete guidance on its valid content, though it does not explicitly say 'svg_text is the SVG source code.'

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'Convert an SVG icon/vector to a Pebble Draw Command (.pdc) file.' This clearly distinguishes the tool from siblings like image_quantize or font_plan, which address different steps in the Pebble design pipeline.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives abundant context on appropriate use: it enumerates supported SVG elements, lists unsupported features (gradients, masks, clip paths, etc.), and instructs the user to 'flatten curves first' and remove unsupported elements before retrying. It stops short of explicitly naming alternative tools or saying 'use this tool instead of X', but the constraints provide clear when-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pebble_buildA

Build a Pebble app project and return structured results.

Runs pebble build in project_dir (absolute, or relative to the workspace root). Returns success, the produced .pbw path, and compiler errors/warnings as structured file:line diagnostics. Requires the pebble CLI on PATH (see capabilities()).

ParametersJSON Schema
NameRequiredDescriptionDefault
project_dirYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full transparency burden. It discloses that the tool executes an external command, what the return value includes (success, .pbw path, diagnostics), and a prerequisite. It does not mention side effects like writing build artifacts to disk, but for a build tool the main behavior is clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with the purpose, and each sentence adds distinct value: what it does, how it runs, and what it returns plus a prerequisite. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a build tool with an output schema, the description covers the essential context: command executed, path semantics, required CLI, and the nature of the returned data. The presence of an output schema means return values don't need to be spelled out in detail. This is complete for an agent to decide whether and how to invoke it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must add meaning. It explains that project_dir can be absolute or relative to the workspace root, which is exactly the semantic detail beyond the raw schema. For a single parameter, this is sufficient and useful.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Build a Pebble app project' with a specific verb and resource, and distinguishes from sibling tools like project_new, pebble_install, and flow_run by focusing on compiling and returning diagnostics. It immediately conveys the tool's core function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It specifies the action (runs pebble build), the project_dir parameter's path resolution, and the requirement for the pebble CLI on PATH, with a pointer to capabilities(). This gives clear context for when to use it, though it doesn't explicitly mention when not to use it or name alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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 pebble CLI on PATH.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYes
platformNoemery

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the transparency burden. It explicitly discloses destructive behavior ('emulator is killed and wiped first'), startup delay, and environmental prerequisite ('Requires the pebble CLI on PATH'). This is substantial disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four concise sentences, front-loaded with the primary action, then target semantics, side effects, and environment requirement. Every sentence adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers target types, destructive side effects, startup delay, and the CLI requirement. It omits the 'platform' parameter meaning, and since an output schema exists, return values are not required. Overall it is adequate for a tool with this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description thoroughly explains the 'target' parameter (project directory vs .pbw, relative path resolution). However, it does not mention the 'platform' parameter at all, leaving its default and meaning undocumented. Since schema description coverage is 0%, this is a partial gap in compensating for parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Install an app into the emulator, starting it if needed.' This clearly differentiates it from sibling tools like emu_start (which just starts the emulator) and pebble_build (which builds without installing).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context: target can be a project directory or a .pbw file, relative paths resolve against workspace root. However, it does not explicitly name alternative tools or state when not to use this tool, so it lacks explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_add_resourceA

Add a resource to a project and register it in package.json.

Copies source into <dir>/resources/ (created if missing) and appends/updates a resources.media entry with the given name and resource_type ("bitmap" | "font" | "raw"). For bitmaps, source may also be base64 / a data: URI, and passing prep_target (e.g. "emery", "menu-icon") routes the image through the design tier -- resize/letterbox + palette quantize -- before writing it. Returns the updated media list and the written file.

ParametersJSON Schema
NameRequiredDescriptionDefault
dirYes
nameYes
sourceYes
prep_targetNo
resource_typeNobitmap

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses key behaviors: copying source, creating directories if missing, appending/updating the media entry, supporting base64/data URIs for bitmaps, routing through the design tier when prep_target is set, and returning the updated media list and written file. This is thorough and transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured, front-loading the primary purpose in the first sentence. Subsequent sentences add necessary detail about copying, registration, and edge cases. It's slightly long but every sentence contributes valuable information, so it's appropriately concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 5 parameters, no annotations, and no output schema, the description is complete. It explains the action, all parameters, behavioral nuances, and return values (updated media list and written file). There are no obvious gaps in understanding what the tool does.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains resource_type values ('bitmap' | 'font' | 'raw'), defines prep_target with examples ('emery', 'menu-icon'), clarifies that source can be base64/data URI for bitmaps, and meaningful context for dir and name. This fully compensates for the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action with a specific verb and resource: 'Add a resource to a project and register it in package.json.' It further details that it copies source into resources/ and updates the media list, distinguishing it from sibling tools like image_prep or project_set_meta.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: you use this tool to add resources to a project, and it explains optional preprocessing via prep_target. It does not explicitly mention alternatives or when-not-to-use, but the behavior is clear enough for an agent to infer appropriate usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_infoA

Summarize an existing Pebble project from its package.json.

Returns name, displayName, uuid, kind/watchface, detected language (C vs JavaScript/Alloy, inferred from projectType and src/ layout), project_type, platforms, capabilities, messageKeys, resources (the media list), and sdkVersion. Raises a clear error if dir has no package.json or no pebble block.

ParametersJSON Schema
NameRequiredDescriptionDefault
dirYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It explicitly states error behavior ('Raises a clear error if dir has no package.json or no pebble block') and describes the inference logic (language detection from projectType and src/ layout). It does not explicitly state read-only, but the verb 'Summarize' strongly implies no side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the main purpose, then lists return fields in a structured, comma-separated format, and ends with error conditions. Every sentence earns its place without unnecessary fluff. The formatting makes it easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, no output schema), the description is fairly complete: it enumerates the full return payload and clearly states error conditions. It does not mention side effects, but 'Summarize' implicitly indicates a read-only operation. Missing explicit read-only confirmation is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single parameter 'dir'. The description only indirectly clarifies that 'dir' is a directory containing package.json (from the error condition). It does not explicitly define the expected path format or that it should point to the project root. This is a partial compensation but not fully explicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb-resource statement: 'Summarize an existing Pebble project from its package.json.' It also enumerates the exact return fields (name, displayName, uuid, etc.), making the tool's scope unmistakable and distinguishing it from siblings like project_set_meta or project_new.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context is clear: this tool is for reading/summarizing an existing Pebble project. It does not explicitly mention alternatives or when-not-to-use, but the phrasing 'existing' and the focus on package.json makes its role distinct. A brief exclusion (e.g., 'to create a project use project_new') would elevate it to a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_newA

Scaffold a new, immediately buildable Pebble project.

Writes the files directly (pure Python -- no pebble new-project shell-out), so it works on hosts without the CLI. The result compiles to a .pbw with pebble build as-is.

kind -- "watchface" (default; sets watchapp.watchface) or "watchapp". language -- "c" (default) emits src/c/<name>.c (a working digital-clock TextLayer for a watchface, or a Window+TextLayer for a watchapp) + wscript; "javascript" emits an Alloy project (projectType: "moddable", the modern on-watch JS engine): src/c/mdbl.c glue + src/embeddedjs/main.js

  • manifest.json + src/pkjs/index.js.

platforms -- defaults to all seven for C (aplite/basalt/chalk/diorite/emery/flint/gabbro). Alloy runs only on the Moddable-XS platforms emery (Time 2) and gabbro (Round 2), so JavaScript projects default to and are clamped to those (dropped platforms are reported in warnings).

companion adds a phone-side src/pkjs/index.js (implied for Alloy). config adds a pebble-clay settings page (src/pkjs/config.js + the dependency + companion). dest_dir is the parent directory; the project is created in <dest_dir>/<slug(name)>.

Returns path, uuid (a fresh uuid4), kind, language, platforms, files_created, warnings, and next_steps.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNowatchface
nameYes
configNo
dest_dirNo.
languageNoc
companionNo
platformsNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It details side effects (writes files directly), file structure per language, platform defaults and clamping, dropped platforms reported in warnings, and the returned fields (path, uuid, etc.). This is highly transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but appropriately so given 7 parameters and no schema descriptions. It is well-structured with bolded parameter names and code-formatted paths. Every sentence adds valuable information, and the key purpose is front-loaded. No fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema, so the description must explain return values, which it does clearly. It also covers file creation, platform constraints, and implications of options. It is complete for a scaffolding tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description must explain all parameters. It thoroughly explains every parameter: kind (watchface/watchapp), language (c vs javascript with details), platforms (defaults and clamping), companion, config, and dest_dir. Even name is referenced in the path and file naming (`<slug(name)>`). This fully compensates for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb ('Scaffold') and resource ('new, immediately buildable Pebble project'), clearly distinguishing it from siblings like pebble_build (build) and project_info (inspect). The additional detail about writing files directly without shelling out to the CLI adds further specificity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool: for scaffolding a new project on hosts without the CLI. It explains platform clamping for JavaScript projects and the effect of companion/config options. However, it does not explicitly mention when NOT to use it or alternative tools (e.g., use pebble_build for compilation).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_set_metaA

Edit a project's pebble metadata block in place.

uuid sets a specific UUID (or the literal "new" to generate a fresh uuid4). add_platforms / remove_platforms adjust targetPlatforms (validated against the seven known platforms, kept in canonical order). capabilities and message_keys replace those lists wholesale. Returns the updated pebble block.

ParametersJSON Schema
NameRequiredDescriptionDefault
dirYes
uuidNo
capabilitiesNo
message_keysNo
add_platformsNo
remove_platformsNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses in-place editing, validation against seven known platforms, canonical ordering, and that capabilities/message_keys are replaced wholesale. It also notes the return value. Missing details like error behavior or prerequisites, but overall strong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, front-loaded with the core action, and each sentence adds meaningful detail about parameter behavior. No fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the 6 parameters and no output schema or annotations, the description covers the key behaviors: what each parameter does, validation, and return value. It omits prerequisites (e.g., valid project directory) and error handling, but for a focused mutation tool it is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains the semantics of uuid (including the 'new' literal), add/remove_platforms (validation and canonical order), and capabilities/message_keys (wholesale replacement). The required 'dir' parameter is not explicitly described, but the name is somewhat self-explanatory.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool edits a project's 'pebble' metadata block, using a specific verb ('Edit') and a specific resource. It distinguishes from sibling tools like project_info (read) and project_new (create) by focusing on modification of an existing metadata block.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use for editing existing project metadata, but does not explicitly state when to use this tool over alternatives or provide exclusions. It lacks direct guidance on when not to use it, though the context is reasonably clear from the parameter descriptions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_smoke_testA

Build, install, and screenshot a project — the one-call "does it run?".

Builds dir (relative to the workspace root, or absolute); if it builds, installs the fresh .pbw onto the emulator (kill+wipe-first) and captures the launch screen. Returns {built, installed, errors[], warnings[], pbw_path, launch_shot, notes} plus the launch screenshot as an image.

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 pebble CLI on PATH (see capabilities()).

ParametersJSON Schema
NameRequiredDescriptionDefault
dirYes
platformNoemery

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It thoroughly explains the build-then-install-then-screenshot flow, including the destructive 'kill+wipe-first' emulator reset, the failure path (built=false, skips install), and the exact return fields. It even notes the CLI dependency, giving the agent a clear picture of side effects and requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is moderately sized but efficiently structured: a punchy first sentence summarizing the tool, followed by behavior, return value, failure mode, and prerequisite in logical order. Every sentence contributes information, though it could be tightened slightly without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Even without an output schema, the description lists the return fields and explains failure behavior, making it quite complete for a composite tool. It lacks details on the 'platform' parameter and what happens if installation fails, but these are minor gaps relative to the overall richness of information provided.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains 'dir' well (relative to workspace root or absolute), but it says nothing about 'platform' (default 'emery'), leaving the agent without guidance on this parameter. The description adds some value by clarifying the main parameter, but it does not fully cover the schema's parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Build, install, and screenshot a project — the one-call "does it run?"', which clearly states the tool's verb, resource, and overarching purpose. It distinguishes itself from sibling tools like pebble_build, pebble_install, and emu_screenshot by advertising this as a combined smoke-test operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly frames this as 'the fastest "did my change compile" check', giving a clear use case. It also implies when not to use it (e.g., for a full build-only workflow) by describing its combined behavior, though it does not explicitly name alternative tools. The prerequisite 'Requires the `pebble` CLI on PATH' provides additional contextual guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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 has_emery convenience flag), the latest release (version + date + notes), the direct .pbw download URL, and screenshot/header image URLs.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must disclose behavioral traits. It lists the return fields in detail (hearts, author, platforms, release, download URL, images), indicating a read-only metadata operation. However, it does not mention potential errors, authorization requirements, or any side effects beyond the obvious read-only nature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose, followed by a concise list of returned data. Every sentence adds value, with no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a single required parameter, an existing output schema, and a simple return structure, the description covers the primary invocation and the key data points. It could mention where the app_id comes from or what happens for invalid IDs, but it is generally complete for a metadata lookup tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must add meaning to the single parameter app_id. It says 'by its id' but does not provide any format, example, or where to obtain the ID. This is minimal compensation for the schema's lack of documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Full metadata for one appstore app or watchface by its id', a specific verb+resource that clearly distinguishes this tool from siblings like store_search or store_developer. It explicitly states the single-item lookup by ID, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it (when you have a specific app id) but does not explicitly contrast it with alternatives or list exclusions. The sibling tool names (store_search, store_collection, etc.) further clarify the context, but an explicit 'use this instead of...' would strengthen this dimension.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

store_categoryA

List apps in a store category (e.g. faces, games, tools), paginated, as compact id/title/type/author/hearts summaries with a compatible flag for the requested hardware. has_more indicates further pages.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNo
limitNo
offsetNo
hardwareNoemery
category_slugYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the burden. It discloses pagination via has_more, the compact summary fields, and the hardware-dependent compatible flag. It does not mention read-only status or error behavior, but 'List' and these output details provide adequate transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with the core action, and includes useful examples and pagination/flag notes without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present for return values, the description covers purpose, category examples, hardware behavior, and pagination. The main remaining gap is the undocumented sort parameter and lack of explicit sibling differentiation, but overall this is sufficient for a simple list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description only clarifies category_slug (via examples) and hardware (via the compatible flag). It does not explain sort, limit, or offset beyond the broad 'paginated' mention, nor does it mention defaults such as limit=20 or offset=0.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description opens with specific verb and resource ('List apps in a store category') and gives concrete slug examples. This clearly differentiates it from sibling tools like store_search or store_app, which target query-based or single-app scenarios.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies the use case: browsing a category's app listing with pagination. It does not explicitly name alternatives or when-not-to-use, but the context is unambiguous enough for an agent to select it appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

store_collectionA

List a named store collection, paginated, as compact summaries.

slug examples: most-loved, all, recently-updated, or a collection slug from a home row. type_string must be one of apps, watchapps-and-companions, faces, watchfaces. Each result row is id/title/type/author/hearts plus a compatible flag for the requested hardware. has_more indicates further pages; raise offset by limit to page.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYes
sortNo
limitNo
offsetNo
hardwareNoemery
type_stringYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of explaining behavior. It discloses pagination behavior (has_more flag, offset/limit paging) and the result format (fields per row), which is useful. However, it does not mention whether any side effects occur, authentication requirements, or error conditions. The description is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured. It front-loads the purpose in the first sentence, then provides necessary parameter details in the following sentences. No unnecessary filler; every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 6 parameters and an output schema, the description covers the essential behavior: pagination, result fields, and required parameter values. However, it leaves out 'sort' semantics and possible hardware values. The output schema likely covers return structure, so the description is mostly complete but has minor gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds meaning for slug (examples), type_string (allowed values), limit/offset (pagination), and hardware (requested hardware flag), but does not explain the 'sort' parameter at all. Partial compensation with notable gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'List a named store collection, paginated, as compact summaries.' It specifies the resource (store collection) and provides concrete examples of slug values, which distinguishes it from sibling tools like store_search or store_category.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives context on how to use the tool (e.g., valid slug examples and type_string values) and explains pagination, but it does not explicitly say when to use this tool over alternatives like store_search or store_developer. The usage is implied rather than contrasted with siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

store_compareA

Bulk-fetch several apps by id and return a side-by-side comparison table for competitive research.

rows has one entry per found app with: hearts, type, the list of compatible platforms, a has_emery flag, the latest release date, and the .pbw URL. Any ids that don't resolve come back in missing_ids rather than failing the whole call.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the transparency burden and does well: it explains what rows contain and explicitly states the graceful missing-id behavior (returned in missing_ids rather than failing). It doesn't cover authentication or rate limits, but for a read-only bulk fetch the key behaviors are disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact: a one-sentence purpose, a one-sentence breakdown of rows, and a one-sentence error-handling note. The most important information is front-loaded and every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's modest complexity (one parameter, a comparison-table output), the description fully covers what the agent needs: what ids to pass, what fields to expect, and how missing ids are handled. The output schema could provide further detail on return types, but the description alone is sufficient for correct selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, app_ids, has no schema description (0% coverage), so the description must compensate. It does by explaining the tool fetches 'several apps by id' and that unresolved 'ids' appear in missing_ids, making the parameter's meaning and behavior clear beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific action ('Bulk-fetch several apps by id') and output ('side-by-side comparison table'), which clearly distinguishes it from sibling tools like store_search or store_app. The purpose is immediately understandable and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'for competitive research' gives clear usage context, and the tool's batch-by-id nature implies using it when you have specific app identifiers rather than a search query. However, it does not explicitly name alternatives or state when not to use it, so it stops short of full guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

store_developerA

List every app published by one developer, paginated, as compact id/title/type/author/hearts summaries with a compatible flag for the requested hardware. has_more indicates further pages.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNo
limitNo
offsetNo
hardwareNoemery
developer_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It transparently describes the paginated response, the compact summary fields, the compatible flag tied to hardware, and the has_more indicator. It does not cover edge cases or side effects, but for a read-only listing tool, this is substantial transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the main action, and includes only essential details. Every word earns its place, and the structure is highly scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 5 parameters, no annotations, but an output schema exists. The description covers the core behavior, output shape, and pagination, but leaves the sort parameter undefined and does not explicitly state how offset/limit interact with pagination. It is adequate but not fully complete for an agent to use all features correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description enriches the hardware parameter by explaining its role in the compatible flag, and implies limit/offset through 'paginated' and has_more. However, it fails to explain the 'sort' parameter's options or meaning, and developer_id is only implied, not explicitly tied to the parameter. Given 0% schema coverage, this is a partial but incomplete compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies a clear action ('List'), a precise resource ('every app published by one developer'), and distinguishes itself from sibling tools like store_search and store_collection by focusing on a single developer's catalog. It also mentions pagination and the output format, making the purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies the tool's use case: when you need all apps for a given developer_id, with optional hardware filtering. However, it does not explicitly state when not to use it or offer alternatives, though the context is strong enough for an agent to select it appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

store_download_pbwA

Download an app's latest-release .pbw to dest_dir.

Creates dest_dir if needed, writes the file, and returns its path and byte size (plus the app title and version). The on-disk filename is derived from the (untrusted) appstore response but always sanitized to a single basename inside dest_dir — a hostile id/version cannot traverse out. Refuses with a clear error if: the app has no published .pbw; dest_dir exists as a non-directory; the body is empty (0 bytes); or the body exceeds a 32 MiB safety cap (real .pbw files are well under a megabyte). Sends the polite pebble-mcp User-Agent. This feeds the install/emulator flow — hand the returned path to a Tier 3 install tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYes
dest_dirYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully discloses side effects: it creates dest_dir, writes the file, sanitizes filenames to prevent traversal, enforces a 32 MiB cap, and sends a User-Agent. Error conditions (no published .pbw, non-directory dest_dir, empty body, oversize body) are enumerated, providing comprehensive behavioral transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the main action and then adds concise, high-value details about side effects, safety, and return value. Every sentence earns its place; no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and a sparse schema, the description is remarkably complete: it covers purpose, side effects, error handling, security behavior, return values, and downstream usage. The existence of an output schema allows it to omit detailed return formatting, but it still mentions key return fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% coverage, but the description uses both parameters in context: 'app_id' identifies the app and 'dest_dir' is the destination directory that gets created if needed. This provides enough meaning for an agent to understand their roles, though it does not explicitly define acceptable formats or sources for app_id.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb–resource pair: 'Download an app's latest-release .pbw to dest_dir.' This clearly distinguishes it from sibling tools like store_search or store_app, which likely handle metadata. The purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states that this feeds the install/emulator flow and instructs passing the returned path to a Tier 3 install tool, giving clear usage context. However, it does not explicitly name alternative tools or state when not to use this tool, only implying it via the flow description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 29 tool updatesv0.1.0
    • First observedcapabilities
    • First observedcolor_nearest
    • First observeddesign_review
    • First observedemu_input
    • First observedemu_logs
    • First observedemu_screenshot
    • First observedemu_start
    • First observedemu_stop
    • First observedflow_run
    • First observedflow_validate
    • First observedfont_plan
    • First observedimage_prep
    • First observedimage_quantize
    • First observedpalette_swatch
    • First observedpdc_convert
    • First observedpebble_build
    • First observedpebble_install
    • First observedproject_add_resource
    • First observedproject_info
    • First observedproject_new
    • First observedproject_set_meta
    • First observedproject_smoke_test
    • First observedstore_app
    • First observedstore_category
    • First observedstore_collection
    • First observedstore_compare
    • First observedstore_developer
    • First observedstore_download_pbw
    • First observedstore_search

TDQS

A4.1/5.0

Scored across 29 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: store tools differentiate by id/collection/category/developer/search/compare/download, image tools separate quantization from prep, flow_run vs flow_validate distinguish execution from parsing, and emulator tools split start/stop/screenshot/input/logs. No two tools are interchangeable.

Naming Consistency4/5

Most tools follow a <domain>_<operation> snake_case pattern (store_*, emu_*, project_*, pebble_*), but 'capabilities' is a bare noun and 'color_nearest' inverts verb-object order. A few tools use nouns as operations (palette_swatch, font_plan), introducing minor inconsistency.

Tool Count2/5

29 tools exceeds the 25+ threshold for 'too many' per the calibration rubric. While the scope is broad, the store subdomain alone accounts for 7 tools, making the overall set feel heavy for an MCP server.

Completeness5/5

The tool surface covers the full Pebble development workflow: project scaffolding/config/resource management, build/install/smoke testing, emulator control, flow validation/execution, store browsing/download, image processing, and design review. No critical gaps for the intended purpose.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers