prompt-to-asset
Generates Android adaptive icons (including monochrome) and exports asset bundles for Android apps.
Integrates with Cloudflare Workers AI to generate assets using Flux-1-Schnell and SDXL models, with a free daily quota.
Produces Flutter launcher icons and asset bundles for Flutter projects.
Supports Google Gemini models (e.g., Nano Banana Pro) for image generation via API or Google AI Studio paste UI.
Generates iOS AppIconSet, including all required sizes and visionOS parallax icons.
Integrates with OpenAI image generation models (e.g., gpt-image-1.5) for creating assets.
Generates Progressive Web App icons (192x192, 512x512, maskable) and favicon bundles.
Generates sprite sheet atlases compatible with Unity, along with 9-slice data and border-image CSS.
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).
π΅ AI assistant Β· recommended
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,faviconOutputs: 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 # interactiveStart 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 |
| 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.
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
Nevercolumn. No wordmarks past 3 words through a diffusion sampler. No transparent PNG through Imagen. Nonegative_prompton 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 β what to say to your assistant
The three modes β inline_svg Β· external_prompt_only Β· api
The router β which model for which job, and what never
Models covered β 60+
MCP tools β 25 tools
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:
asset_doctor()β check what modes and providers are live.asset_init_brand({ app_name: "Forge", palette: ["#EA580C", "#F5F5F4"] })if nobrand.jsonexists.asset_enhance_prompt({ brief })returns anAssetSpec: classification, rewritten prompt,modes_available[], optionalsvg_brief, optionalpaste_targets, and arouting_tracepointing at the research file that backed the decision (plusnever_modelsβ why Imagen or DALLΒ·E got rejected).Assistant offers you
inline_svg/external_prompt_only/api.If
inline_svg: it writes<svg>inline and callsasset_save_inline_svgβ writesmaster.svg,favicon.ico, apple-touch, AppIconSet, PWA bundle to disk.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.If
api: assistant calls the routed provider. Server mattes, vectorizes, exports, validates.Follow-up: "also fan this out for iOS and Android" β
asset_export_bundlewith 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 |
| No | Server returns an SVG-authoring brief (viewBox, palette, path budget β€ 40). Host LLM emits | Logos, favicons, icon packs, stickers, simple app-icon masters |
| 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 | Anything β best for illustrations, heroes, text-heavy logos |
| 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 |
| Ideogram 3 Turbo ( | Imagen, Gemini Flash Image, SD 1.5 |
Logo with 1β3 word text | Ideogram 3 Turbo β | Composite SVG type over mark | Imagen, SD 1.5, |
Logo with >3 word text | Never a diffusion sampler. Mark + SVG typography composite. | β | β |
Native SVG | Recraft V4 (V3 for brand-style pipelines) |
| Everyone else |
Photoreal hero | Free CLI route first: Cloudflare / NVIDIA NIM / HF | Flux Pro / | DALLΒ·E 3, Imagen 4 for new work |
Iterate an existing mark |
| Pollinations Kontext (free) | β |
Zero-cost everything |
| 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 |
| 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 |
Local ComfyUI | Community | Full fidelity, no caps | You bring the GPU |
| Host LLM emits | Logos, favicons, simple icons | β€40 paths; simple geometry |
| Paste into any web UI | Whatever that UI gives you | Manual save, then |
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), andgemini-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 chargeinput + 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_externalif 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 forasset_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-assetRegister with your AI assistant
Claude Code
claude mcp add prompt-to-asset -- p2aSmithery (universal)
npx -y @smithery/cli install prompt-to-asset --client claudeCursor Β· 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 |
| Inventory of modes + providers. Buckets paid / free-tier / paste-only; surfaces zero-key routes first. Read-only. |
| Classify, route, rewrite. Returns modes + |
|
|
| Same three modes. |
|
|
| 1200Γ630 via Satori + |
|
|
| iOS |
| Marketing hero art (16:9 / 21:9 / 3:2 / 2:1). |
| Round-trip for |
| Round-trip for |
| BiRefNet / BRIA RMBG-2.0 / LayerDiffuse / difference matte / UΒ²-Net. |
|
|
| DAT2 / Real-ESRGAN / SUPIR / img2img / Lanczos; asset-type-aware. |
| Tier-0 (dims, alpha, checkerboard FFT, safe-zone bbox, ΞE2000 palette, WCAG contrast, OCR Levenshtein). Tier-2 VLM-as-judge via |
| Parse |
| 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. |
| Browse the 60+ model registry with filters: |
| Full capability dump for one model id (or aka alias). Strengths, weaknesses, paste targets, routing rules, env status. Read-only. |
| Fan a 1024Β² master PNG into iOS AppIconSet + Android adaptive + PWA maskable + visionOS parallax + Flutter launcher + favicon. Offline. |
| Pack PNG/WEBP/JPG frames into a sprite sheet + TexturePacker-compatible JSON atlas (Phaser / PixiJS / Godot / Unity). Offline. |
| Emit a 9-slice config + CSS |
| Scaffold |
| Wrap a user-owned LoRA training endpoint ( |
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) |
|
Android | Adaptive foreground + background, Android 13 monochrome, all mipmap densities, optional |
PWA / web |
|
Flutter | Pre-populated |
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 |
Games |
|
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 β validateContent-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 |
| β | β (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_svgresolve through symlinks and reject anything escaping project cwd + configured output dir + cache dir + OS tempdir. Widen withP2A_ALLOWED_PATHS=/path1:/path2.SVG is XSS-sanitized before any write.
<script>,<foreignObject>,on*=handlers,javascript:URIs, external<image href>/<use href>, CSS@importover the network β all rejected. The check runs unconditionally; SVGO is not required.Cost guardrail. Set
P2A_MAX_SPEND_USD_PER_RUN=5.00to 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 withp2a 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 SSOTsSSOTs 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.
Contribution flow: CONTRIBUTING.md
User on-ramp: GETTING_STARTED.md
Common snags: TROUBLESHOOTING.md
Release notes: CHANGELOG.md
Community
Issues + feature requests: GitHub Issues
Security disclosures: SECURITY.md
Code of Conduct: CODE_OF_CONDUCT.md
Star history:
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:
Why I stopped picking image models and built a router instead β the case for routing across 30+ image models.
MCP server architecture: what's inside prompt-to-asset β architecture deep-dive.
Cross-posted on Medium and dev.to.
License
MIT Β© prompt-to-asset contributors.
Available Tools
24 toolsasset_brand_bundle_parseARead-onlyIdempotent
Parse a brand source (brand.json, DTCG tokens, AdCP spec, brand.md, or raw text) into the canonical BrandBundle schema.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | Path to file or raw text |
TDQS
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.
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.
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.
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.
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.
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_capabilitiesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| asset_type | No | Narrow the modes-by-asset-type section to one type. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| check_data | No | Also run data-integrity check (equivalent to `p2a doctor --data`). Useful in CI after data edits. | |
| auto_fix | No | Run 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_run | No | Only meaningful when auto_fix=true. Plan steps without executing. Defaults to false. |
TDQS
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.
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.
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.
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.
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.
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_promptARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| brief | Yes | Plain-English description of the desired asset | |
| vector | No | ||
| asset_type | No | ||
| transparent | No | ||
| brand_bundle | No | ||
| target_model | No | Force a specific model; otherwise selected by router | |
| text_content | No | Literal text to render in the asset |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| master_path | Yes | Absolute path to the 1024Β² master PNG. Resized up front to RGBA 1024Β². | |
| platforms | No | Which platform bundles to emit. Defaults to all. | |
| out_dir | No | Output directory. Defaults to ./assets/bundle-<stem>-<timestamp> so repeated runs don't clobber. | |
| bg | No | Background color hex for iOS 1024 marketing (opaque), Android adaptive BG, favicon apple-touch. Defaults white. | |
| app_name | No | Short name for the PWA manifest. | |
| theme | No | theme_color hex for the PWA manifest. | |
| ios18 | No | When true, also emit iOS 18 dark + tinted 1024Β² appearance variants. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| brief | Yes | ||
| mode | No | ||
| brand_bundle | No | ||
| platforms | No | ||
| ios_18_appearances | No | Also emit iOS 18 dark (flattened on #000) and tinted (greyscale luminance map) 1024Β² variants and add `appearances` to Contents.json. | |
| output_dir | No |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| brief | Yes | ||
| mode | No | ||
| brand_bundle | No | ||
| existing_mark_svg | No | ||
| dark_mode | No | ||
| output_dir | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| brief | Yes | ||
| mode | No | ||
| brand_bundle | No | ||
| aspect_ratio | No | 16:9 | |
| count | No | ||
| output_dir | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| brief | Yes | ||
| mode | No | ||
| brand_bundle | No | ||
| count | No | ||
| aspect_ratio | No | 4:3 | |
| output_dir | No |
TDQS
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.
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.
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.
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.
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.
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_logoA
Generate a logo. Three modes: inline_svg (Claude emits SVG β zero key), external_prompt_only (returns prompt + paste targets β zero key), api (server runs the provider pipeline β requires key). Omit mode to auto-select. Returns an AssetBundle / InlineSvgPlan / ExternalPromptPlan discriminated by the mode field.
| Name | Required | Description | Default |
|---|---|---|---|
| brief | Yes | ||
| mode | No | Execution mode. Omit for auto-select (prefers inline_svg β api β external_prompt_only). | |
| brand_bundle | No | ||
| text_content | No | ||
| vector | No | ||
| output_dir | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the sole annotation (openWorldHint=true), the description discloses key behavioral traits: mode-specific key requirements, auto-selection logic, and that the return is a discriminated union (AssetBundle/InlineSvgPlan/ExternalPromptPlan). This adds substantial context for agent decision-making.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each adding unique value: purpose, mode breakdown, and return type. Information is front-loaded and no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description covers modes and returns, it omits explanation of most input parameters (e.g., what 'brief' expects, how 'brand_bundle' affects output). For a tool with 6 parameters and no output schema, this leaves significant gaps for an agent to understand invocation fully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains only the 'mode' parameter (three values and auto-select), which is the only parameter with schema coverage (17%). Other critical parameters like 'brief', 'brand_bundle', and 'text_content' are not described, leaving the agent without guidance on their roles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Generate a logo' and elaborates on three distinct modes (inline_svg, external_prompt_only, api) with specific behaviors. This distinguishes it from sibling tools like asset_generate_hero or asset_generate_illustration, which have different asset targets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use each mode and that omitting the mode auto-selects. However, it does not explicitly advise against using this tool in scenarios better suited for siblings (e.g., generating a hero image), 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_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).
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| mode | No | ||
| subtitle | No | ||
| template | No | centered_hero | |
| brand_bundle | No | ||
| with_background_image | No | ||
| background_brief | No | ||
| output_dir | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| brief | Yes | ||
| mode | No | ||
| brand_bundle | No | ||
| existing_mark_svg | No | Path to an existing brand-mark SVG to center on the splash. Preferred over regenerating. | |
| platforms | No | ||
| background_color | No | ||
| output_dir | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| image_path | Yes | Absolute path to the locally-saved image. | |
| asset_type | Yes | ||
| brand_bundle | No | ||
| expected_text | No | ||
| vector | No | ||
| transparent | No | ||
| output_dir | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| app_name | Yes | App / brand name. Goes into brand.json and any PWA manifest. | |
| palette | No | Brand palette as hex strings. Defaults to ['#2563eb', '#ffffff']. | |
| assets_dir | No | Where generated assets should live. Defaults to the framework's conventional dir. | |
| display_font | No | Display font family. Defaults to Inter. | |
| body_font | No | Body font family. Defaults to Inter. | |
| do_not | No | Brand constraints to inject as negative anchors. Defaults to drop-shadows / heavy-gradients / skeuomorphic-bevels. | |
| overwrite | No | When true, overwrites an existing brand.json. | |
| cwd | No | Project root. Defaults to process.cwd(). |
TDQS
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.
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.
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.
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.
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.
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_inspectARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Model id or aka alias (e.g. 'gpt-image-1', 'nano-banana', 'ideogram-3-turbo'). |
TDQS
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.
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.
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.
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.
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.
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_listARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| free | No | Only zero-key / free-tier models. | |
| paid | No | Only paid direct-API models. | |
| paste_only | No | Only paste-only surfaces (Midjourney, Firefly, Krea). | |
| rgba | No | Only models with native transparent-PNG output. | |
| svg | No | Only models with native SVG output. |
TDQS
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.
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.
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.
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.
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.
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>.
| Name | Required | Description | Default |
|---|---|---|---|
| image | Yes | Path to the source image. | |
| guides | Yes | Pixel offsets from each edge marking the fixed regions. | |
| out | No | Output directory. Defaults to the directory of the input image. | |
| android_9patch | No | Also emit <name>.9.png with Android 9-patch 1px-border encoding. |
TDQS
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.
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.
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.
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.
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.
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_backgroundARead-only
Matte an image to transparent background (BiRefNet / BRIA RMBG / UΒ²-Net via remote endpoint; local white-chroma fallback). Returns RGBA PNG path.
| Name | Required | Description | Default |
|---|---|---|---|
| image | Yes | Path or URL to input image | |
| mode | No | auto | |
| output_dir | No |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| svg | Yes | The full <svg>...</svg> text you just emitted in chat. | |
| asset_type | Yes | ||
| brand_bundle | No | ||
| expected_text | No | ||
| platforms | No | For asset_type=app_icon. Defaults to ['all']. | |
| dark_mode | No | For asset_type=favicon: also emit icon-dark.svg (prefers-color-scheme: dark). Default true. | |
| app_name | No | For asset_type=favicon: name/short_name written into manifest.webmanifest. | |
| theme_color | No | For asset_type=favicon: theme_color hex for manifest + <meta>. | |
| background_color | No | For asset_type=favicon: PWA splash background_color hex. | |
| output_dir | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | Yes | Directory containing frames. Sorted by natural filename order. | |
| layout | No | grid | |
| columns | No | Columns (grid only). Defaults to ceil(sqrt(n)). | |
| padding | No | ||
| out | No | Output PNG path. Defaults to ./sprites.png. | |
| atlas | No | Output atlas JSON path. Defaults to the sheet path with .json extension. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Brand slug. Becomes the LoRA trigger token. | |
| base_model | No | Base model to fine-tune (sdxl-1.0 / flux-1-dev / sd-1.5). | sdxl-1.0 |
| training_images | Yes | Local filesystem paths (5-200). 20-50 is the sweet spot. Paths go through the safeReadPath allow-list. | |
| captions | No | Per-image caption overrides. Auto-captioned if omitted. | |
| rank | No | ||
| steps | No |
TDQS
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.
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.
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.
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.
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.
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_refineBRead-only
Upscale / refine an image, asset-type-aware. DAT2 for flat logos/icons, Real-ESRGAN/SUPIR for photoreal, img2img for diffusion polish. Lanczos fallback.
| Name | Required | Description | Default |
|---|---|---|---|
| image | Yes | ||
| asset_type | No | ||
| target_size | No | ||
| mode | No | auto | |
| output_dir | No |
TDQS
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.
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.
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.
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.
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.
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_validateBRead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| image | Yes | ||
| asset_type | Yes | ||
| brand_bundle | No | ||
| intended_text | No | ||
| run_vlm | No |
TDQS
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.
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.
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.
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.
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.
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_vectorizeBRead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| image | Yes | ||
| mode | No | auto | |
| palette_size | No | ||
| max_paths | No | ||
| output_dir | No |
TDQS
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.
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.
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.
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.
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.
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.
24 tool updates
v0.1.0- First observed
asset_brand_bundle_parse - First observed
asset_capabilities - First observed
asset_doctor - First observed
asset_enhance_prompt - First observed
asset_export_bundle - First observed
asset_generate_app_icon - First observed
asset_generate_favicon - First observed
asset_generate_hero - First observed
asset_generate_illustration - First observed
asset_generate_logo - First observed
asset_generate_og_image - First observed
asset_generate_splash_screen - First observed
asset_ingest_external - First observed
asset_init_brand - First observed
asset_models_inspect - First observed
asset_models_list - First observed
asset_nine_slice - First observed
asset_remove_background - First observed
asset_save_inline_svg - First observed
asset_sprite_sheet - First observed
asset_train_brand_lora - First observed
asset_upscale_refine - First observed
asset_validate - First observed
asset_vectorize
TDQS
Scored across 24 tools
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.
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.
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.
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
Related MCP Connectors
Generate PWA icon sets and iOS splash screens from a text prompt or an existing image.
Generate vector art, vectorize images, and return SVG, PNG, and logo kits to AI agents.
AI-agent image generation: cohesive sets & illustrations. Resize a set or export icons, free.
Image, video, music and text generation across 100+ models through one endpoint.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceGenerates all required web app icons and manifest files from a single source image with framework auto-detection. Supports Next.js App Router, traditional web apps, and PWA standards with zero configuration.5 npmMIT
- AlicenseNot gradedqualityDmaintenanceProvides 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
- FlicenseNot gradedqualityDmaintenanceVisual 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-
- AlicenseAqualityAmaintenanceRoutes 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.60595 PyPI79MIT