Skip to main content
Glama


30-second start

Pick one. Run it. You're done. The recommended path is first.

Runtime: Node β‰₯ 20.11 (24 recommended). macOS, Linux, Windows (WSL2 for --fix native deps).

Click an install button above. Then paste one of these into chat:

β€’ Make a transparent logo for Forge, a dev-tools brand. Flat vector, warm orange.
β€’ Make a favicon for my app, dark-mode aware.
β€’ Fan this master.png out to iOS + Android + PWA.
β€’ Ingest this screenshot as a mark, vectorize, export everything.

Works in Cursor, Claude Code, VS Code, Windsurf, Codex, Gemini CLI. Zero terminal typing.

🟒 Zero key, zero install

One curl, one npx. Offline fan-out to every platform.

curl -o logo.png \
  "https://image.pollinations.ai/prompt/\
minimal+flat+vector+logo\
?model=flux&width=1024&nologo=true"

npx prompt-to-asset export logo.png \
  --platforms ios,android,pwa,favicon

Outputs: iOS AppIconSet, Android adaptive, PWA, favicon bundle, visionOS scaffold.

🟣 CLI · free API keys

Best CLI experience: free tokens first, paid keys optional.

npm i -g prompt-to-asset
p2a doctor          # check env
p2a doctor --fix    # auto-install deps
p2a pick            # interactive

Start with Cloudflare Workers AI, NVIDIA NIM, HF Inference, Stable Horde, and free trials. Paid providers remain optional fallbacks.

Free paths at a glance

You don't need a paid API key. Ranked best-first:

Route

Gets you

Signup

inline_svg via AI assistant

Logos, favicons, icon packs β€” instant

None

Cloudflare Workers AI

Flux-1-Schnell + SDXL, 10k neurons/day

Free token + account ID

NVIDIA NIM

Flux.1-dev, Flux.2-klein, SDXL, SANA

Free token, no card

HF Inference

SDXL, SD3, Flux dev/schnell

Free read token

Stable Horde

SDXL, Flux on community GPUs

Anonymous queue

Pollinations (HTTP GET)

Last-resort raster, RGB

None

Google AI Studio (paste-only UI)

Nano Banana / Nano Banana Pro

Google account

Details + quotas: Free paths beyond Pollinations. Run p2a doctor or ask your assistant for asset_doctor() to see what's live right now.

TIP

Stuck? ClickInstall in Cursor or Install in VS Code above, restart the editor, and say: "make a favicon for my app, dark-mode aware."


Related MCP server: Image Generation MCP Server

Highlights

  • Free CLI-first generation β€” p2a doctor, p2a pick, and the MCP tools rank free API routes before paid models, so developers can generate inside the CLI without enabling billing.

  • Three execution modes β€” inline_svg (host LLM authors SVG), external_prompt_only (paste into any web UI), api (server calls a free or paid provider). Pick what fits. All three can finish on $0.

  • 60+ models, free-first routing β€” Cloudflare Workers AI, NVIDIA NIM, HF, Horde, Pollinations, free trials, plus optional paid OpenAI / Ideogram / Recraft / BFL / Gemini. Each rule cites a research source.

  • Refuses to do the wrong thing β€” the Never column. No wordmarks past 3 words through a diffusion sampler. No transparent PNG through Imagen. No negative_prompt on Flux.

  • Offline platform fan-out β€” one 1024Β² master β†’ iOS AppIconSet, Android adaptive + monochrome, PWA 192/512/512-maskable, favicon bundle, visionOS parallax, Flutter launcher. Zero network.

  • Validates before shipping β€” tier-0 checks on every output: dims, alpha presence, checkerboard FFT, safe-zone bbox, Ξ”E2000 palette drift, WCAG contrast, OCR Levenshtein on wordmarks.

  • Sprite sheets + 9-slice β€” pack PNG frames into TexturePacker-compatible atlases (Phaser, PixiJS, Godot, Unity); emit 9-slice numbers + CSS border-image + Android .9.png.


Table of contents


Usage

You just talk to your assistant. Example from a new chat:

Make me a transparent logo for a developer-tools company called Forge. Flat vector, two-tone warm orange on neutral.

Behind the scenes:

  1. asset_doctor() β€” check what modes and providers are live.

  2. asset_init_brand({ app_name: "Forge", palette: ["#EA580C", "#F5F5F4"] }) if no brand.json exists.

  3. asset_enhance_prompt({ brief }) returns an AssetSpec: classification, rewritten prompt, modes_available[], optional svg_brief, optional paste_targets, and a routing_trace pointing at the research file that backed the decision (plus never_models β€” why Imagen or DALLΒ·E got rejected).

  4. Assistant offers you inline_svg / external_prompt_only / api.

  5. If inline_svg: it writes <svg> inline and calls asset_save_inline_svg β†’ writes master.svg, favicon.ico, apple-touch, AppIconSet, PWA bundle to disk.

  6. If external_prompt_only: assistant shows the refined prompt and the best paste target (free first). You generate, save, then say "ingest this file" β†’ asset_ingest_external.

  7. If api: assistant calls the routed provider. Server mattes, vectorizes, exports, validates.

  8. Follow-up: "also fan this out for iOS and Android" β†’ asset_export_bundle with the saved master.

Zero CLI typing. The CLI is still first-class for CI, shell scripts, and non-MCP environments β€” both surfaces hit the same core.


Why this exists

Two facts shape everything here.

Producing production-grade software assets is a routing and post-processing problem, not a prompt-engineering problem.

Imagen 3/4 and Gemini Flash Image can't produce real RGBA PNGs β€” their VAE is RGB-only, so asking for a transparent background renders the grey-and-white checkerboard as pixels. SDXL can't spell past ~8 characters. Only Recraft emits native SVG. Flux errors on negative_prompt. None of that is visible in the model UI. All of it silently breaks one-shot "prompt β†’ asset" tools.

You may not have an image-model API key. The plugin works anyway.

Every one of the three modes can finish on $0.


The three modes

flowchart LR
    A["one-line brief"] --> B["asset_enhance_prompt"]
    B --> C{"mode"}
    C -->|inline_svg| D["Host LLM emits SVG inline<br/>β†’ asset_save_inline_svg"]
    C -->|external_prompt_only| E["Paste into web UI<br/>β†’ asset_ingest_external"]
    C -->|api| F["Server calls routed provider"]
    D --> G["matte Β· vectorize Β· validate"]
    E --> G
    F --> G
    G --> H["AssetBundle<br/>ios Β· android Β· pwa Β· favicon Β· visionos Β· flutter"]

Mode

Key?

What happens

Best for

inline_svg

No

Server returns an SVG-authoring brief (viewBox, palette, path budget ≀ 40). Host LLM emits <svg>…</svg> inline, then asset_save_inline_svg writes master + favicon.ico + apple-touch + AppIconSet + PWA bundle. Instant. Deterministic.

Logos, favicons, icon packs, stickers, simple app-icon masters

external_prompt_only

No

Server returns the dialect-correct prompt plus a ranked list of paste targets, free paths first: Pollinations, HF Inference, Stable Horde, Google AI Studio, Ideogram, Recraft, Midjourney, fal.ai, BFL, ChatGPT, Firefly, Krea. Generate elsewhere, save locally, call asset_ingest_external.

Anything β€” best for illustrations, heroes, text-heavy logos

api

Optional

Server calls the provider directly. Works zero-key via Pollinations / Horde / HF, or with paid keys. Route β†’ generate β†’ matte β†’ vectorize β†’ export β†’ validate β†’ content-addressed bundle.

Automation, CI, no rate-limit tolerance

The host LLM picks the mode, or you do. The server surfaces modes_available so the assistant offers them to you. Free paths first β€” always.


The router

Router decisions live in data/routing-table.json. Capability matrix in data/model-registry.json. Every rule cites its research source.

Need

Primary

Fallback

Never

Transparent PNG mark

gpt-image-1.5 with background:"transparent"

Ideogram 3 Turbo (/generate-transparent) β†’ Recraft V4

Imagen, Gemini Flash Image, SD 1.5

Logo with 1–3 word text

Ideogram 3 Turbo β†’ gpt-image-1.5 β†’ Recraft V4

Composite SVG type over mark

Imagen, SD 1.5, flux-schnell

Logo with >3 word text

Never a diffusion sampler. Mark + SVG typography composite.

β€”

β€”

Native SVG

Recraft V4 (V3 for brand-style pipelines)

inline_svg (host LLM authors SVG)

Everyone else

Photoreal hero

Free CLI route first: Cloudflare / NVIDIA NIM / HF

