Media
Generated MCP reference for media.
This page is generated from mcp-catalog.json. Do not edit it by hand.
Source: paper3 local extraction on 2026-05-29. Generated: 2026-05-29T11:34:45.044Z.
delete_media
Delete a media asset
Remove an asset from the workspace media library. Used to clean up failed AI generations or assets the user doesn't want anymore. Removes the doc reference; the underlying Blob file may stay orphaned (the workspace owner can delete it from Vercel Blob).
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
assetId | string | Yes | |
_site | string | No | Optional target site formatted as <workspaceSlug>/<siteSlug>. Required when the workspace has multiple sites and no site header is set. |
Input schema
{
"type": "object",
"properties": {
"assetId": {
"type": "string"
},
"_site": {
"type": "string",
"description": "Optional target site formatted as <workspaceSlug>/<siteSlug>. Required when the workspace has multiple sites and no site header is set.",
"pattern": "^[^/]+/[^/]+$"
}
},
"required": [
"assetId"
],
"additionalProperties": false
}generate_image
Generate image (background job)
Queues an image-generation job that runs in the BACKGROUND on Vercel's AI Gateway (default model: openai/gpt-image-2). Returns IMMEDIATELY with \{ jobId, status: 'queued' \} so you can keep editing — write_html, update_styles, anything — while the model renders. When the image is ready (typically 15–60s, occasionally up to 2 min), the completion shows up as a [Background] text block PREPENDED to your NEXT MCP tool response: it carries the asset id, public URL, dimensions, model used, and a hint to drop the URL into an <img> via set_node_field or write_html. The asset is also auto-indexed into the site's media library and visible to list_media. CRITICAL: before calling this, ALWAYS call list_media(\{ query: ... \}) first — most empty-looking sites already have generated images you can reuse for free. LOGOS / ICONS / VECTOR MARKS → use generate_svg INSTEAD, not this tool — SVGs scale crisply, recolour via design tokens, and embed inline so they can animate; raster JPEG/PNG for brand marks is almost always wrong. Set background:'transparent' only if you genuinely need a raster icon with transparency (paper3 routes to gpt-image-1.5; gpt-image-2 doesn't honour transparency). Read get_guide({topic:'image-generation'}) for prompt patterns that avoid AI slop. Sizes: 1024x1024 (square), 1536x1024 (landscape, best for hero/banner), 1024x1536 (portrait), or auto.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
prompt | string | Yes | |
size | string | No | |
background | string | No | |
name | string | No | |
_site | string | No | Optional target site formatted as <workspaceSlug>/<siteSlug>. Required when the workspace has multiple sites and no site header is set. |
Input schema
{
"type": "object",
"properties": {
"prompt": {
"type": "string"
},
"size": {
"type": "string",
"enum": [
"1024x1024",
"1536x1024",
"1024x1536",
"auto"
]
},
"background": {
"type": "string",
"enum": [
"auto",
"opaque",
"transparent"
]
},
"name": {
"type": "string"
},
"_site": {
"type": "string",
"description": "Optional target site formatted as <workspaceSlug>/<siteSlug>. Required when the workspace has multiple sites and no site header is set.",
"pattern": "^[^/]+/[^/]+$"
}
},
"required": [
"prompt"
],
"additionalProperties": false
}generate_svg
Generate an SVG (logos, icons, emblems, vector graphics)
Generates a production-ready SVG vector graphic via QUIVER AI's Arrow models. The CANONICAL tool for logos, app icons, brand monograms, decorative emblems, abstract marks, illustrative spot icons, and any vector asset a site needs. Reach for this FIRST when the user asks for a logo, a favicon, a section icon set, a hero illustration, a brand mark, a hand-drawn-style accent, a decorative motif, or anything that should scale crisply at any size.
Why SVG over generate_image for these jobs:
• Scales without loss — perfect at 24 px in a nav and at 240 px in a hero.
• Edits inline — paths and fills are real DOM, so a colour can swap by re-pointing fill="var(--color-primary)" and the design-token cascade picks it up site-wide.
• Tiny file size — typical logo is 1-3 KB inline vs 50-150 KB JPEG.
• Round-trips cleanly through write_html and edit_html.
Args:
• prompt (required) — what to draw. Be specific and visual: "minimal asterisk-flower monogram, six petals, single closed shape, no outlines, fits in a square viewBox".
• instructions (optional) — quality / style guidance. Default is good; override only when you need a constraint like "monochrome only", "flat geometric, no gradients", "line-art with 2 px strokes".
• model (optional, default arrow-1.1) — pick arrow-1.1-max for dense illustrations or technical diagrams that the base model produces too simply.
• n (optional, default 1) — number of variants to generate in one call. 2-3 is useful for logo exploration; 1 for icons.
How to use the result:
- EMBEDDED INLINE — recommended: drop the
svgmarkup directly intowrite_htmlas a child of the target frame. The model can re-pointfill/stroketo design-token vars before inserting (<svg ... fill="var(--color-primary)">) so the icon recolours with the brand. Inline SVGs accept CSS animations and hover states natively — pair withset_animation/update_state_stylesfor motion. - AS AN IMAGE SRC — base64-encode the SVG into a data URL and pass to
set_node_field(\{ field: 'src', value: 'data:image/svg+xml;base64,...' \})on an existing<img>. Less flexible (no re-colouring via tokens), but cheaper when the asset doesn't need to animate or theme.
Typical recipes:
• App favicon / brand mark: \{ prompt: 'minimalist monogram of the letters "AC" in serif, square viewBox, single closed shape', n: 3 \} → pick one, drop into <link rel="icon"> via the head config.
• Section icon set: one call per icon (\{ prompt: 'simple shield with checkmark, line-art, 2 px stroke', instructions: 'match style: line-art monochrome, 24x24 viewBox' \}) — reuse the same instructions across the set for visual consistency.
• Hero spot illustration: \{ prompt: 'abstract flowing shape suggesting collaboration, three intersecting curves in warm cream and accent', model: 'arrow-1.1-max' \}.
• Decorative texture: \{ prompt: 'repeatable arabesque pattern tile, monoline, 64x64 viewBox' \}.
Returns \{ svgs: [\{ svg, mimeType \}], credits \}. The svg string starts with <svg …> and is ready to paste as-is.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
prompt | string | Yes | |
instructions | string | No | |
model | string | No | |
n | number | No | |
_site | string | No | Optional target site formatted as <workspaceSlug>/<siteSlug>. Required when the workspace has multiple sites and no site header is set. |
Input schema
{
"type": "object",
"properties": {
"prompt": {
"type": "string"
},
"instructions": {
"type": "string"
},
"model": {
"type": "string",
"enum": [
"arrow-1.1",
"arrow-1.1-max"
]
},
"n": {
"type": "number"
},
"_site": {
"type": "string",
"description": "Optional target site formatted as <workspaceSlug>/<siteSlug>. Required when the workspace has multiple sites and no site header is set.",
"pattern": "^[^/]+/[^/]+$"
}
},
"required": [
"prompt"
],
"additionalProperties": false
}list_media
Search the media library
ALWAYS call this BEFORE generate_image — every site already accumulates uploads + previously-generated AI images, and reusing one is free, instant, and avoids drifting from the visual language you already established. Pass query to do a case-insensitive keyword search across the asset's name, alt text, generation prompt, and tags (e.g. query:'hero', 'logo', 'product shot'). Combine with source ('upload' | 'ai' | 'external') and / or tag for narrower scopes. Returns metadata only — no binary blob — so the result is cheap to scan: id, url, name, alt, mimeType, dimensions, source, AI prompt (when source==='ai'), tags, createdAt. Only fall back to generate_image if nothing in the result matches.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | No | |
source | string | No | |
tag | string | No | |
limit | number | No | |
_site | string | No | Optional target site formatted as <workspaceSlug>/<siteSlug>. Required when the workspace has multiple sites and no site header is set. |
Input schema
{
"type": "object",
"properties": {
"query": {
"type": "string"
},
"source": {
"type": "string",
"enum": [
"upload",
"ai",
"external"
]
},
"tag": {
"type": "string"
},
"limit": {
"type": "number"
},
"_site": {
"type": "string",
"description": "Optional target site formatted as <workspaceSlug>/<siteSlug>. Required when the workspace has multiple sites and no site header is set.",
"pattern": "^[^/]+/[^/]+$"
}
},
"additionalProperties": false
}