MCP tools
Generated from the server's own tool list, so it matches what your agent sees. Endpoint: https://api.vincevangen.com/mcp. Model arguments take aliases; see Models.
Generate
vvgen_generate_image
Make a photo or picture from a prose prompt: people, products, scenes (icons, cards, charts: write code). model: fast (drafts, no refs) | standard (cheap stills of people, scenes, illustration; no refs, not for lettering or product labels) | default | best | text (lettering in the scene) | text-best (a scene full of signs that must all read) | premium | transparent; vvgen_list_models shows what each takes, and a request it cannot honour is refused before billing. A clear brief: one final on default. Options wanted or an open brief: n=4 on fast, then from_draft finishes the pick as an edit (dearer than one final; drafts pay off only against two or more finals). Example: {"prompt": "a ceramic coffee dripper on a walnut counter, soft window light from the right, product photo", "model": "default", "seed": 7}
| Parameter | Type | Description |
|---|---|---|
| prompt | string | |
| from_draft | string | A draft's id: that picture finished on `model`, as an edit. prompt: optional changes. |
| model | string | (default "default") |
| aspect_ratio | 1:1 | 4:3 | 3:4 | 16:9 | 9:16 | 3:2 | 2:3 | 4:5 | 5:4 | 21:9 | Sets a ~1 MP pixel size (16:9 = 1344x768); see vvgen_list_models.(default "1:1") |
| n | integer | Variants (max 8), seeds seed..seed+n-1, one paid call each.(default 1) |
| seed | integer | |
| style | string | Style preset or saved style anchor (vvgen_list_presets). |
| reference_images | list[string] | Asset ids, http(s) URLs or local paths (remote: vvgen_create_upload first). |
| transparent | boolean | PNG with alpha: native only for model=transparent editing ONE reference with alpha, else a paid background removal runs after (a warning says so). |
| enhance | boolean | Rewrite the prompt with a small LLM first (paid). |
| filename | string | |
| width | integer | With height: exact pixels, on pixel-size models; out of range is refused. |
| height | integer | |
| negative_prompt | string | Only for models with a negative field; dropped with a warning on FLUX/Gemini. |
| preview | boolean | (default true) |
| post | list[string] | Ops on each output, in order: trim | pad:<frac> | square | fit:WxH (shrink to fit inside, never enlarges) | contain:WxH (scale to fit inside) | cover:WxH (crop to exactly WxH) | resize:W[xH] | rmbg (paid background removal) | key:<hex>|auto[:tol] (colour to alpha; auto = the border colour; tol = max per-channel difference 0-255, default 24; models rarely paint the exact hex: use auto or rmbg; a key that removes nothing warns) | defringe[:px] | match_color:<hex>[:deg] | slice:CxR[:WxH] (cut a sprite sheet into equal frames + a GIF) | tileable (seamless texture wrap) | pixelate[:H][:colors] (fake pixel art to its own grid, 1x) | png | webp | jpeg. |
| checks | list[string] | Free checks per variant: alpha_coverage:<min>-<max> | edge_halo:<max> | color_distance:<hex>:<max> | size:WxH | components:<n> | frames:<n> (sprite-sheet frame count) | seam:<max> (texture wrap, 1.0 = seamless) | palette:<n>. Failing variants are rejected (files kept). |
| judge | list[string] | Yes/no statements for a vision model, e.g. "contains no readable text"; one paid call per variant that passed checks. Advisory: the checks and your own look at the preview decide. |
| keep | all | all-passing | best-passing | best-passing (default for n>1 with checks/judge) | all-passing | all (annotate only). Rejects are listed under `rejected` with reasons. |
| text_overlay | list[object] | Free exact text per kept result (layers as in vvgen_add_text); returns overlaid files, `parent` = clean base. |
| confirm_spend | number | Only once the user approved a cost refusal: its amount. |
vvgen_edit_image
Edit a photo or compose from images with an instruction. images[0] is the canvas (size kept on pixel-size models), the rest are 'image 2', 'image 3'. Lead with the change, then 'keep everything else exactly the same'. Images: default/best 4, precise/text/text-best 1, fill 1 + mask. `parent` is null; sources are in `refs`. Output is often JPEG: post ["png"] for PNG. Example: {"prompt": "Put the bag from image 1 on a sunlit cafe table, keep the bag exactly the same", "images": ["a_3f9c2e"]}
| Parameter | Type | Description |
|---|---|---|
| promptrequired | string | |
| imagesrequired | list[string] | Asset ids, http(s) URLs or local paths (remote: vvgen_create_upload first). |
| model | string | (default "default") |
| n | integer | (default 1) |
| seed | integer | |
| style | string | |
| filename | string | |
| preview | boolean | (default true) |
| post | list[string] | As in generate_image. |
| checks | list[string] | As in generate_image. |
| judge | list[string] | As in generate_image. |
| keep | all | all-passing | best-passing | As in generate_image. |
| text_overlay | list[object] | As in generate_image. |
| confirm_spend | number | As in generate_image. |
| mask | string | fill: white = repaint |
vvgen_generate_asset
Make a typed asset from a preset: avatar, product-shot, hero, sticker, blog-header ... (app-icon, favicon, logo-concept, sprite-sheet: concepts to redraw in code). The preset brings template, model, aspect, style, post ops, exports and checks/judge. One variant on the preset's model is the normal call; n>1 on model=fast explores and keeps the best passing. vvgen_list_presets with name=<preset> shows all of it before you pay. Example: {"preset": "hero", "subject": "pour-over coffee on a counter at dawn, plain wall on the left", "text_overlay": [{"text": "Brewlog", "position": "left"}]}
| Parameter | Type | Description |
|---|---|---|
| presetrequired | string | |
| subjectrequired | string | |
| style | string | |
| model | string | |
| n | integer | (default 1) |
| seed | integer | |
| reference_images | list[string] | As in generate_image. |
| enhance | boolean | |
| filename | string | |
| preview | boolean | (default true) |
| checks | list[string] | As in generate_image. |
| judge | list[string] | As in generate_image. |
| keep | all | all-passing | best-passing | As in generate_image. |
| text_overlay | list[object] | As in generate_image. |
| confirm_spend | number | As in generate_image. |
| lighting | string | hero, product-shot, avatar: replaces the preset's lighting, e.g. "from the right". |
| params | object | The preset's slots (vvgen_list_presets: slots), e.g. sprite-sheet {"frames": 4, "action": "a hop"}. |
vvgen_generate_video
Make a short video clip, as a job (wait_seconds, or poll vvgen_get_job). Text-to-video, or image-to-video with `image` (aspect from the image). Durations, resolutions and aspects per alias: vvgen_list_models; others are refused before billing. Billed per second. One action and one camera move; state the camera. Example: {"prompt": "slow push-in on steam rising from a coffee cup, morning light", "model": "fast", "wait_seconds": 120}
| Parameter | Type | Description |
|---|---|---|
| promptrequired | string | |
| model | string | (default "default") |
| image | string | |
| duration | integer | (default 5) |
| resolution | string | (default "720p") |
| aspect_ratio | string | |
| seed | integer | |
| enhance | boolean | |
| filename | string | |
| wait_seconds | integer | (default 0) |
| confirm_spend | number | As in generate_image. |
vvgen_generate_music
Make a music track or soundtrack (30-500 s, billed per second) as a job, ~1 s per output second: wait_seconds = duration + 20 returns it in one call, else poll vvgen_get_job. prompt: genre, mood, instruments, vocals, tempo, key as tags. lyrics: [verse]/[chorus] (empty: the model writes them); instrumental=true for none. cover|cover-nofsq|repaint need input_audio; reference_audio borrows a clip's sound. For a loop pass loop=true (prompt words alone do not loop). Thin or harsh: same call and seed with post ["polish"] (free). Example: {"prompt": "lo-fi hip hop, warm Rhodes, 80 bpm", "instrumental": true, "duration": 30, "loop": true, "wait_seconds": 50}
| Parameter | Type | Description |
|---|---|---|
| promptrequired | string | |
| lyrics | string | |
| instrumental | boolean | |
| duration | integer | (default 60) |
| bpm | integer | |
| seed | integer | |
| n | integer | (default 1) |
| format | mp3 | flac | wav | (default "mp3") |
| task | text2music | cover | cover-nofsq | repaint | (default "text2music") |
| input_audio | string | |
| reference_audio | string | |
| negative_prompt | string | |
| repaint_start | number | |
| repaint_end | number | |
| think | boolean | |
| language | string | |
| filename | string | |
| post | list[string] | ["polish"]: free fix for thin, muddy, harsh or phasey sound; polish:<mix> sets strength 0-1 (default 0.15). |
| loop | boolean | Free seamless loop: whole bars (set bpm for exact bars), crossfaded wrap, -1 dBTP. The track gets shorter; .loop.wav/.loop.ogg exports sit beside an mp3 (mp3 leaves a gap when looped). |
| wait_seconds | integer | (default 40) |
| confirm_spend | number | As in generate_image. |
vvgen_get_job
Status or result of a video/music job, or an upload_id; wait_seconds blocks up to that long (max 600). Example: {"job_id": "j_8d2a", "wait_seconds": 60}
| Parameter | Type | Description |
|---|---|---|
| job_idrequired | string | |
| wait_seconds | integer | (default 0) |
Post-process and check
vvgen_remove_background
Remove the background of an existing image (Bria, paid), trim to content, save a PNG with alpha. For new art, transparent=true on generate does this for you. Example: {"image": "a_3f9c2e"}
| Parameter | Type | Description |
|---|---|---|
| imagerequired | string | |
| filename | string | |
| preview | boolean | (default true) |
| confirm_spend | number | As in generate_image. |
vvgen_add_text
Draw exact text onto an existing image with bundled fonts, saved as a new image (free, instant): titles, labels, buttons, banners, social cards. The source is kept (the result's `parent`): re-word or translate by calling again. One layer per text block. Example: {"image": "a_3f9c2e", "layers": [{"text": "Brewlog", "font": "display", "position": "top"}, {"text": "Your coffee, dialed in.", "size": 40}]}
| Parameter | Type | Description |
|---|---|---|
| imagerequired | string | |
| layersrequired | list[object] | |
| filename | string | |
| preview | boolean | (default true) |
vvgen_judge_image
Ask a vision model yes/no checks about an image: per-check answers, located defects, pass, status (inconclusive = an item unanswered). Advisory: run vvgen_check_image first and look yourself. reference_images compare identity/style. Example: {"image": "a_3f9c2e", "checks": ["exactly one person", "contains no readable text"]}
| Parameter | Type | Description |
|---|---|---|
| imagerequired | string | |
| checksrequired | list[string] | |
| reference_images | list[string] | As in generate_image. |
| context | string | |
| strict | boolean |
vvgen_check_image
Check an image for free (no model call): size, cutout edges, brand colour ... the `checks` of vvgen_generate_image, with pass, measured value and detail per check. Example: {"image": "a_3f9c2e", "checks": ["size:1200x630", "color_distance:#2b1d14:40"]}
| Parameter | Type | Description |
|---|---|---|
| imagerequired | string | |
| checksrequired | list[string] |
vvgen_enhance_prompt
Rewrite a short brief into a full prompt following the target model family's rules (one small paid LLM call). kind: t2i | edit | video. Returns JSON {prompt, aspect_ratio, ...}. Example: {"brief": "hero image for a coffee app", "kind": "t2i", "model": "best"}
| Parameter | Type | Description |
|---|---|---|
| briefrequired | string | |
| kind | string | (default "t2i") |
| model | string | (default "default") |
| style | string | |
| asset_type | string |
Discover and style
vvgen_list_models
List the model aliases per kind with live price, output licence (commercial use: yes | no | unclear) and what each takes: references, pixel sizes or aspect only, alpha route, video start image and durations; plus the pixel size each aspect_ratio gives. Example: {"kind": "image"}
| Parameter | Type | Description |
|---|---|---|
| kind | image | edit | video | music | utility |
vvgen_list_presets
List style presets, this project's style anchors and asset presets. name=<preset> shows one recipe before you pay: prompt template, model, aspect and pixels, style text, transparent, post ops, size exports, default checks and judge rubric. Example: {"name": "product-shot"}
| Parameter | Type | Description |
|---|---|---|
| name | string |
vvgen_create_style
Save a style anchor for a consistent series: name + prompt + ordered reference images (this project's ids), as a fixed version (island-v1; new content makes island-v2). Pass style="island" (latest) or "island-v1" on generate/edit/asset: its refs go first and count against the model's slots. Example: {"name": "island", "asset_ids": ["a_3f9c2e"], "prompt": "in the gouache style of the reference images"}
| Parameter | Type | Description |
|---|---|---|
| namerequired | string | |
| asset_ids | list[string] | At most 8; a local server also takes file paths. |
| prompt | string | |
| avoid | string | |
| suffix | string | |
| note | string |
Files and history
vvgen_import
Bring in an image vvgen did not make (a designer's, another tool's): free, no model call. Records size, alpha and provenance (origin: import + your claim; licence unknown), then optional post, checks, exports, text_overlay; the source is not changed. Example: {"image": "a_3f9c2e", "claimed": "Codex image tool", "exports": ["64", "128", "256"]}
| Parameter | Type | Description |
|---|---|---|
| imagerequired | string | Asset ids, http(s) URLs or local paths (remote: vvgen_create_upload first). |
| claimed | string | Its source, recorded as said. |
| exports | list[string] | 256 | WxH[:contain|fit] (cover) | scale:k |
| post | list[string] | As in generate_image. |
| checks | list[string] | As in generate_image. |
| text_overlay | list[object] | As in generate_image. |
| filename | string | |
| confirm_spend | number | As in generate_image. |
vvgen_history
Recent assets (id, path, model, seed, prompt, cost). Example: {"limit": 5, "search": "coffee"}
| Parameter | Type | Description |
|---|---|---|
| limit | integer | (default 10) |
| search | string |
vvgen_get_file
One result as an image you can see, by asset id (a_...) or path, longest side at most max_px (cap 2048); png keeps alpha, jpeg is smaller. Use it to hand a person the full image in chat (no download). Also id, path, size, provenance. Audio: an embedded resource; video: metadata only. file: a name from the asset's exports/frames/gif. Example: {"asset_id": "a_3f9c2e", "max_px": 1024}
| Parameter | Type | Description |
|---|---|---|
| asset_idrequired | string | |
| max_px | integer | (default 1024) |
| format | png | jpeg | (default "png") |
| file | string |
vvgen_create_upload
Gets a local file or a person's photo (image or audio, 25 MB) onto this server. A file you can read, including one attached in a chat (it sits in your sandbox): run the returned curl on it. No shell, or curl cannot reach us (sandbox without network access): give the person page_url to pick the file in a browser; vvgen_get_job on the upload_id waits for its asset id. Example: {"filename": "logo.png"}
| Parameter | Type | Description |
|---|---|---|
| filename | string |