Flux Pro / gpt-image-1.5 / Gemini with paid keys

DALLΒ·E 3, Imagen 4 for new work

Iterate an existing mark

flux-kontext-pro (edit-only)

Pollinations Kontext (free)

β€”

Zero-cost everything

inline_svg β†’ Cloudflare / NVIDIA NIM / HF / Horde

Pollinations β†’ paste-only

β€”

The Never column matters. It's why prompt-to-asset refuses to render wordmarks past 3 words in any diffusion sampler, and why asking for a transparent PNG never goes to Imagen.


Free paths beyond Pollinations

Option

How

Best at

Catch

Cloudflare Workers AI

Free API token + account ID

Flux-1-Schnell, SDXL, DreamShaper

10k neurons/day cap (~900 Flux-Schnell or 5k SDXL-Lightning)

NVIDIA NIM

Free API token, no card

Flux.1-dev, Flux.2-klein, SDXL, SANA

1k requests/month; strong free CLI route

HF Inference

Free read token

SDXL, SD3, Flux dev + schnell

Rate-limited, cold-start latency

Stable Horde

Anonymous kudos queue

SDXL, Flux community GPUs

Minutes of queue on the free lane

Pollinations.ai

curl β†’ HTTP GET. No signup.

Throwaway raster

Last resort: silent model swaps, downsizing, RGB only

Google AI Studio (UI)

Free interactive web UI at aistudio.google.com

Nano Banana / Nano Banana Pro

No free API β€” paste-only; download PNG, call asset_ingest_external

Local ComfyUI

Community comfyui-mcp adapter

Full fidelity, no caps

You bring the GPU

inline_svg

Host LLM emits <svg> in chat

Logos, favicons, simple icons

≀40 paths; simple geometry

external_prompt_only

Paste into any web UI

Whatever that UI gives you

Manual save, then asset_ingest_external

Verified 2026-04-26 against public Gemini API pricing:

  • Imagen 4 image output is paid API. The pricing table lists Free Tier as "Not available" and prices Fast / Standard / Ultra at $0.02 / $0.04 / $0.06 per image.

  • Nano Banana family is paid API. gemini-3.1-flash-image-preview (Nano Banana 2), gemini-3-pro-image-preview (Nano Banana Pro), and gemini-2.5-flash-image (original Nano Banana) list image output only in the paid tier. Billing must be enabled on the GCP project to use these via API.

  • Free for text, multimodal understanding, and embeddings. The Gemini text-out models still have Free of charge input + output on the free tier.

  • Free interactive image generation is also via the AI Studio web UI at aistudio.google.com. Community-observed limit 500–1,000 images/day, dynamic. Use external_prompt_only + asset_ingest_external if you want Nano Banana quality without billing.

  • Free image generation via the Gemini consumer app at gemini.google.com: Basic 20/day, AI Plus 50/day, AI Pro 100/day, Ultra 1,000/day.

  • Paid API pricing (per image, standard): Nano Banana (gemini-2.5-flash-image) $0.039; Nano Banana 2 Flash (gemini-3.1-flash-image-preview) $0.045/0.5K, $0.067/1K, $0.101/2K, $0.151/4K; Nano Banana Pro (gemini-3-pro-image-preview) $0.134/1K-2K, $0.24/4K (+ $0.0011 per input image); Imagen 4 Fast $0.02, Standard $0.04, Ultra $0.06. Batch API is 50% off.

Run p2a doctor (or ask your assistant for asset_doctor()) to see what's live in your environment right now.


Install

Every command works via npx β€” no install required.

# Zero install
npx prompt-to-asset doctor           # what's live in this shell right now
npx prompt-to-asset doctor --fix     # auto-install native deps (brew / cargo / scoop; never sudo)
npx prompt-to-asset pick             # interactive route picker
npx prompt-to-asset init --register  # scaffold brand.json + register in .cursor / .vscode / .windsurf

# Or global for daily use
npm i -g prompt-to-asset
p2a doctor

# Or per-project for CI
npm i -D prompt-to-asset

Register with your AI assistant

Claude Code

claude mcp add prompt-to-asset -- p2a

Smithery (universal)

npx -y @smithery/cli install prompt-to-asset --client claude

Cursor Β· VS Code Β· Windsurf Β· Codex Β· Gemini CLI

Use the install buttons at the top of this README, or see docs/install.md for the exact stanza per IDE.

Claude Desktop

Download the .mcpb bundle β†’ double-click β†’ restart.

Once registered, your assistant has the full 24 asset_* tool surface.


Models covered

Paid direct APIs: gpt-image-1, gpt-image-1.5, dall-e-3 (deprecated 2026-05-12), imagen-3, imagen-4, gemini-3-flash-image (Nano Banana), gemini-3-pro-image, sd-1.5, sdxl, sd3-large, playground-v3, flux-schnell, flux-dev, flux-pro, flux-2, flux-kontext-pro, ideogram-3, ideogram-3-turbo, recraft-v3, leonardo-phoenix, leonardo-diffusion-xl, fal-flux-pro, fal-flux-2, fal-sdxl.

Free-tier / zero-key: pollinations-flux, pollinations-turbo, pollinations-kontext, pollinations-sd, horde-sdxl, horde-flux, hf-sdxl, hf-sd3, hf-flux-schnell, hf-flux-dev.

Paste-only surfaces: midjourney-v6, midjourney-v7, firefly-3, krea-image-1. Calling asset_generate_* with mode: "api" against a paste-only primary soft-falls-back to the first API-reachable model in the chain and surfaces a warning. If the whole chain is paste-only, you get an ExternalPromptPlan rather than an error.


Tool

Purpose

asset_capabilities

Inventory of modes + providers. Buckets paid / free-tier / paste-only; surfaces zero-key routes first. Read-only.

asset_enhance_prompt

Classify, route, rewrite. Returns modes + svg_brief + paste_targets + routing_trace { research_sources, never_models, fallback_chain } + clarifying_questions[] when the brief is ambiguous. Read-only.

asset_generate_logo

inline_svg / external_prompt_only / api. Returns InlineSvgPlan / ExternalPromptPlan / AssetBundle.

asset_generate_app_icon

Same three modes. api produces full iOS / Android / PWA / visionOS / Flutter fan-out. Set ios_18_appearances: true for dark + tinted variants.

asset_generate_favicon

favicon-{16,32,48}.png, icon.svg, icon-dark.svg, apple-touch, PWA 192/512/512-maskable, <link> snippet, manifest.webmanifest.

asset_generate_og_image

1200Γ—630 via Satori + @resvg/resvg-js. Deterministic typography, no diffusion-rendered text garbage.

asset_generate_illustration

external_prompt_only / api. Brand-locked via bundle refs, LoRA, or style_id. Routed primary: Flux.2 (up to 8 refs).

asset_generate_splash_screen

iOS LaunchScreen-2732.png, Android mipmap-*/splash.png + theme XML, PWA splash + README. Pass existing_mark_svg to reuse an approved mark.

asset_generate_hero

Marketing hero art (16:9 / 21:9 / 3:2 / 2:1). external_prompt_only / api.

asset_save_inline_svg

Round-trip for inline_svg. Validates the SVG against the brief, writes the bundle.

asset_ingest_external

Round-trip for external_prompt_only. Matte β†’ vectorize β†’ validate β†’ bundle.

asset_remove_background

BiRefNet / BRIA RMBG-2.0 / LayerDiffuse / difference matte / UΒ²-Net.

asset_vectorize

vtracer / potrace / Recraft / posterize fallback, then SVGO.

asset_upscale_refine

DAT2 / Real-ESRGAN / SUPIR / img2img / Lanczos; asset-type-aware.

asset_validate

Tier-0 (dims, alpha, checkerboard FFT, safe-zone bbox, Ξ”E2000 palette, WCAG contrast, OCR Levenshtein). Tier-2 VLM-as-judge via PROMPT_TO_BUNDLE_VLM_URL.

asset_brand_bundle_parse

Parse brand.json / DTCG tokens / AdCP / Markdown into a canonical BrandBundle.

asset_doctor

Structured env inventory: native deps, free-tier routes ranked best-first, paid keys, paste-only surfaces, pipeline URLs, mode flags, "what to try next." Read-only.

asset_models_list

Browse the 60+ model registry with filters: free / paid / paste_only / rgba / svg. Read-only.

asset_models_inspect

Full capability dump for one model id (or aka alias). Strengths, weaknesses, paste targets, routing rules, env status. Read-only.

asset_export_bundle

Fan a 1024Β² master PNG into iOS AppIconSet + Android adaptive + PWA maskable + visionOS parallax + Flutter launcher + favicon. Offline.

