Skip to main content
Glama

QuokkaPix MCP Runner

quokkapix-mcp MCP server

Local-first MCP adapter and cloud-to-local bridge for private QuokkaPix Image and Video workflows.

QuokkaPix MCP Runner lets AI agents process local images and videos by opening the matching QuokkaPix browser surface, applying an official recipe or direct settings, selecting local files through the browser input, saving the output, and writing a machine-readable result manifest. Image runs write quokkapix-result.json; Video runs write quokkapix-video-result.json.

It supports two compatible modes:

  • local stdio for Image and Video in Claude Desktop, Cursor, LM Studio/Ollama wrappers and other local MCP clients;

  • bridge for remote Image and Video MCP clients such as Claude web, while Chromium and all media processing remain on the user's computer.

Repository: https://github.com/quokkapix/quokkapix-mcp

npm package: https://www.npmjs.com/package/quokkapix-mcp

Glama listing: https://glama.ai/mcp/servers/quokkapix/quokkapix-mcp

mcpservers.org listing: https://mcpservers.org/servers/quokkapix/quokkapix-mcp

Browser compatibility matrix: https://quokkapix.com/en/browser-compatibility/

Browser benchmark: https://quokkapix.com/en/browser-image-processing-benchmark/

Video compatibility matrix: https://video.quokkapix.com/browser-compatibility/

Video benchmark: https://video.quokkapix.com/browser-video-processing-benchmark/

Quick start:

npx quokkapix-mcp

Cloud-to-local bridge:

npx quokkapix-mcp bridge --input-root ./media --output-root ./quokkapix-output

What This Is

This package is a local automation adapter around two browser surfaces:

https://quokkapix.com/#agent=1
https://video.quokkapix.com/#agent=1

The adapter uses Playwright to drive local Chromium. Image uses window.QuokkaPixAgent; Video uses window.QuokkaPixVideoAgent.

Image, video and audio files are processed in the user's browser runtime. Source media bytes are not uploaded to a QuokkaPix processing server. Local transcription may download and cache Whisper model files, but does not upload the selected media with that model request.

The optional bridge mode connects outward to the QuokkaPix control plane. The remote MCP endpoint relays tool settings, relative file names, status and result metadata. It has no media upload endpoint and does not relay source image, video, audio or output bytes.

Related MCP server: Media Toolkit MCP Server

What This Is Not

This package is not:

  • a public server-side media processing API;

  • a hosted media-processing service (the remote MCP control plane only coordinates a paired local bridge);

  • a GPU/CPU media-processing backend run by QuokkaPix;

  • a way to pass local file paths to quokkapix.com by URL;

  • a replacement for browser memory limits.

Local file paths are available only to the local MCP runner on the user's machine. The public QuokkaPix website still receives files only through the browser file input or dropzone.

Why Use It

Use this adapter when an AI agent needs repeatable media workflows like:

  • prepare product photos for Shopify, Amazon, or Google Merchant;

  • validate marketplace and social image outputs against sourced rule profiles;

  • compress images to WebP for a website;

  • remove EXIF/GPS metadata;

  • generate social media image packs;

  • watermark a batch of images;

  • generate favicon and app icon packs;

  • run custom QuokkaPix settings without manually clicking the UI.

  • cut, crop, resize, convert or compress one local video;

  • extract, mute, mix or replace video audio with a local music file;

  • generate TXT, SRT or VTT transcripts locally, or burn subtitles into MP4;

  • prepare sourced YouTube, TikTok Ads and Meta Reels video profiles.

The main value is privacy and low infrastructure cost: the agent gets practical Image and Video workflow tools, while media processing remains local in the user's browser.

Architecture

AI agent / MCP client
        |
        | stdio MCP
        v
quokkapix-mcp
        |
        | Playwright
        v
local Chromium browser
        |
        | window.QuokkaPixAgent or window.QuokkaPixVideoAgent
        v
quokkapix.com or video.quokkapix.com
        |
        | local browser processing
        v
downloaded output + surface-specific result manifest

Remote clients use the same package in bridge mode:

Claude web / remote MCP client
        |
        | OAuth 2.1 + Streamable HTTP (commands and metadata only)
        v
QuokkaPix control plane
        |
        | outbound authenticated long poll
        v
quokkapix-mcp bridge on the user's computer
        |
        | Playwright
        v
local Chromium -> local output + quokkapix-result.json or quokkapix-video-result.json

Depending on the selected surface, the adapter saves:

  • the generated image, ZIP, PDF, video, audio or transcript output;

  • quokkapix-result.json or quokkapix-video-result.json;

  • a qa object returned to the agent.

Requirements

  • Node.js >=20

  • npm

  • Playwright Chromium

  • internet access for loading QuokkaPix and browser-side dependencies/models when needed

  • local file paths that the MCP process can read

Bridge mode additionally requires explicit input and output roots. Remote calls cannot read or write outside those roots.

Install dependencies:

npm install
npx playwright install chromium

Remote MCP And Bridge Setup

  1. Start the existing package in bridge mode:

npx -y quokkapix-mcp bridge \
  --input-root /absolute/path/to/input \
  --output-root /absolute/path/to/output
  1. Approve the one-time pairing URL printed by the command.

  2. Add https://quokkapix.com/mcp as a custom remote MCP connector.

  3. Complete OAuth authorization in the browser.

The bridge stores its random device credential in ~/.quokkapix/bridge.json with owner-only permissions where the operating system supports them. Use --pair to approve another browser session or --reset to revoke the old device authorization and create a new credential.

Remote processing paths are relative to --input-root and --output-root. The bridge rejects path traversal and does not return absolute local paths to the cloud client.

MCP Tools

list_recipes

Lists official QuokkaPix recipes.

Use first when the agent does not know which workflow to run.

get_recipe

Returns one recipe by id, including:

  • applySettings;

  • file limits;

  • expected output;

  • QA contract;

  • payment requirement.

Input:

{
  "id": "shopify_product_pack"
}

validate_recipe

Validates a custom recipe object before processing.

This does not upload files and does not start processing.

list_rule_profiles

Lists sourced marketplace and social image rule profiles.

Use this when an agent needs facts for Amazon, Shopify, Google Merchant, Etsy, eBay, Walmart, TikTok Shop, Mercado Libre, Temu, Shopee, Instagram, YouTube, LinkedIn, X, Pinterest, Facebook or TikTok before choosing a workflow or checking an output.

Every profile declares:

  • sourceType: official or secondary;

  • sourceUrl;

  • confidence;

  • requirements and recommendations that were found from the named source.

The runner does not invent missing marketplace requirements. Temu, Mercado Libre, Shopee and some YouTube entries are marked as secondary or category/country-specific where official public specs were limited.

get_rule_profile

Returns one rule profile by id, for example:

{
  "id": "amazon.product.image"
}

Agents can pass the returned facts into their own planning, or call validate_result_manifest with ruleProfileId.

validate_result_manifest

Validates an existing quokkapix-result.json against a recipe or custom QA contract.

This is useful when an agent wants to inspect a previous run and decide whether the output is acceptable.

Optional input:

{
  "ruleProfileId": "amazon.product.image",
  "manifest": {}
}

When ruleProfileId is provided, the QA report includes sourced marketplace checks such as supported formats, dimensions, source type and URL. If the browser result manifest includes outputs[].pixelQa, the validator also evaluates supported pixel-level visual checks such as white background, subject centering, safe margins and transparent background.

Video tools

  • list_video_recipes — list official Cut, Crop, Convert, Compress, Audio and Transcribe recipes.

  • get_video_recipe — return one Video recipe and its expected QA.

  • validate_video_recipe — validate a custom Video recipe without processing media.

  • list_video_rule_profiles — list sourced YouTube, TikTok Ads and Meta Reels profiles.

  • get_video_rule_profile — return one Video profile with its official source.

  • validate_video_result_manifest — validate an existing quokkapix-video-result.json.

  • process_video — process one local video with an official recipe.

  • process_video_with_settings — process one local video with direct QuokkaPixVideoAgent settings.

Example:

{
  "recipeId": "tiktok_vertical",
  "inputFile": "/Users/me/video/source.mp4",
  "outputDir": "/Users/me/video/out"
}

Audio mix example:

{
  "settings": {
    "tool": "audio",
    "audio": { "mode": "mix", "volume": 100, "musicVolume": 35 }
  },
  "inputFile": "/Users/me/video/source.mp4",
  "musicFile": "/Users/me/audio/music.wav",
  "outputDir": "/Users/me/video/out"
}

Version 0.7.0 exposes the unified Image/Video payment quote and token flow through the OAuth-protected remote MCP and paired local bridge. Remote inputFile, optional musicFile and outputDir values are relative to the configured roots; their bytes never pass through the control plane. Paid Video bridge calls require 0.7.0 or newer.

process_images

Processes local image files through QuokkaPix using either:

  • an official recipeId;

  • a full custom recipe object.

It opens a browser, applies the recipe, uploads files, starts processing, downloads the output, writes quokkapix-result.json, and returns QA results.

Optional local asset files:

  • watermarkLogoFile: local logo/image file uploaded into QuokkaPix's watermark logo input.

  • backgroundImageFile: local image file uploaded into QuokkaPix's background replacement image input.

These assets are still uploaded only into the local browser page. They are not passed as URL paths to the public QuokkaPix website.

process_with_settings

Processes local image files using a direct QuokkaPix applySettings payload.

Use this when the agent already knows the exact editor settings and does not want to wrap them in a recipe.

This is the broadest tool surface. It can drive the same settings surface as:

window.QuokkaPixAgent.applySettings(payload)

Supported editor areas depend on the QuokkaPix browser contract and include:

  • resize;

  • crop;

  • rotate;

  • convert;

  • compress;

  • advanced export to browser-supported formats and experimental JPEG XL when the browser-loaded encoder is available;

  • metadata removal/reporting;

  • PDF merge/split/extract tools through tool=pdf and pdf.operation for uploaded PDF files only; ZIP archives are accepted only for PDF merge and only PDF entries are extracted;

  • background removal/replacement settings;

  • watermark;

  • effects;

  • rename;

  • constructor/scenario workflows.

For custom scenarios, prefer the explicit structured form:

{
  "mode": "batch",
  "tool": "constructor",
  "steps": [
    {
      "tool": "resize",
      "settings": { "mode": "fit", "width": 1200, "height": 1200 }
    },
    {
      "tool": "watermark",
      "settings": { "type": "text", "text": "Brand", "layout": "tiled", "angle": -20 }
    },
    {
      "tool": "compress",
      "settings": { "format": "webp", "quality": 0.82 }
    }
  ]
}

Step settings use the same section keys as window.QuokkaPixAgent.applySettings.

PDF tools use PDF uploads instead of image uploads:

{
  "tool": "pdf",
  "pdf": {
    "operation": "extract",
    "extractPages": "1,3-5",
    "extractOutput": "pdf"
  }
}

Use operation: "split" to export one uploaded PDF as a ZIP of one-page PDFs. Use operation: "extract" with extractPages to create one PDF containing only the selected pages from one uploaded PDF; page order is preserved, so extractPages: "3,1" exports page 3 before page 1. Set extractOutput: "zip" when the selected pages should be returned as separate one-page PDFs inside a ZIP. tool: "pdf" defaults to split. Split and extract are single-PDF workflows because page numbers refer to one source PDF. Use operation: "merge" to combine multiple PDFs into one PDF in the current browser file order; merge is a batch workflow and switches the browser editor to batch mode. Human users can reorder merge files in the UI; MCP clients should pass files in the desired merge order.

ZIP upload is batch-only. If a user or agent selects a .zip in batch mode, QuokkaPix unpacks it locally in the browser and adds supported images from the archive to the batch queue. RAR and 7z are not accepted.

get_payment_options

Fetches QuokkaPix agent payment policy and x402 endpoints.

This does not perform a payment.

explain_payment_flow

Explains the current x402 payment flow for agents.

Important: this local MCP adapter does not sign x402 payments by itself. An x402-capable client or wallet must call the paid unlock endpoint and return an unlockToken.

verify_unlock_token

Safely verifies a paid agent unlock token before processing without consuming it. The adapter deliberately has no pre-consume option: the one-time unlock is consumed only by the browser start path after validation succeeds.

Remote-only bridge tools

The hosted remote MCP endpoint also exposes:

  • get_bridge_status to check pairing and local availability;

  • get_billing_status to check whether a verified one-time unlock is staged;

  • set_unlock_token to stage an x402 unlock for the next paid local batch.

Remote verify_unlock_token is preflight-only and never consumes the token. Actual consumption remains inside the local browser start path.

The hosted endpoint also relays all Image and Video recipe, rule, QA and processing tools listed above. Both process_video and process_video_with_settings require the OAuth bridge:execute scope. Video uses duration/transcription products instead of the Image file/PDF products; both surfaces use the same x402 protocol.

Official Recipes

The runner loads recipes from the local project if present. If local recipe files are absent, it falls back to:

https://quokkapix.com/agent-recipes/

Current official recipes:

Recipe id

Purpose

Mode

Output

shopify_product_pack

Shopify product photos

batch

