{"$schema":"https://verifymcp.io/schemas/trust-report.json","schemaVersion":1,"license":{"name":"CC BY-NC 4.0","url":"https://creativecommons.org/licenses/by-nc/4.0/"},"generatedAt":"2026-11-05T17:24:53.066Z","url":"https://verifymcp.io/servers/axworks1-one-design/one-design-mcp","markdownUrl":"https://verifymcp.io/servers/axworks1-one-design/one-design-mcp.md","server":{"slug":"axworks1-one-design","name":"One Design","registryName":"io.github.axworks1/one-design","description":"Image, brand, privacy and PDF tools from one.design, run on your own computer. Nothing uploaded.","registryStatus":"active","deletedAt":null,"statusMessage":null,"liveness":"live","publisher":{"class":"unknown","claimed":false}},"component":{"slug":"one-design-mcp","type":"npm","identifier":"one-design-mcp","withdrawn":false,"url":"https://verifymcp.io/servers/axworks1-one-design/one-design-mcp","version":"0.2.4","transport":"stdio","scoredAt":"2026-11-05T09:18:25.505Z"},"score":{"total":72,"tier":"medium","status":"scored","weekDelta":4,"history":[{"date":"2026-11-05","total":72},{"date":"2026-11-04","total":71},{"date":"2026-11-03","total":71},{"date":"2026-11-02","total":70},{"date":"2026-11-01","total":70},{"date":"2026-10-31","total":69},{"date":"2026-10-30","total":69},{"date":"2026-10-29","total":68},{"date":"2026-10-28","total":68},{"date":"2026-10-27","total":67},{"date":"2026-10-26","total":67}]},"categories":[{"name":"Supply Chain Security","score":99,"verdict":"partial","reasons":["No malware found by supply-chain analysis.","No known CVEs affecting this package version or its production dependencies.","No install/post-install scripts declared.","35 of 149 dependencies flagged as unhealthy."],"codes":[{"code":"supplychain.malware_clean","args":{}},{"code":"cve.none","args":{}},{"code":"installscript.none","args":{}},{"code":"dephealth.assessed","args":{"deps":"149","unhealthy":"35"}}]},{"name":"Provenance & Transparency","score":32,"verdict":"fail","reasons":["Source repository is publicly reachable at the declared URL.","Provenance check failed: no build-provenance attestation is published.","License check failed: the license (UNLICENSED) isn't a recognized OSI-approved license.","Actively maintained (last published 10 days ago).","Disclosure check failed: no security disclosure policy was found in the source repository."],"codes":[{"code":"provenance.repo_verified","args":{}},{"code":"provenance.none","args":{}},{"code":"license.non_osi","args":{"spdx":"UNLICENSED"}},{"code":"maintenance.recent","args":{"age_days":"10"}},{"code":"disclosure.absent","args":{}}]},{"name":"Schema Quality & AI Usability","score":72,"verdict":"fail","reasons":["100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).","AI-judged instruction clarity (good).","Context-footprint check failed: tool/resource definitions use about 12001 tokens (~292/item across 41 items; 37 tools + 4 resources), over budget; trim descriptions and params.","Usage-examples check failed: none of the tools include examples."],"codes":[{"code":"schema.descriptions","args":{"pct":"100"}},{"code":"schema.ai_quality","args":{"band":"good"}},{"code":"schema.footprint_heavy","args":{"avg":"292","items":"41","tools":"37","tokens":"12001","resources":"4"}},{"code":"schema.examples_absent","args":{}}]},{"name":"Stability & Change Management","score":33,"verdict":"partial","reasons":["Stability observed for 10 of 30 days with no destabilising changes; credit accrues until the full window elapses."],"codes":[{"code":"stability.building_history","args":{"days":"10"}}]},{"name":"Tool Coverage","score":99,"verdict":"partial","reasons":["100% of tools have a non-trivial description (not blank, and not just the tool's name).","98% of tool parameters carry a description."],"codes":[{"code":"toolquality.descriptions","args":{"pct":"100"}},{"code":"toolquality.param_docs","args":{"pct":"98"}}]},{"name":"Tool Safety","score":100,"verdict":"pass","reasons":["No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.","All 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.","An AI judge read all 39 captured unit(s) of tool text and found none that tries to manipulate the model reading it."],"codes":[{"code":"toolsafety.injection_clean","args":{}},{"code":"toolsafety.destructive_declared","args":{"pct":"100","annotated":"2","destructive":"2"}},{"code":"toolsafety.manipulation_clean","args":{"units":"39","judged":"39"}}]},{"name":"Capabilities","score":100,"verdict":"pass","reasons":["Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28."],"codes":[{"code":"protocol.supported","args":{"latest":"2026-07-28","version":"2025-11-25"}}]}],"inconclusive":[],"malware":[],"components":[{"slug":"one-design-mcp","type":"npm","identifier":"one-design-mcp","withdrawn":false,"score":72,"current":true,"url":"https://verifymcp.io/servers/axworks1-one-design/one-design-mcp","markdownUrl":"https://verifymcp.io/servers/axworks1-one-design/one-design-mcp.md"}],"facts":[{"label":"Registry","value":"npm"},{"label":"Package","value":"one-design-mcp"},{"label":"Version","value":"0.2.4"},{"label":"Transport","value":"stdio"}],"install":{"available":true,"bundleSha256":null},"tools":[{"name":"compress_images","title":"Compress images","description":"Make images smaller, by quality or to a target file size (e.g. under 500 KB for a form). Keeps each file’s format unless asked; files that already fit are left as they are; PNGs reach a size by reducing colours. Saved next to the originals as name-compressed.ext.","inputs":[{"name":"allow_resize","type":"boolean","required":false,"description":"To a size: may an image be scaled down if even low quality is too big?"},{"name":"files","type":"array","required":true,"description":"Image files or folders (a folder means the images in it). ~ is your home folder."},{"name":"format","type":"string","required":false,"description":"Output format. \"original\" keeps each file’s own (HEIC, AVIF and TIFF become JPEG, GIF becomes PNG)."},{"name":"max_edge","type":"integer","required":false,"description":"Scale down so the longest side is at most this many pixels (never enlarged)."},{"name":"output_dir","type":"string","required":false,"description":"Folder to save results in. Default: next to each original. Originals are never overwritten."},{"name":"quality","type":"integer","required":false,"description":"Quality when not compressing to a size (30–100). For PNG, below 100 reduces colours."},{"name":"target_kb","type":"integer","required":false,"description":"Largest allowed size in KB. Leave out to compress by quality instead."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":250},{"name":"resize_images","title":"Resize images","description":"Resize images to a width, a height or both. fit \"inside\" keeps the whole picture within the box, \"cover\" fills the box and crops (keeping the interesting part), \"contain\" fits it whole and pads the rest. Never enlarges unless asked. Social sizes: see the one-design://presets/sizes resource. Saved as name-WIDTHxHEIGHT.ext.","inputs":[{"name":"background","type":"string","required":false,"description":"Padding colour for fit \"contain\" (hex, or \"transparent\" for PNG/WebP)."},{"name":"enlarge","type":"boolean","required":false,"description":"Allow making images bigger than they are."},{"name":"files","type":"array","required":true,"description":"Image files or folders (a folder means the images in it). ~ is your home folder."},{"name":"fit","type":"string","required":false,"description":null},{"name":"format","type":"string","required":false,"description":"Output format. \"original\" keeps each file’s own (HEIC, AVIF and TIFF become JPEG, GIF becomes PNG)."},{"name":"height","type":"integer","required":false,"description":"Height in pixels."},{"name":"output_dir","type":"string","required":false,"description":"Folder to save results in. Default: next to each original. Originals are never overwritten."},{"name":"percent","type":"number","required":false,"description":"Scale by a percentage instead of a size (e.g. 50)."},{"name":"quality","type":"integer","required":false,"description":null},{"name":"width","type":"integer","required":false,"description":"Width in pixels."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":261},{"name":"make_qr_code","title":"Make QR codes","description":"QR codes for links or any text, in your colours, as PNG or SVG (default folder: ~/Downloads/one-design), with a preview. Free makes 1 at a time; Pro makes up to 50 in one go. Keep strong contrast between the colours so phones can scan it.","inputs":[{"name":"background","type":"string","required":false,"description":"Background, hex, or \"transparent\"."},{"name":"colour","type":"string","required":false,"description":"Code colour, hex."},{"name":"content","type":"string","required":false,"description":"The link or text to encode."},{"name":"contents","type":"array","required":false,"description":"Several links or texts, one code each (Pro: batch)."},{"name":"error_correction","type":"string","required":false,"description":"Higher survives more damage (and a logo on top) but makes a denser code."},{"name":"format","type":"string","required":false,"description":null},{"name":"output_path","type":"string","required":false,"description":"A file (one code) or folder. Default: ~/Downloads/one-design."},{"name":"size","type":"integer","required":false,"description":"Width and height in pixels."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":196},{"name":"lock_link","title":"Lock a link behind a password","description":"Turns any web address into a one.design link that asks for a password before opening it. The address is encrypted here (AES-256-GCM); the result carries it in the link itself, so no server stores it. Anyone with the link and the password can open it.","inputs":[{"name":"hint","type":"string","required":false,"description":"Optional hint shown before the password. Anyone with the link can read it."},{"name":"password","type":"string","required":true,"description":"The password people will need. It is not stored anywhere."},{"name":"url","type":"string","required":true,"description":"The address to protect, e.g. drive.google.com/… (https:// is added if missing)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":130},{"name":"convert_images","title":"Convert images","description":"Convert images between WebP, JPEG, PNG and AVIF, including iPhone HEIC photos (on a Mac). Choose the quality, optionally shrink big images, and keep or strip metadata. Saved next to the originals with the new extension (never over them). For PDF pages to images use pdf_toolkit with action \"to_images\".","inputs":[{"name":"background","type":"string","required":false,"description":"JPEG only: the colour for transparent areas, hex."},{"name":"files","type":"array","required":true,"description":"Image files or folders (a folder means the images in it). ~ is your home folder."},{"name":"format","type":"string","required":false,"description":"Convert to. WebP is usually 25–35% smaller than JPEG at the same quality; PNG is lossless (best for graphics and screenshots); AVIF is smaller still but slower to make."},{"name":"max_edge","type":"integer","required":false,"description":"Shrink big images so their longer side is at most this many pixels (e.g. 2560, 1920, 1280). Smaller images are left their size."},{"name":"metadata","type":"string","required":false,"description":"\"strip\" removes EXIF, GPS and camera details (the site’s behaviour); \"keep\" carries them over."},{"name":"output_dir","type":"string","required":false,"description":"Folder to save results in. Default: next to each original. Originals are never overwritten."},{"name":"quality","type":"integer","required":false,"description":"Quality, 1 to 100 (default 82). Ignored for PNG."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":287},{"name":"fit_fill","title":"Fit & Fill","description":"Fit the whole photo onto a square, portrait or story canvas without cropping, and fill the space around it with a blurred copy of the photo or a colour (matched to the photo by default). Canvas by name (square, instagram-square, portrait, instagram-portrait, portrait-34, story, landscape, x-post, linkedin, og, link-preview, pinterest, banner, dribbble) or width and height. Saved next to the originals as name-WIDTHxHEIGHT.jpg.","inputs":[{"name":"blur","type":"integer","required":false,"description":"How soft the blurred fill is, 1 to 10."},{"name":"colour","type":"string","required":false,"description":"Fill colour for fill \"colour\": a hex like #c9f26b, or \"auto\" for a colour matched to each photo (the average round its edges)."},{"name":"corner_radius","type":"number","required":false,"description":"Rounded corners on the photo, in percent of its shorter side."},{"name":"darken","type":"integer","required":false,"description":"Darken the blurred fill, in percent."},{"name":"files","type":"array","required":true,"description":"Image files or folders (a folder means the images in it). ~ is your home folder."},{"name":"fill","type":"string","required":false,"description":"\"blur\": a soft, enlarged copy of the photo fills the gaps. \"colour\": a flat colour."},{"name":"format","type":"string","required":false,"description":"Output format."},{"name":"height","type":"integer","required":false,"description":"Custom canvas height in pixels (with width)."},{"name":"margin","type":"number","required":false,"description":"Space around the photo, in percent of the canvas’s shorter side. At 0 it touches the canvas on its longer side."},{"name":"output_dir","type":"string","required":false,"description":"Folder to save results in. Default: next to each original. Originals are never overwritten."},{"name":"preset","type":"string","required":false,"description":"Canvas by name: square, instagram-square, portrait, instagram-portrait, portrait-34, story, landscape, x-post, linkedin, og, link-preview, pinterest, banner, dribbble. Ignored when width and height a…"},{"name":"quality","type":"integer","required":false,"description":"Quality, 1 to 100 (default 88). Ignored for PNG."},{"name":"shadow","type":"boolean","required":false,"description":"A soft drop shadow under the photo."},{"name":"width","type":"integer","required":false,"description":"Custom canvas width in pixels (with height)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":444},{"name":"rename_files","title":"Rename files","description":"Rename a set of files (any kind) with one pattern made of text and tokens: {name} the current name, {n} a number counting up ({n:3} for 001), {date} the file’s date as 2026-10-02, {w}x{h} the image size in pixels, {ext} the extension. The extension is always kept at the end. Starts with mode \"preview\", which only lists old → new and changes nothing; \"copy\" makes renamed copies in a new folder; \"rename\" renames in place.","inputs":[{"name":"digits","type":"integer","required":false,"description":"Digits in {n}: 0 adds zeros only as needed (01–12) so files sort in order. {n:3} in the pattern sets it there."},{"name":"files","type":"array","required":true,"description":"Files or folders (a folder means the files in it, not subfolders or hidden files), in the order to number them. ~ is your home folder."},{"name":"letters","type":"string","required":false,"description":"\"keep\": as typed; \"lower\": lower case; \"web\": lower case, dashes for spaces and only letters, numbers, dashes and dots."},{"name":"lower_ext","type":"boolean","required":false,"description":"Lower-case extensions (IMG_0001.JPG becomes …jpg)."},{"name":"mode","type":"string","required":false,"description":"\"preview\": list the new names, change nothing. \"copy\": renamed copies in output_dir (default: a new folder named renamed next to the first file). \"rename\": rename the files where they are; refused if…"},{"name":"output_dir","type":"string","required":false,"description":"For mode \"copy\": the folder for the renamed copies."},{"name":"pattern","type":"string","required":false,"description":"The new name without the extension, e.g. \"holiday-{n}\" or \"{date}-{name}\"."},{"name":"start","type":"integer","required":false,"description":"The first number, e.g. 51 to carry on from a previous batch."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":395},{"name":"make_web_image_set","title":"Make a web image set","description":"Responsive image sizes for a website in one go (WebP and JPEG by default, AVIF or PNG too), into a folder per image, with a ready <picture>/srcset HTML snippet (also saved as snippet.html). Widths larger than an image are skipped, so nothing is enlarged. [Pro tool.]","inputs":[{"name":"alt","type":"string","required":false,"description":"Alt text for the <img>. Default: made from the file name."},{"name":"files","type":"array","required":true,"description":"Image files or folders (a folder means the images in it). ~ is your home folder."},{"name":"formats","type":"array","required":false,"description":"Formats to make. The last of JPEG/PNG is the fallback <img>; WebP and AVIF become <source> lines."},{"name":"output_dir","type":"string","required":false,"description":"Where to put the folder of each image. Default: next to the original."},{"name":"quality","type":"integer","required":false,"description":"Quality, 40 to 95."},{"name":"sizes","type":"string","required":false,"description":"The sizes attribute, e.g. \"(min-width: 1024px) 50vw, 100vw\"."},{"name":"url_prefix","type":"string","required":false,"description":"The folder the files will live in on the site, used in the snippet’s paths."},{"name":"widths","type":"array","required":false,"description":"Widths in pixels. Ones wider than the image are left out (the image’s own width is added as the top size instead)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":278},{"name":"slim_svg","title":"Slim SVG files","description":"Make SVG files smaller with SVGO (editor data, comments and metadata out, paths simplified), keeping the viewBox, then render before and after to check they look the same. Saved next to the originals as name-slim.svg; a file that can’t get smaller is left as it is.","inputs":[{"name":"files","type":"array","required":true,"description":"SVG files or folders (a folder means the SVGs in it). ~ is your home folder."},{"name":"keep_ids","type":"boolean","required":false,"description":"Keep IDs (needed if CSS, scripts, sprites or animations refer to parts of the SVG)."},{"name":"keep_title","type":"boolean","required":false,"description":"Keep the <title> (screen readers announce it)."},{"name":"level","type":"string","required":false,"description":"\"safe\": removes editor data, comments and metadata, leaves shapes and paths. \"balanced\": also simplifies paths, merges groups and shortens colours. \"max\": everything, repeated until nothing more shri…"},{"name":"output_dir","type":"string","required":false,"description":"Folder to save results in. Default: next to each original. Originals are never overwritten."},{"name":"precision","type":"integer","required":false,"description":"Decimal places kept. Small icons can go to 1; detailed illustrations may need 3."},{"name":"pretty","type":"boolean","required":false,"description":"Indented output for editing by hand. Slightly larger."},{"name":"remove_size","type":"boolean","required":false,"description":"Remove width and height so the SVG scales to its container. The viewBox is always kept."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":280},{"name":"multi_crop","title":"Multi crop","description":"Crop each image to several sizes at once, keeping the interesting part (or the centre). Sizes by name (square, instagram-square, portrait, instagram-portrait, portrait-34, story, landscape, x-post, linkedin, og, link-preview, pinterest, banner, dribbble), as an aspect ratio like \"4:5\" (the largest crop of that shape, at the image’s own resolution), or as {name, width, height}. Saved next to the originals as name-<size>.ext. [Pro tool.]","inputs":[{"name":"crop","type":"string","required":false,"description":"What each crop keeps: \"attention\" the most eye-catching part (faces, colour, contrast), \"centre\" the middle, \"entropy\" the most detailed part."},{"name":"files","type":"array","required":true,"description":"Image files or folders (a folder means the images in it). ~ is your home folder."},{"name":"format","type":"string","required":false,"description":"Output format. \"original\" keeps each file’s own (HEIC, AVIF and TIFF become JPEG)."},{"name":"output_dir","type":"string","required":false,"description":"Folder to save results in. Default: next to each original. Originals are never overwritten."},{"name":"quality","type":"integer","required":false,"description":"Quality, 1 to 100 (default 88). Ignored for PNG."},{"name":"sizes","type":"array","required":false,"description":"The crops: size names, ratios like \"16:9\", or {name, width, height}. Default: square, portrait 4:5 and portrait 3:4."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":302},{"name":"grid_slide","title":"Grid & Slide","description":"Split one image into an Instagram profile grid, numbered in posting order (post tile 01 first: Instagram shows the newest post top-left, so the bottom-right tile goes first), or into carousel slides that line up seamlessly as people swipe. Presets: ig-row, ig-grid-2, ig-grid-3, ig-grid-4 (3 columns, 3:4 tiles), ig-grid-sq (3×3 square), ig-grid-45 (3×2, 4:5; the default), ig-pano-2, ig-pano-3, ig-pano-5 (4:5 carousels), ig-pano-sq, li-carousel (square), tiktok, story-pano (9:16). Any setting given overrides the preset. Saved in a new folder next to the image. [Pro tool.]","inputs":[{"name":"columns","type":"integer","required":false,"description":"Grid columns (Instagram profiles have 3)."},{"name":"file","type":"string","required":true,"description":"The image to split. ~ is your home folder."},{"name":"focus_x","type":"number","required":false,"description":"Which part to keep when the image’s shape doesn’t match: 0 left, 50 centre, 100 right."},{"name":"focus_y","type":"number","required":false,"description":"0 top, 50 centre, 100 bottom."},{"name":"format","type":"string","required":false,"description":"Output format."},{"name":"mode","type":"string","required":false,"description":"\"grid\": a profile grid of tiles. \"carousel\": slides side by side."},{"name":"output_dir","type":"string","required":false,"description":"Where to put the folder of tiles. Default: next to the image."},{"name":"preset","type":"string","required":false,"description":"A ready layout (see the description). Default ig-grid-45, or the plain grid/carousel when mode is given."},{"name":"quality","type":"integer","required":false,"description":"Quality, 1 to 100 (default 90). Ignored for PNG."},{"name":"rows","type":"integer","required":false,"description":"Grid rows."},{"name":"shape","type":"string","required":false,"description":"Each tile or slide’s shape: 1:1 square, 4:5 portrait post, 3:4 (current Instagram profile thumbnails), 9:16 story."},{"name":"slides","type":"integer","required":false,"description":"Carousel slides."},{"name":"tile_width","type":"integer","required":false,"description":"Width of each tile or slide in pixels; the height follows the shape."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":454},{"name":"make_listing_photos","title":"Make listing photos","description":"Product photos framed for each marketplace: a near-white border is trimmed, then the product is centred on the marketplace’s canvas at its usual fill. Amazon 2000×2000 (85%), eBay 1600×1600 (80%), Etsy 2000×1600 (75%), Shopify 2048×2048 (80%), Instagram Shop 1080×1350 (75%), Google Shopping 1200×1200 (80%). Works best with products shot on white; the photo’s own background is kept (removing it needs Cutout on one.design). Saved next to the originals as name-<marketplace>.jpg. [Pro tool.]","inputs":[{"name":"background","type":"string","required":false,"description":"\"white\" (pure white, what most marketplaces want for the main image) or a hex colour."},{"name":"files","type":"array","required":true,"description":"Image files or folders (a folder means the images in it). ~ is your home folder."},{"name":"fill_percent","type":"integer","required":false,"description":"How much of the frame the product fills along its limiting side, the same for every marketplace. Default: each marketplace’s own."},{"name":"marketplaces","type":"array","required":false,"description":"Marketplaces to make images for."},{"name":"output_dir","type":"string","required":false,"description":"Folder to save results in. Default: next to each original. Originals are never overwritten."},{"name":"quality","type":"integer","required":false,"description":"JPEG quality, 70 to 100."},{"name":"trim","type":"boolean","required":false,"description":"Trim the near-white border round the product first."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":300},{"name":"make_campaign_kit","title":"Make a campaign kit","description":"One creative into a matched set of sizes for social posts, stories, link previews and display ads, in one folder. Each size either fills the frame (crop keeping the interesting part) or fits the whole creative over a blurred copy of itself. Sizes: ig-post 1080×1080, ig-portrait 1080×1350, ig-portrait-34 1080×1440, story 1080×1920, x-post 1600×900, dribbble 1600×1200, link 1200×628, youtube 1280×720, li-banner 1584×396, mrec 300×250, leaderboard 728×90, skyscraper 160×600, mobile-banner 320×50. Text layouts (headline, button) are on one.design/campaign-kit. [Pro tool.]","inputs":[{"name":"file","type":"string","required":true,"description":"The photo or key visual. ~ is your home folder."},{"name":"fit","type":"string","required":false,"description":"\"cover\": fill each size, cropping to the most eye-catching part. \"fill\": the whole creative, with a blurred copy of it filling the space (like fit_fill)."},{"name":"format","type":"string","required":false,"description":"File type."},{"name":"name","type":"string","required":false,"description":"Campaign name for the files, e.g. autumn-launch. Default: the image’s name."},{"name":"output_dir","type":"string","required":false,"description":"Where to put the kit folder. Default: next to the image."},{"name":"quality","type":"integer","required":false,"description":"Quality, 1 to 100 (default 90). Ignored for PNG."},{"name":"scale","type":null,"required":false,"description":"1: exactly each size’s pixels (what ad networks want). 2: double, sharp on high-density screens (a 728×90 banner becomes 1456×180)."},{"name":"sizes","type":"array","required":false,"description":"Sizes to make (see the description)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":380},{"name":"clean_metadata","title":"Remove hidden metadata","description":"Remove hidden details from photos before sharing: GPS location, camera, dates, author, XMP edit history, IPTC captions, comments and AI labels / Content Credentials (C2PA). JPEG, PNG and WebP are cleaned losslessly (the picture itself is not re-saved); other formats (HEIC, AVIF, TIFF, GIF) are re-saved without metadata. Reports what each file was hiding. Saved as name-clean.ext next to the original.","inputs":[{"name":"files","type":"array","required":true,"description":"Image files or folders (a folder means the images in it). ~ is your home folder."},{"name":"fix_orientation","type":"boolean","required":false,"description":"Instead of keeping the rotation tag, turn the pixels upright and re-save (quality 95, not lossless). Only affects photos that have a rotation tag."},{"name":"keep_colour_profile","type":"boolean","required":false,"description":"ICC colour profiles hold no personal data. Removing one can make wide-gamut photos look dull. Default true."},{"name":"keep_rotation","type":"boolean","required":false,"description":"Phone photos often store their rotation as metadata. Keeping this one tag (re-written alone) stops them turning sideways. Default true."},{"name":"output_dir","type":"string","required":false,"description":"Folder to save results in. Default: next to each original. Originals are never overwritten."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":255},{"name":"redact_images","title":"Redact screenshots","description":"Cover names, emails, card numbers and other private details in screenshots. Give boxes in pixels (or 0–1 fractions of the width and height); the same boxes are applied to every file, for matching screenshots. \"marker\" (a hand-drawn stroke) and \"solid\" replace the pixels so nothing can be recovered; \"pixelate\" and \"blur\" look softer but short text like numbers can sometimes be guessed, so use marker or solid for card numbers and passwords. The image is re-drawn, so hidden metadata goes too. Saved as name-redacted.ext.","inputs":[{"name":"block","type":"string","required":false,"description":"Pixelate: block size."},{"name":"boxes","type":"array","required":true,"description":"Areas to cover, measured on the image as it displays (upright)."},{"name":"colour","type":"string","required":false,"description":"Marker or block colour, hex."},{"name":"files","type":"array","required":true,"description":"Image files or folders (a folder means the images in it). ~ is your home folder."},{"name":"format","type":"string","required":false,"description":"\"keep\": PNG stays PNG (crisp text), WebP stays WebP, others become JPEG."},{"name":"output_dir","type":"string","required":false,"description":"Folder to save results in. Default: next to each original. Originals are never overwritten."},{"name":"quality","type":"integer","required":false,"description":"JPEG/WebP quality."},{"name":"style","type":"string","required":false,"description":"marker (the site’s default, a hand-drawn stroke), solid block, pixelate or blur."},{"name":"units","type":"string","required":false,"description":"\"px\": boxes in pixels. \"fraction\": 0–1 of the width and height, which suits screenshots of different sizes."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":320},{"name":"pdf_toolkit","title":"PDF toolkit","description":"Work with PDFs on this computer: \"merge\" (files in order into one), \"split\" (each page, or ranges like \"1-3, 5, 7-\" each its own PDF), \"extract\" (one PDF of chosen pages), \"reorder\" (a new page order), \"rotate\" (pages by 90/180/270), \"info\" (pages, sizes, title, author, producer), \"remove_metadata\" (clear title, author, subject, keywords, creator, producer, dates and XMP), \"to_images\" (pages to PNG or JPEG; needs poppler’s pdftoppm installed). Pages are copied as they are, so text stays text. Page numbers start at 1. Saved next to the first PDF (or in output_dir), never over a file.","inputs":[{"name":"action","type":"string","required":true,"description":"What to do."},{"name":"angle","type":null,"required":false,"description":"rotate: degrees clockwise."},{"name":"dpi","type":"integer","required":false,"description":"to_images: resolution (150 suits screens; an A4 page at 150 dpi is 1240×1754 px)."},{"name":"files","type":"array","required":true,"description":"PDF files or folders (a folder means the PDFs in it, by name). For merge, in the order given. ~ is your home folder."},{"name":"image_format","type":"string","required":false,"description":"to_images: file type."},{"name":"order","type":"array","required":false,"description":"reorder: the new order as page numbers, e.g. [3, 1, 2]. Pages left out of the list are dropped; a page listed twice appears twice."},{"name":"output_dir","type":"string","required":false,"description":"Folder to save results in. Default: next to the (first) PDF."},{"name":"pages","type":"string","required":false,"description":"Pages, like \"1-3, 5, 7-\" (7- runs to the last page). extract: the pages to keep (required). split: each range becomes its own PDF (leave out to split every page). rotate and to_images: which pages (d…"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":410},{"name":"make_proof_sheet","title":"Make a proof sheet PDF","description":"A folder of images into one tidy PDF: a contact sheet (2–6 columns) or one image per page, on A4 or US Letter, with file names under the images and an optional title and date header. Images are embedded as JPEG thumbnails sized to their place on the page, so the file stays small. Saved next to the first image (or where you say) as proof-sheet.pdf or your-title.pdf. [Pro tool.]","inputs":[{"name":"captions","type":"boolean","required":false,"description":"File names (numbered) under the images."},{"name":"columns","type":"integer","required":false,"description":"Grid: images across (the site offers 2, 3 or 4; default 3)."},{"name":"date","type":"boolean","required":false,"description":"Show today’s date in the header."},{"name":"files","type":"array","required":true,"description":"Images or folders, in the order they should appear. ~ is your home folder."},{"name":"layout","type":"string","required":false,"description":"\"grid\": a contact sheet. \"single\": one image per page."},{"name":"margin","type":"number","required":false,"description":"Page margin in points (72 = 1 inch)."},{"name":"orientation","type":"string","required":false,"description":"Page orientation."},{"name":"output_path","type":"string","required":false,"description":"A .pdf path or a folder. Default: the folder of the first image."},{"name":"page","type":"string","required":false,"description":"Page size. \"fit\" (one per page only) matches each image’s shape."},{"name":"quality","type":"string","required":false,"description":"Image detail: print 300 dpi, balanced 200 dpi, email 110 dpi (smallest file)."},{"name":"title","type":"string","required":false,"description":"Optional title at the top of each page (also the file name), e.g. \"Client review: round 2\"."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":334},{"name":"check_delivery","title":"Check images against a delivery spec","description":"Check a batch of images against a delivery spec before sending it: formats, file size, exact/min/max width and height, shape (aspect ratio), transparency, colour space, DPI, embedded metadata and file naming. Start from a preset (\"web\": Website images, \"instagram\": Instagram feed, \"marketplace\": Marketplace product photos, \"appicon\": App Store icon, \"print\": Print handover (large JPEG/PNG)) or \"custom\", and override any rule. Reports pass / needs attention / fail per file and which tool fixes each problem. Changes nothing. [Pro tool.]","inputs":[{"name":"colour_space","type":"string","required":false,"description":"\"srgb\": flag CMYK, wide-gamut (Display P3, Adobe RGB) and other profiles."},{"name":"exact_height","type":"integer","required":false,"description":"Exact height in px (0 = any)."},{"name":"exact_width","type":"integer","required":false,"description":"Exact width in px (0 = any)."},{"name":"files","type":"array","required":true,"description":"Images (and SVGs) or folders. ~ is your home folder."},{"name":"formats","type":"array","required":false,"description":"Allowed formats (replaces the preset’s)."},{"name":"lowercase","type":"boolean","required":false,"description":"Names must be lowercase."},{"name":"max_height","type":"integer","required":false,"description":"Maximum height in px (0 = any)."},{"name":"max_kb","type":"integer","required":false,"description":"Largest file size in KB (0 = any)."},{"name":"max_name","type":"integer","required":false,"description":"Longest file name in characters (0 = any)."},{"name":"max_width","type":"integer","required":false,"description":"Maximum width in px (0 = any)."},{"name":"metadata","type":"string","required":false,"description":"\"none\": flag files that still carry EXIF, GPS location, XMP or IPTC."},{"name":"min_dpi","type":"integer","required":false,"description":"Minimum DPI written in the file (0 = any). DPI is only a label; pixel size is what really counts for print."},{"name":"min_height","type":"integer","required":false,"description":"Minimum height in px (0 = any)."},{"name":"min_width","type":"integer","required":false,"description":"Minimum width in px (0 = any)."},{"name":"name_pattern","type":"string","required":false,"description":"A regular expression every file name must match, e.g. \"^sku-\\d{4}-(front|back)\\.jpg$\"."},{"name":"no_spaces","type":"boolean","required":false,"description":"Names without spaces or special characters."},{"name":"preset","type":"string","required":false,"description":"Starting rules. web: JPEG/PNG/WebP/SVG/AVIF under 500 KB, at most 2560 px, lowercase names without spaces. instagram: JPEG/PNG, at least 1080 wide, 1:1, 4:5, 3:4 or 1.91:1, under 8 MB. marketplace: J…"},{"name":"ratio_tolerance","type":"number","required":false,"description":"How far off a shape may be, in percent (the site allows 1%)."},{"name":"ratios","type":"array","required":false,"description":"Allowed shapes, like [\"1:1\", \"4:5\", \"16:9\"]. Empty list = any shape."},{"name":"transparency","type":"string","required":false,"description":"Transparent areas: any, required (e.g. logos) or forbidden (e.g. app icons, marketplace photos)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":675},{"name":"make_cards","title":"Make cards from spreadsheet rows","description":"Spreadsheet rows into branded social cards, one PNG (or JPEG) per row, using the site’s templates: \"poster\" (big type on your colour, photo optional), \"editorial\" (full-bleed photo, white type), \"split\" (photo plus a colour panel) or \"product\" (product on a light panel with price and badge). Columns feed the tag, headline, subhead, button (cta) and price, and an image column names each row’s photo file; they are matched by header name unless you map them. Saved in a new folder under ~/Downloads/one-design (or output_dir). [Pro tool.]","inputs":[{"name":"accent","type":"string","required":false,"description":"Accent and button colour, hex."},{"name":"background","type":"string","required":false,"description":"Background colour, hex."},{"name":"body_font","type":"string","required":false,"description":"Body font."},{"name":"columns","type":"object","required":false,"description":"Which column feeds which part. Unmapped parts are guessed from header names (title, price, photo…)."},{"name":"csv","type":"string","required":false,"description":"Path to a .csv or .tsv file with a header row, or the CSV text itself."},{"name":"format","type":"string","required":false,"description":"File type."},{"name":"heading_font","type":"string","required":false,"description":"Heading font: serif (Instrument Serif), sans (Inter) or mono (JetBrains Mono); this computer’s nearest match if not installed."},{"name":"images_dir","type":"string","required":false,"description":"Folder where the image column’s files are. Default: the CSV’s folder (or your home folder for inline rows)."},{"name":"logo","type":"string","required":false,"description":"Optional logo image file (PNG or SVG with transparency works best)."},{"name":"output_dir","type":"string","required":false,"description":"Where the new cards folder goes. Default: ~/Downloads/one-design."},{"name":"panel","type":"string","required":false,"description":"Panel colour (split and product), hex."},{"name":"quality","type":"integer","required":false,"description":"JPEG quality."},{"name":"rows","type":"array","required":false,"description":"Rows given directly, e.g. [{\"headline\":\"Sunset mug\",\"price\":\"£18\",\"image\":\"mug.jpg\"}]."},{"name":"size","type":"string","required":false,"description":"Card size: ig-post 1080×1080 (Square), ig-portrait 1080×1350 (Portrait 4:5), ig-portrait-34 1080×1440 (Portrait 3:4), story 1080×1920 (Story / Reel 9:16), x-post 1600×900 (Landscape 16:9), dribbble 1…"},{"name":"template","type":"string","required":false,"description":"Card design. editorial, split and product need a photo per row."},{"name":"text_colour","type":"string","required":false,"description":"Text colour, hex."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":566},{"name":"watermark_images","title":"Watermark images","description":"Stamp a text or logo mark on a batch of images, like the site’s Watermark: a tiled diagonal pattern (the default) or a single mark in one of nine positions. Text can be anything, e.g. “© Your Studio 2026”, “Draft”, “Confidential” or “Proof”. Size is a share of each image’s shorter side. Saved next to the originals as name-marked.ext (or into output_dir); originals are never changed.","inputs":[{"name":"angle","type":"number","required":false,"description":"Tiled pattern rotation in degrees; negative rises to the right."},{"name":"colour","type":"string","required":false,"description":"Text colour, hex like #ffffff."},{"name":"files","type":"array","required":true,"description":"Image files or folders (a folder means the images in it). ~ is your home folder."},{"name":"font","type":"string","required":false,"description":"Typeface for a text mark: serif (Instrument Serif), sans (Inter) or mono (JetBrains Mono), falling back to the computer’s own fonts."},{"name":"format","type":"string","required":false,"description":"Output format. \"original\" keeps each file’s own (HEIC, AVIF and TIFF become JPEG, GIF becomes PNG)."},{"name":"logo","type":"string","required":false,"description":"A logo file to use as the mark instead of text (a transparent PNG or an SVG works best)."},{"name":"margin","type":"number","required":false,"description":"Gap from the edge for a single mark, as a % of the shorter side."},{"name":"opacity","type":"number","required":false,"description":"Opacity in % (5 to 100)."},{"name":"output_dir","type":"string","required":false,"description":"Folder to save results in. Default: next to each original. Originals are never overwritten."},{"name":"position","type":"string","required":false,"description":"Where the mark goes: one of the nine positions for a single mark, or \"tiled\" for a repeated diagonal pattern over the whole image."},{"name":"quality","type":"integer","required":false,"description":"Quality for JPEG and WebP (30 to 100)."},{"name":"shadow","type":"boolean","required":false,"description":"A soft shadow under the mark, so it reads on light and dark areas."},{"name":"size","type":"number","required":false,"description":"Mark size as a % of the image’s shorter side (2 to 40). For a logo this sets its longer side (×1.6)."},{"name":"spacing","type":"number","required":false,"description":"Gap between tiled marks, as a % of the default gap."},{"name":"text","type":"string","required":false,"description":"The mark’s text, e.g. “© Your Studio 2026”. Default “© One Design”. Ignored when a logo is given."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":490},{"name":"extract_palette","title":"Extract a colour palette","description":"The main colours in an image, like the site’s Palette: HEX, RGB, HSL, how much of the picture each covers, and contrast against white and black, plus CSS variables. Transparent areas are ignored; colours are measured from a downscaled copy, so tiny details may not register. Also saves a swatch card PNG (name-palette.png) in ~/Downloads/one-design.","inputs":[{"name":"count","type":"integer","required":false,"description":"How many colours to find (2 to 12). Near-identical ones are merged, so you may get fewer."},{"name":"files","type":"array","required":true,"description":"Image files or folders (a folder means the images in it). ~ is your home folder."},{"name":"order","type":"string","required":false,"description":"\"dominance\": most used first. \"light\": dark to light."},{"name":"output_dir","type":"string","required":false,"description":"Folder to save into. Default: ~/Downloads/one-design."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":184},{"name":"make_icon_pack","title":"Make an icon pack","description":"Favicons, app icons and a web manifest from one logo, like the site’s Icon Pack: favicon.ico (16, 32 and 48 px), favicon-16x16.png, favicon-32x32.png, favicon.svg (from an SVG logo), apple-touch-icon.png (180 px), icon-192.png, icon-512.png, icon-512-maskable.png (logo kept inside Android’s safe zone), site.webmanifest and snippet.html with the <head> tags. Saved in a new folder (icon-pack) in ~/Downloads/one-design. Best from an SVG or a PNG of 512 px or more.","inputs":[{"name":"adaptive","type":"boolean","required":false,"description":"SVG logos only: favicon.svg changes colour to stay visible on light and dark browser tabs."},{"name":"app_name","type":"string","required":false,"description":"Name for the web manifest (“My site” if left empty)."},{"name":"background","type":"string","required":false,"description":"App icon background, hex like #0b0b0b."},{"name":"custom_colour","type":"string","required":false,"description":"Logo colour when logo_colour is \"custom\", hex like #c9f26b."},{"name":"dark_colour","type":"string","required":false,"description":"Logo colour on dark tabs (adaptive), hex like #ffffff."},{"name":"favicon_background","type":"string","required":false,"description":"Behind the tab favicons: \"fill\" a rounded square in the icon background, \"none\", or \"auto\" (a square only for a light logo, which would vanish on light tabs)."},{"name":"light_colour","type":"string","required":false,"description":"Logo colour on light tabs (adaptive), hex like #111111."},{"name":"logo","type":"string","required":true,"description":"The logo file: SVG or PNG (512 px or larger), JPEG or WebP."},{"name":"logo_colour","type":"string","required":false,"description":"The logo’s colour in every icon: as it is, or recoloured."},{"name":"maskable","type":"boolean","required":false,"description":"Include icon-512-maskable.png: Android crops icons to circles or squircles, this keeps the logo inside the safe zone."},{"name":"output_dir","type":"string","required":false,"description":"Folder to save into. Default: ~/Downloads/one-design."},{"name":"padding","type":"number","required":false,"description":"Space around the logo on the app icons, as a % of the icon."},{"name":"short_name","type":"string","required":false,"description":"Short name under a home screen icon. Default: the name."},{"name":"theme_color","type":"string","required":false,"description":"Browser bar colour (theme-color), hex like #0b0b0b."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":482},{"name":"make_logo_package","title":"Make a logo package","description":"One master logo into a delivery folder, like the site’s Logo Package: a folder per variant (original colours, black, white, black on white, white on black, plus any brand colours you add with their combinations), each with png/ at the widths you choose (transparent unless the variant has a background), jpg/ on a solid background and svg/ when the master is an SVG, and a README.txt of what’s where. Saved as name-logo in ~/Downloads/one-design. Colour variants work best on flat logos. [Pro tool.]","inputs":[{"name":"black","type":"boolean","required":false,"description":"Include an all-black version (transparent)."},{"name":"black_on_white","type":"boolean","required":false,"description":"Include black on a white background."},{"name":"colours","type":"array","required":false,"description":"Extra brand colours (hex); each gets its own one-colour version."},{"name":"combinations","type":"boolean","required":false,"description":"For each extra colour also: on white, on black, white on it and black on it."},{"name":"jpg","type":"boolean","required":false,"description":"Also export JPGs on a solid background: white behind dark variants, black behind the white one."},{"name":"logo","type":"string","required":true,"description":"The master logo: SVG or a transparent PNG (JPEG and WebP work too)."},{"name":"name","type":"string","required":false,"description":"Name used in folder and file names. Default: from the file name."},{"name":"original","type":"boolean","required":false,"description":"Include the logo in its own colours."},{"name":"output_dir","type":"string","required":false,"description":"Folder to save into. Default: ~/Downloads/one-design."},{"name":"padding","type":"number","required":false,"description":"Space around the logo on every side, as a % of its longest side."},{"name":"square","type":"boolean","required":false,"description":"Centre the logo on a square canvas (avatars, profile images)."},{"name":"svg","type":"boolean","required":false,"description":"Include SVGs (only when the master is an SVG). Colour variants use an SVG filter, which some older editors ignore."},{"name":"white","type":"boolean","required":false,"description":"Include an all-white version (transparent)."},{"name":"white_on_black","type":"boolean","required":false,"description":"Include white on a black background."},{"name":"widths","type":"array","required":false,"description":"PNG and JPG widths in px: 256 (avatars, icons), 512 (web), 1024 (slides, docs), 2048 (print, retina), 4096 (large print)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":449},{"name":"frame_screenshots","title":"Frame screenshots","description":"Screenshots dressed to share, like the site’s Screen Frame: inside a drawn browser window (title bar with three dots and an address), phone, tablet or laptop, or as a plain rounded card, on a gradient, colour, blurred copy, image or transparent background, at a social canvas size. Devices keep their real screen shape; screenshots are cropped to fill them from the top. Saved next to the originals as name-framed.png (or .jpg). The frames are simple drawings, not any maker’s artwork. [Pro tool.]","inputs":[{"name":"background","type":"string","required":false,"description":"Behind the frame: a gradient, one colour, a soft blurred copy of the screenshot, an image, or nothing (transparent PNG)."},{"name":"background_image","type":"string","required":false,"description":"Image file for background \"image\" (cropped to fill)."},{"name":"canvas","type":"string","required":false,"description":"Canvas: square 2160×2160, portrait 2160×2700 (4:5), portrait-34 2160×2880, story 2160×3840 (9:16), landscape 3840×2160, og 2400×1260 (link preview), dribbble 1600×1200, custom (width × height), or au…"},{"name":"colour","type":"string","required":false,"description":"Background colour (background \"color\"), hex like #c9f26b."},{"name":"files","type":"array","required":true,"description":"Image files or folders (a folder means the images in it). ~ is your home folder."},{"name":"format","type":"string","required":false,"description":"PNG keeps text in the screenshot crisp; JPEG makes smaller files. A transparent background is always PNG."},{"name":"frame","type":"string","required":false,"description":"The frame. \"plain\" is the screenshot with rounded corners and a shadow, no device."},{"name":"gradient","type":"string","required":false,"description":"Built-in gradient: lime, dusk, graphite, paper, sea, peach."},{"name":"gradient_colours","type":"array","required":false,"description":"Your own two-colour gradient (hex), top left to bottom right. Overrides \"gradient\"."},{"name":"height","type":"integer","required":false,"description":"Canvas height for canvas \"custom\"."},{"name":"notch","type":"boolean","required":false,"description":"Phone: the camera pill at the top of the screen."},{"name":"orientation","type":"string","required":false,"description":"Phone and tablet: upright, on their side, or turned to match each screenshot. A laptop is always landscape."},{"name":"output_dir","type":"string","required":false,"description":"Folder to save results in. Default: next to each original. Originals are never overwritten."},{"name":"padding","type":"number","required":false,"description":"Space around the device, as a % of the canvas’s shorter side."},{"name":"shadow","type":"boolean","required":false,"description":"A soft shadow under the device."},{"name":"style","type":"string","required":false,"description":"\"textured\": surfaces lit from the top left. \"flat\": solid colours, no sheen."},{"name":"tone","type":"string","required":false,"description":"Frame colour: \"dark\", \"light\", or any hex colour for the device."},{"name":"url","type":"string","required":false,"description":"Text for the browser’s address bar, e.g. example.com. Empty leaves the bar blank."},{"name":"width","type":"integer","required":false,"description":"Canvas width for canvas \"custom\"."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":621},{"name":"make_store_screenshots","title":"Make App Store and Google Play screenshots","description":"Store screenshots with a title and your app’s screenshot in a drawn device, like the site’s Store Shots, at the sizes the stores ask for: iOS iPhone 6.9″ 1290×2796 (Apple scales it for every smaller iPhone), iPad 13″ 2064×2752; Android phone 1080×1920, tablet 1440×2560. Up to 10 per device for the App Store, 8 for Google Play. Templates: above (title at the top, device rising from the bottom), below (device above, title underneath), plain (rounded card, no device), tilted, bigtitle (large headline on the left), pair (two devices per slide, two screenshots each), iso (device turned in perspective), full (screenshot fills the image, title over a fade). JPEG (stores reject images with transparency), into a new folder in ~/Downloads/one-design. [Pro tool.]","inputs":[{"name":"background","type":"string","required":false,"description":"Background colour, hex like #16161a."},{"name":"background_image","type":"string","required":false,"description":"An image to fill the background instead of the colour."},{"name":"device","type":"string","required":false,"description":"iPhone or iPad (iOS), phone or tablet (Android)."},{"name":"device_colour","type":"string","required":false,"description":"Device colour: \"dark\", \"light\", or any hex colour."},{"name":"font","type":"string","required":false,"description":"Title font: sans (Inter) or serif (Instrument Serif); subtitles are sans."},{"name":"output_dir","type":"string","required":false,"description":"Folder to save into. Default: ~/Downloads/one-design."},{"name":"platform","type":"string","required":false,"description":"\"ios\" for the App Store, \"android\" for Google Play."},{"name":"screenshots","type":"array","required":true,"description":"Your app’s screenshots in the order they should appear (files or a folder). Each fills the device’s screen, cropped from the top."},{"name":"slides","type":"array","required":false,"description":"One title (and optional subtitle) per screenshot, in order. Missing ones get placeholder titles, so give one for each."},{"name":"template","type":"string","required":false,"description":"Layout: above, below, plain, tilted, bigtitle, pair, iso or full."},{"name":"text_colour","type":"string","required":false,"description":"Text colour, hex like #ffffff."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":453},{"name":"make_bento","title":"Make a bento grid","description":"Photos, numbers and colour as rounded tiles in one image, like the site’s Bento. Templates and their tiles in reading order (left to right, top to bottom): mosaic-5 (photo (big), photo, text \"+38%\", photo, photo (big)); hero-2 (photo (big), photo, text \"10k\"); hero-left-4 (photo (big), photo, text \"4.9\", colour, photo); three-cols (photo, photo, photo); big-strip (photo (big), photo, text \"2026\", photo); six-even (photo, photo, photo, photo, photo, photo); stat-board (text \"Q3 in numbers\", photo, text \"2.4M\", text \"38%\", text \"120\"); feature-3 (photo (big), text \"10k\", text \"98%\", text \"24/7\"); case-cover (text \"Case study\", photo (big), colour, photo). Give photos to fill the photo tiles in order, and optionally tiles to replace each slot in that same order (a photo, a text tile, or a plain colour); slots you don't replace keep the template’s own. Saved as bento-<template>.png in ~/Downloads/one-design.","inputs":[{"name":"background","type":"string","required":false,"description":"Background colour, hex like #f4f2ee."},{"name":"canvas","type":"string","required":false,"description":"square 1080×1080, portrait 1080×1350, story 1080×1920, landscape 1920×1080, x 1600×900 (X / LinkedIn post), slide 3840×2160, or custom."},{"name":"font","type":"string","required":false,"description":"Font for the text tiles."},{"name":"format","type":"string","required":false,"description":null},{"name":"gap","type":"number","required":false,"description":"Space between tiles in px."},{"name":"height","type":"integer","required":false,"description":"Height for canvas \"custom\"."},{"name":"output_dir","type":"string","required":false,"description":"Folder to save into. Default: ~/Downloads/one-design."},{"name":"padding","type":"number","required":false,"description":"Space around the grid in px."},{"name":"photos","type":"array","required":false,"description":"Photos for the photo tiles, in order (files or a folder)."},{"name":"quality","type":"integer","required":false,"description":"Quality for JPEG and WebP."},{"name":"radius","type":"number","required":false,"description":"Tile corner radius in px."},{"name":"template","type":"string","required":false,"description":"The grid template (see the description for its tiles)."},{"name":"text_colour","type":"string","required":false,"description":"Text colour for every text tile, hex. Default: each tile’s own."},{"name":"tiles","type":"array","required":false,"description":"Replaces the template’s tiles in reading order: the first entry is the first tile, and so on."},{"name":"width","type":"integer","required":false,"description":"Width for canvas \"custom\"."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":546},{"name":"make_stamps","title":"Make stamps","description":"Turn images into stamps, like the site’s Stamp Maker: \"postage\" (the picture on paper with perforated edges, a value like “1st” or “£1.50” and a caption), \"rubber\" (pressed in one ink with a double border, worn edges and a caption) or \"seal\" (round, inked, with your text around the ring). Rubber stamps and seals print a photo’s tones as an ink dot pattern for a dark or light surface; logos print by their shape. Transparent PNGs up to 1,400 px, saved next to the originals as name-<style>-stamp.png.","inputs":[{"name":"border","type":"boolean","required":false,"description":"Postage: a paper margin around the picture with the caption below it. Off, the picture runs to the perforated edge."},{"name":"caption","type":"string","required":false,"description":"Postage and rubber: the caption. Seal: the text around the ring."},{"name":"files","type":"array","required":true,"description":"Image files or folders (a folder means the images in it). ~ is your home folder."},{"name":"fill_surface","type":"boolean","required":false,"description":"Rubber and seal: put the dark or light surface colour in the file instead of leaving it transparent."},{"name":"ink","type":"string","required":false,"description":"Rubber and seal ink colour, hex like #c23b2a."},{"name":"ink_amount","type":"number","required":false,"description":"Rubber and seal: how dark a photo prints, 10 to 80%."},{"name":"output_dir","type":"string","required":false,"description":"Folder to save results in. Default: next to each original. Originals are never overwritten."},{"name":"paper","type":"string","required":false,"description":"Postage paper colour, hex like #f4f1ea."},{"name":"shape","type":"string","required":false,"description":"Postage and rubber: keep the picture’s proportions, or make the stamp 4:5 portrait or 5:4 landscape (photos cropped, logos fitted whole)."},{"name":"style","type":"string","required":false,"description":"postage, rubber, or seal (round)."},{"name":"surface","type":"string","required":false,"description":"Rubber and seal: the surface it’s printed on. Dark prints a photo’s light parts, light prints its dark parts."},{"name":"tilt","type":"boolean","required":false,"description":"A few degrees off straight, as if stamped by hand."},{"name":"tones","type":"string","required":false,"description":"Rubber and seal: natural reads like the photo on that surface; negative inverts it."},{"name":"value","type":"string","required":false,"description":"Postage: the value in the corner, e.g. “1st” or “£1.50”."},{"name":"wear","type":"number","required":false,"description":"Rubber and seal: gaps where the ink didn’t take, 0 (clean) to 80%."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":521},{"name":"make_stat_shot","title":"Make a milestone image (Stat Shot)","description":"A milestone as a shareable image, like the site’s Stat Shot: a big number or short text (e.g. “10,000”), a label (“followers on X”), an optional tag, message, name, handle, date and profile photo. Layouts: big (the number as large as it fits), centre, profile (a card with your photo), chart (a line climbing to the top right), badge (the number in a ring), headline (the label as a large headline: a new job, a launch), board (each character on a flip tile). Backgrounds: plain, gradient, glow, grid, dots, rays, waves, confetti, or image. Sizes: square 1080×1080, portrait 1080×1350, portrait-34 1080×1440, story 1080×1920, landscape 1600×900. PNGs in ~/Downloads/one-design. On the Free plan each image carries a small “Made with one.design” credit in the bottom right corner, as on the site; Pro has none.","inputs":[{"name":"accent","type":"string","required":false,"description":"Accent colour (tag, label, chart, ring), hex like #c9f26b."},{"name":"background","type":"string","required":false,"description":"Background colour, hex like #0f0f10."},{"name":"background_design","type":"string","required":false,"description":"plain, gradient, glow, grid, dots, rays, waves, confetti, or image (needs background_image)."},{"name":"background_image","type":"string","required":false,"description":"An image for background_design \"image\"."},{"name":"date","type":"string","required":false,"description":"An optional date, e.g. “September 2026”."},{"name":"dim","type":"number","required":false,"description":"How much of the background colour lies over your image (0 to 80%), so the words stay readable."},{"name":"font","type":"string","required":false,"description":"Font for the number and headline: sans (Inter), serif (Instrument Serif) or mono (JetBrains Mono)."},{"name":"handle","type":"string","required":false,"description":"Your handle, e.g. @you (optional)."},{"name":"kicker","type":"string","required":false,"description":"A small tag above it (empty for none)."},{"name":"label","type":"string","required":false,"description":"What it counts, e.g. “followers on X”, or for headline “Designer at Acme”."},{"name":"layout","type":"string","required":false,"description":"big, centre, profile, chart, badge, headline or board."},{"name":"message","type":"string","required":false,"description":"An optional short message, e.g. “Thank you for being here.”"},{"name":"name","type":"string","required":false,"description":"Your name (optional)."},{"name":"output_dir","type":"string","required":false,"description":"Folder to save into. Default: ~/Downloads/one-design."},{"name":"photo","type":"string","required":false,"description":"A profile photo (optional); without one, the profile layout shows your initials."},{"name":"sizes","type":"array","required":false,"description":"Which sizes to make."},{"name":"text_colour","type":"string","required":false,"description":"Text colour, hex like #f4f3ee."},{"name":"value","type":"string","required":false,"description":"The number or big text, e.g. “10,000”, “10K” or “New role”."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":613},{"name":"plan_and_pricing","title":"Plans and pricing","description":"The current plan, what Free and Pro include (tools, batch sizes, QR codes, Brand Libraries) and the price. Use it when someone asks what’s free, hits a limit, or asks about upgrading.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":53},{"name":"buy_pro","title":"Buy One Design Pro","description":"Starts checkout for One Design Pro (Lifetime, paid once) and opens it in the browser. Only when the person asks to buy or upgrade. If they are signed in (sign_in), the purchase goes on that account; if not, Stripe asks for an email and the account is made or found from it. Payment happens on Stripe’s page, never here.","inputs":[{"name":"open_in_browser","type":"boolean","required":false,"description":"Open the checkout page in the default browser. Off: just return the link."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":105},{"name":"sign_in","title":"Sign in to One Design","description":"Sends a 6-digit sign-in code to an email address, to unlock Pro here for someone who bought it. Then call verify_sign_in with the code. Accounts are optional; Free works without one.","inputs":[{"name":"email","type":"string","required":true,"description":"The email used for one.design or at checkout."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":65},{"name":"verify_sign_in","title":"Finish signing in","description":"Finishes signing in with the code from the email, then checks the account’s plan. The session is saved on this computer (~/.config/one-design).","inputs":[{"name":"code","type":"string","required":true,"description":"The code from the email."},{"name":"email","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":60},{"name":"sign_out","title":"Sign out","description":"Forgets the saved sign-in on this computer. Back to Free here.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":23},{"name":"manage_billing","title":"Manage billing","description":"Opens Stripe’s billing page for the signed-in account: receipts, invoices, card, or cancelling a subscription.","inputs":[{"name":"open_in_browser","type":"boolean","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":40},{"name":"brand_library","title":"Your Brand Libraries","description":"Reads the Brand Libraries synced to the signed-in one.design account: colours (name and HEX), fonts, logos. Use the colours in other tools (QR codes, watermarks, store shots, bento). save_logos writes the logos to a folder so other tools can use them.","inputs":[{"name":"library","type":"string","required":false,"description":"A library name. Default: all of them."},{"name":"output_dir","type":"string","required":false,"description":"Where to save them. Default: ~/Downloads/one-design."},{"name":"save_logos","type":"boolean","required":false,"description":"Save the logos (and fonts) as files."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":120},{"name":"list_tools","title":"All One Design tools","description":"Every tool on one.design: what it does, whether it’s Free or Pro, and which MCP tool does it here (or that it runs on the site).","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":41},{"name":"open_in_one_design","title":"Open a tool on one.design","description":"Opens a tool on one.design in the browser. For the tools that run an AI model on the device and so only work on the site: Cutout (background removal), Blur Faces, Magic Eraser, Brand Guidelines. Works for any tool, and for the pricing, account and Brand Library pages.","inputs":[{"name":"open_in_browser","type":"boolean","required":false,"description":null},{"name":"tool","type":"string","required":true,"description":"A tool id or name (e.g. cutout, \"blur faces\", brand-guidelines), or pricing, account, brand."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":113}],"toolsTruncatedAtCapture":false,"diagnostics":{"capturedAt":"2026-11-05T09:18:25.000Z","track":"package","endpoint":null,"declaredUrl":null,"truncated":false,"tls":null,"dnssec":null,"auth":null,"httpsRedirect":null,"transports":[],"provenance":{"outcome":"none","label":"No attestation","reason":null,"reasonLabel":null,"discovery":null,"discoveryLabel":null,"sourceRepo":null,"attestationSkipped":null,"attestationSkippedLabel":null},"installScripts":[],"installScriptsTotal":null,"vulnerabilities":[],"vulnerabilitiesTotal":null,"dependencies":{"nodes":149,"partial":false,"deprecated":null,"stale":35,"noRepo":null}},"mismatches":[],"changelog":{"trackingSince":"2026-10-26","recent":[{"id":"chg_01a1ab00-98f0-7e4f-8d52-cbb0d83c6987","kind":"score.total_changed","summary":"Trust score (71 → 72)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-11-05","url":"https://verifymcp.io/servers/axworks1-one-design/one-design-mcp#chg-chg_01a1ab00-98f0-7e4f-8d52-cbb0d83c6987"},{"id":"chg_01a1a0ac-06fa-7544-a1de-3cb34907e319","kind":"score.total_changed","summary":"Trust score (70 → 71)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-11-03","url":"https://verifymcp.io/servers/axworks1-one-design/one-design-mcp#chg-chg_01a1a0ac-06fa-7544-a1de-3cb34907e319"},{"id":"chg_01a1965e-14b4-7900-b87f-d25f7ae790e3","kind":"score.total_changed","summary":"Trust score (69 → 70)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/axworks1-one-design/one-design-mcp#chg-chg_01a1965e-14b4-7900-b87f-d25f7ae790e3"},{"id":"chg_01a18c13-1912-7b0a-ae08-304cfc4759f3","kind":"score.total_changed","summary":"Trust score (68 → 69)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-30","url":"https://verifymcp.io/servers/axworks1-one-design/one-design-mcp#chg-chg_01a18c13-1912-7b0a-ae08-304cfc4759f3"},{"id":"chg_01a181c6-7bfb-702c-a343-284b32adbc29","kind":"score.total_changed","summary":"Trust score (67 → 68)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-28","url":"https://verifymcp.io/servers/axworks1-one-design/one-design-mcp#chg-chg_01a181c6-7bfb-702c-a343-284b32adbc29"},{"id":"chg_01a17614-01fb-71a3-892c-95b6ee4f9fb9","kind":"score.first_scored","summary":"First indexed and scored","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-26","url":"https://verifymcp.io/servers/axworks1-one-design/one-design-mcp#chg-chg_01a17614-01fb-71a3-892c-95b6ee4f9fb9"},{"id":"chg_01a175f5-0b1a-79c9-a5ba-a51bcc0e5e4c","kind":"score.first_scored","summary":"First indexed and scored","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-26","url":"https://verifymcp.io/servers/axworks1-one-design/one-design-mcp#chg-chg_01a175f5-0b1a-79c9-a5ba-a51bcc0e5e4c"}],"truncated":false,"feedUrl":"https://verifymcp.io/servers/axworks1-one-design/one-design-mcp/changelog.json"},"links":{"html":"https://verifymcp.io/servers/axworks1-one-design/one-design-mcp","markdown":"https://verifymcp.io/servers/axworks1-one-design/one-design-mcp.md","changelogJson":"https://verifymcp.io/servers/axworks1-one-design/one-design-mcp/changelog.json","changelogRss":"https://verifymcp.io/servers/axworks1-one-design/one-design-mcp.xml","external":[{"label":"npm package","href":"https://www.npmjs.com/package/one-design-mcp"},{"label":"Socket report","href":"https://socket.dev/npm/package/one-design-mcp"},{"label":"Repository","href":"https://github.com/axworks1/one-design-mcp"},{"label":"Website","href":"https://one.design/mcp"}]}}