{"serverId":"mcp-registry/io.github.distribea/distribea-mcp","tools":[{"name":"brand_pack","fixed":{"name":"brand_pack","description":"The brand finishing pack. action 'all' (default) chains: logo (clean lettering, correct spelling) + favicon pack (favicon.ico, apple-touch-icon, 192/512 PNG incl. maskable, site.webmanifest) + social image (og:image, needs a title). Or one piece: 'logo' | 'favicons' | 'social_image'. Returns the logo as an <img> to place in the header, the favicon FILES (base64) to write into /public + the <head> tags, and the og:image <meta> tags. Optionally derive the favicon from a given logo via image_base64","inputSchema":{"type":"object","properties":{"title":{"type":"string","description":"social_image: title written on the image (required for social_image; also enables it in 'all')"},"action":{"enum":["all","logo","favicons","social_image"],"type":"string","description":"Default 'all'"},"project":{"type":"string","description":"Optional: site identifier. Default: \"lovable\"."},"tagline":{"type":"string","description":"logo: optional small tagline under the brand name"},"subtitle":{"type":"string","description":"social_image: optional smaller subtitle"},"image_url":{"type":"string","description":"favicons: optional logo/icon URL to derive the pack from"},"background":{"type":"string","description":"favicons: solid background colour behind the icon (default white)"},"image_base64":{"type":"string","description":"favicons: optional existing logo/icon (base64) to derive the pack from"}}},"annotations":{"readOnlyHint":true},"title":"Logo, favicon pack, social (link-preview) image"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":399,"tokensAfter":399},{"name":"create_reference","fixed":{"name":"create_reference","description":"Register a REAL photo so Distribea reuses it IDENTICALLY in generated images — the user's own person, product or place. kind 'character' = a recurring face (founder, baker…), 'product' = the exact same object, 'place' = the real shop/location. Give the photo as image_base64 (the uploaded file's bytes — MOST RELIABLE) or image_url (a PUBLIC image URL). Free (0 credits) when a photo is given. AFTER this, call generate_image with character:\"<name>\" (or product:\"<name>\") to feature that exact refere","inputSchema":{"type":"object","properties":{"kind":{"enum":["character","product","place"],"type":"string","description":"Default 'character' (a recurring face)"},"name":{"type":"string","description":"What to call it: a role (\"le boulanger\"), a product name (\"Tarte pralinée\"), or a place (\"la boulangerie\")"},"items":{"type":"array","items":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"image_url":{"type":"string"},"description":{"type":"string"},"image_base64":{"type":"string"}}},"description":"Register several products/places at once: each {name, image_base64 or image_url, description?}."},"project":{"type":"string","description":"Optional: site identifier. Default: \"lovable\"."},"image_url":{"type":"string","description":"Public URL of the photo (fallback if no base64)"},"description":{"type":"string","description":"Optional physical description (product/place)"},"image_base64":{"type":"string","description":"The photo bytes as base64 (raw or data-uri). Preferred — works even when the image isn't on a public URL."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Lock a real photo (face, product or shop) reused identically"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":451,"tokensAfter":451},{"name":"generate_with_model","fixed":{"name":"generate_with_model","description":"Advanced/manual mode: generate an image with a SPECIFIC model and settings the user picked, billed at the regular site price. Use this when the user names a model or wants control over quality/format/number of images; otherwise use generate_image (auto robot). Get valid ids + options from list_models. Returns CDN URL(s) + ready-to-paste <img> tag(s).","inputSchema":{"type":"object","required":["model","subject"],"properties":{"count":{"type":"integer","description":"Optional number of images (1..max for the model, see list_models). Default 1. Free/trial accounts are limited to 1."},"model":{"type":"string","description":"Model id from list_models, e.g. \"flux-2.0-pro\" or \"nano-banana-pro\"."},"format":{"type":"string","description":"Optional aspect ratio, e.g. \"16:9\", \"1:1\", \"9:16\" (see list_models for what the model supports)."},"project":{"type":"string","description":"Optional: site identifier. Default: \"lovable\"."},"quality":{"type":"string","description":"Optional quality tier, e.g. \"1K\"/\"2K\"/\"4K\" (see list_models). Ignored when the model has a fixed native size."},"subject":{"type":"string","description":"What the image shows (the prompt)."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"title":"Generate an image with a chosen model + settings"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":342,"tokensAfter":342},{"name":"list_models","fixed":{"name":"list_models","description":"Returns the catalog of image models to choose from: id, name, what it's best at, quality tiers, formats, max images per call, and an indicative price in credits. Call this BEFORE generate_with_model when the user wants to pick a specific model or compare options/prices. Image only for now.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true},"title":"List the image models the user can pick"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":105,"tokensAfter":105},{"name":"list_projects","fixed":{"name":"list_projects","description":"List the projects saved on the account (name, brand, image count, products). To keep working on one, reuse its name in the project: parameter of your calls. Free.","inputSchema":{"type":"object","properties":{"project":{"type":"string","description":"Optional: current site identifier. Default: \"lovable\"."}}},"annotations":{"readOnlyHint":true},"title":"List your Distribea projects"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":98,"tokensAfter":98},{"name":"pack_status","fixed":{"name":"pack_status","description":"Shows the Distribea credit balance, the locked style, the known characters/products/avatars, and the latest generated images. Free.","inputSchema":{"type":"object","properties":{"project":{"type":"string","description":"Optional: site identifier. Default: \"lovable\"."}}},"annotations":{"readOnlyHint":true},"title":"Credit balance and current style"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":87,"tokensAfter":87},{"name":"site_style","fixed":{"name":"site_style","description":"The site's art direction. action \"setup\": locks the style from a brief and/or the URL of an existing site (run this FIRST for consistent images). action \"refine\": plain-language feedback (\"warmer\") OR a correction of a misrepresented subject — the rule is recorded and honored by every subsequent image.","inputSchema":{"type":"object","properties":{"brief":{"type":"string","description":"setup: plain-language brand brief (business, mood…)"},"force":{"type":"boolean","description":"setup: true to let the engine guess if the brief is short"},"action":{"enum":["setup","refine","lock_image"],"type":"string","description":"\"setup\" (default) to set the style, \"refine\" to adjust/correct it, \"lock_image\" to anchor the style on an approved image (pass image_base64/image_url)"},"project":{"type":"string","description":"Optional: site identifier. Default: \"lovable\"."},"feedback":{"type":"string","description":"refine: what to change or correct, in plain language"},"site_url":{"type":"string","description":"setup: URL of an existing site to draw inspiration from (optional)"},"image_url":{"type":"string","description":"lock_image: public URL of the approved image (fallback)"},"moodboard":{"type":"boolean","description":"setup, ONLY on request: also generate a 2×2 moodboard image of the locked style (billed as 1 image)"},"image_base64":{"type":"string","description":"lock_image: the approved image's bytes as base64 — its look becomes the permanent style anchor"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"title":"Set or adjust the site's visual style"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":424,"tokensAfter":424}],"toolsChanged":7,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}