ZIP

amazon_white_background_pack

Amazon-style white background product photos

batch

ZIP

google_merchant_pack

Google Merchant product images

batch

ZIP

etsy_product_batch

Etsy product image batch with sourced QA

batch

ZIP

ebay_listing_photo_batch

eBay listing photo batch

batch

ZIP

walmart_product_main_batch

Walmart product main images

batch

ZIP

tiktok_shop_product_batch

TikTok Shop product images

batch

ZIP

temu_product_main_batch

Temu-style product images with secondary source

batch

ZIP

shopee_product_batch

Shopee product images

batch

ZIP

mercado_libre_accessories_batch

Mercado Libre accessory photos

batch

ZIP

allegro_listing_image_batch

Allegro listing images

batch

ZIP

newegg_product_image_batch

Newegg product images

batch

ZIP

meta_catalog_product_batch

Meta Catalog product images

batch

ZIP

flipkart_product_image_batch

Flipkart product photos from public guidance

batch

ZIP

shein_product_square_batch

SHEIN square product images with secondary source

batch

ZIP

otto_product_image_batch

OTTO product images with sourced 500 x 1000 px minimum QA

batch

ZIP

trendyol_product_image_batch

Trendyol product images at sourced 1200 x 1800 px size

batch

ZIP

snapchat_ad_image_batch

Snapchat static ad images

batch

ZIP

website_webp_compress

Website image compression to WebP

batch

ZIP

webp_compress_batch

General WebP batch conversion and compression

batch

ZIP

white_background_shadow_batch

White background product images with soft shadow

batch

ZIP

metadata_clean_batch

Remove EXIF/GPS/camera/software metadata

batch

ZIP

single_webp_compress

Compress one image to WebP

single

image

single_background_remove

Remove background from one image

single

image

single_white_background

Create one white-background product image

single

image

single_metadata_clean

Remove metadata from one image

single

image

single_watermark

Apply a text watermark to one image

single

image

images_to_pdf_batch

Merge selected images or scans into one PDF

batch

PDF

social_pack_single

Social media sizes from one image

single

ZIP

profile_avatar_pack

Profile avatar sizes from one image

single

ZIP

watermark_product_batch

Apply watermark to product images

batch

ZIP

favicon_app_icon_pack

Generate favicon and app icon sizes

single

ZIP

Agents should usually call list_recipes, choose the closest recipe, then call process_images.

Use process_with_settings when the desired workflow is not covered by a recipe.

Install From Source

From the mcp-runner folder:

npm install
npx playwright install chromium
npm run check

Start the MCP server:

npx quokkapix-mcp

Direct CLI run without an MCP client:

npx quokkapix-runner --recipe website_webp_compress --input ./photo.jpg --output ./out

MCP Client Configuration

For most users, configure the published npm package directly:

{
  "mcpServers": {
    "quokkapix": {
      "command": "npx",
      "args": ["-y", "quokkapix-mcp"],
      "env": {
        "QUOKKAPIX_APP_URL": "https://quokkapix.com/#agent=1"
      }
    }
  }
}

Use absolute paths for cwd.

Claude Desktop From Source

If you cloned the GitHub repository instead of using npm, add this to your Claude Desktop MCP config:

{
  "mcpServers": {
    "quokkapix": {
      "command": "node",
      "args": ["src/server.mjs"],
      "cwd": "/absolute/path/to/quokkapix-mcp",
      "env": {
        "QUOKKAPIX_APP_URL": "https://quokkapix.com/#agent=1"
      }
    }
  }
}

Cursor From Source

If you cloned the GitHub repository instead of using npm, use the same server definition in Cursor MCP settings:

{
  "mcpServers": {
    "quokkapix": {
      "command": "node",
      "args": ["src/server.mjs"],
      "cwd": "/absolute/path/to/quokkapix-mcp",
      "env": {
        "QUOKKAPIX_APP_URL": "https://quokkapix.com/#agent=1"
      }
    }
  }
}

Local Development

Run QuokkaPix locally and point the runner to it:

QUOKKAPIX_APP_URL=http://127.0.0.1:4177/#agent=1 npx quokkapix-mcp

Override the local site root:

QUOKKAPIX_SITE_ROOT=/path/to/quokkapix-site npx quokkapix-mcp

Override the public recipe source:

QUOKKAPIX_RECIPE_BASE_URL=https://quokkapix.com/agent-recipes npx quokkapix-mcp

Override payment base URL:

QUOKKAPIX_PAYMENT_BASE_URL=https://quokkapix.com npx quokkapix-mcp

appUrl is intentionally restricted for local-file safety. By default the runner only opens:

  • https://quokkapix.com/ and https://www.quokkapix.com/;

  • http://127.0.0.1, http://localhost and local HTTPS equivalents.

This prevents a malicious prompt or recipe from pointing the browser runner at an unrelated page and uploading local files there. For trusted development only, custom app URLs can be enabled with:

QUOKKAPIX_ALLOW_CUSTOM_APP_URL=1 npx quokkapix-mcp

Example: Process Product Photos For Shopify

Tool: process_images

{
  "recipeId": "shopify_product_pack",
  "inputFiles": [
    "/Users/me/products/photo-1.jpg",
    "/Users/me/products/photo-2.jpg",
    "/Users/me/products/photo-3.jpg",
    "/Users/me/products/photo-4.jpg",
    "/Users/me/products/photo-5.jpg",
    "/Users/me/products/photo-6.jpg"
  ],
  "outputDir": "/Users/me/products/out",
  "headless": true
}

Expected output:

  • a ZIP file in outputDir;

  • quokkapix-result.json;

  • a returned qa report.

The tool result separates processing success from QA success:

  • processingOk: true means QuokkaPix completed and produced an output file;

  • qaOk: true means the output passed the recipe QA checks;

  • top-level ok follows qaOk, so agents should not treat a failed QA run as fully successful.

Example: Direct Custom Settings

Tool: process_with_settings

{
  "settings": {
    "mode": "single",
    "tool": "compress",
    "settings": {
      "compress": {
        "format": "webp",
        "quality": 0.82,
        "targetEnabled": false
      }
    }
  },
  "settingsId": "custom-webp-compress",
  "expectedResultQa": {
    "profile": "custom-webp-compress",
    "expectedFormat": "webp"
  },
  "inputFiles": ["/Users/me/images/photo.jpg"],
  "outputDir": "/Users/me/images/out"
}

Use this for custom workflows that are not official recipes.

Example: Logo Watermark Asset

Tool: process_with_settings

{
  "settings": {
    "mode": "single",
    "tool": "watermark",
    "settings": {
      "watermark": {
        "type": "image",
        "layout": "single",
        "position": "center",
        "scalePercent": 20,
        "opacity": 0.25
      }
    }
  },
  "watermarkLogoFile": "/Users/me/brand/logo.svg",
  "inputFiles": ["/Users/me/images/photo.jpg"],
  "outputDir": "/Users/me/images/out"
}

Example: Background Image Asset

Tool: process_with_settings

{
  "settings": {
    "mode": "batch",
    "tool": "constructor",
    "steps": [
      {
        "tool": "background",
        "settings": {
          "mode": "replace",
          "replaceMode": "chroma",
          "fill": "image",
          "sourceColor": "#ffffff",
          "tolerance": 36,
          "exportFormat": "webp"
        }
      },
      {
        "tool": "compress",
        "settings": { "format": "webp", "quality": 0.82 }
      }
    ]
  },
  "backgroundImageFile": "/Users/me/backgrounds/studio.webp",
  "inputFiles": ["/Users/me/products/photo-1.jpg", "/Users/me/products/photo-2.jpg"],
  "outputDir": "/Users/me/products/out"
}

This two-file batch is free. For a paid tier, first run without a token to obtain the exact local quote, then retry unchanged with its product unlockToken.

Example: Metadata Cleanup

Tool: process_images

{
  "recipeId": "metadata_clean_batch",
  "inputFiles": [
    "/Users/me/private/photo-1.jpg",
    "/Users/me/private/photo-2.jpg"
  ],
  "outputDir": "/Users/me/private/clean"
}

For batch runs, see the payment section below.

Example: QA-Only Validation

Tool: validate_result_manifest

{
  "recipeId": "shopify_product_pack",
  "manifest": {
    "status": "done",
    "source": {
      "count": 1,
      "totalBytes": 1000
    },
    "outputs": [
      {
        "sourceName": "photo.jpg",
        "outputName": "shopify_1.webp",
        "outputWidth": 2048,
        "outputHeight": 2048,
        "format": "webp",
        "sizeBytes": 250000,
        "warnings": []
      }
    ],
    "warnings": []
  }
}

The result contains:

{
  "ok": true,
  "profile": "shopify-product",
  "summary": {
    "checks": 8,
    "failures": 0,
    "warnings": 0,
    "outputs": 1
  },
  "checks": []
}

Result Manifest

After processing, the runner writes:

quokkapix-result.json

The manifest is returned by:

window.QuokkaPixAgent.getResultManifest()

It contains machine-readable local processing facts:

  • schemaVersion;

  • status;

  • success;

  • tool;

  • mode;

  • source.count;

  • source.totalBytes;

  • outputs[];

  • source/output dimensions when available;

  • output file names;

  • formats;

  • byte sizes;

  • warnings;

  • processingMs;

  • browser capabilities;

  • optional planned backend routes in capabilities.backends;

  • stable errorCode.

The manifest does not contain image bytes.

capabilities.backends is additive and advisory. The current MCP adapter already passes unknown browser manifest fields through unchanged, so this field does not require a new adapter release. Continue to use terminal status, errorCode and QA results to decide whether a run succeeded.

QA Validation

The runner validates result manifests against recipe QA contracts. Each check includes name, ok, severity, expected, actual, message and remediation, so agents can report both what failed and what setting to change.

Current QA checks include:

  • run status is done;

  • source count is positive;

  • source count is within recipe limit;

  • outputs are present;

  • expected format;

  • expected width/height;

  • max width/height;

  • square output when required;

  • max output size in KB when per-file size is available;

  • output name prefix;

  • required warning absence;

  • ZIP entries are represented in the manifest;

  • expected minimum output count for packs.

  • pixel-level checks when the browser manifest contains outputs[].pixelQa metrics:

    • white background;

    • subject centered;

    • safe margins;

    • transparent background.

Semantic checks such as watermark presence, promotional text, old-background remnants or subjective cutout quality are not marked as passed without a measurable signal in the manifest. If a custom QA contract requests an unsupported visual check, the validator reports it as a warning instead of silently treating it as passed.

Those require a future semantic analyzer or another explicit measurable signal. The runner does not currently pretend to verify them.

Agent Payments And x402

Human QuokkaPix UI and reward-ad flows are unchanged.

Agent pricing is calculated from the actual media loaded into the local browser.

Current policy:

Surface/run

Free

Next tier

Larger tier

Image normal tools

1-5 actual files

6-25: 0.01

26-50: 0.02 USDC; >50 blocked

PDF

Up to 20 pages

21-50: 0.01

51-300: 0.02 USDC; >300 blocked

Image multi-step scenario

-

-

0.02 USDC

Video normal edit

Up to 5 min

>5-15: 0.01; >15-30: 0.02

>30: 0.03 USDC

Video transcription

Up to 5 min

>5-15: 0.02; >15-30: 0.04

>30-45: 0.06 USDC; >45 blocked

ZIP contents count after local extraction. Transcription plus subtitle burn is one transcription-priced run, not two fees. Burning transcript segments that already exist uses the normal Video edit tier.

  • provider: Coinbase x402;

  • provider: Coinbase x402;

  • currency/networks: USDC on Base (eip155:8453, default), Polygon (eip155:137), Arbitrum (eip155:42161) and World Chain (eip155:480) when exposed by /api/agent-payment/options;

  • payment options endpoint: /api/agent-payment/options;

  • product unlock endpoint: /api/agent-unlock/coinbase-x402/:productId;

  • verify endpoint: /api/agent-unlock/verify;

  • formal API contract: /x402-api.md.

The MCP runner can:

  • fetch payment options;

  • explain the payment flow;

  • verify an unlock token;

  • pass an unlock token into processing.

The MCP runner does not sign x402 payments itself. An x402-capable client or wallet must obtain the unlockToken.

Bridge mode does not add a second fee and WebMCP has no separate charge. A remote client can pass unlockToken on the retried processing call or call set_unlock_token with the matching usage. The control plane keeps a staged token only in memory and never consumes it. The local browser remains authoritative and consumes the token immediately before processing starts.

Always call get_payment_options for current products and provider availability. For an exact quote, run the appropriate process tool without a token. The local browser first expands ZIPs or reads PDF pages/Video duration and returns a quote without starting paid work.

Paid workflow:

  1. Apply settings and supply the local paths to a process tool without a token.

  2. Read the returned local quote and its productId/paymentEndpoint.

  3. Use an x402-capable client to pay that product endpoint.

  4. Read unlockToken; optionally call verify_unlock_token with matching usage.

  5. Retry the same unchanged Image or Video process call with unlockToken.

  6. The browser rechecks the tier and consumes the token immediately before work begins.

Example:

