MCP ServerTool Reference

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

ParameterTypeRequiredDescription
assetIdstringYes
_sitestringNoOptional 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 &lt;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

ParameterTypeRequiredDescription
promptstringYes
sizestringNo
backgroundstringNo
namestringNo
_sitestringNoOptional 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:

  1. EMBEDDED INLINE — recommended: drop the svg markup directly into write_html as a child of the target frame. The model can re-point fill / stroke to design-token vars before inserting (&lt;svg ... fill="var(--color-primary)">) so the icon recolours with the brand. Inline SVGs accept CSS animations and hover states natively — pair with set_animation / update_state_styles for motion.
  2. 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 &lt;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 &lt;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 &lt;svg …> and is ready to paste as-is.

Parameters

ParameterTypeRequiredDescription
promptstringYes
instructionsstringNo
modelstringNo
nnumberNo
_sitestringNoOptional 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

ParameterTypeRequiredDescription
querystringNo
sourcestringNo
tagstringNo
limitnumberNo
_sitestringNoOptional 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
}

On this page