# Stylelock > Lock one style reference, then generate matching brand assets (app icons, favicons, og-images, illustrations) via a maker dashboard and MCP server. ## Product Stylelock is for makers who need a coherent brand asset system — not one-off images. Explore style candidates from a brief, lock one, plan a pack, generate selected assets (metered with credits), edit/vectorize for free, and export a repo-ready zip. ## Getting started 1. Sign up in the maker app. 2. Create a project and call explore_style (first explore free per account). 3. lock_style on the chosen candidate; optionally suggest_palette / lock_palette. 4. plan_asset_pack, then generate_assets for the subset you select. 5. export_pack when ready. ## For agents - Connector: https://app.stylelock.dev/api/mcp (HTTP MCP) - No key: Claude Desktop, claude.ai and ChatGPT add it as a custom connector; the user signs in and presses Allow. - With a key: Claude Code, editors, scripts and CI send `Authorization: Bearer sl_…` (key from account menu → API Keys in the app). - First call: list_projects proves the connection. - Guide: https://stylelock.dev/api.html - Project file: .stylelock/stylelock.json (ids and what was locked, never a key) ## MCP tools (overview) - explore_style / lock_style / suggest_palette / lock_palette - plan_asset_pack / generate_assets / edit_asset / vectorize_asset / export_pack - list_styles / create_project / list_projects / list_assets / get_asset / project_setup / review_style / lock_visual_system / export_tokens - compose_store_screenshots (free): the app's own screenshots framed as an App Store set Metered tools return the exact charge. Idempotency keys prevent double-charge on retries. ## What's new for agents - 1.51.0 (2026-10-11): compose_store_screenshots draws Vietnamese captions and accented Latin letters in any language in the locked fonts; a locked font without them gives way, for that role across the whole set, to one face that draws them, and the answer says so. With language "vi" a headline is counted by characters (up to 40), not words. - 1.50.1 (2026-10-10): suggest_palette reads style words in a brief as limits after proposing: muted or never-neon colours stay soft, a warm aged-paper ground is clearly off-white, and "three directions on a light ground" means three light ones. A framework's default swatch is never offered as proposed — it is moved and the answer says so. A direction's why names only colours it carries. Reference apps come from the description and the references field, never from feedback, and a colour word beside a hex is not an app. Still free. - 1.50.0 (2026-10-09): preview_palette shows a dark app on a light ground legibly, so a light direction can be judged on the real screens; currentTokens takes the exported token file role for role, a plain "name #hex;" list or CSS custom properties, and a refused input names the formats. review_style reads a colour file carrying each fill's text shade as fills and text, so the exported file reviews clean. suggest_palette with reference apps and their grounds offers light and dark directions and says how each ground compares. lock_visual_system with suggest: true proposes fonts for the locked palette and locks nothing. Still free. - 1.49.1 (2026-10-09): a brand fill is checked against the page, card and dialog it sits on, as a sticker is against its slide: a fill in nearly the same colour as its ground is moved to the nearest shade that separates at 3:1, the move is said, and every fill's ratio on its grounds is listed. A suggest_palette direction never offers a primary or secondary that melts into its ground. lock_palette refuses a primary that melts into its background, naming the shade to lock instead. userFeedback that rejects the current look opens new directions on its own. A line naming the app icon, favicon or social image is what that mark shows; the locked look is how it is drawn, and a named app icon also stands in for a favicon or social image that names nothing. With no mark named, the plan says so and asks for one. Still free. - 1.49.0 (2026-10-09): compose_store_screenshots measures every sticker against the ground it stands on, as it measures text. A sticker whose outline would melt into its ground (a mascot in the brand colour on a hero slide, say) is never composed silently: that slide or creative moves to the page ground when its text reads there too, and the answer says so; otherwise the set is refused, naming the sticker, the ground and what to change. contrast lists each sticker's check beside the text checks. Still free. - 1.48.0 (2026-10-09): compose_store_screenshots makes App Store creative assets for iOS and iPadOS 27: creative "search-3x2" (search results, 3840×2560), "header-21x9" (product page header, 3840×1646) or "universal-16x9" (5244×2950, for both) composes one landscape picture, the headline beside the screenshot's phone and/or one sticker, inside the centre safe area, in the locked palette and type, contrast measured as for a set; still images only. sizes takes iPhone Duo's outer (1398x2034) and inner (2007x2853) displays. Every file is now opaque, with no alpha, as App Store Connect asks. A headline or subline naming a price, a web address or © is refused before anything is composed, saying what to write instead; text inside screenshots is not read, and the answer says so (copyCheck). - 1.47.0 (2026-10-09): every app icon, favicon and brand mark now carries advice beside its verdict — observations on the traced mark from a logo-design checklist: a straight edge a degree or two off a clean angle, a detail that disappears at favicon size, a mark sitting small in its canvas, more colours than a mark needs. Advice is only advice: the picture check decides exactly as before, and each asset records which advisors looked at it and when. generate_assets, edit_asset, vectorize_asset and get_asset answer it as advice { findings, runs }. - 1.46.0 (2026-10-08): a project belongs to a workspace, not to one person, so a team or a family can work on the same project. Your own work stays in your personal workspace. list_workspaces shows the workspaces you belong to, request_access asks to join another, transfer_project hands a project to another workspace and accept_transfer takes one handed to you. Every tool that works on a project takes workspaceId when the project name exists in more than one of your workspaces; list_projects and create_project take it to work in a team workspace instead of your own. A viewer can read, a member can explore, generate and edit, an admin can replace a lock and manage members. Credits are one balance per workspace; a purchase tops up the workspace it was bought for; an admin can cap what each member spends in a month, and a call over the cap is refused with nothing charged. The first free explore stays with each person. project_setup writes the workspace into the project file. - 1.45.0 (2026-10-07): new preview_palette shows each suggest_palette direction on the app's own screens before locking: send the screenshots once by their upload links, pass the directions, and get per direction a light and a dark PNG of those screens recoloured in that direction beside the screens as they are. Flat UI areas in one of the app's current colours move; photos, the viewfinder and anything with continuous tone stay. With currentTokens the current colours are named exactly; without, they are guessed and the answer says so. suggest_palette reasons now describe a colour by its measured hue. Free. - 1.44.1 (2026-10-07): compose_store_screenshots chips are drawn half again as large as on the screen. A sticker on a cut moves along it toward free ground before it is made smaller to stay off screen text (beside a hero it keeps its size); a sticker on a hero slide stands large and centred under the claim. Free. - 1.44.0 (2026-10-07): compose_store_screenshots takes a template per slide — hero (the claim alone, large, on the brand colour), single, tilted, duo (two screenshots fanned, secondScreenshot), cropped (one phone large, cut by the bottom edge) — and one caption treatment for the set: plain, banner (a turned band behind the headline) or pill, every text colour measured on what it sits on. chips lift boxes of the screenshot out over the phone's edge; in a panorama one may follow its phone over a cut under the same check as the screen. A sticker on a cut stands centred, at least a quarter on each side, and never covers screen text: made smaller until clear, else refused. Free. - 1.43.0 (2026-10-07): compose_store_screenshots takes layout "panorama": one wide canvas cut exactly at the slide edges, a brand ribbon across every cut, a phone turned, moved or sized (device) to cross into the next slide, stickers (e.g. the mascot, a pose per slide) across a cut or inside a slide. Every cut is checked: no headline, screen text or face on it, no phone off the strip or over another, each slide reads alone; a set that breaks one is not composed. The answer lists what crosses each cut; the review sheet shows the first three as search results show them. Free. - 1.42.0 (2026-10-06): compose_store_screenshots draws Japanese, Korean and Chinese captions in each language's own letterforms beside the locked font (Latin words keep it); pass language ("ja", "ko", "zh-Hant", "zh-Hans") — kana and hangul are recognised without it, Chinese characters alone need it. Japanese and Chinese lines break between words, never before closing punctuation or a small kana; Korean breaks only at spaces. In Japanese and Chinese the accent is any run of the headline's characters. A caption with a character no font here draws is refused, naming it, instead of showing empty boxes. - 1.41.0 (2026-10-05): new compose_store_screenshots turns the app's own iPhone screenshots into an App Store screenshot set: per slide a short headline (one accent word allowed) and optional subline above the real screenshot in a modern iPhone frame, on the brand ground in the locked fonts and colours, the same layout across the set, with an optional callout enlarging a box of the screenshot. The screenshot is shown exactly as it is. Text colours are measured on the ground first (headline 3:1, subline 4.5:1). One PNG per slide at each size asked (1320x2868 default; 1284x2778, 1242x2688), a review sheet, a zip, and where each part came from. Free. The first call answers an upload link per screenshot. - 1.40.0 (2026-10-05): every palette choice comes with a picture. Each suggest_palette direction links a review sheet, light and dark: the colour before and after, its fill and text shade, a button, text on the page and on a card and a chip beside the error and success colours, every brand and status colour and the artwork tones, each swatch labelled with its role and hex. The answer opens with choose: per direction its colours (from → to, fill, text shade, the nearest colour and how far), failingPairs and its sheet; every role and pair comes with full: true. lock_palette links its sheet too. - 1.39.0 (2026-10-05): suggest_palette on a palette locked from the product's own colours: a description or userFeedback that asks to change one colour, or says two look alike, gets directions that keep every other colour exactly and propose the changed one, clear of the colours beside it, with its text shade, every pair measured and its lockWith. plan_asset_pack with no style locked answers why, what locking a style does, the calls to it and their price; nothing is charged. - 1.38.0 (2026-10-05): review_style reads a Flutter view passed beside its colour file: each ground and text pair it draws, such as a status chip, is measured, and a pair below 4.5:1 is named by its case and line with a colour that reaches 4.5:1 on that ground. A view drawing colours is no longer listed as not read. - 1.37.0 (2026-10-05): after lock_palette the next call is project_setup with the project's id (free), which writes the project files; export_tokens follows. With a palette locked, review_style sends a brand or status colour that fails as text to the locked system's own text shade of it, measured on the ground reviewed, or says it fails there and gives a shade that passes. A failing contrast is never shown rounded up (4.49:1, not 4.50:1), and each message names the ground by its colour. - 1.36.0 (2026-10-05): every tool that takes a project takes the product or repo name instead (projectName): the project of that name is found or created, free, and the result names it. review_style by name reviews against that project and, while nothing is locked, answers the free call that locks the product's own colours with the project's id. list_assets only looks a name up and says how to create a project no one has made yet. - 1.35.1 (2026-10-05): review_style names an app colour file's colour as that file writes it — its type and constant, or its resource name, with the line's own text — so a search of the file finds it; a token that differs between a stylesheet and an app file is named in both spellings. - 1.35.0 (2026-10-05): the project tools take the product or repo name (projectName) in place of projectId: the project of that name is found or created, free, and the result names it. explore_style, which costs credits, only sets the project up from a name and answers the draw with the project's id, to run after the user says yes. - 1.34.0 (2026-10-05): a project tool called from a repo with no .stylelock/ yet answers what would be set up instead of refusing: each step with its price and exact call, a paid step marked as needing the user's yes. Nothing is charged by such a call. - 1.33.0 (2026-10-05): review_style runs without a project — drift between files, a primary action in several colours, low contrast, cards that barely separate, and the fonts each file uses, a cross-platform app theme's included. project_setup takes the product's name and finds or creates the project, free. - 1.32.0 (2026-10-02): review_style reads what an iOS or macOS app's views draw with: a brand fill used as text, an icon or a tint where a text-safe role exists, a system green, orange, red or blue used as text, and a faint fill behind text — each with file, line and the role to use, measured in light and dark. - 1.31.0 (2026-10-02): social profile slots (X header 1500×500, YouTube channel art 2560×1440, avatars for X, YouTube, LinkedIn, Discord, GitHub) with exact size and safe area; the approved mark placed inside it, free; export ships them under social/. Words placing the subject no longer empty its area; a pixel size asked is delivered. - 1.30.1 (2026-10-02): the project file carries fonts per surface in the shape all three products share; an unknown surface or role is refused. - 1.30.0 (2026-10-02): review_style lets code and chart colours be (keyword, string, number, JSON, series) and checks each code colour as text on every ground of its tone, with a readable same-hue fix; the token system carries a brand syntax set for light and dark. Fonts are reviewed against the locked typography, which can decide per surface (app, web, the platform's own font). - 1.29.0 (2026-10-01): review_style reads app colour files (iOS/macOS, Android, cross-platform) as well as stylesheets and reviews light and dark each on its own ground; an unreadable file is said, not passed as clean. A dark-ground palette keeps a dark role set; exported tokens name the primary action. - 1.28.0 (2026-10-01): a palette is a complete, measured design-token system — every brand colour with hover, pressed, on-colour, container and text shades; status, surfaces, text tiers, focus, elevation, eight categorical colours and an artwork palette; light and dark; every intended pair measured, none failing. suggest_palette offers two or three directions with what each costs; export_tokens writes the locked system as CSS, Flutter or JSON. - 1.12.2 (2026-09-25): mascot icons fill their square; recolouring keeps the mascot's own colours. - 1.12.0 (2026-09-25): mascot picture cut from its ground and checked as the same character; brand-only plans add no extra picture; a refused brief names the word to drop. - 1.11.0 (2026-09-25): edit_asset headline — the social image gets the product name, a line and its address in the locked type and colours; free. - 1.10.0 (2026-09-25): generate_assets characterImageUrl — an app icon, favicon or social image built around your mascot picture, in the locked style. - 1.9.0 (2026-09-25): social image at 1200×630; vectorize_asset keeps the mark's own colours (colorsLost when not); price per image drawn — a redrawn asset costs up to twice. - 1.8.0 (2026-09-25): lock_style acceptFindings — lock a refused candidate you choose anyway (recorded); an explore with every candidate refused costs nothing and says so. - 1.7.0 (2026-09-25): lock_visual_system — colour roles, fonts, type sizes and surface rules locked beside the palette, written by project_setup; get_asset / list_assets name assets drawn in old colours (edit_asset redraws them free). - 1.6.0 (2026-09-25): review_style — stylesheets in, findings out (token drift, one action in several colours, off-palette colours, low contrast), with file and line; free. - 1.5.0 (2026-09-23): project_setup answers an AGENTS.md pointer and .stylelock/AGENTS.md (versioned, refreshed when the server is newer). - 1.4.0 (2026-09-23): project_setup takes siblings and suggests a sibling tool the project lacks, with its price. - 1.3.0 (2026-09-23): edit_asset palette — "project" or { accent, secondary?, bg? } redraws the asset in those colours, free. - 1.2.0 (2026-09-23): edit_asset undo — editSpec { undo: true } puts back the version before the last edit. - 1.1.0 (2026-09-22): create_project — an agent on an account with no project creates one itself and continues with explore_style. - 1.0.0 (2026-09-22): the Stylelock connector — explore and lock a style and a palette, plan, generate, edit, vectorize and export an asset pack; project_setup writes .stylelock/stylelock.json; sibling files are read on the server so every product of ours draws in one brand. ## Contact stylelock@aegisflow.work