{
  "recipeId": "shopify_product_pack",
  "inputFiles": [
    "/Users/me/products/photo-1.jpg",
    "/Users/me/products/photo-2.jpg"
  ],
  "outputDir": "/Users/me/products/out",
  "unlockToken": "eyJhbGciOiJIUzI1NiIs..."
}

Use this prompt in your local AI client:

Use QuokkaPix only through the MCP tools. First call list_recipes unless I give exact settings. For standard product, web, metadata, social, watermark or favicon workflows, prefer process_images with an official recipe. For custom image settings, use process_with_settings. After processing, inspect qa.ok and quokkapix-result.json. If qa.ok is false, report the failing checks and do not claim the output is ready. Do not say images were uploaded to a QuokkaPix processing server.

CLI

The package also exposes a direct CLI:

quokkapix-runner --recipe website_webp_compress --input ./photo.jpg --output ./out

Options:

--recipe, --recipe-id   Official recipe id.
--input, --file         Input image path. Repeat for multiple files.
--output, --output-dir  Output directory.
--app-url               QuokkaPix URL, default https://quokkapix.com/#agent=1.
--unlock-token          Product-specific x402 unlock token for a paid Image run.
--headed                Show browser window.
--timeout-ms            Timeout in milliseconds.

The CLI currently runs recipe-based processing. For direct settings, use the MCP tool process_with_settings.

Bridge command:

npx quokkapix-mcp bridge --input-root ./media --output-root ./quokkapix-output

Use npx quokkapix-mcp bridge --help for pairing, config, headed browser and diagnostic options. Running npx quokkapix-mcp without bridge remains the original stdio MCP server.

Tests

Fast checks:

npm run check

This checks:

  • syntax of MCP server files;

  • recipe loading and validation;

  • direct settings workflow generation;

  • QA validator;

  • payment helper tools;

  • CLI parser.

GitHub Actions runs the same checks on Node 20 and Node 24 on Windows and Linux. The Linux/Node 24 job also uploads the generated .tgz as a short-lived workflow artifact, so a green run verifies the actual package archive.

End-to-end browser processing test against an already running QuokkaPix app:

QUOKKAPIX_E2E_APP_URL=http://127.0.0.1:4180/#agent=1 npm run test:e2e

The free e2e tests process one local fixture, direct custom settings and logo-watermark asset upload. Paid batch e2e tests are skipped unless real unlock tokens are supplied.

For paid e2e tests:

QUOKKAPIX_E2E_APP_URL=http://127.0.0.1:4180/#agent=1 \
QUOKKAPIX_E2E_UNLOCK_TOKENS=token1,token2,token3,token4 \
npm run test:e2e

The paid tests use separate tokens because unlocks are one-time consumable.

Publication Check

Before publishing or tagging a release:

npm run check
npm pack --dry-run

Pushing an audited vX.Y.Z tag runs .github/workflows/release.yml, builds the package again and attaches the .tgz to a GitHub Release. npm publication is a separate manual workflow. Configure npm Trusted Publisher for this repository, workflow publish-npm.yml and GitHub environment npm, then run Publish npm package with the existing release tag. The workflow uses OIDC and does not store an npm token in the repository.

The package whitelist includes only:

  • src/;

  • examples/;

  • CHANGELOG.md;

  • LICENSE;

  • README.md;

  • SECURITY.md;

  • package.json.

node_modules, test artifacts and the full QuokkaPix website are not included in the npm package.

Security And Privacy Notes

  • Source image, video and optional music files are read from local paths by the MCP runner.

  • Files are uploaded only into the local browser page through Playwright.

  • QuokkaPix browser processing does not upload source media to a QuokkaPix processing server.

  • The public website still cannot read arbitrary local paths.

  • Payment tokens should be treated as short-lived secrets.

  • Do not commit real unlock tokens, private files, or local output folders.

  • Bridge device secrets stay in the local config and are stored as hashes by the control plane.

  • OAuth uses authorization code with PKCE, audience-bound access tokens and rotating refresh tokens. Processing tools additionally require the bridge:execute scope; mcp:tools alone is read-only.

  • Remote file arguments are restricted to configured roots; .. traversal and out-of-root absolute paths are rejected.

  • The control plane has no media upload route. It receives commands, relative names, status and result metadata.

  • A cloud AI can receive media bytes only if the user separately uploads or shares an output with that AI; bridge mode does not do that automatically.

Limitations

  • Browser RAM is the hard limit for large batches.

  • Background removal may download browser-side AI model files and depends on browser/device capability.

  • WebGPU/WebNN availability depends on the user's browser and hardware.

  • HEIC/AVIF/WebP support depends on browser and optional browser-side encoders.

  • JPEG XL export is experimental and requires the browser-loaded advanced encoder; it has no Canvas fallback.

  • PDF merge/split/extract expects PDF files. The existing images-to-PDF recipe expects image files.

  • ZIP import works only in batch mode and only extracts supported image files.

  • GIF background removal is not supported.

  • Pixel-level QA is deterministic and limited to measurable image facts. It does not claim semantic recognition of text, watermark content or subjective retouching quality.

  • The adapter currently uses Playwright browser automation, not a native image-processing library.

  • In bridge mode the remote client must know relative paths under the configured input root; directory browsing is intentionally not exposed.

  • Active bridge jobs are memory-only and fail closed during a control-plane restart.

Troubleshooting

Playwright browser is missing

Run:

npx playwright install chromium

The agent cannot find files

Use absolute local file paths. The MCP process must have permission to read them.

A run says payment is required

Read the returned local quote, pay its product-specific endpoint, and retry the unchanged call with the resulting unlockToken. Do not reuse a token for another product tier.

Browser runs out of memory

Reduce batch size, resize first, avoid very large images, or use smaller workflows. The runner cannot bypass browser RAM limits.

QA reports unsupported visual checks

That is expected for semantic visual requirements that cannot be proven from the browser manifest. The validator uses outputs[].pixelQa for measurable checks and leaves unsupported semantic checks unclaimed.

Public discovery and documentation:

  • https://quokkapix.com/agents.md

  • https://quokkapix.com/agents.html

  • https://quokkapix.com/llms.txt

  • https://quokkapix.com/agent-manifest.json

  • https://quokkapix.com/.well-known/ai-catalog.json

  • https://quokkapix.com/agent-test.html

  • https://quokkapix.com/mcp-runner.html

  • https://quokkapix.com/x402-api.md

License

MIT. See LICENSE.

Available Tools

19 tools
explain_payment_flowExplain QuokkaPix x402 payment flowA

Explain the unified Image/PDF/Video x402 workflow: inspect locally, quote exactly, pay the product endpoint, optionally verify, then retry unchanged with unlockToken. This adapter can use a token but cannot sign x402 payments itself.

ParametersJSON Schema
NameRequiredDescriptionDefault
baseUrlNoOptional QuokkaPix site base URL. Defaults to https://quokkapix.com.

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses a key behavioral limitation: 'This adapter can use a token but cannot sign x402 payments itself.' It also clarifies that the workflow optionally verifies and retries with unlockToken. Because the verb is 'Explain,' the read-only nature is reasonably implied, though an explicit statement of no side effects would strengthen it.

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

Conciseness5/5

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

The description is compact and front-loaded. The first sentence identifies the tool and summarizes the workflow in a clear colon-led list; the second sentence delivers the critical limitation. There is no filler, repetition, or unnecessary detail.

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

Completeness4/5

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

For a simple explanatory tool with one optional parameter and no output schema, the description gives enough context to select and invoke it correctly: it explains the workflow, the retry behavior, and the adapter's signing limitation. It does not describe the return format, but the purpose makes it obvious that the tool returns an explanation. A short note on return structure would be the only meaningful addition.

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

Parameters3/5

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

The input schema already provides 100% coverage for the single parameter, including that baseUrl is optional, is a URI, and defaults to https://quokkapix.com. The description does not add any additional meaning about baseUrl, but it does not need to because the schema fully documents it. Baseline 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb ('Explain') and identifies a clear resource: the unified Image/PDF/Video x402 workflow. It enumerates the exact steps involved—inspect locally, quote exactly, pay the product endpoint, optionally verify, retry with unlockToken—so an agent understands precisely what this tool covers and that it is distinct from the processing and payment sibling tools.

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

Usage Guidelines4/5

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

The description provides clear context for when this tool is relevant: when someone needs to understand the overall x402 payment flow across image, PDF, and video assets. It also notes the important limitation that the adapter can use a token but cannot sign payments, which helps an agent avoid using it as a payment execution tool. It does not explicitly name alternative tools or 'when not to use' conditions, but the role is clear enough.

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

get_payment_optionsGet QuokkaPix agent payment optionsA

Fetch live QuokkaPix Image and Video payment tiers, free limits and product-specific x402 endpoints. This tool does not sign, submit or consume a payment.

ParametersJSON Schema
NameRequiredDescriptionDefault
baseUrlNoOptional QuokkaPix site base URL. Defaults to https://quokkapix.com.

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It explicitly states the tool is non-transactional ('does not sign, submit or consume a payment') and describes the data as 'live', indicating a network fetch. It does not discuss authentication or failure behavior, but the most critical side-effect disclosure for a read-only tool is present.

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

Conciseness5/5

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

The description is compact and efficiently structured: the first sentence states exactly what is fetched, and the second sentence clarifies a key behavioral boundary. There is no filler or repetition of schema details, and the most important information is front-loaded.

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

Completeness4/5

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

For a tool with one optional parameter, no output schema, and no annotations, the description does enough by enumerating the returned information (tiers, free limits, endpoints) and stating the non-transactional nature. It does not explain the return structure, but this is not essential for an agent deciding whether to invoke the tool.

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

Parameters3/5

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

The description does not discuss parameters, but the single parameter baseUrl is fully documented in the input schema, including its optional nature and default value. With 100% schema description coverage, the baseline of 3 applies; the description does not need to add further parameter details.

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

Purpose5/5

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

The description uses the specific verb 'Fetch' and identifies the exact resource: 'QuokkaPix Image and Video payment tiers, free limits and product-specific x402 endpoints'. It also adds an important boundary by stating the tool 'does not sign, submit or consume a payment', which differentiates it from payment-related actions even without naming sibling tools.

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

Usage Guidelines4/5

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

The description provides clear context for when to use the tool: when an agent needs live payment tier data, free limits, or product-specific x402 endpoints. It also includes an exclusion by stating it does not sign, submit, or consume a payment. However, it does not explicitly name alternatives like explain_payment_flow or verify_unlock_token, so it falls short of full alternative-based guidance.

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

get_recipeGet QuokkaPix image recipeA

Return one official QuokkaPix recipe by id. Use this before process_images when the agent needs exact applySettings, max file limits, payment expectations and expected result QA checks. This tool does not process images.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesRecipe id from list_recipes, for example shopify_product_pack, amazon_product_batch or metadata_clean_batch.

TDQS

A4.3/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. Mentions it returns a recipe and does not process images, but does not disclose whether it is read-only, required permissions, or side effects. For a retrieval tool, minimal disclosure is acceptable but could be improved.

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

Conciseness5/5

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

Two concise sentences. First sentence states purpose. Second sentence provides usage context and exclusion. No redundancy or filler.

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

Completeness5/5

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

Given no output schema, description adequately explains what the recipe contains (applySettings, max file limits, payment expectations, QA checks). Parameter examples and sibling differentiation complete the picture for a simple retrieval tool.

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

Parameters4/5

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

Schema coverage is 100% and description adds value by providing context for the 'id' parameter: 'Recipe id from list_recipes, for example shopify_product_pack, amazon_product_batch or metadata_clean_batch.' This clarifies the source and acceptable values beyond schema.

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

Purpose5/5

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

Clearly states verb 'Return' and resource 'one official QuokkaPix recipe by id'. Distinguishes from siblings by specifying usage context 'before process_images'.

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

Usage Guidelines4/5

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

Explicitly says when to use: 'Use this before process_images when the agent needs exact applySettings...'. Also clarifies what it does not do: 'This tool does not process images.', helping differentiation from sibling process_images.

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

get_rule_profileGet sourced QuokkaPix platform rule profileA

Return one sourced platform image rule profile by id, including requirements, recommendations, source URL, source type and confidence. This tool does not process files and does not invent missing marketplace rules.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesRule profile id from list_rule_profiles, for example amazon.product.image or instagram.feed.photo.

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description takes full burden and clarifies that it does not process files or invent missing rules, which are important boundary conditions. However, it does not disclose authentication requirements, rate limits, or idempotency, leaving some aspects undisclosed.

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

Conciseness5/5

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

Two sentences with no wasted words. The first sentence states the primary action, the second clarifies limitations. Front-loaded and efficient.

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

Completeness4/5

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

For a simple lookup with one parameter and no output schema, the description lists returned fields and clarifies scope. It could improve by stating the output structure (single object), but is largely complete given the tool's simplicity.

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

Parameters3/5

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

The schema covers 100% of parameters with description and examples. The tool description adds no additional meaning beyond repeating 'by id', so baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb 'Return' and the resource 'sourced platform image rule profile by id', and distinguishes from siblings like list_rule_profiles (which lists all) and process_images (which processes files). The negative clauses further separate it from processing tools.

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

