The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Quokkapix MCP listing page.
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:
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:
Cloud-to-local bridge:
This package is a local automation adapter around two browser surfaces:
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.
This package is not:
quokkapix.com by URL;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.
Use this adapter when an AI agent needs repeatable media workflows like:
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.
Remote clients use the same package in bridge mode:
Depending on the selected surface, the adapter saves:
quokkapix-result.json or quokkapix-video-result.json;qa object returned to the agent.>=20Bridge mode additionally requires explicit input and output roots. Remote calls cannot read or write outside those roots.
Install dependencies:
https://quokkapix.com/mcp as a custom remote MCP connector.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.
list_recipesLists official QuokkaPix recipes.
Use first when the agent does not know which workflow to run.
get_recipeReturns one recipe by id, including:
applySettings;Input:
validate_recipeValidates a custom recipe object before processing.
This does not upload files and does not start processing.
list_rule_profilesLists 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;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_profileReturns one rule profile by id, for example:
Agents can pass the returned facts into their own planning, or call validate_result_manifest with ruleProfileId.
validate_result_manifestValidates 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:
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.
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:
Audio mix example:
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_imagesProcesses local image files through QuokkaPix using either:
recipeId;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_settingsProcesses 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:
Supported editor areas depend on the QuokkaPix browser contract and include:
tool=pdf and pdf.operation for uploaded PDF files only; ZIP archives are accepted only for PDF merge and only PDF entries are extracted;For custom scenarios, prefer the explicit structured form:
Step settings use the same section keys as window.QuokkaPixAgent.applySettings.
PDF tools use PDF uploads instead of image uploads:
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_optionsFetches QuokkaPix agent payment policy and x402 endpoints.
This does not perform a payment.
explain_payment_flowExplains 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_tokenSafely 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.
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.
The runner loads recipes from the local project if present. If local recipe files are absent, it falls back to:
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 | |
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.
From the mcp-runner folder:
Start the MCP server:
Direct CLI run without an MCP client:
For most users, configure the published npm package directly:
Use absolute paths for cwd.
If you cloned the GitHub repository instead of using npm, add this to your Claude Desktop MCP config:
If you cloned the GitHub repository instead of using npm, use the same server definition in Cursor MCP settings:
Run QuokkaPix locally and point the runner to it:
Override the local site root:
Override the public recipe source:
Override payment base URL:
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:
Tool: process_images
Expected output:
outputDir;quokkapix-result.json;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;ok follows qaOk, so agents should not treat a failed QA run as fully successful.Tool: process_with_settings
Use this for custom workflows that are not official recipes.
Tool: process_with_settings
Tool: process_with_settings
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.
Tool: process_images
For batch runs, see the payment section below.
Tool: validate_result_manifest
The result contains:
After processing, the runner writes:
The manifest is returned by:
It contains machine-readable local processing facts:
schemaVersion;status;success;tool;mode;source.count;source.totalBytes;outputs[];processingMs;capabilities.backends;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.
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:
done;outputs[].pixelQa metrics:
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.
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 |
| 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.
eip155:8453, default), Polygon (eip155:137), Arbitrum (eip155:42161) and World Chain (eip155:480) when exposed by /api/agent-payment/options;/api/agent-payment/options;/api/agent-unlock/coinbase-x402/:productId;/api/agent-unlock/verify;/x402-api.md.The MCP runner can:
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:
productId/paymentEndpoint.unlockToken; optionally call verify_unlock_token with matching usage.unlockToken.Example:
Use this prompt in your local AI client:
The package also exposes a direct CLI:
Options:
The CLI currently runs recipe-based processing. For direct settings, use the MCP tool process_with_settings.
Bridge command:
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.
Fast checks:
This checks:
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:
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:
The paid tests use separate tokens because unlocks are one-time consumable.
Before publishing or tagging a release:
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.
bridge:execute scope; mcp:tools alone is read-only... traversal and out-of-root absolute paths are rejected.Run:
Use absolute local file paths. The MCP process must have permission to read them.
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.
Reduce batch size, resize first, avoid very large images, or use smaller workflows. The runner cannot bypass browser RAM limits.
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.mdhttps://quokkapix.com/agents.htmlhttps://quokkapix.com/llms.txthttps://quokkapix.com/agent-manifest.jsonhttps://quokkapix.com/.well-known/ai-catalog.jsonhttps://quokkapix.com/agent-test.htmlhttps://quokkapix.com/mcp-runner.htmlhttps://quokkapix.com/x402-api.mdMIT. See LICENSE.