asset_sprite_sheet

Pack PNG/WEBP/JPG frames into a sprite sheet + TexturePacker-compatible JSON atlas (Phaser / PixiJS / Godot / Unity). Offline.

asset_nine_slice

Emit a 9-slice config + CSS border-image + engine-ready numbers (Unity / Godot / Phaser / PixiJS) from an image plus four pixel guides. Optional Android .9.png.

asset_init_brand

Scaffold brand.json and ensure the assets dir exists. Auto-detects Next.js, Expo, Flutter, Xcode, Astro, Vite, Remix, Nuxt, React Native, Electron, Node.

asset_train_brand_lora

Wrap a user-owned LoRA training endpoint (PROMPT_TO_BUNDLE_MODAL_LORA_TRAIN_URL). Path-guarded; validates inputs.

Tools are annotated readOnlyHint / idempotentHint so Cursor auto-approves without prompting.

Used by the LLM over Bash when MCP isn't registered yet, and by CI. Every read-only command accepts --json.

p2a                          # default β€” MCP stdio server
p2a mcp                      # same, explicit
p2a export <master.png>      # offline platform fan-out
p2a export <master.png> --json
p2a init                     # interactive brand.json + IDE registration hints
p2a init --register          # + auto-write .cursor/mcp.json / .vscode/mcp.json / .windsurf/mcp.json
p2a pick                     # interactive model picker
p2a doctor                   # environment inventory
p2a doctor --json            # structured output
p2a doctor --data            # check data/model-registry.json ↔ data/routing-table.json consistency
p2a doctor --fix             # auto-install missing native deps (brew / cargo / scoop; never sudo)
p2a models list              # --free | --paid | --paste-only | --rgba | --svg
p2a models inspect <id>      # full capability dump
p2a sprite-sheet <dir>       # pack frames β†’ PNG + atlas
p2a nine-slice <image>       # 9-slice JSON + CSS + engine numbers + .9.png
p2a --help

{
  "name": "Halcyon",
  "palette": ["#2563eb", "#ffffff"],
  "fonts": { "display": { "family": "Inter", "weights": [700, 800] } },
  "style_refs": ["https://…/sample1.png", "./refs/style2.png"],
  "do_not": ["drop shadows", "heavy gradients"],
  "lora": "halcyon-flux-v2",
  "sref_code": "--sref 1234567890",
  "style_id": "rc_halcyon_01"
}

p2a init writes this for you, detecting the framework and suggesting an assets directory. Once present, every generator reads from it automatically.

Platform

What you get

iOS (Xcode)

AppIcon.appiconset with 1024 opaque, squircle-ready. iOS 18 dark + tinted variants via ios_18_appearances: true.

Android

Adaptive foreground + background, Android 13 monochrome, all mipmap densities, optional .9.png.

PWA / web

favicon.ico (16/32/48 multi-res), icon.svg with prefers-color-scheme dark support, apple-touch-icon.png 180Γ—180 opaque, 192/512/512-maskable, manifest.webmanifest, <link> snippet for your <head>.

Flutter

Pre-populated flutter_launcher_icons.yaml wiring iOS, Android adaptive, web, macOS, Windows.

visionOS

Three-layer parallax scaffold with a README. Layer split stays a human decision.

Next.js / Astro / Vite / Remix / Nuxt / Expo / React Native / Electron

Framework detection via p2a init / asset_init_brand and a sensible output dir.

Games

sprite-sheet produces TexturePacker-compatible atlases (Phaser, PixiJS, Godot, Unity). nine-slice emits engine-ready numbers.

  brief (text)
    ↓  asset_capabilities         β†’ modes available + free/paid/paste-only bucketing
    ↓  asset_enhance_prompt       β†’ AssetSpec {
    ↓                                  routing_trace: { rule_id, reason, research_sources, never_models, fallback_chain },
    ↓                                  modes_available,
    ↓                                  svg_brief?,         (inline_svg)
    ↓                                  paste_targets?,     (external_prompt_only)
    ↓                                  rewritten_prompt, …
    ↓                                }
    ↓
    β”œβ”€ mode: inline_svg                β†’ host LLM emits <svg>; asset_save_inline_svg writes bundle
    β”œβ”€ mode: external_prompt_only      β†’ user pastes into web UI; asset_ingest_external runs matte β†’ vectorize β†’ validate
    └─ mode: api                       β†’ provider(model, prompt, params) β†’ matte β†’ vectorize β†’ upscale β†’ export β†’ validate

Content-addressed storage: assets/<hash[0:2]>/<hash>/<variant>.<ext>. The MCP server is synchronous and stateless. prompt_hash and params_hash in every AssetBundle are designed to drop straight into a BullMQ / SQS / Cloudflare Queues jobId for a hosted pipeline. Reference design: docs/research/18-asset-pipeline-tools/18e-production-pipeline-architecture.md.

Design thesis

You own the API keys. The LLM owns everything else.

The only thing that happens in a terminal is installing the package and putting keys in .env. Secrets shouldn't pass through chat. Every other verb β€” doctor checks, model inspection, platform fan-out, brand scaffolding, sprite sheets, 9-slice configs β€” is an MCP tool the assistant calls when you ask in natural language.


Comparison

Tool

Prompt enhancement

Multi-model routing

Zero-key

Dev-asset bundle

Offline platform fan-out

Promptati / PromptHero

cinematic only

βœ—

βœ—

βœ—

βœ—

Looka / Brandmark / Designs.ai

βœ—

βœ—

βœ—

partial

βœ—

ChatGPT / Midjourney / Ideogram (direct)

βœ—

βœ—

βœ—

βœ—

βœ—

appicon.co

βœ—

βœ—

βœ“

partial

iOS only

flutter_launcher_icons

βœ—

βœ—

βœ“

partial

iOS + Android

prompt-to-asset

βœ“

βœ“ (60+ models)

βœ“ (Pollinations / HF / Horde / SVG)

βœ“

βœ“ (iOS + Android + PWA + visionOS + favicon + Flutter)


Security

This tool handles API keys for up to 15 providers. Non-negotiables:

  • Keys live in env vars only. Never written to disk, never logged, never echoed in MCP responses. Provider error bodies go through redact() (packages/mcp-server/src/security/redact.ts) before reaching the host LLM.

  • Path access is allow-listed. image_path / output_dir / existing_mark_svg resolve through symlinks and reject anything escaping project cwd + configured output dir + cache dir + OS tempdir. Widen with P2A_ALLOWED_PATHS=/path1:/path2.

  • SVG is XSS-sanitized before any write. <script>, <foreignObject>, on*= handlers, javascript: URIs, external <image href> / <use href>, CSS @import over the network β€” all rejected. The check runs unconditionally; SVGO is not required.

  • Cost guardrail. Set P2A_MAX_SPEND_USD_PER_RUN=5.00 to cap any single tool call. Pre-flight estimate refuses to call if over. Free-tier routes are always $0.

  • Data integrity at boot. assertDataIntegrityAtBoot() runs on start. If a routing rule points at a model id not in the registry, the server refuses to boot with a clear error. Check in CI with p2a doctor --data.

  • No telemetry. No remote calls unless the routed provider explicitly requires one.

Full policy: SECURITY.md.


Research-backed decisions

Every routing rule, dialect switch, safe-zone size, and text ceiling that's implemented is backed by a file under docs/research/. asset_enhance_prompt returns a routing_trace.research_sources array on every call. The angle β†’ code pointer map, plus an honest ledger of what's wired and what's deferred, lives in docs/RESEARCH_MAP.md.


Development

git clone https://github.com/MohamedAbdallah-14/prompt-to-asset.git
cd prompt-to-asset
npm install
npm run build
npm run typecheck
npm run lint
npm test               # vitest watch
npm run test:run       # vitest run (CI)
npm run smoke          # list tools via MCP stdio + correctness assertions
npm run sync           # regenerate IDE mirrors from SSOTs
npm run verify         # byte-verify mirrors match SSOTs