Usage Guidelines3/5

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

The description implies usage by requiring an id from list_rule_profiles and notes what it does not do (process files, invent rules), but lacks explicit when-to-use or when-not-to-use guidance or alternative tool names beyond the implied 'list_rule_profiles'.

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

get_video_recipeGet QuokkaPix Video recipeB

Return one official Video recipe, its browser settings and expected-result QA.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesVideo recipe id from list_video_recipes.

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It indicates the return content but does not state whether the operation is read-only, what happens if the id is invalid, or any side effects. It also doesn't mention authentication or other operational constraints. This is minimal for a simple getter but still leaves ambiguity.

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

Conciseness5/5

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

The description is a single, efficient sentence that leads with the verb and concisely lists the return contents. There is no wasted wording, and it is easily scannable.

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

Completeness3/5

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

For a simple getter with one parameter, the description gives a high-level view of what is returned (recipe, browser settings, QA), but there is no output schema and no mention of error handling, response structure, or what 'expected-result QA' entails. Given the absence of structured return info, the description is adequate but not fully complete for an agent to know exactly how to interpret the response.

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

Parameters3/5

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

Schema coverage is 100%, with the id parameter fully documented as 'Video recipe id from list_video_recipes.' The description adds no extra parameter meaning beyond what the schema provides, so a baseline of 3 is appropriate.

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

Purpose4/5

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

The description clearly states the verb 'Return' and the resource 'one official Video recipe', and adds that it includes browser settings and expected-result QA. It differentiates from sibling tools like list_video_recipes (which lists multiple) and validate_video_recipe (which validates) through the singular 'one' and the inclusion of browser settings/QA, though it doesn't explicitly mention the id parameter.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives such as list_video_recipes or get_recipe. The description only states what it returns, with no mention of context or exclusions. An agent would have to infer when to call this versus listing or validating.

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

get_video_rule_profileGet sourced QuokkaPix Video rule profileA

Return one Video profile with separate requirements, recommendations and source URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesVideo rule profile id from list_video_rule_profiles.

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral disclosure burden and does state the returned content: requirements, recommendations, and source URL. However, it does not mention error behavior, behavior for unknown ids, or whether the source URL indicates remote fetching.

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

Conciseness5/5

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

The description is a single, efficient sentence with no filler. It front-loads the core action and packs the distinguishing output details into a compact structure.

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

Completeness4/5

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

For a simple one-parameter get operation, the description is nearly complete: it explains what is returned and the schema supplies the required id. It is missing minor details like not-found or error behavior, but nothing essential for selecting and invoking the tool.

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

Parameters3/5

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

Schema description coverage is 100%, and the id parameter is already documented with provenance ('from list_video_rule_profiles'). The tool description adds little parameter meaning beyond the schema, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description states a specific action ('Return one Video profile') and details the result contents: separate requirements, recommendations, and source URL. The singular 'one' clearly differentiates this from list_video_rule_profiles, and the 'Video' qualifier separates it from the generic get_rule_profile sibling.

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

Usage Guidelines2/5

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

The description gives no guidance on when to use this tool versus alternatives such as list_video_rule_profiles or get_rule_profile. The only routing hint appears in the schema's parameter description ('id from list_video_rule_profiles'), not in the tool description itself.

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

list_recipesList QuokkaPix image recipesA

List official QuokkaPix local/browser image workflow recipes. Use this first when an agent needs a supported workflow for Shopify, Amazon, Google Merchant, WebP compression, metadata cleanup, social packs, watermarking, favicon generation or similar repeatable image tasks. Returns ids that can be passed to get_recipe or process_images.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It implies a read-only list operation but doesn't explicitly disclose behavioral traits like side effects, rate limits, or data sensitivity. For a list operation, this is minimally adequate.

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

Conciseness5/5

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

Three sentences, each earning its place: first clarifies purpose, second gives usage guidance, third explains return value utility. No wasted words.

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

Completeness5/5

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

Despite no output schema, the description explains that the return value consists of ids and how they can be used with related tools. It also lists many example use cases, making the tool's domain clear and complete for a list operation.

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

Parameters4/5

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

The tool has zero parameters and schema coverage is 100%, so the description need not add param info. Baseline 4 is appropriate as the description adds no redundant parameter details.

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

Purpose5/5

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

The description clearly states the tool lists 'official QuokkaPix local/browser image workflow recipes' and enumerates specific use cases (Shopify, Amazon, etc.), making the purpose highly specific. It also distinguishes from sibling tools like get_recipe by noting the returned ids can be passed to it.

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

Usage Guidelines5/5

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

Explicitly tells the agent to 'Use this first' when needing a supported workflow for a list of tasks. It also explains what the return value (ids) can be used for, guiding the agent to subsequent tools like get_recipe or process_images.

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

list_rule_profilesList sourced QuokkaPix platform rule profilesA

List sourced image requirement profiles for marketplaces and social placements. Use this before marketplace QA when an agent needs facts for Amazon, Shopify, Google Merchant, Etsy, eBay, Walmart, TikTok Shop, Mercado Libre, Temu, Shopee, Instagram, YouTube, LinkedIn, X, Pinterest, Facebook or TikTok. Secondary sources are marked explicitly.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. It discloses the tool lists profiles and marks secondary sources, but does not mention authentication, rate limits, or output format. Adequate but not rich.

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

Conciseness5/5

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

Three concise sentences: first defines purpose, second gives usage guidance, third adds detail about secondary sources. No wasted words.

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

Completeness4/5

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

For a simple list tool with no parameters and no output schema, description is sufficient. It tells when to use and what it lists. Minor gap: return format not specified, but not critical.

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

Parameters4/5

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

No parameters exist, so schema coverage is trivially 100%. Description adds no parameter info, but the baseline for 0 parameters is 4. No further detail needed.

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

Purpose5/5

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

Description clearly states the verb 'list' and resource 'sourced image requirement profiles', and distinguishes from sibling tools like 'get_rule_profile' (singular) and 'list_recipes' (different resource).

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

Usage Guidelines5/5

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

Explicitly states when to use: 'before marketplace QA when an agent needs facts for...' and lists 17 specific platforms. Also notes that secondary sources are marked.

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

list_video_recipesList QuokkaPix Video recipesA

List official browser-local recipes for cutting, crop/resize, conversion, compression, audio, transcription and subtitles.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It adds the 'official browser-local' qualifier, which indicates the source and scope of the recipes, and implies these are built-in rather than user-generated. However, it does not describe the return format, whether it returns full recipe details or just names, or any pagination behavior. For a simple listing tool, this is acceptable but not rich.

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

Conciseness5/5

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

A single sentence that is front-loaded with the core action and resource ('List official browser-local video recipes') followed by a concise enumeration of categories. No wasted words; every element earns its place.

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

Completeness4/5

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

For a zero-parameter listing tool without an output schema, the description is reasonably complete: it specifies what is listed and the scope. The only minor gap is that it doesn't clarify whether the response is a simple list of names or includes metadata, but this is not critical for a list operation. Given the simplicity of the tool, the description is sufficient.

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

Parameters4/5

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

The tool has zero parameters, so the baseline is 4 per the rubric. The description correctly focuses on the output rather than parameters, and no additional parameter information is needed since there are none.

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

Purpose5/5

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

The description clearly states the action (list), the resource (official browser-local video recipes), and enumerates the specific recipe categories (cutting, crop/resize, conversion, compression, audio, transcription, subtitles). This is unambiguous and distinct from sibling tools like list_recipes (generic) and list_video_rule_profiles (rule profiles, not recipes).

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus its siblings. It does not mention alternatives like list_recipes or get_video_recipe, nor any conditions that would make this tool the right choice. The agent is left to infer usage from the name and context.

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

list_video_rule_profilesList sourced QuokkaPix Video rule profilesA

List official-source profiles for YouTube, TikTok Ads and Meta Reels video workflows.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It correctly implies a read-only listing operation but does not mention authentication requirements, output format, or what 'official-source' means. Since it's a simple list, the lack of detail is partially acceptable, but more context would be helpful.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no wasted words. It states the verb, resource, and scope efficiently, making it easy to scan.

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

Completeness4/5

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

Given the tool has zero parameters and no output schema, the description is adequate for an agent to understand the tool's purpose and scope. It lacks details about the return value structure, but for a simple list operation this is not a critical omission.

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

Parameters4/5

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

There are zero parameters, so the baseline is 4. The description does not need to explain parameter semantics. No additional meaning is required beyond what the schema already provides (an empty object).

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

Purpose4/5

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

The description clearly states the action ('List') and the resource ('official-source profiles') with specific platforms (YouTube, TikTok Ads, Meta Reels). It distinguishes from siblings like list_rule_profiles by specifying 'official-source' and video workflows, though it doesn't explicitly contrast with them.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as list_video_recipes or get_video_rule_profile. The description does not mention scenarios where another tool would be more appropriate or when this tool should be avoided.

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

process_imagesProcess local images with QuokkaPixA

Process local image files through the QuokkaPix browser app using an official recipeId or a full custom recipe. Source files stay local. Without unlockToken, the browser returns an exact quote after ZIP expansion/PDF inspection and before paid processing. Retry the unchanged call with the quoted product token.

ParametersJSON Schema
NameRequiredDescriptionDefault
appUrlNoOptional QuokkaPix app URL. Defaults to https://quokkapix.com/#agent=1. For safety, only quokkapix.com, localhost and 127.0.0.1 are accepted unless QUOKKAPIX_ALLOW_CUSTOM_APP_URL=1 is set.
recipeNoCustom recipe object. Provide either recipeId or recipe.
headlessNoRun Chromium headless. Defaults to true unless debugging.
recipeIdNoOfficial recipe id from list_recipes. Provide either recipeId or recipe.
outputDirYesLocal directory where the adapter writes the downloaded output and quokkapix-result.json.
timeoutMsNoMaximum processing timeout in milliseconds. Use a larger value for background AI or large batches.
inputFilesYesLocal Image, supported ZIP or PDF paths uploaded through the browser file input. Actual expanded files/pages determine the quote.
unlockTokenNoOptional product-specific x402 unlock token. Omit it to receive the browser-authoritative quote before paid processing.
watermarkLogoFileNoOptional local logo/image file for QuokkaPix logo watermark workflows.
backgroundImageFileNoOptional local image file for QuokkaPix background replacement workflows.

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral disclosure burden. It does well by revealing that source files stay local, that the browser returns a quote after ZIP/PDF inspection before paid processing, and that the call must be retried with the quoted token. It does not detail output-side effects like writing to outputDir, but the schema partially covers that.

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

Conciseness5/5

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

Three sentences with no filler. The primary action is front-loaded, and the critical unlockToken workflow is explained compactly without duplicating schema content.

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

Completeness4/5

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

For a complex, payment-gated tool with no output schema and no annotations, the description provides a workable mental model of the quote-then-retry interaction and the local-file constraint. It does not explain every parameter, but the rich schema already documents those details sufficiently.

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

Parameters4/5

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

The input schema has 100% coverage, so the baseline is 3. The description adds meaningful semantics by explaining the unlockToken quote workflow and the relationship between recipeId and custom recipe, which supplements rather than repeats the schema.

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

Purpose4/5

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

The description uses a specific verb ('Process') and a clear resource ('local image files through the QuokkaPix browser app'), and it names the two recipe modes. It clearly separates image processing from video siblings, though it does not explicitly contrast with process_with_settings.

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

Usage Guidelines3/5

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

The description implies usage for local image workflows and provides useful operational guidance for the quote-then-retry flow, but it does not explicitly state when to choose this tool over process_with_settings or other alternatives. The usage context is implied by 'local image files' and the recipe-based flow rather than stated as a direct comparison.

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

process_videoProcess one local video with QuokkaPixA

Open Video in local Chromium and keep media local. Without unlockToken, return an exact duration/transcription quote before paid work; retry the same call with the product-specific token.

ParametersJSON Schema
NameRequiredDescriptionDefault
appUrlNoOptional Video app URL. Defaults to https://video.quokkapix.com/#agent=1.
recipeNoQuokkaPix Video recipe with settings and optional expected-result QA.
headlessNo
recipeIdNoOfficial id from list_video_recipes. Provide recipeId or recipe.
inputFileYesOne local video path uploaded through the browser file input.
musicFileNoOptional local audio/media path for mix or replace-audio recipes.
outputDirYesLocal directory where the adapter writes the downloaded output and quokkapix-result.json.
timeoutMsNo
unlockTokenNoProduct-specific x402 unlock token. Omit it to receive a local duration-based quote before processing.

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does meaningfully disclose behavior: it uses local Chromium, keeps media local, avoids paid work until an unlockToken is provided, and returns a duration/transcription quote first. It does not describe the post-token success behavior, but outputDir's schema description already indicates where results are written.

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

Conciseness5/5

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

Two sentences with no filler. The first sentence front-loads the core local-processing behavior, and the second sentence gives the token/quote protocol. Every clause adds information.

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

Completeness3/5

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