SSOTs live in skills/*/SKILL.md, rules/*.md, .claude-plugin/, and data/*.json. Don't edit .cursor/, .claude/, .windsurf/ directly β€” they're regenerated by scripts/sync-mirrors.sh and CI byte-verifies them.


Community

If this repo saved you from hand-crafting another AppIconSet, a star helps it reach other developers fighting the same fight.


Read more

The thinking behind the design, in long-form:

Cross-posted on Medium and dev.to.


License

MIT Β© prompt-to-asset contributors.

Available Tools

24 tools
asset_brand_bundle_parseA
Read-onlyIdempotent

Parse a brand source (brand.json, DTCG tokens, AdCP spec, brand.md, or raw text) into the canonical BrandBundle schema.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYesPath to file or raw text

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, signaling safe, idempotent operation. The description adds the context that it parses into a specific schema, which goes beyond the annotations. No contradictions.

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 single, well-structured sentence that conveys the tool's purpose and inputs without unnecessary words. It is front-loaded with the verb and resource.

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 parameter, no output schema needed) and clear sibling context, the description is fully adequate. It specifies input types and output target, making the tool's usage unambiguous.

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 100% with a single parameter. The description enriches the parameter's meaning by listing example source formats (brand.json, DTCG tokens, etc.), providing actionable context beyond the schema's bare description 'Path to file or raw text'.

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 specifies the verb 'Parse', the resource 'brand source', and lists specific formats (brand.json, DTCG tokens, AdCP spec, brand.md, raw text). It also states the output target 'canonical BrandBundle schema', distinguishing it from sibling tools that generate or edit assets.

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 this tool is for converting brand source files, but it does not provide explicit guidance on when to use it versus alternatives, nor does it mention prerequisites or excluded scenarios. Usage is implied but not clearly directed.

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

asset_capabilitiesA
Read-onlyIdempotent

Report which of the three execution modes this server can run RIGHT NOW given the current env: inline_svg (zero key β€” hosting LLM authors the SVG), external_prompt_only (zero key β€” paste prompt into Ideogram/Nano Banana/Midjourney/Recraft/Flux UIs, then asset_ingest_external), api (requires provider key). Read-only; no network. Call before offering the user options.

ParametersJSON Schema
NameRequiredDescriptionDefault
asset_typeNoNarrow the modes-by-asset-type section to one type.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint and idempotentHint. The description adds 'Read-only; no network,' reinforcing safety and disclosing environmental constraints. This aligns with and supplements annotations without contradiction.

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 concise sentences: the first states functionality, the second gives usage instruction and behavioral notes. No superfluous words; information is front-loaded and efficiently presented.

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 read-only capability check with one optional parameter and no output schema, the description fully covers what the agent needs: what the tool does, when to call it, and environmental constraints. The return format is implied (list of modes), which is sufficient.

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 sole parameter asset_type has 100% schema description coverage, and the description repeats the schema's explanation verbatim ('Narrow the modes-by-asset-type section to one type'), adding no new meaning. Baseline 3 is appropriate.

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 indicates the tool reports which execution modes the server can run, listing three specific modes (inline_svg, external_prompt_only, api). This verb+resource purpose is distinct from sibling tools that generate or ingest assets.

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 says 'Call before offering the user options,' providing clear guidance on when to use. It does not explicitly say when not to use or name alternatives, but the context of sibling tools implies it is a preliminary check before mode selection.

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

asset_doctorA

Structured environment inventory β€” MCP equivalent of p2a doctor. Returns native-dependency status (sharp, vtracer, potrace, png-to-ico, satori, resvg-js, tesseract.js, svgo), free-tier routes ranked best-first, paid-provider keys, paste-only providers, pipeline extension URLs, which modes are available right now, and a concrete 'what to try next' suggestion list. Read-only by default. Pass check_data=true to also run the model-registry/routing-table integrity check. Pass auto_fix=true to install missing native binaries (Homebrew / cargo / scoop β€” never sudo); pair with auto_fix_dry_run=true to preview without executing.

ParametersJSON Schema
NameRequiredDescriptionDefault
check_dataNoAlso run data-integrity check (equivalent to `p2a doctor --data`). Useful in CI after data edits.
auto_fixNoRun the auto-installer for missing native binaries (vtracer, potrace). Homebrew on macOS, cargo as fallback, scoop on Windows. Linux distro installs and npm optional deps are surfaced as manual hints instead of executed. Response gains an `auto_fix` field.
auto_fix_dry_runNoOnly meaningful when auto_fix=true. Plan steps without executing. Defaults to false.

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the `openWorldHint` annotation, the description discloses that the tool is read-only by default, and details the side effects of enabling `auto_fix` (installing binaries, never sudo). It is fully transparent about the tool's behavioral traits.

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 a single paragraph that front-loads the purpose and output list, then covers parameters. It is somewhat verbose but well-structured 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 no output schema, the description fully explains what the tool returns (a list of statuses, routes, keys, hints, etc.) and how to use its parameters. It is complete for an environment inventory tool with three optional parameters.

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 100% (all three parameters have descriptions). The description adds significant value by explaining the purpose and context of each parameter beyond the schema, e.g., that `check_data` runs an integrity check and `auto_fix` uses specific package managers.

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 identifies the tool as a 'structured environment inventory' MCP equivalent of `p2a doctor`, and lists specific outputs (native-dependency status, routes, keys, etc.). It distinguishes itself from sibling tools that focus on asset generation or model 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 description explains when to use each parameter (e.g., check_data for CI after data edits, auto_fix to install missing binaries, auto_fix_dry_run for preview). It does not explicitly contrast with sibling tools or provide 'when not to use' guidance, but the context is clear.

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

asset_enhance_promptA
Read-onlyIdempotent

Classify an asset brief, route to the right model, rewrite the prompt in that model's dialect, and report which execution modes are available (inline_svg / external_prompt_only / api). Returns an AssetSpec JSON including modes_available, optional svg_brief (for inline_svg), optional paste_targets (for external_prompt_only), and β€” when the brief leaves a material ambiguity β€” a clarifying_questions[] array the host LLM should surface via AskUserQuestion (or the equivalent) BEFORE calling a generator. Each entry has {id, header, question, options[], required, why}. Read-only; idempotent; no network.

ParametersJSON Schema
NameRequiredDescriptionDefault
briefYesPlain-English description of the desired asset
vectorNo
asset_typeNo
transparentNo
brand_bundleNo
target_modelNoForce a specific model; otherwise selected by router
text_contentNoLiteral text to render in the asset

TDQS

A3.9/5.0
Behavior4/5

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

Adds value beyond annotations by describing the clarifying questions array and modes reporting behavior. Annotations already indicate read-only and idempotent, and description reinforces that consistently.

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 dense and front-loaded with the main purpose, but it packs multiple aspects into one sentence. Could benefit from bullet points for clarity, but no wasted words.

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?

Output is well-described (modes_available, clarifying_questions), but several input parameters lack explanation in both schema and description. No output schema exists, so the description partially compensates but is incomplete regarding input semantics.

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?

Only adds meaning for 'brief' (plain-English) and implicitly for 'target_model' (force model). With 43% schema coverage, the description does not adequately explain parameters like vector, asset_type, brand_bundle, etc.

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 classifies, routes, rewrites, and reports execution modes, distinguishing it from sibling generation tools by being a preprocessing step that returns an AssetSpec rather than an actual asset.

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?

Explicitly advises surfacing clarifying questions before calling a generator, and notes the tool is read-only and idempotent. However, it does not explicitly state when to use it over siblings like asset_capabilities.

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

asset_export_bundleA

Fan out a 1024Β² master PNG into the full platform bundle (iOS AppIconSet, Android adaptive, PWA maskable, visionOS parallax, Flutter launcher, favicon set). MCP equivalent of p2a export master.png. No API key required; runs entirely on sharp. Use when the LLM has a master (inline_svg saved, api-mode result, or user-supplied hand-authored PNG) and needs the platform fan-out.

ParametersJSON Schema
NameRequiredDescriptionDefault
master_pathYesAbsolute path to the 1024Β² master PNG. Resized up front to RGBA 1024Β².
platformsNoWhich platform bundles to emit. Defaults to all.
out_dirNoOutput directory. Defaults to ./assets/bundle-<stem>-<timestamp> so repeated runs don't clobber.
bgNoBackground color hex for iOS 1024 marketing (opaque), Android adaptive BG, favicon apple-touch. Defaults white.
app_nameNoShort name for the PWA manifest.
themeNotheme_color hex for the PWA manifest.
ios18NoWhen true, also emit iOS 18 dark + tinted 1024Β² appearance variants.

TDQS

A4.2/5.0
Behavior4/5

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

The description discloses key behavioral traits beyond annotations: no API key required, runs on sharp, resizes input to RGBA 1024Β², and uses a unique default output directory to avoid clobbering. This adds value as annotations only have openWorldHint: false.

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 long, all relevant. The first sentence states the core function, the second provides the MCP equivalent, and the third gives usage conditions. No wasted words.

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 moderate complexity, 7 parameters with full schema coverage, and no output schema, the description adequately covers why, when, and basic behavior. It could be improved by briefly noting that output is a set of platform-specific bundles, but overall it is complete enough.

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 coverage is 100%, so the parameters are already well-documented. The description adds minimal additional meaning beyond the schema, such as the default for bg being white and out_dir being timestamped. Baseline 3 is appropriate.

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 fans out a 1024Β² master PNG into multiple platform bundles, listing specific platforms (iOS, Android, PWA, etc.). It provides the MCP equivalent command and distinguishes from siblings by specifying the comprehensive bundle generation, unlike single-icon tools like asset_generate_app_icon.

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 states when to use the tool: when the LLM has a master PNG from various sources and needs the platform fan-out. It does not explicitly mention when not to use or list alternatives, but the context is clear enough for an agent to decide.

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

asset_generate_app_iconA

Generate an app icon (iOS AppIconSet, Android adaptive, PWA maskable, visionOS 1024Β² master + placeholder parallax layers). Three modes (inline_svg / external_prompt_only / api). In non-api modes only the master mark is produced; call asset_ingest_external afterwards to run the platform fan-out. Set ios_18_appearances=true to also emit dark and tinted 1024Β² variants for iOS 18 tintable icons.

ParametersJSON Schema
NameRequiredDescriptionDefault
briefYes
modeNo
brand_bundleNo
platformsNo
ios_18_appearancesNoAlso emit iOS 18 dark (flattened on #000) and tinted (greyscale luminance map) 1024Β² variants and add `appearances` to Contents.json.
output_dirNo

TDQS

A4/5.0
Behavior4/5

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

The description discloses that in non-api modes only the master mark is produced and requires calling `asset_ingest_external` for fan-out. It also explains the effect of `ios_18_appearances`. The `openWorldHint` annotation is not contradicted. However, it does not mention any other side effects or error conditions.

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 a single paragraph that covers the essential workflow in a compact manner. It could be split into bullet points or sections for readability, but the information density is appropriate.

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 description covers the main workflow and references the sibling `asset_ingest_external` tool. However, it lacks explanation for `brand_bundle` and `output_dir` parameters. Given 6 parameters and no output schema, more detail would improve completeness.

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?

With only 17% schema description coverage, the description compensates by explaining `mode`, `platforms`, and `ios_18_appearances` beyond the schema. However, it does not explain `brand_bundle` or `output_dir`, leaving gaps. The `brief` parameter is implied but not described.

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 generates app icons for multiple platforms (iOS, Android, PWA, visionOS) and specifies three modes. It distinguishes itself from sibling tools like `asset_generate_favicon` and `asset_generate_hero` by detailing platform-specific outputs and the need for post-processing via `asset_ingest_external` in non-api modes.

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 explains when to use each of the three modes and the post-processing step for non-api modes. It also mentions the `ios_18_appearances` feature. However, it does not explicitly state when not to use this tool or compare it to alternatives like `asset_generate_logo`, slightly reducing clarity.

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

asset_generate_faviconA

Generate a favicon bundle (favicon-{16,32,48}.png + icon.svg + icon-dark.svg + apple-touch + PWA 192/512/512-maskable + snippet). Three modes β€” inline_svg is the best fit for simple glyph marks (legible at 16Γ—16).

ParametersJSON Schema
NameRequiredDescriptionDefault
briefYes
modeNo
brand_bundleNo
existing_mark_svgNo
dark_modeNo
output_dirNo

TDQS

A3.9/5.0
Behavior4/5

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

Description discloses output files (favicon bundle) but does not detail side effects or state changes. Annotation 'openWorldHint: true' is consistent, but additional behavioral context (e.g., whether it modifies input assets) is missing.

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: first states purpose and output, second gives mode guidance. No redundant information; every sentence adds value.

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

Completeness2/5

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

Despite no output schema and low parameter coverage, the description does not fully compensate. It lacks detail on required input semantics and does not clarify the roles of nested objects or optional parameters, making the tool less complete for autonomous invocation.

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%, yet the description only explains the 'mode' parameter (three values) and hints at output. Other parameters like 'brief', 'brand_bundle', 'existing_mark_svg' are not explained, leaving the agent with insufficient semantic understanding.

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?

Clearly states 'Generate a favicon bundle' and lists specific output files, distinguishing it from sibling tools like logo or app icon generators. Mentions three modes, with inline_svg recommended for simple glyph marks.

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 guidance on when to use each mode ('inline_svg is the best fit for simple glyph marks') but does not explicitly contrast with sibling tools or give when-not-to-use advice.

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

asset_generate_heroA

Generate marketing-hero / landing-page banner art. Two modes (external_prompt_only / api); inline_svg is not supported. Accepts aspect_ratio (16:9 / 21:9 / 3:2 / 2:1). Injects brand bundle where supported. Returns N variants if count>1.

ParametersJSON Schema
NameRequiredDescriptionDefault
briefYes
modeNo
brand_bundleNo
aspect_ratioNo16:9
countNo
output_dirNo

TDQS

A4.2/5.0
Behavior4/5

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

The description adds significant behavioral detail beyond the minimal annotation (openWorldHint: true): it discloses two operation modes, unsupported inline_svg, accepted aspect ratios, brand bundle injection, and variant return behavior. This informs the agent effectively.

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 terse sentences: first states purpose, second details modes and unsupported, third lists options and return behavior. Every sentence adds value, with no waste, and the key information 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?

It covers the main purpose, modes, key parameters, and return behavior. The missing details (description of brief and output_dir) are minor since brief is the required input and output_dir is a standard file path. No output schema exists, but the description implies return of variants. Slightly incomplete but acceptable.

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 description adds meaning to four of six parameters (mode, aspect_ratio, brand_bundle, count) by listing allowed values and behavior. The remaining parameters (brief, output_dir) are not described but their purpose is inferable from context (brief is the prompt, output_dir for output). This compensates well given no 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 explicitly states it generates 'marketing-hero / landing-page banner art', which is a specific verb-resource pair. This clearly distinguishes it from sibling tools like asset_generate_logo or asset_generate_app_icon.

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 mentions two modes and unsupported inline_svg, providing some guidance on when to use each mode. However, it does not explicitly state when not to use this tool compared to alternatives (e.g., for logos or icons), nor does it provide exclusion criteria.

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

asset_generate_illustrationA

Generate one or more brand-locked illustrations. Two modes (external_prompt_only / api); inline_svg is not supported β€” path budget too small for a composed scene. Injects brand bundle (palette, style_refs, LoRA, style_id) where supported.

ParametersJSON Schema
NameRequiredDescriptionDefault
briefYes
modeNo
brand_bundleNo
countNo
aspect_ratioNo4:3
output_dirNo

TDQS

A3.7/5.0
Behavior3/5

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

The description discloses the brand injection behavior and the unsupported inline_svg, adding value over the openWorldHint annotation. However, it does not address auth needs, side effects, or rate limits, and the openWorldHint suggests potential mutations not fully explained.

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 with two front-loaded sentences, no redundant phrases, and efficiently conveys the core functionality and key constraints.

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?

Given the lack of output schema and low schema coverage, the description covers the main purpose and modes but omits details on parameter behavior (count, aspect_ratio, output_dir) and return values. It is adequate for basic understanding but not fully self-contained.

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?

With 0% schema description coverage, the description compensates by explaining the mode parameter (two values) and brand_bundle (brand injection). However, it does not add semantics for count, aspect_ratio, or output_dir, leaving significant gaps for a 6-parameter tool.

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 verb 'Generate' and the resource 'brand-locked illustrations', and specifies two modes and brand injection. It distinguishes the tool from siblings by the brand-locking aspect and the unsupported inline_svg, making the purpose very clear.

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 mentions two modes but does not provide guidance on when to use one over the other, nor when to avoid this tool in favor of siblings like asset_generate_logo. The constraint about inline_svg is helpful but not a complete usage guideline.

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

asset_generate_og_imageA

Render a 1200Γ—630 OG image via Satori template (deterministic typography, no diffusion). Default mode=api renders server-side without any API key. external_prompt_only is only meaningful when with_background_image is set. inline_svg is not supported (web-font loading + precise text layout beyond LLM reach).

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
modeNo
subtitleNo
templateNocentered_hero
brand_bundleNo
with_background_imageNo
background_briefNo
output_dirNo

TDQS

A4.2/5.0
Behavior5/5

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

Adds substantial behavioral context beyond annotations: deterministic typography, no diffusion, server-side without API key, unsupported inline_svg mode. Informs agent about tool limitations and rendering 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?

Three sentences, front-loaded with purpose, no redundant information. Each sentence earns its place.

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

Completeness2/5

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

Despite good purpose and transparency, the description omits details for most parameters (6 of 8 undocumented), and no output schema or return value description. Given 8 parameters and nested objects, the description is incomplete for full parameter understanding.

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?

Adds meaning for mode and with_background_image (inline_svg unsupported, external_prompt_only conditional). However, 0% schema coverage means other parameters (title, subtitle, template, brand_bundle, background_brief, output_dir) are left undescribed. Partial compensation but not comprehensive.

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 output ('Render a 1200Γ—630 OG image'), method ('via Satori template'), and key characteristics ('deterministic typography, no diffusion'). Distinguishes from diffusion-based generation tools among siblings.

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 guidance on mode usage: api is default and server-side, inline_svg is not supported, external_prompt_only is conditional on with_background_image. Lacks explicit comparison to sibling asset generation tools but is clear enough for its specific purpose.

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

asset_generate_splash_screenA

Generate a cross-platform splash-screen bundle from a brand mark. Two modes (external_prompt_only / api); inline_svg is not supported (splash screens are PNG bundles β€” generate a logo inline_svg first, then call this with existing_mark_svg). api mode composites the mark onto background_color and emits ios/LaunchScreen-2732.png, android/mipmap-*dpi/splash.png, android/themes-splash.xml, pwa/splash-1200.png, and a README describing how to wire each.

ParametersJSON Schema
NameRequiredDescriptionDefault
briefYes
modeNo
brand_bundleNo
existing_mark_svgNoPath to an existing brand-mark SVG to center on the splash. Preferred over regenerating.
platformsNo
background_colorNo
output_dirNo

TDQS

A4/5.0
Behavior3/5

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

The description lists output files and states that inline_svg is not supported. However, with only openWorldHint: true in annotations, it does not specify behaviors like file overwriting, permissions, or network calls. The added detail is moderate.

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 (two sentences), front-loads the purpose, and efficiently delivers constraints and output details 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?

Given the tool's complexity (7 parameters, nested objects, multiple platforms, multiple output files), the description covers the core workflow, key constraints, and output file list. It lacks details on some parameters but is largely complete for a generation tool.

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 only 14%; the description adds meaning to existing_mark_svg (preferred path) and explains mode values. It does not elaborate on brief, brand_bundle, or output_dir, leaving gaps in understanding.

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 purpose: generating a cross-platform splash-screen bundle from a brand mark. It specifies that inline_svg is not supported and outlines the output files, distinguishing it from sibling tools like asset_generate_app_icon.

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 explains the prerequisite: first generate a logo inline_svg then call this tool with existing_mark_svg. It also mentions two modes but does not elaborate on when to use each. It provides clear context for use.

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

asset_ingest_externalB

Ingest an image the user generated in an external tool (Midjourney, Nano Banana, Ideogram web, Recraft, Flux Playground, etc.) and run the matte β†’ vectorize (where applicable) β†’ tier-0 validation pipeline. The round-trip endpoint for external_prompt_only mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
image_pathYesAbsolute path to the locally-saved image.
asset_typeYes
brand_bundleNo
expected_textNo
vectorNo
transparentNo
output_dirNo

TDQS

B3.4/5.0
Behavior2/5

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

The description outlines the pipeline steps but lacks details on side effects, permissions, what happens to the input image, or output format. Annotations are minimal, so description should compensate but does not.

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?

Two sentences, concise and front-loaded, but could better structure the pipeline steps and parameter context.

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

Completeness2/5

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

With 7 parameters, low schema coverage, no output schema, and a multi-step pipeline, the description is incomplete. It omits parameter semantics and does not explain 'tier-0 validation' or output.

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 only 14%, and the description adds no parameter explanations beyond the pipeline mention. It does not describe brand_bundle, expected_text, vector, transparent, or output_dir.

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 ingests externally generated images and runs a specific pipeline (matte, vectorize, validation), distinguishing it from sibling generation tools.

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 context by listing external tools and mentioning 'round-trip endpoint for external_prompt_only mode', but does not explicitly state 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.

asset_init_brandA

Scaffold brand.json in the project root + ensure the assets dir exists. MCP equivalent of the brand.json portion of p2a init. Auto-detects the framework (Next.js, Expo, Flutter, Xcode, Astro, Vite, Remix, Nuxt, React Native, Electron, Node) and returns platform hints. Deliberately does NOT do IDE MCP registration β€” that's the one piece the user handles once at install time via a terminal. Call this at the start of a new project so subsequent generator calls have a brand source-of-truth and a known output dir.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_nameYesApp / brand name. Goes into brand.json and any PWA manifest.
paletteNoBrand palette as hex strings. Defaults to ['#2563eb', '#ffffff'].
assets_dirNoWhere generated assets should live. Defaults to the framework's conventional dir.
display_fontNoDisplay font family. Defaults to Inter.
body_fontNoBody font family. Defaults to Inter.
do_notNoBrand constraints to inject as negative anchors. Defaults to drop-shadows / heavy-gradients / skeuomorphic-bevels.
overwriteNoWhen true, overwrites an existing brand.json.
cwdNoProject root. Defaults to process.cwd().

TDQS

A4.6/5.0
Behavior5/5

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

Discloses auto-detection of framework, return of platform hints, and that it does not handle IDE registration. No contradiction with annotations.

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 concise sentences (three in original) front-load the action and add key usage context 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 8 parameters and no output schema, the description covers when and why to use it. Missing detail on return format, but sufficient for an agent.

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 coverage is 100%, so description adds minimal value beyond naming parameters. However, it contextualizes the overall tool purpose.

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?

Clearly states the verb 'scaffold' and the resources 'brand.json' and 'assets dir.' Differentiates itself from sibling tools like asset_generate_app_icon by specifying it's the initial setup step.

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

Usage Guidelines5/5

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

Explicitly says 'call this at the start of a new project' and explains what it deliberately does not do (IDE MCP registration), guiding the agent to use other tools after.

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

asset_models_inspectA
Read-onlyIdempotent

Full capability dump for one model. MCP equivalent of p2a models inspect <id>. Accepts a model id or an aka alias. Returns the full ModelInfo record, env status, paste targets, routing rules that reference this model (as PRIMARY / fallback / NEVER), and usage notes. Read-only; no network.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesModel id or aka alias (e.g. 'gpt-image-1', 'nano-banana', 'ideogram-3-turbo').

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already provide readOnlyHint and idempotentHint. Description adds return fields (ModelInfo record, env status, etc.) and confirms no network, providing useful behavioral context beyond annotations.

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?

Three sentences with no waste. First sentence states purpose, second clarifies input, third lists outputs. Information is front-loaded and efficiently presented.

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 no output schema, the description lists return fields comprehensively. Single parameter, low complexity, and all critical information (inputs, behavior, outputs) are covered, making it complete for an agent to understand.

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 covers the 'id' parameter fully. Description adds semantic value by noting alternative identifier (aka alias) and providing examples, enhancing understanding beyond schema alone.

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 clearly states the tool inspects one model and provides a full capability dump. It distinguishes from sibling 'asset_models_list' via the verb 'inspect' and mentions the MCP equivalent command, making 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?

Description specifies accepted inputs (model id or aka alias) and states read-only behavior. While it doesn't explicitly mention when not to use or compare to alternatives, the context is clear enough for basic guidance.

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

asset_models_listA
Read-onlyIdempotent

List the model registry (60+ entries) with optional filters. MCP equivalent of p2a models list. Returns id, family, provider, dialect, native_rgba/svg flags, text ceiling, tier (free/paid/paste-only), key_set status. Filter flags: free, paid, paste_only, rgba, svg. Read-only; no network.

ParametersJSON Schema
NameRequiredDescriptionDefault
freeNoOnly zero-key / free-tier models.
paidNoOnly paid direct-API models.
paste_onlyNoOnly paste-only surfaces (Midjourney, Firefly, Krea).
rgbaNoOnly models with native transparent-PNG output.
svgNoOnly models with native SVG output.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint; description adds 'Read-only; no network' and lists return fields (id, family, provider, etc.) which provides additional behavioral context beyond annotations.

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?

Three concise sentences: first states purpose and size, second lists return fields, third lists filters. Front-loaded with purpose, 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 simplicity of a filtered list tool with full schema coverage and annotations, the description is complete: it details return fields, filter options, and safety. No output schema needed; description covers return values.

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 100% and each parameter has a description. The description merely lists filter flags by name without adding new meaning or usage guidance beyond the 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?

Description clearly states 'List the model registry' with size and optional filters, uses a specific verb and resource, and distinguishes from sibling 'asset_models_inspect' which likely inspects a single model. Also provides MCP equivalent command for context.

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?

Description notes 'Read-only; no network' but does not explicitly state when to use this tool versus alternatives like other list or generation tools. No exclusions or when-not-to-use guidance provided.

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

asset_nine_sliceA

Emit a 9-slice config + CSS border-image snippet + Unity/Godot/Phaser/PixiJS-ready numbers from one image and 4 pixel offsets. Optionally also emit an Android .9.png with the 1px stretchable-region encoding. MCP equivalent of p2a nine-slice <image>.

ParametersJSON Schema
NameRequiredDescriptionDefault
imageYesPath to the source image.
guidesYesPixel offsets from each edge marking the fixed regions.
outNoOutput directory. Defaults to the directory of the input image.
android_9patchNoAlso emit <name>.9.png with Android 9-patch 1px-border encoding.

TDQS

A3.9/5.0
Behavior4/5

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

Discloses key behavioral traits: emits multiple output formats and optionally an Android .9.png file. No contradictions with annotations. Could mention overwriting behavior or return value, but overall good 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?

Two sentences, front-loaded with core purpose and outputs. No unnecessary words. Efficient and clear.

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?

Covers main inputs and outputs, but lacks details on return value, error handling, or formatting constraints. Adequate for a generation tool but with room for improvement.

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 coverage is 100%, so baseline is 3. Description reinforces parameter meanings by mentioning 'one image and 4 pixel offsets' but does not add significant new semantics beyond the 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?

Description clearly states the tool emits a 9-slice config, CSS border-image snippet, and game-engine-ready numbers from one image and pixel offsets, with optional Android .9.png output. It distinguishes itself from sibling tools by focusing on nine-slice generation.

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?

Implied usage for generating nine-slice data from an image, but lacks explicit when-to-use or when-not-to-use guidance, nor comparisons to sibling tools. The MCP equivalent reference provides some context.

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

asset_remove_backgroundA
Read-only

Matte an image to transparent background (BiRefNet / BRIA RMBG / UΒ²-Net via remote endpoint; local white-chroma fallback). Returns RGBA PNG path.

ParametersJSON Schema
NameRequiredDescriptionDefault
imageYesPath or URL to input image
modeNoauto
output_dirNo

TDQS

A3.5/5.0
Behavior3/5

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

Description adds some behavioral context (remote endpoint, local fallback, returns path). However, annotations declare readOnlyHint=true, while the tool creates an output file (RGBA PNG), which is a write operation. This contradiction reduces transparency. Without annotations, the description would be sufficient, but the mismatch harms credibility.

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, 20 words, front-loaded with the core action. Every word earns its placeβ€”techniques and output format are included without redundancy.

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?

Input schema is simple (3 params, 1 required, no output schema). The description covers the main behavior and return value but omits details about the output_dir parameter and potential side effects. Given the low complexity, a score of 3 reflects adequate but not thorough coverage.

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 33% (only image has a schema description). Description maps mode enum values to algorithm names (BiRefNet, RMBG, UΒ²-Net), adding meaning beyond the enum list. However, output_dir is not explained. Baseline 3 is appropriate since description partially compensates for low 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 clearly states the tool removes background from an image ('matte an image to transparent background') and returns an RGBA PNG path. It references specific algorithms and fallback behaviors, making the purpose unambiguous and distinct from sibling tools like asset_upscale_refine or asset_vectorize.

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 guidance on when to use this tool versus alternatives. The description does not mention prerequisites, limitations, or contrast with similar tools such as asset_generate_logo or asset_sprite_sheet. Usage context is left entirely to the agent's inference.

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

asset_save_inline_svgA

Round-trip endpoint for inline_svg mode. After you (the LLM) emit the … in chat, immediately call this tool with that SVG text so the server writes a complete asset bundle to disk: master.svg + (for favicon) icon.svg + icon-dark.svg + favicon-{16,32,48}.png + favicon.ico + apple-touch-icon.png (opaque) + pwa-192.png + pwa-512.png + pwa-512-maskable.png + manifest.webmanifest + head-snippet.html + (for app_icon) the full iOS AppIconSet + Android adaptive (foreground+background+monochrome) + PWA maskable + visionOS. Returns an AssetBundle with file paths the user can open. Validates the SVG against the original svg_brief (viewBox, path count, palette, forbidden elements).

ParametersJSON Schema
NameRequiredDescriptionDefault
svgYesThe full <svg>...</svg> text you just emitted in chat.
asset_typeYes
brand_bundleNo
expected_textNo
platformsNoFor asset_type=app_icon. Defaults to ['all'].
dark_modeNoFor asset_type=favicon: also emit icon-dark.svg (prefers-color-scheme: dark). Default true.
app_nameNoFor asset_type=favicon: name/short_name written into manifest.webmanifest.
theme_colorNoFor asset_type=favicon: theme_color hex for manifest + <meta>.
background_colorNoFor asset_type=favicon: PWA splash background_color hex.
output_dirNo

TDQS

A4.3/5.0
Behavior4/5

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

Discloses that it writes multiple files to disk, validates SVG against original brief, and returns an AssetBundle. Provides sufficient behavioral detail given limited annotations (only openWorldHint=false).

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?

Front-loaded with purpose and usage trigger. Each sentence adds value, though the paragraph is dense and could be better structured with bullet points for clarity.

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?

Covers main workflow, validation, and output files. Could elaborate on optional parameters like brand_bundle and expected_text, and since there's no output schema, more details on return structure would help.

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?

Adds value beyond schema by mentioning validation details (viewBox, path count, etc.) and listing output files. Schema coverage is 60%, and description compensates with context on svg parameter and overall behavior.

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?

Clearly states it is a round-trip endpoint for inline_svg mode, explaining that it writes asset bundles from SVG text emitted in chat. Distinguishes itself from sibling tools (e.g., asset_generate_logo) by focusing on saving already generated SVGs.

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?

Explicitly tells when to use: immediately after emitting SVG in chat. Does not explicitly state when not to use or list alternatives, but purpose and sibling names imply alternatives for different tasks.

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

asset_sprite_sheetA

Pack a directory of PNG/WEBP/JPG frames into one sprite sheet + TexturePacker-compatible JSON atlas (works in Phaser, PixiJS, Three.js, Godot, Unity via a light importer). MCP equivalent of p2a sprite-sheet <dir>. Offline, no API key.

ParametersJSON Schema
NameRequiredDescriptionDefault
dirYesDirectory containing frames. Sorted by natural filename order.
layoutNogrid
columnsNoColumns (grid only). Defaults to ceil(sqrt(n)).
paddingNo
outNoOutput PNG path. Defaults to ./sprites.png.
atlasNoOutput atlas JSON path. Defaults to the sheet path with .json extension.

TDQS

A3.9/5.0
Behavior3/5

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

Annotations are minimal (only openWorldHint: false). Description mentions 'Offline, no API key' but does not disclose behavior like file creation, write permissions, or side effects. It conveys output format but lacks full behavioral clarity expected for a tool with few annotations.

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 with no wasted words. First sentence explains core functionality and output, second adds context (CLI equivalent and offline). Information is front-loaded and efficient.

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?

Lacks details about the return value (what the tool returns after execution). While the output files are described, the immediate result to the agent is not specified. Given no output schema, this is a gap. Otherwise, the description covers most usage context.

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 high (67%), and the schema itself documents each parameter adequately. The description adds no extra meaning beyond stating input formats. Therefore, it meets baseline but does not improve upon 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?

Description clearly states it packs a directory of frames into a sprite sheet and JSON atlas, specifies supported formats (PNG/WEBP/JPG), and mentions compatibility with multiple game engines. It distinguishes itself from sibling tools which are about brand assets and icons.

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?

Implicitly indicates usage for game development by listing compatible engines, but does not explicitly state when to use or when not to use this tool compared to alternatives. No sibling does sprite sheet packing, so it's unique, but explicit guidelines are missing.

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

asset_train_brand_loraA

Train a brand-consistent LoRA from 20-50 sample images, returning a lora_id the comfyui-* and SDXL-family providers can reference. Requires a user-owned training endpoint (Modal / Runpod / self-host) at PROMPT_TO_BUNDLE_MODAL_LORA_TRAIN_URL. Phase-4 scaffold: the MCP tool does the packaging, validation, and HTTP; the user owns the deployment and pricing. See docs/research/06-stable-diffusion-flux/6d-lora-training-for-brand-style.md.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesBrand slug. Becomes the LoRA trigger token.
base_modelNoBase model to fine-tune (sdxl-1.0 / flux-1-dev / sd-1.5).sdxl-1.0
training_imagesYesLocal filesystem paths (5-200). 20-50 is the sweet spot. Paths go through the safeReadPath allow-list.
captionsNoPer-image caption overrides. Auto-captioned if omitted.
rankNo
stepsNo

TDQS

A4.1/5.0
Behavior4/5

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

The description discloses key behaviors: external HTTP call, packaging/validation, and output (lora_id). Annotations only provide openWorldHint, so the description adds value beyond structured fields.

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 three sentences, front-loading the purpose, then adding requirements and context. No wasted words, but could be slightly more concise.

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 training tool with 6 params and no output schema, the description covers inputs, process, output, and external dependencies, referencing more detailed docs. Lacks explicit return format but acceptable.

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 coverage is 67%; the description adds meaning for 'name' and 'training_images' but not for 'rank' and 'steps', which are only given defaults. Some param info is provided but not comprehensive.

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 trains a brand-consistent LoRA from sample images and returns a lora_id, with a specific verb and resource, distinguishing it from siblings focused on asset generation/ingestion.

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 explains the tool requires a user-owned training endpoint and references documentation, but does not explicitly state when not to use or list alternatives among siblings.

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

asset_upscale_refineB
Read-only

Upscale / refine an image, asset-type-aware. DAT2 for flat logos/icons, Real-ESRGAN/SUPIR for photoreal, img2img for diffusion polish. Lanczos fallback.

ParametersJSON Schema
NameRequiredDescriptionDefault
imageYes
asset_typeNo
target_sizeNo
modeNoauto
output_dirNo

TDQS

B3.4/5.0
Behavior1/5

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

The description claims a write operation ('upscale / refine') but annotations set readOnlyHint=true, creating a direct contradiction. No additional behavioral context (e.g., permissions, side effects) is 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 three concise sentences, front-loaded with the core purpose, and every sentence adds meaningful information without extra fluff.

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

Completeness2/5

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

Given 5 parameters, no output schema, and an annotation contradiction, the description is insufficient. It does not clarify return values, explain all parameters, or resolve the readOnly inconsistency.

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?

With 0% schema description coverage, the description adds value by explaining the mode enum's algorithms (DAT2, Real-ESRGAN, etc.) and ties asset_type to algorithm selection. However, it does not explain target_size, output_dir, or image format.

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 upscales/refines images with asset-type awareness, listing specific algorithms for different types. This verb+resource combination distinguishes it from sibling tools like asset_generate_logo or asset_remove_background.

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 the tool is for upscaling/refinement but does not explicitly state when to use it over alternatives or when not to use it. No exclusions or sibling comparisons are provided.

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

asset_validateB
Read-onlyIdempotent

Run tier-0 deterministic validators on an asset (dimensions, alpha presence, checkerboard-pattern heuristic on tile-luma alternation, safe-zone bbox, palette Ξ”E2000 against brand, WCAG contrast of brand primary vs light and dark tabs, OCR Levenshtein against intended_text). Optional tier-2 VLM-as-judge via PROMPT_TO_BUNDLE_VLM_URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
imageYes
asset_typeYes
brand_bundleNo
intended_textNo
run_vlmNo

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and idempotentHint. The description adds detail about deterministic validators and optional VLM, but does not disclose potential side effects or performance implications beyond annotations.

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 dense sentences that front-load the main purpose and list validators. No redundant information.

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

Completeness2/5

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

Given no output schema and complex nested parameters (brand_bundle), the description fails to explain return values or the structure of brand_bundle. It lacks completeness for effective agent invocation.

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?

With 0% schema description coverage, the description compensates partially by explaining brand_bundle (palette Ξ”E2000), intended_text (OCR Levenshtein), and run_vlm (VLM-as-judge). However, image and asset_type are not described.

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 runs tier-0 deterministic validators on an asset, listing specific checks (dimensions, alpha, checkerboard, etc.) and optional VLM-as-judge. This distinguishes it from sibling generation/export tools.

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 on when to use this tool versus alternatives like asset_doctor or asset_capabilities. No prerequisites or use cases are mentioned.

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

asset_vectorizeB
Read-only

Convert a raster image to SVG. Tries in order: Recraft /vectorize (if PROMPT_TO_BUNDLE_RECRAFT_VECTORIZE_URL is set), vtracer on PATH, potrace on PATH, then a built-in posterize run-length fallback. Passes all output through SVGO when installed.

ParametersJSON Schema
NameRequiredDescriptionDefault
imageYes
modeNoauto
palette_sizeNo
max_pathsNo
output_dirNo

TDQS

B3.3/5.0
Behavior1/5

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

The description contradicts the readOnlyHint annotation by describing a transformation that likely creates an output file, implying a write operation. This is a serious inconsistency. Additionally, while it mentions fallback strategies, the contradiction undermines trust.

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, and every sentence adds value. No extraneous information.

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

Completeness2/5

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

Given the tool's complexity (5 parameters, fallback logic, SVGO), the description omits parameter semantics, return value details, and output expectations. Without an output schema, the agent lacks critical context for effective use.

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?

With 0% schema description coverage and no parameter explanations in the description, the agent must rely solely on parameter names. The description adds no semantic value beyond the schema, leaving 5 parameters (especially mode, palette_size, max_paths) underexplained.

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 'Convert a raster image to SVG' with a specific verb and resource. It distinguishes from sibling tools like asset_upscale_refine and asset_remove_background by focusing on vectorization.

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 details the fallback order (Recraft, vtracer, potrace, posterize) and conditions for each, providing clear context on how the tool operates. However, it does not explicitly state when to use this tool over alternatives or 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.

Tool Schema Changelog

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

  1. 24 tool updatesv0.1.0
    • First observedasset_brand_bundle_parse
    • First observedasset_capabilities
    • First observedasset_doctor
    • First observedasset_enhance_prompt
    • First observedasset_export_bundle
    • First observedasset_generate_app_icon
    • First observedasset_generate_favicon
    • First observedasset_generate_hero
    • First observedasset_generate_illustration
    • First observedasset_generate_logo
    • First observedasset_generate_og_image
    • First observedasset_generate_splash_screen
    • First observedasset_ingest_external
    • First observedasset_init_brand
    • First observedasset_models_inspect
    • First observedasset_models_list
    • First observedasset_nine_slice
    • First observedasset_remove_background
    • First observedasset_save_inline_svg
    • First observedasset_sprite_sheet
    • First observedasset_train_brand_lora
    • First observedasset_upscale_refine
    • First observedasset_validate
    • First observedasset_vectorize

TDQS

A3.7/5.0

Scored across 24 tools

Disambiguation4/5

The asset_generate_* family is clearly separated by output artifact, and the processing, ingestion, validation, and export tools have mostly distinct jobs. The main ambiguity is between asset_doctor and asset_capabilities, which both report currently available execution modes, and asset_export_bundle vs asset_save_inline_svg both create platform bundles from different input types.

Naming Consistency3/5

All tools share the asset_ prefix and snake_case, so the surface is readable, but the internal convention is inconsistent: verb-first names like asset_generate_logo and asset_init_brand coexist with object-first names like asset_models_list, asset_models_inspect, and asset_brand_bundle_parse, plus noun-only names like asset_sprite_sheet and asset_capabilities. The asset_generate_* subfamily is consistent, but the rest does not follow one clearly predictable pattern.

Tool Count3/5

At 24 tools, the set is at the heavy/borderline end for an MCP server: each tool has a real purpose, but several generate_* variants and model/doctor helpers could be consolidated or parameterized to make the surface easier for an agent to discover. The count is not egregious, but it is above the ideal compact size.

Completeness5/5

The tool surface covers the full lifecycle from brand ingestion and prompt enhancement through generation, saving/ingestion, validation, vectorization, upscaling, background removal, platform export, sprite sheets, 9-slice config, model inspection, and environment diagnosis. Every execution mode has a clear follow-up path, so the workflow does not end in a dead end.

Maintenance

ActivitySlowing
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides multi-provider image generation with automatic fallback across services like Pollinations.ai, Cloudflare, and Hugging Face. It features specialized pixel art generation, cost tracking, and automatic saving of generated visual assets to disk.
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Visual icon search, retrieval, and comparison for AI agents. Search 200k+ icons semantically, render side-by-side comparison grids, and retrieve raw SVG markup β€” all tools return images so vision-capable LLMs can see the icons.
    1
    -
  • A
    license
    A
    quality
    A
    maintenance
    Routes your AI tasks to the best available model across 20+ providers β€” automatically selecting based on task type, budget, and subscription pressure. Supports text, image, video, and audio with built-in cost optimization and fallback chains.
    60
    595 PyPI
    79
    MIT