For a 9-parameter tool with a nested recipe object and no output schema, the description leaves the post-token output path implicit and does not explain recipe selection or how this differs from process_video_with_settings. The schema compensates for parameter details, and the two-step quote/token flow is enough to make a correct first call, but notable gaps remain.

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

Parameters4/5

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

The schema already documents most parameters, and the description adds genuinely useful unlockToken semantics: omitting it triggers a quote, including it authorizes paid processing. That is beyond the schema's plain type/minLength information. It does not enrich headless or timeoutMs, but those are minor given the schema's type/range constraints.

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

Purpose4/5

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

The description names the concrete action: open a local video in local Chromium and keep media local. It is clearly about video processing with QuokkaPix, but it only weakly differentiates from the sibling process_video_with_settings and does not explicitly state the recipe-driven processing role.

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

Usage Guidelines3/5

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

It provides actionable payment-flow guidance: omit unlockToken to receive a quote, then retry the same call with the product-specific token. However, it gives no when-to-use versus process_video_with_settings or process_images, and no exclusions or alternative routing.

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

process_video_with_settingsProcess one local video with direct QuokkaPix settingsA

Run one local video through window.QuokkaPixVideoAgent.applySettings-compatible settings, save the media or transcript output and write quokkapix-video-result.json.

ParametersJSON Schema
NameRequiredDescriptionDefault
appUrlNoOptional Video app URL. Defaults to https://video.quokkapix.com/#agent=1.
headlessNo
settingsYesPayload accepted by window.QuokkaPixVideoAgent.applySettings.
inputFileYesAbsolute or client-relative local file path readable by the MCP process. Do not pass remote URLs here.
musicFileNoAbsolute or client-relative local file path readable by the MCP process. Do not pass remote URLs here.
outputDirYesLocal directory where the adapter writes the downloaded output and quokkapix-result.json.
timeoutMsNo
settingsIdNo
unlockTokenNoProduct-specific x402 unlock token. Omit it to receive a local duration-based quote before processing.

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description must carry the behavioral burden, and it does disclose the main side effects: processing the video, saving media/transcript output, and writing quokkapix-video-result.json. However, it omits important behaviors like the unlock-token/quote flow, headless execution, potential overwrites, and failure modes, leaving a meaningful transparency gap.

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

Conciseness5/5

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

The description is one compact sentence with no filler; every phrase earns its place by naming the input, the settings mechanism, the output artifact, and the result JSON. The primary action is front-loaded, making it easy to parse quickly.

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

Completeness2/5

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

For a 9-parameter tool with nested settings, no annotations, and no output schema, a single sentence is insufficient. It does not explain the unlock-token/quote alternative flow, the distinction between settings and settingsId, or runtime controls like headless and timeout. The schema descriptions cover some gaps but not enough to make the tool fully self-explanatory.

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

Parameters3/5

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

Schema description coverage is 67%, which sets a baseline of 3. The description reinforces the key ideas of 'local video' and 'settings payload' but adds no new parameter-level meaning for headless, timeoutMs, settingsId, or the quote/unlock flow beyond what the schema already provides.

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

Purpose5/5

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

The description states a concrete action: run one local video through applySettings-compatible settings, save media/transcript output, and write quokkapix-video-result.json. It clearly names the resource, mechanism, and output artifacts, distinguishing it from recipe-based video processing and image-only siblings.

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

Usage Guidelines3/5

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

Usage is implied by 'direct QuokkaPix settings' and 'one local video,' but the description never names alternatives such as process_video or process_with_settings, nor does it state when not to use them. An agent has to infer selection criteria from the name and title rather than receiving explicit routing guidance.

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

process_with_settingsProcess local images with direct QuokkaPix settingsA

Process local image files with a direct window.QuokkaPixAgent.applySettings payload instead of an official recipe. Use this for custom resize/crop/convert/compress/background/watermark/effects/rename/PDF/favicon/scenario workflows. For multi-step scenarios, prefer settings.steps as [{ tool, settings }]. The adapter downloads the output, writes quokkapix-result.json and returns QA results.

ParametersJSON Schema
NameRequiredDescriptionDefault
appUrlNoOptional QuokkaPix app URL. Defaults to https://quokkapix.com/#agent=1. For safety, only quokkapix.com, localhost and 127.0.0.1 are accepted unless QUOKKAPIX_ALLOW_CUSTOM_APP_URL=1 is set.
headlessNoRun Chromium headless. Defaults to true unless debugging.
maxFilesNoMaximum allowed input files for this direct settings run. Defaults to the selected files count.
settingsYesPayload accepted by window.QuokkaPixAgent.applySettings. Extra editor-specific keys are allowed.
outputDirYesLocal directory where the adapter writes the downloaded output and quokkapix-result.json.
timeoutMsNoMaximum processing timeout in milliseconds.
inputFilesYesLocal source image files to upload through the browser file input.
settingsIdNoOptional id/name for this generated settings workflow, used in returned metadata and QA profile.
unlockTokenNoOptional product-specific x402 unlock token. Omit it to receive the exact local quote first.
expectedResultQaNoOptional QA contract used to validate quokkapix-result.json after processing.
watermarkLogoFileNoOptional local logo/image file for logo watermark settings.
backgroundImageFileNoOptional local image file for background replacement settings.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and does disclose the core side-effect chain: 'The adapter downloads the output, writes quokkapix-result.json and returns QA results.' It also reveals the direct-payload execution mechanism. However, it does not surface the headless-Chromium/upload context or the payment-flow implications, which are left to parameter descriptions rather than the tool description.

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

Conciseness5/5

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

Four sentences, each earning its place: purpose/mechanism, usage scope, multi-step guidance, and side-effect disclosure. The purpose is front-loaded before any alternatives or details, with zero filler.

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

Completeness4/5

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

This is a high-complexity tool (12 parameters, nested settings.steps and expectedResultQa objects, browser automation, x402 unlock-token flow) with no output schema and no annotations. The 100%-covered schema carries the parameter burden, and the description covers selection, mechanism, and output flow well. It is complete enough to select and invoke safely, though it defers browser/upload and payment context to the schema.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds value beyond the schema by prescribing the preferred shape of the most complex parameter ('prefer settings.steps as [{ tool, settings }]') and enumerating typical tool ids, without repeating schema content.

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

Purpose5/5

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

Names a specific verb, resource, and mechanism: 'Process local image files with a direct window.QuokkaPixAgent.applySettings payload instead of an official recipe.' The 'instead of an official recipe' contrast clearly differentiates it from the recipe-based process_images sibling, and the workflow enumeration (resize/crop/convert/compress/background/watermark/effects/rename/PDF/favicon/scenario) further scopes what it handles.

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

Usage Guidelines4/5

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

Gives explicit when-to-use guidance ('Use this for custom ... workflows') and a structural prescription ('For multi-step scenarios, prefer settings.steps as [{ tool, settings }]'). The 'instead of an official recipe' phrase implies the when-not condition, but it does not name the recipe-based sibling explicitly, so the exclusion is implied rather than fully stated.

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

validate_recipeValidate QuokkaPix image recipeA

Validate a custom QuokkaPix recipe before using process_images. Use this when an agent generated its own recipe JSON and needs to confirm that id, applySettings.mode, applySettings.tool, optional structured steps and requires.maxFiles are valid. This is a preflight check only and does not open a browser or process files.

ParametersJSON Schema
NameRequiredDescriptionDefault
recipeYesCustom QuokkaPix recipe object. Use validate_recipe before process_images when generating this dynamically.

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the full burden. It discloses that this is a non-destructive, safe operation ('preflight check only, does not open browser or process files'). However, it does not detail the validation error format, side effects, or exact behavior on invalid input. Given no annotations, a score of 3 is appropriate—adequate but not exhaustive.

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

Conciseness5/5

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

Two sentences only, both front-loaded with key information. No redundant phrases. Every sentence adds value: the first states the purpose and the second provides usage context and differentiation.

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

Completeness4/5

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

Given the tool's complexity (1 parameter, 100% schema coverage, no output schema), the description is complete enough. It explains the tool's role in the workflow (validate before process_images). It could be improved by hinting at the return value (e.g., success/failure), but that is not required since there is no output schema. Score 4 reflects minor gap.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds contextual value by listing key fields it validates (id, applySettings.mode/tool, steps, requires.maxFiles), but the schema already covers these. No additional syntax or format details beyond the schema. Score 3 per guidelines.

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

Purpose5/5

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

The description uses the specific verb 'Validate' and the resource 'custom QuokkaPix recipe'. It distinguishes from sibling tools like process_images by stating it is a preflight check that does not process files. It lists the exact fields validated (id, applySettings.mode/tool, steps, requires.maxFiles), making the purpose clear and distinct.

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

Usage Guidelines5/5

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

Explicitly states when to use: 'when an agent generated its own recipe JSON and needs to confirm...' and implies when not to use (e.g., for known-good recipes). It clarifies it is a preflight check only and does not open a browser or process files, which helps the agent decide when to call it vs. process_images.

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

validate_result_manifestValidate QuokkaPix result manifestA

Validate an existing quokkapix-result.json manifest against an official recipe or custom QA contract. Use this after process_images/process_with_settings or when inspecting a previous run. It checks status, file counts, formats, dimensions, size limits, ZIP entry metadata and marketplace QA metadata; it does not read image pixels or upload files.

ParametersJSON Schema
NameRequiredDescriptionDefault
recipeNoOptional custom recipe with expectedResult.qa. Used instead of recipeId when provided.
manifestYesQuokkaPix result manifest returned by getResultManifest() or saved as quokkapix-result.json.
recipeIdNoOptional official recipe id whose expectedResult.qa contract should be used.
ruleProfileIdNoOptional sourced platform rule profile id. The profile is returned beside the QA report for agent audit trails.

TDQS

A4.4/5.0
Behavior4/5

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

No annotations provided, so the description carries the burden. It transparently lists what checks are performed (status, file counts, formats, etc.) and explicitly states what it does not do (read pixels or upload files), which is sufficient for a validation tool.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the purpose, and every sentence contributes meaning without redundancy.

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

Completeness4/5

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

For a validation tool with 4 parameters and no output schema, the description covers the key aspects: what it validates, when to use, and its limitations. It omits explanation of the optional ruleProfileId parameter, but overall it is adequate.

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

Parameters4/5

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

Schema coverage is 100%, baseline is 3. The description adds value by contextualizing parameters (e.g., 'official recipe or custom QA contract') beyond the schema, though it does not detail all parameters individually.

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

Purpose5/5

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

The description explicitly states the action (validate) and the resource (quokkapix-result.json manifest), and mentions it is used after specific sibling tools (process_images/process_with_settings), clearly distinguishing its role.

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

Usage Guidelines4/5

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

The description provides clear usage context: 'Use this after process_images/process_with_settings or when inspecting a previous run.' It also states what the tool does not do, setting expectations, but does not explicitly list 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.

validate_video_recipeValidate QuokkaPix Video recipeA

Validate a custom Video recipe without opening a browser or processing media.

ParametersJSON Schema
NameRequiredDescriptionDefault
recipeYesQuokkaPix Video recipe with settings and optional expected-result QA.

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden and does disclose two traits: no browser required and no media processed. However, it does not state whether the call is read-only, what validation actually checks, or what the result/error contract looks like on failure, which is a meaningful gap for a validation tool.

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

Conciseness5/5

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

A single, front-loaded sentence with zero filler. The verb, resource, and both distinguishing constraints all appear before the period, and every word earns its place.

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

Completeness3/5

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

The tool has a nested-object parameter and no output schema, so the description must compensate. It conveys the core purpose and the key behavioral trait, but never explains what the validation result looks like or how this relates to the generic validate_recipe and validate_result_manifest siblings — functional but thin.

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

Parameters3/5

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

Schema coverage is 100% and the schema thoroughly documents the recipe object, including the settings.tool enum and the expectedResult sub-structure. The description adds no parameter-level meaning, so the high-coverage baseline of 3 applies.

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

Purpose4/5

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

The description names a specific verb ('Validate'), a specific resource ('custom Video recipe'), and adds two distinguishing constraints ('without opening a browser or processing media'), which separates it from media-processing tools. However, it does not explicitly differentiate it from the generic sibling validate_recipe, so it stops short of full clarity.

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

Usage Guidelines3/5

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

The phrasing implies a non-destructive validation context — no browser and no media processing — which is a useful usage signal. But it never names alternatives (validate_recipe, validate_video_result_manifest, validate_result_manifest) nor states when validation should be preferred over processing, leaving the selection decision to inference.

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

validate_video_result_manifestValidate QuokkaPix Video result manifestC

Validate quokkapix-video-result.json against its browser QA and an optional Video recipe.

ParametersJSON Schema
NameRequiredDescriptionDefault
recipeNoQuokkaPix Video recipe with settings and optional expected-result QA.
manifestYesVideo result returned by QuokkaPixVideoAgent or saved as quokkapix-video-result.json.
recipeIdNo

TDQS

C2.6/5.0
Behavior2/5

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

With no annotations, the description must carry the full burden. It implies a read-only validation but does not explicitly state side effects, error behavior, permissions, or reversibility. The lack of any behavioral detail is a significant gap.

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

Conciseness4/5

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

The description is a single concise sentence with no filler. It front-loads the primary purpose, though brevity comes at the cost of omitted details.

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

Completeness1/5

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

The tool has nested objects and three parameters but no output schema. The description fails to explain what 'browser QA' means, how the recipe is used, the role of recipeId, or what constitutes a successful validation. It is far from sufficient for an agent to call this correctly.

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

Parameters2/5

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

Schema coverage is 67% (recipe and manifest have descriptions, recipeId does not). The description adds no new meaning beyond the schema; it does not explain how recipeId relates to the recipe object or how the 'browser QA' maps to the manifest fields.

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

Purpose4/5

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

The description clearly states the action (validate) and the target (quokkapix-video-result.json) against browser QA and an optional Video recipe. It distinguishes itself from generic validate_result_manifest by being video-specific, though 'browser QA' is ambiguous.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus its siblings like validate_result_manifest or validate_video_recipe. The description does not mention alternatives, prerequisites, or exclusions.

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

verify_unlock_tokenVerify QuokkaPix agent unlock tokenA

Safely preflight a QuokkaPix paid agent unlock token without consuming it. The browser consumes the one-time unlock only when the paid batch actually starts. If scope, price or currency are omitted, the tool reads live payment options first.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoRun mode to verify against the unlock token.
filesNoNumber of files intended for the paid run.
priceNoExpected price string. Defaults to live payment options.
scopeNoExpected QuokkaPix scope. Defaults to live payment options.
tokenYesUnlock token returned by the paid x402 unlock endpoint.
baseUrlNoOptional QuokkaPix site base URL. Defaults to https://quokkapix.com.
surfaceNo
currencyNoExpected currency. Defaults to live payment options.
pdfPagesNo
scenarioNo
productIdNo
transcribeNo
durationSecondsNo

TDQS

A4.2/5.0
Behavior5/5

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

With no annotations, the description carries the full behavioral burden, and it delivers the key safety property: the tool does not consume the unlock token, and consumption only happens when the paid batch actually starts. It also discloses that omitted fields trigger a live payment-options read, providing useful conditional behavior beyond the schema.

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

Conciseness5/5

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

Two tightly written sentences. The first front-loads the action and safety guarantee, and the second adds important consumption semantics and default behavior. No filler or redundant restatement of the tool name.

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

Completeness2/5

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

For a 13-parameter tool with no annotations, no output schema, and many undocumented parameters, this description is not complete. It does not explain what the verification returns, how invalid tokens fail, which payment/processing sibling to pair it with, or how the remaining parameters affect the verification.

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

Parameters3/5

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

The description adds meaning to scope, price, and currency by explaining their defaulting behavior via live payment options, which the schema does not mention. However, schema description coverage is only 54%, and several parameters such as surface, pdfPages, scenario, productId, transcribe, and durationSeconds remain undocumented in both schema and description.

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

Purpose5/5

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

The description states a specific action: safely preflight a QuokkaPix paid agent unlock token, and explicitly clarifies that the token is not consumed. This distinguishes it from any tool that would actually redeem or start a paid batch. The sibling list has no other token-verification tool, so the purpose is unambiguous.

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

Usage Guidelines4/5

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

The description clearly situates the tool as a preflight step before the paid batch starts, and explains that missing scope, price, or currency will cause it to read live payment options. It does not explicitly name alternatives or exclusions, but no sibling tool overlaps with this verification role.

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

Tool Schema Changelog

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

  1. 5 tool updatesv0.6.1
    • Changedprocess_images2 fields changed
      • changedInput schema / properties / inputFiles / description
        Previous value: -"Local source image files to upload through the browser file input. Agent batches up to 5 files are free; the paid batch limit is 50."New value: +"Local Image, supported ZIP or PDF paths uploaded through the browser file input. Actual expanded files/pages determine the quote."
      • changedInput schema / properties / unlockToken / description
        Previous value: -"Optional x402 unlock token for paid agent batch/scenario runs above 5 files. Obtain it outside this adapter."New value: +"Optional product-specific x402 unlock token. Omit it to receive the browser-authoritative quote before paid processing."
    • Changedprocess_video1 field changed
      • addedInput schema / properties / unlockToken
        Added value: +{
        +  "description": "Product-specific x402 unlock token. Omit it to receive a local duration-based quote before processing.",
        +  "minLength": 16,
        +  "type": "string"
        +}
    • Changedprocess_video_with_settings1 field changed
      • addedInput schema / properties / unlockToken
        Added value: +{
        +  "description": "Product-specific x402 unlock token. Omit it to receive a local duration-based quote before processing.",
        +  "minLength": 16,
        +  "type": "string"
        +}
    • Changedprocess_with_settings1 field changed
      • changedInput schema / properties / unlockToken / description
        Previous value: -"Optional x402 unlock token for paid agent batch/scenario runs above 5 files."New value: +"Optional product-specific x402 unlock token. Omit it to receive the exact local quote first."
    • Changedverify_unlock_token6 fields changed
      • addedInput schema / properties / durationSeconds
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / pdfPages
        Added value: +{
        +  "maximum": 300,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / productId
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / scenario
        Added value: +{
        +  "type": "boolean"
        +}
      • addedInput schema / properties / surface
        Added value: +{
        +  "enum": [
        +    "image",
        +    "video"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / transcribe
        Added value: +{
        +  "type": "boolean"
        +}
  2. 2 tool updatesv0.6.0
    • Changedprocess_video1 field changed
      • changedInput schema / properties / timeoutMs / maximum
        Previous value: -1800000New value: +3600000
    • Changedprocess_video_with_settings1 field changed
      • changedInput schema / properties / timeoutMs / maximum
        Previous value: -1800000New value: +3600000
  3. 8 tool updatesv0.5.0
    • Addedget_video_recipe
    • Addedget_video_rule_profile
    • Addedlist_video_recipes
    • Addedlist_video_rule_profiles
    • Addedprocess_video
    • Addedprocess_video_with_settings
    • Addedvalidate_video_recipe
    • Addedvalidate_video_result_manifest
  4. 1 tool updatev0.4.3
    • Changedverify_unlock_token1 field changed
      • removedInput schema / properties / consume
        Removed value: -{
        -  "description": "False for preflight verification. True consumes the unlock and should be used only at run start.",
        -  "type": "boolean"
        -}
  5. 3 tool updatesv0.3.4
    • Addedget_rule_profile
    • Addedlist_rule_profiles
    • Changedvalidate_result_manifest1 field changed
      • addedInput schema / properties / ruleProfileId
        Added value: +{
        +  "description": "Optional sourced platform rule profile id. The profile is returned beside the QA report for agent audit trails.",
        +  "minLength": 1,
        +  "type": "string"
        +}
  6. 2 tool updatesv0.3.2
    • Changedprocess_images2 fields changed
      • changedInput schema / properties / inputFiles / description
        Previous value: -"Local source image files to upload through the browser file input. Maximum paid batch size is 50."New value: +"Local source image files to upload through the browser file input. Agent batches up to 5 files are free; the paid batch limit is 50."
      • changedInput schema / properties / unlockToken / description
        Previous value: -"Optional x402 unlock token for paid agent batch/scenario runs. Obtain it outside this adapter."New value: +"Optional x402 unlock token for paid agent batch/scenario runs above 5 files. Obtain it outside this adapter."
    • Changedprocess_with_settings1 field changed
      • changedInput schema / properties / unlockToken / description
        Previous value: -"Optional x402 unlock token for paid agent batch/scenario runs."New value: +"Optional x402 unlock token for paid agent batch/scenario runs above 5 files."
  7. 8 tool updatesv0.3.1
    • Changedexplain_payment_flow1 field changed
      • addedInput schema / properties / baseUrl / description
        Added value: +"Optional QuokkaPix site base URL. Defaults to https://quokkapix.com."
    • Changedget_payment_options1 field changed
      • addedInput schema / properties / baseUrl / description
        Added value: +"Optional QuokkaPix site base URL. Defaults to https://quokkapix.com."
    • Changedget_recipe1 field changed
      • addedInput schema / properties / id / description
        Added value: +"Recipe id from list_recipes, for example shopify_product_pack, amazon_product_batch or metadata_clean_batch."
    • Changedprocess_images14 fields changed
      • addedInput schema / properties / appUrl / description
        Added value: +"Optional QuokkaPix app URL. Defaults to https://quokkapix.com/#agent=1. For safety, only quokkapix.com, localhost and 127.0.0.1 are accepted unless QUOKKAPIX_ALLOW_CUSTOM_APP_URL=1 is set."
      • addedInput schema / properties / backgroundImageFile / description
        Added value: +"Optional local image file for QuokkaPix background replacement workflows."
      • addedInput schema / properties / headless / description
        Added value: +"Run Chromium headless. Defaults to true unless debugging."
      • addedInput schema / properties / inputFiles / description
        Added value: +"Local source image files to upload through the browser file input. Maximum paid batch size is 50."
      • addedInput schema / properties / inputFiles / items / description
        Added value: +"Absolute or client-relative local file path readable by the MCP process. Do not pass remote URLs here."
      • addedInput schema / properties / outputDir / description
        Added value: +"Local directory where the adapter writes the downloaded output and quokkapix-result.json."
      • addedInput schema / properties / recipe / description
        Added value: +"Custom recipe object. Provide either recipeId or recipe."
      • addedInput schema / properties / recipe / properties
        Added value: +{
        +  "applySettings": {
        +    "additionalProperties": {},
        +    "description": "QuokkaPix settings applied before processing starts.",
        +    "properties": {
        +      "mode": {
        +        "description": "Use single for one image or batch for multiple images.",
        +        "enum": [
        +          "single",
        +          "batch"
        +        ],
        +        "type": "string"
        +      },
        +      "steps": {
        +        "description": "Optional ordered scenario steps. Prefer [{ tool, settings }] for custom multi-step workflows.",
        +        "items": {
        +          "anyOf": [
        +            {
        +              "description": "Simple QuokkaPix tool id step, for example resize, background, compress or watermark.",
        +              "minLength": 1,
        +              "type": "string"
        +            },
        +            {
        +              "description": "Structured scenario step with a tool id and per-step settings.",
        +              "properties": {
        +                "settings": {
        +                  "additionalProperties": {},
        +                  "description": "Settings for this step using the same keys accepted by window.QuokkaPixAgent.applySettings.",
        +                  "propertyNames": {
        +                    "type": "string"
        +                  },
        +                  "type": "object"
        +                },
        +                "tool": {
        +                  "description": "QuokkaPix tool id for this scenario step, for example resize, background, compress or watermark.",
        +                  "minLength": 1,
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "tool"
        +              ],
        +              "type": "object"
        +            }
        +          ],
        +          "description": "One step in a QuokkaPix scenario workflow."
        +        },
        +        "type": "array"
        +      },
        +      "tool": {
        +        "description": "QuokkaPix editor tool id, such as resize, crop, rotate, convert, compress, metadata, background, watermark, effects, rename, pdf, favicon or constructor.",
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "description": {
        +    "description": "Short explanation of what the recipe prepares.",
        +    "type": "string"
        +  },
        +  "expectedResult": {
        +    "additionalProperties": {},
        +    "description": "Expected output and QA contract.",
        +    "properties": {
        +      "output": {
        +        "description": "Expected output type, for example zip, image, pdf or json.",
        +        "type": "string"
        +      },
        +      "qa": {
        +        "additionalProperties": {},
        +        "description": "Machine-readable QA checks for the result manifest.",
        +        "properties": {
        +          "allowedFormats": {
        +            "description": "Allowed output formats for every manifest output entry.",
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          "expectedFormat": {
        +            "description": "Required output format, for example webp, jpg, png, pdf or zip.",
        +            "type": "string"
        +          },
        +          "expectedHeight": {
        +            "description": "Exact expected output height in pixels.",
        +            "exclusiveMinimum": 0,
        +            "maximum": 9007199254740991,
        +            "type": "integer"
        +          },
        +          "expectedMinOutputs": {
        +            "description": "Minimum number of output entries expected.",
        +            "maximum": 9007199254740991,
        +            "minimum": 1,
        +            "type": "integer"
        +          },
        +          "expectedOutputKind": {
        +            "description": "Expected high-level output kind for QA checks.",
        +            "enum": [
        +              "single",
        +              "batch",
        +              "zip",
        +              "pdf",
        +              "metadata-report",
        +              "icon-pack"
        +            ],
        +            "type": "string"
        +          },
        +          "expectedWidth": {
        +            "description": "Exact expected output width in pixels.",
        +            "exclusiveMinimum": 0,
        +            "maximum": 9007199254740991,
        +            "type": "integer"
        +          },
        +          "marketplace": {
        +            "description": "Marketplace profile name used for human-readable QA context.",
        +            "enum": [
        +              "shopify",
        +              "amazon",
        +              "google-merchant"
        +            ],
        +            "type": "string"
        +          },
        +          "maxHeight": {
        +            "description": "Maximum allowed output height in pixels.",
        +            "exclusiveMinimum": 0,
        +            "maximum": 9007199254740991,
        +            "type": "integer"
        +          },
        +          "maxOutputKB": {
        +            "description": "Recommended maximum output size per non-archive file.",
        +            "exclusiveMinimum": 0,
        +            "type": "number"
        +          },
        +          "maxWidth": {
        +            "description": "Maximum allowed output width in pixels.",
        +            "exclusiveMinimum": 0,
        +            "maximum": 9007199254740991,
        +            "type": "integer"
        +          },
        +          "minHeight": {
        +            "description": "Minimum recommended output height in pixels.",
        +            "exclusiveMinimum": 0,
        +            "maximum": 9007199254740991,
        +            "type": "integer"
        +          },
        +          "minWidth": {
        +            "description": "Minimum recommended output width in pixels.",
        +            "exclusiveMinimum": 0,
        +            "maximum": 9007199254740991,
        +            "type": "integer"
        +          },
        +          "requireSquare": {
        +            "description": "Require square output dimensions when true.",
        +            "type": "boolean"
        +          },
        +          "visualChecks": {
        +            "description": "Visual checks requested by a recipe. Current validator reports these as metadata-only limitations.",
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          }
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "id": {
        +    "description": "Stable recipe id, for example shopify_product_pack.",
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "requires": {
        +    "additionalProperties": {},
        +    "description": "Recipe requirements such as maxFiles and payment policy.",
        +    "properties": {
        +      "maxFiles": {
        +        "description": "Maximum files allowed by this recipe.",
        +        "maximum": 50,
        +        "minimum": 1,
        +        "type": "integer"
        +      },
        +      "payment": {
        +        "description": "Whether the recipe normally needs a paid batch/scenario unlock.",
        +        "type": "boolean"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "title": {
        +    "description": "Human-readable recipe title.",
        +    "type": "string"
        +  }
        +}
      • removedInput schema / properties / recipe / propertyNames
        Removed value: -{
        -  "type": "string"
        -}
      • addedInput schema / properties / recipe / required
        Added value: +[
        +  "id",
        +  "applySettings"
        +]
      • addedInput schema / properties / recipeId / description
        Added value: +"Official recipe id from list_recipes. Provide either recipeId or recipe."
      • addedInput schema / properties / timeoutMs / description
        Added value: +"Maximum processing timeout in milliseconds. Use a larger value for background AI or large batches."
      • addedInput schema / properties / unlockToken / description
        Added value: +"Optional x402 unlock token for paid agent batch/scenario runs. Obtain it outside this adapter."
      • addedInput schema / properties / watermarkLogoFile / description
        Added value: +"Optional local logo/image file for QuokkaPix logo watermark workflows."
    • Changedprocess_with_settings17 fields changed
      • addedInput schema / properties / appUrl / description
        Added value: +"Optional QuokkaPix app URL. Defaults to https://quokkapix.com/#agent=1. For safety, only quokkapix.com, localhost and 127.0.0.1 are accepted unless QUOKKAPIX_ALLOW_CUSTOM_APP_URL=1 is set."
      • addedInput schema / properties / backgroundImageFile / description
        Added value: +"Optional local image file for background replacement settings."
      • addedInput schema / properties / expectedResultQa / description
        Added value: +"Optional QA contract used to validate quokkapix-result.json after processing."
      • addedInput schema / properties / expectedResultQa / properties
        Added value: +{
        +  "allowedFormats": {
        +    "description": "Allowed output formats for every manifest output entry.",
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  "expectedFormat": {
        +    "description": "Required output format, for example webp, jpg, png, pdf or zip.",
        +    "type": "string"
        +  },
        +  "expectedHeight": {
        +    "description": "Exact expected output height in pixels.",
        +    "exclusiveMinimum": 0,
        +    "maximum": 9007199254740991,
        +    "type": "integer"
        +  },
        +  "expectedMinOutputs": {
        +    "description": "Minimum number of output entries expected.",
        +    "maximum": 9007199254740991,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  "expectedOutputKind": {
        +    "description": "Expected high-level output kind for QA checks.",
        +    "enum": [
        +      "single",
        +      "batch",
        +      "zip",
        +      "pdf",
        +      "metadata-report",
        +      "icon-pack"
        +    ],
        +    "type": "string"
        +  },
        +  "expectedWidth": {
        +    "description": "Exact expected output width in pixels.",
        +    "exclusiveMinimum": 0,
        +    "maximum": 9007199254740991,
        +    "type": "integer"
        +  },
        +  "marketplace": {
        +    "description": "Marketplace profile name used for human-readable QA context.",
        +    "enum": [
        +      "shopify",
        +      "amazon",
        +      "google-merchant"
        +    ],
        +    "type": "string"
        +  },
        +  "maxHeight": {
        +    "description": "Maximum allowed output height in pixels.",
        +    "exclusiveMinimum": 0,
        +    "maximum": 9007199254740991,
        +    "type": "integer"
        +  },
        +  "maxOutputKB": {
        +    "description": "Recommended maximum output size per non-archive file.",
        +    "exclusiveMinimum": 0,
        +    "type": "number"
        +  },
        +  "maxWidth": {
        +    "description": "Maximum allowed output width in pixels.",
        +    "exclusiveMinimum": 0,
        +    "maximum": 9007199254740991,
        +    "type": "integer"
        +  },
        +  "minHeight": {
        +    "description": "Minimum recommended output height in pixels.",
        +    "exclusiveMinimum": 0,
        +    "maximum": 9007199254740991,
        +    "type": "integer"
        +  },
        +  "minWidth": {
        +    "description": "Minimum recommended output width in pixels.",
        +    "exclusiveMinimum": 0,
        +    "maximum": 9007199254740991,
        +    "type": "integer"
        +  },
        +  "requireSquare": {
        +    "description": "Require square output dimensions when true.",
        +    "type": "boolean"
        +  },
        +  "visualChecks": {
        +    "description": "Visual checks requested by a recipe. Current validator reports these as metadata-only limitations.",
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +}
      • removedInput schema / properties / expectedResultQa / propertyNames
        Removed value: -{
        -  "type": "string"
        -}
      • addedInput schema / properties / headless / description
        Added value: +"Run Chromium headless. Defaults to true unless debugging."
      • addedInput schema / properties / inputFiles / description
        Added value: +"Local source image files to upload through the browser file input."
      • addedInput schema / properties / inputFiles / items / description
        Added value: +"Absolute or client-relative local file path readable by the MCP process. Do not pass remote URLs here."
      • addedInput schema / properties / maxFiles / description
        Added value: +"Maximum allowed input files for this direct settings run. Defaults to the selected files count."
      • addedInput schema / properties / outputDir / description
        Added value: +"Local directory where the adapter writes the downloaded output and quokkapix-result.json."
      • addedInput schema / properties / settings / description
        Added value: +"Payload accepted by window.QuokkaPixAgent.applySettings. Extra editor-specific keys are allowed."
      • addedInput schema / properties / settings / properties
        Added value: +{
        +  "mode": {
        +    "description": "Use single for one image or batch for multiple images.",
        +    "enum": [
        +      "single",
        +      "batch"
        +    ],
        +    "type": "string"
        +  },
        +  "steps": {
        +    "description": "Optional ordered scenario steps. Prefer [{ tool, settings }] for custom multi-step workflows.",
        +    "items": {
        +      "anyOf": [
        +        {
        +          "description": "Simple QuokkaPix tool id step, for example resize, background, compress or watermark.",
        +          "minLength": 1,
        +          "type": "string"
        +        },
        +        {
        +          "description": "Structured scenario step with a tool id and per-step settings.",
        +          "properties": {
        +            "settings": {
        +              "additionalProperties": {},
        +              "description": "Settings for this step using the same keys accepted by window.QuokkaPixAgent.applySettings.",
        +              "propertyNames": {
        +                "type": "string"
        +              },
        +              "type": "object"
        +            },
        +            "tool": {
        +              "description": "QuokkaPix tool id for this scenario step, for example resize, background, compress or watermark.",
        +              "minLength": 1,
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "tool"
        +          ],
        +          "type": "object"
        +        }
        +      ],
        +      "description": "One step in a QuokkaPix scenario workflow."
        +    },
        +    "type": "array"
        +  },
        +  "tool": {
        +    "description": "QuokkaPix editor tool id, such as resize, crop, rotate, convert, compress, metadata, background, watermark, effects, rename, pdf, favicon or constructor.",
        +    "minLength": 1,
        +    "type": "string"
        +  }
        +}
      • removedInput schema / properties / settings / propertyNames
        Removed value: -{
        -  "type": "string"
        -}
      • addedInput schema / properties / settingsId / description
        Added value: +"Optional id/name for this generated settings workflow, used in returned metadata and QA profile."
      • addedInput schema / properties / timeoutMs / description
        Added value: +"Maximum processing timeout in milliseconds."
      • addedInput schema / properties / unlockToken / description
        Added value: +"Optional x402 unlock token for paid agent batch/scenario runs."
      • addedInput schema / properties / watermarkLogoFile / description
        Added value: +"Optional local logo/image file for logo watermark settings."
    • Changedvalidate_recipe4 fields changed
      • addedInput schema / properties / recipe / description
        Added value: +"Custom QuokkaPix recipe object. Use validate_recipe before process_images when generating this dynamically."
      • addedInput schema / properties / recipe / properties
        Added value: +{
        +  "applySettings": {
        +    "additionalProperties": {},
        +    "description": "QuokkaPix settings applied before processing starts.",
        +    "properties": {
        +      "mode": {
        +        "description": "Use single for one image or batch for multiple images.",
        +        "enum": [
        +          "single",
        +          "batch"
        +        ],
        +        "type": "string"
        +      },
        +      "steps": {
        +        "description": "Optional ordered scenario steps. Prefer [{ tool, settings }] for custom multi-step workflows.",
        +        "items": {
        +          "anyOf": [
        +            {
        +              "description": "Simple QuokkaPix tool id step, for example resize, background, compress or watermark.",
        +              "minLength": 1,
        +              "type": "string"
        +            },
        +            {
        +              "description": "Structured scenario step with a tool id and per-step settings.",
        +              "properties": {
        +                "settings": {
        +                  "additionalProperties": {},
        +                  "description": "Settings for this step using the same keys accepted by window.QuokkaPixAgent.applySettings.",
        +                  "propertyNames": {
        +                    "type": "string"
        +                  },
        +                  "type": "object"
        +                },
        +                "tool": {
        +                  "description": "QuokkaPix tool id for this scenario step, for example resize, background, compress or watermark.",
        +                  "minLength": 1,
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "tool"
        +              ],
        +              "type": "object"
        +            }
        +          ],
        +          "description": "One step in a QuokkaPix scenario workflow."
        +        },
        +        "type": "array"
        +      },
        +      "tool": {
        +        "description": "QuokkaPix editor tool id, such as resize, crop, rotate, convert, compress, metadata, background, watermark, effects, rename, pdf, favicon or constructor.",
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "description": {
        +    "description": "Short explanation of what the recipe prepares.",
        +    "type": "string"
        +  },
        +  "expectedResult": {
        +    "additionalProperties": {},
        +    "description": "Expected output and QA contract.",
        +    "properties": {
        +      "output": {
        +        "description": "Expected output type, for example zip, image, pdf or json.",
        +        "type": "string"
        +      },
        +      "qa": {
        +        "additionalProperties": {},
        +        "description": "Machine-readable QA checks for the result manifest.",
        +        "properties": {
        +          "allowedFormats": {
        +            "description": "Allowed output formats for every manifest output entry.",
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          "expectedFormat": {
        +            "description": "Required output format, for example webp, jpg, png, pdf or zip.",
        +            "type": "string"
        +          },
        +          "expectedHeight": {
        +            "description": "Exact expected output height in pixels.",
        +            "exclusiveMinimum": 0,
        +            "maximum": 9007199254740991,
        +            "type": "integer"
        +          },
        +          "expectedMinOutputs": {
        +            "description": "Minimum number of output entries expected.",
        +            "maximum": 9007199254740991,
        +            "minimum": 1,
        +            "type": "integer"
        +          },
        +          "expectedOutputKind": {
        +            "description": "Expected high-level output kind for QA checks.",
        +            "enum": [
        +              "single",
        +              "batch",
        +              "zip",
        +              "pdf",
        +              "metadata-report",
        +              "icon-pack"
        +            ],
        +            "type": "string"
        +          },
        +          "expectedWidth": {
        +            "description": "Exact expected output width in pixels.",
        +            "exclusiveMinimum": 0,
        +            "maximum": 9007199254740991,
        +            "type": "integer"
        +          },
        +          "marketplace": {
        +            "description": "Marketplace profile name used for human-readable QA context.",
        +            "enum": [
        +              "shopify",
        +              "amazon",
        +              "google-merchant"
        +            ],
        +            "type": "string"
        +          },
        +          "maxHeight": {
        +            "description": "Maximum allowed output height in pixels.",
        +            "exclusiveMinimum": 0,
        +            "maximum": 9007199254740991,
        +            "type": "integer"
        +          },
        +          "maxOutputKB": {
        +            "description": "Recommended maximum output size per non-archive file.",
        +            "exclusiveMinimum": 0,
        +            "type": "number"
        +          },
        +          "maxWidth": {
        +            "description": "Maximum allowed output width in pixels.",
        +            "exclusiveMinimum": 0,
        +            "maximum": 9007199254740991,
        +            "type": "integer"
        +          },
        +          "minHeight": {
        +            "description": "Minimum recommended output height in pixels.",
        +            "exclusiveMinimum": 0,
        +            "maximum": 9007199254740991,
        +            "type": "integer"
        +          },
        +          "minWidth": {
        +            "description": "Minimum recommended output width in pixels.",
        +            "exclusiveMinimum": 0,
        +            "maximum": 9007199254740991,
        +            "type": "integer"
        +          },
        +          "requireSquare": {
        +            "description": "Require square output dimensions when true.",
        +            "type": "boolean"
        +          },
        +          "visualChecks": {
        +            "description": "Visual checks requested by a recipe. Current validator reports these as metadata-only limitations.",
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          }
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "id": {
        +    "description": "Stable recipe id, for example shopify_product_pack.",
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "requires": {
        +    "additionalProperties": {},
        +    "description": "Recipe requirements such as maxFiles and payment policy.",
        +    "properties": {
        +      "maxFiles": {
        +        "description": "Maximum files allowed by this recipe.",
        +        "maximum": 50,
        +        "minimum": 1,
        +        "type": "integer"
        +      },
        +      "payment": {
        +        "description": "Whether the recipe normally needs a paid batch/scenario unlock.",
        +        "type": "boolean"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "title": {
        +    "description": "Human-readable recipe title.",
        +    "type": "string"
        +  }
        +}
      • removedInput schema / properties / recipe / propertyNames
        Removed value: -{
        -  "type": "string"
        -}
      • addedInput schema / properties / recipe / required
        Added value: +[
        +  "id",
        +  "applySettings"
        +]
    • Changedvalidate_result_manifest8 fields changed
      • addedInput schema / properties / manifest / description
        Added value: +"QuokkaPix result manifest returned by getResultManifest() or saved as quokkapix-result.json."
      • addedInput schema / properties / manifest / properties
        Added value: +{
        +  "errorCode": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "description": "Stable error code when the run failed or was cancelled."
        +  },
        +  "mode": {
        +    "description": "Run mode reported by QuokkaPix.",
        +    "enum": [
        +      "single",
        +      "batch"
        +    ],
        +    "type": "string"
        +  },
        +  "outputs": {
        +    "description": "Detailed output entries.",
        +    "items": {
        +      "additionalProperties": {},
        +      "description": "One output file or ZIP entry from quokkapix-result.json.",
        +      "properties": {
        +        "format": {
        +          "description": "Output format such as webp, jpg, png, pdf or zip.",
        +          "type": "string"
        +        },
        +        "outputHeight": {
        +          "description": "Output image height in pixels.",
        +          "type": "number"
        +        },
        +        "outputName": {
        +          "description": "Output file or ZIP entry name.",
        +          "type": "string"
        +        },
        +        "outputWidth": {
        +          "description": "Output image width in pixels.",
        +          "type": "number"
        +        },
        +        "sizeBytes": {
        +          "description": "Output byte size when available.",
        +          "type": "number"
        +        },
        +        "sourceHeight": {
        +          "description": "Original image height in pixels.",
        +          "type": "number"
        +        },
        +        "sourceName": {
        +          "description": "Original input file name when available.",
        +          "type": "string"
        +        },
        +        "sourceWidth": {
        +          "description": "Original image width in pixels.",
        +          "type": "number"
        +        },
        +        "warnings": {
        +          "description": "Warnings for this output entry.",
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "processingMs": {
        +    "description": "Processing time in milliseconds when available.",
        +    "type": "number"
        +  },
        +  "source": {
        +    "additionalProperties": {},
        +    "description": "Source file summary.",
        +    "properties": {
        +      "count": {
        +        "description": "Number of source files.",
        +        "type": "number"
        +      },
        +      "totalBytes": {
        +        "description": "Total input bytes when available.",
        +        "type": "number"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "status": {
        +    "description": "Terminal status, expected to be done for a successful run.",
        +    "type": "string"
        +  },
        +  "success": {
        +    "description": "Whether QuokkaPix considered the run successful.",
        +    "type": "boolean"
        +  },
        +  "tool": {
        +    "description": "QuokkaPix tool/workflow that produced the output.",
        +    "type": "string"
        +  },
        +  "warnings": {
        +    "description": "Run-level warnings.",
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +}
      • removedInput schema / properties / manifest / propertyNames
        Removed value: -{
        -  "type": "string"
        -}
      • addedInput schema / properties / recipe / description
        Added value: +"Optional custom recipe with expectedResult.qa. Used instead of recipeId when provided."
      • addedInput schema / properties / recipe / properties
        Added value: +{
        +  "applySettings": {
        +    "additionalProperties": {},
        +    "description": "QuokkaPix settings applied before processing starts.",
        +    "properties": {
        +      "mode": {
        +        "description": "Use single for one image or batch for multiple images.",
        +        "enum": [
        +          "single",
        +          "batch"
        +        ],
        +        "type": "string"
        +      },
        +      "steps": {
        +        "description": "Optional ordered scenario steps. Prefer [{ tool, settings }] for custom multi-step workflows.",
        +        "items": {
        +          "anyOf": [
        +            {
        +              "description": "Simple QuokkaPix tool id step, for example resize, background, compress or watermark.",
        +              "minLength": 1,
        +              "type": "string"
        +            },
        +            {
        +              "description": "Structured scenario step with a tool id and per-step settings.",
        +              "properties": {
        +                "settings": {
        +                  "additionalProperties": {},
        +                  "description": "Settings for this step using the same keys accepted by window.QuokkaPixAgent.applySettings.",
        +                  "propertyNames": {
        +                    "type": "string"
        +                  },
        +                  "type": "object"
        +                },
        +                "tool": {
        +                  "description": "QuokkaPix tool id for this scenario step, for example resize, background, compress or watermark.",
        +                  "minLength": 1,
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "tool"
        +              ],
        +              "type": "object"
        +            }
        +          ],
        +          "description": "One step in a QuokkaPix scenario workflow."
        +        },
        +        "type": "array"
        +      },
        +      "tool": {
        +        "description": "QuokkaPix editor tool id, such as resize, crop, rotate, convert, compress, metadata, background, watermark, effects, rename, pdf, favicon or constructor.",
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "description": {
        +    "description": "Short explanation of what the recipe prepares.",
        +    "type": "string"
        +  },
        +  "expectedResult": {
        +    "additionalProperties": {},
        +    "description": "Expected output and QA contract.",
        +    "properties": {
        +      "output": {
        +        "description": "Expected output type, for example zip, image, pdf or json.",
        +        "type": "string"
        +      },
        +      "qa": {
        +        "additionalProperties": {},
        +        "description": "Machine-readable QA checks for the result manifest.",
        +        "properties": {
        +          "allowedFormats": {
        +            "description": "Allowed output formats for every manifest output entry.",
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          "expectedFormat": {
        +            "description": "Required output format, for example webp, jpg, png, pdf or zip.",
        +            "type": "string"
        +          },
        +          "expectedHeight": {
        +            "description": "Exact expected output height in pixels.",
        +            "exclusiveMinimum": 0,
        +            "maximum": 9007199254740991,
        +            "type": "integer"
        +          },
        +          "expectedMinOutputs": {
        +            "description": "Minimum number of output entries expected.",
        +            "maximum": 9007199254740991,
        +            "minimum": 1,
        +            "type": "integer"
        +          },
        +          "expectedOutputKind": {
        +            "description": "Expected high-level output kind for QA checks.",
        +            "enum": [
        +              "single",
        +              "batch",
        +              "zip",
        +              "pdf",
        +              "metadata-report",
        +              "icon-pack"
        +            ],
        +            "type": "string"
        +          },
        +          "expectedWidth": {
        +            "description": "Exact expected output width in pixels.",
        +            "exclusiveMinimum": 0,
        +            "maximum": 9007199254740991,
        +            "type": "integer"
        +          },
        +          "marketplace": {
        +            "description": "Marketplace profile name used for human-readable QA context.",
        +            "enum": [
        +              "shopify",
        +              "amazon",
        +              "google-merchant"
        +            ],
        +            "type": "string"
        +          },
        +          "maxHeight": {
        +            "description": "Maximum allowed output height in pixels.",
        +            "exclusiveMinimum": 0,
        +            "maximum": 9007199254740991,
        +            "type": "integer"
        +          },
        +          "maxOutputKB": {
        +            "description": "Recommended maximum output size per non-archive file.",
        +            "exclusiveMinimum": 0,
        +            "type": "number"
        +          },
        +          "maxWidth": {
        +            "description": "Maximum allowed output width in pixels.",
        +            "exclusiveMinimum": 0,
        +            "maximum": 9007199254740991,
        +            "type": "integer"
        +          },
        +          "minHeight": {
        +            "description": "Minimum recommended output height in pixels.",
        +            "exclusiveMinimum": 0,
        +            "maximum": 9007199254740991,
        +            "type": "integer"
        +          },
        +          "minWidth": {
        +            "description": "Minimum recommended output width in pixels.",
        +            "exclusiveMinimum": 0,
        +            "maximum": 9007199254740991,
        +            "type": "integer"
        +          },
        +          "requireSquare": {
        +            "description": "Require square output dimensions when true.",
        +            "type": "boolean"
        +          },
        +          "visualChecks": {
        +            "description": "Visual checks requested by a recipe. Current validator reports these as metadata-only limitations.",
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          }
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "id": {
        +    "description": "Stable recipe id, for example shopify_product_pack.",
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "requires": {
        +    "additionalProperties": {},
        +    "description": "Recipe requirements such as maxFiles and payment policy.",
        +    "properties": {
        +      "maxFiles": {
        +        "description": "Maximum files allowed by this recipe.",
        +        "maximum": 50,
        +        "minimum": 1,
        +        "type": "integer"
        +      },
        +      "payment": {
        +        "description": "Whether the recipe normally needs a paid batch/scenario unlock.",
        +        "type": "boolean"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "title": {
        +    "description": "Human-readable recipe title.",
        +    "type": "string"
        +  }
        +}
      • removedInput schema / properties / recipe / propertyNames
        Removed value: -{
        -  "type": "string"
        -}
      • addedInput schema / properties / recipe / required
        Added value: +[
        +  "id",
        +  "applySettings"
        +]
      • addedInput schema / properties / recipeId / description
        Added value: +"Optional official recipe id whose expectedResult.qa contract should be used."
    • Changedverify_unlock_token9 fields changed
      • addedInput schema / properties / baseUrl / description
        Added value: +"Optional QuokkaPix site base URL. Defaults to https://quokkapix.com."
      • addedInput schema / properties / consume / description
        Added value: +"False for preflight verification. True consumes the unlock and should be used only at run start."
      • addedInput schema / properties / currency / description
        Added value: +"Expected currency. Defaults to live payment options."
      • addedInput schema / properties / files / description
        Added value: +"Number of files intended for the paid run."
      • addedInput schema / properties / mode / description
        Added value: +"Run mode to verify against the unlock token."
      • addedInput schema / properties / mode / enum
        Added value: +[
        +  "single",
        +  "batch",
        +  "scenario"
        +]
      • addedInput schema / properties / price / description
        Added value: +"Expected price string. Defaults to live payment options."
      • addedInput schema / properties / scope / description
        Added value: +"Expected QuokkaPix scope. Defaults to live payment options."
      • addedInput schema / properties / token / description
        Added value: +"Unlock token returned by the paid x402 unlock endpoint."
  8. 9 tool updatesv0.3.0
    • First observedexplain_payment_flow
    • First observedget_payment_options
    • First observedget_recipe
    • First observedlist_recipes
    • First observedprocess_images
    • First observedprocess_with_settings
    • First observedvalidate_recipe
    • First observedvalidate_result_manifest
    • First observedverify_unlock_token

TDQS

A3.6/5.0

Scored across 19 tools

Disambiguation4/5

Tools are mostly separated by media type (image/video) and action (process/list/get/validate), with detailed descriptions keeping recipe-based processing distinct from raw-settings processing. The only mild ambiguity is between process_images and process_with_settings, but their input models and workflows are explained clearly enough.

Naming Consistency4/5

Tool names consistently follow a snake_case verb-first pattern with parallel list/get/validate prefixes across image and video domains. Minor asymmetries such as process_images vs the generic process_with_settings, and singular/plural noun mismatches, keep this from being perfectly consistent.

Tool Count3/5

With 19 tools, the set is on the heavy side, largely due to mirroring nearly every image tool with a video counterpart plus payment support. Each tool does have a distinct purpose, but the total count exceeds the typical well-scoped range and may feel dense for agents.

Completeness5/5

The tool surface covers processing, official and custom recipe validation, payment quoting and verification, marketplace rule profiles, and result manifest QA for both images and video. Workflows can be completed end-to-end without obvious dead ends or missing lifecycle steps.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers