Picorn

Picorn turns AI briefs into editable social images and videos with layers, timelines, and renders.

Should I use this

Quality & Safety

B
Description quality
95%
Schema completeness
76%
Naming quality
80%
Poisoning risk
20%
Permission match
100%
Protocol compliance
100%

Findings (10)

  • HIGHTool poisoning patterns detected
  • MEDIUMTool 'picorn_design_image' description contains placeholder textin picorn_design_image
  • MEDIUMTool 'picorn_render_svg' description contains placeholder textin picorn_render_svg
  • MEDIUMTool 'picorn_editor_create_project' description contains placeholder textin picorn_editor_create_project
  • LOWTool 'picorn_editor_align_layers' description lacks action verbin picorn_editor_align_layers
  • LOWTool 'picorn_editor_distribute_layers' name length outside 3-30 rangein picorn_editor_distribute_layers
  • LOWTool description contains role marker that could confuse chat modelsin picorn_posts_schedule
  • INFOTool description contains placeholder or incomplete textin picorn_design_image
  • INFOTool description contains placeholder or incomplete textin picorn_render_svg
  • INFOTool description contains placeholder or incomplete textin picorn_editor_create_project

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~8,959Tokens (tool definitions)
~1.3 KBTypical response size
Significant attention impact (7.00% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "picorn": {
      "url": "https://picorn.com/mcp"
    }
  }
}

Remote endpoints

https://picorn.com/mcpstreamable-http

What it can do

Tool inventory

Tools (44)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢picorn_capabilities

List live canvas formats, fonts, layouts, image models, GPU reachability and fair-use limits.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡picorn_projects_create(name, description, brandColors)

Create a marketing project that can hold many editor files and imported image assets. Keep the returned workspaceProjectId and workspaceProjectKey together; use them when adding every related file.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 160
    },
    "description": {
      "type": "string",
      "maxLength": 1000
    },
    "brandColors": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 40
          },
          "hex": {
            "type": "string",
            "pattern": "^#[0-9a-f]{3}([0-9a-f]{3})?$"
          }
        },
        "required": [
          "id",
          "name",
          "hex"
        ],
        "additionalProperties": false
      },
      "maxItems": 12
    }
  },
  "required": [
    "name"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢picorn_projects_inspect(workspaceProjectId, workspaceProjectKey)

List every editor file, imported asset, and the project brand profile with named colors and saved logos or visual references. File entries include their current thumbnail, status, creation URL and canonical /studio/editor?runId=... editorUrl. Always give the user that editorUrl.

Input Schema

{
  "type": "object",
  "properties": {
    "workspaceProjectId": {
      "type": "string",
      "minLength": 1
    },
    "workspaceProjectKey": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "workspaceProjectId",
    "workspaceProjectKey"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡picorn_projects_update(workspaceProjectId, workspaceProjectKey, name, description, brandColors)

Update the name, description, or named color scheme of a marketing project, then return its complete file, asset, and brand index.

Input Schema

{
  "type": "object",
  "properties": {
    "workspaceProjectId": {
      "type": "string",
      "minLength": 1
    },
    "workspaceProjectKey": {
      "type": "string",
      "minLength": 1
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 160
    },
    "description": {
      "type": "string",
      "maxLength": 1000
    },
    "brandColors": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 40
          },
          "hex": {
            "type": "string",
            "pattern": "^#[0-9a-f]{3}([0-9a-f]{3})?$"
          }
        },
        "required": [
          "id",
          "name",
          "hex"
        ],
        "additionalProperties": false
      },
      "maxItems": 12
    }
  },
  "required": [
    "workspaceProjectId",
    "workspaceProjectKey"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪picorn_design_image(svg, width, height, preview)

CODEX-ONLY. The calling Codex supplies the complete SVG, including copy and layout. Picorn resolves declared placeholders and renders it through Fabric/SVG. No internal language or design model is called.

Input Schema

{
  "type": "object",
  "properties": {
    "svg": {
      "type": "string",
      "minLength": 1,
      "description": "Complete Codex-authored SVG with a viewBox."
    },
    "width": {
      "type": "integer",
      "minimum": 64,
      "maximum": 4096
    },
    "height": {
      "type": "integer",
      "minimum": 64,
      "maximum": 4096
    },
    "preview": {
      "type": "boolean",
      "description": "Return an inline preview. Default true."
    }
  },
  "required": [
    "svg"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢picorn_generate_image(prompt, kind, aspectRatio, width, height, ...)

Generate a new picture on fal. kind photo (default) = Krea 2 Turbo: photos, people, places, moods and other emotional images. kind text = GPT Image 2.5 Flare: only for mockups with a lot of legible lettering. Library first: browse with picorn_search_library (or use search lines in picorn_blueprint_compile), and generate only when the design would benefit massively from a new picture (no fitting hero photo exists). Generation needs a connected Picorn account with credits; it is charged at 1.2 × the fal price (a Krea 2 Turbo picture of about 1 MP costs about 1 ct). Returns an inline preview, the public imageUrl and chargedCents.

Input Schema

{
  "type": "object",
  "properties": {
    "prompt": {
      "type": "string",
      "minLength": 1,
      "maxLength": 2000,
      "description": "Detailed English description of the picture."
    },
    "kind": {
      "type": "string",
      "enum": [
        "photo",
        "text"
      ],
      "description": "photo (default, Krea 2 Turbo) or text (GPT Image 2.5, lettering-heavy mockups)."
    },
    "aspectRatio": {
      "type": "string",
      "enum": [
        "1:1",
        "4:3",
        "3:4",
        "16:9",
        "9:16",
        "4:5",
        "5:4",
        "2:3",
        "3:2"
      ]
    },
    "width": {
      "type": "integer",
      "minimum": 256,
      "maximum": 2048
    },
    "height": {
      "type": "integer",
      "minimum": 256,
      "maximum": 2048
    },
    "preview": {
      "type": "boolean"
    }
  },
  "required": [
    "prompt"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴picorn_generate_vector_assets(prompt, kind, palette, numColors, workspaceProjectId, ...)

Use Picorn's native editor engine: first generate raster artwork with self-hosted Z-Image Turbo on ComfyUI, remove its background, then convert it through the bundled multi-colour SVG converter. Generates five variants, selects the strongest result and returns the top three. Signets also return one layered editor file that displays the three shortlisted SVGs inside the same native project. Use this tool for every newly generated signet and custom icon.

Input Schema

{
  "type": "object",
  "properties": {
    "prompt": {
      "type": "string",
      "minLength": 1,
      "maxLength": 2000
    },
    "kind": {
      "type": "string",
      "enum": [
        "signet",
        "icon"
      ]
    },
    "palette": {
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^#[0-9a-f]{6}$"
      },
      "minItems": 2,
      "maxItems": 7
    },
    "numColors": {
      "type": "integer",
      "minimum": 2,
      "maximum": 7
    },
    "workspaceProjectId": {
      "type": "string"
    },
    "workspaceProjectKey": {
      "type": "string"
    },
    "projectName": {
      "type": "string",
      "minLength": 1,
      "maxLength": 160
    }
  },
  "required": [
    "prompt",
    "kind"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴picorn_edit_image(prompt, imageUrl, imageBase64, preview)

Edit an existing picture with GPT Image 2.5 Flare on fal: retouch, change background, add or remove objects, restyle. Pass imageUrl (Picorn storage, Dropbox/Drive share link) or imageBase64. Needs a connected Picorn account with credits; charged at 1.2 × the fal price. Returns an inline preview, the public imageUrl and chargedCents.

Input Schema

{
  "type": "object",
  "properties": {
    "prompt": {
      "type": "string",
      "minLength": 1,
      "maxLength": 2000,
      "description": "The edit instruction."
    },
    "imageUrl": {
      "type": "string"
    },
    "imageBase64": {
      "type": "string"
    },
    "preview": {
      "type": "boolean"
    }
  },
  "required": [
    "prompt"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡picorn_render_svg(svg, width, height, preview)

Render your SVG through Picorn with real typography and declarative image workers. Put placeholder <rect> elements inside the SVG and choose their backend with data-clipart-engine="svg-converter" (fresh ComfyUI image, background removal, then Picorn PNG→SVG vectorisation), data-clipart-engine="z-image-turbo" (raster photo/cutout), or data-clipart-engine="library" (existing vector only). Include data-clipart-prompt; use data-clipart-num-colors="1..7" for svg-converter, and data-clipart-keep-bg="true" for a full scene. Picorn resolves all placeholders internally; never call the admin converter or return generated base64 yourself. Returns an inline preview and public creationUrl.

Input Schema

{
  "type": "object",
  "properties": {
    "svg": {
      "type": "string",
      "minLength": 1
    },
    "width": {
      "type": "integer",
      "minimum": 64,
      "maximum": 4096
    },
    "height": {
      "type": "integer",
      "minimum": 64,
      "maximum": 4096
    },
    "preview": {
      "type": "boolean"
    }
  },
  "required": [
    "svg"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪picorn_editor_import_image(mediaId, imageBase64, imageUrl, name, workspaceProjectId, ...)

Import a photo into Picorn storage, then use the returned imageUrl in one or more native image layers. Three sources: mediaId (a photo the user already uploaded to Picorn, from picorn_media_list; needs the access token), imageUrl (Dropbox or Google Drive share links work as-is when shared with "anyone with the link", as do Picorn, Google Cloud Storage, fal and Wikimedia URLs; up to 50 MB), or imageBase64 (up to 15 MB). Camera originals are rotated by EXIF and downscaled to 4096 px on the long side; opaque photos are stored as JPEG, transparent images as PNG. Prefer mediaId or a share link over base64 for full-size photos. With an access token the asset lands in a workspace owned by the user.

Input Schema

{
  "type": "object",
  "properties": {
    "mediaId": {
      "type": "string",
      "description": "A mediaId from picorn_media_list (the user's own Picorn uploads)."
    },
    "imageBase64": {
      "type": "string",
      "description": "Image bytes as base64, with or without a data:image/... prefix."
    },
    "imageUrl": {
      "type": "string",
      "description": "An image URL or a Dropbox / Google Drive share link."
    },
    "name": {
      "type": "string",
      "maxLength": 160,
      "description": "Asset name shown in the marketing project."
    },
    "workspaceProjectId": {
      "type": "string"
    },
    "workspaceProjectKey": {
      "type": "string"
    },
    "preview": {
      "type": "boolean",
      "description": "Return an inline preview. Default true."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡picorn_editor_create_project(title, aspectRatio, width, height, background, ...)

Create a persistent native Picorn editor project. For a finished static layout, pass svg: a complete SVG containing text/shapes plus declarative data-clipart placeholders. Picorn runs the selected engines in the background, stores the generated assets, converts the SVG into editable native layers, and returns a populated project in one call. Omit svg only when you intentionally want an empty slide for incremental layer operations. Returns projectId, slideId, exact canvas dimensions, and the canonical /studio/editor?runId=... editorUrl that must be included in the final answer.

Input Schema

{
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "maxLength": 160
    },
    "aspectRatio": {
      "type": "string",
      "enum": [
        "1:1",
        "2:3",
        "3:4",
        "4:3",
        "4:5",
        "5:4",
        "9:16",
        "16:9",
        "21:9",
        "1:2",
        "custom"
      ]
    },
    "width": {
      "type": "integer",
      "minimum": 64,
      "maximum": 4096,
      "description": "Required only for custom canvases."
    },
    "height": {
      "type": "integer",
      "minimum": 64,
      "maximum": 4096,
      "description": "Required only for custom canvases."
    },
    "background": {
      "type": "object",
      "additionalProperties": {},
      "description": "CanvasBackground: color, gradient, texture, or transparent."
    },
    "svg": {
      "type": "string",
      "minLength": 1,
      "maxLength": 400000,
      "description": "Complete SVG layout. Generated visuals are <rect data-clipart=\"true\" data-clipart-engine=\"svg-converter|z-image-turbo|library\" data-clipart-prompt=\"...\" ... /> placeholders resolved internally."
    },
    "workspaceProjectId": {
      "type": "string",
      "description": "Marketing project that will contain this editor file."
    },
    "workspaceProjectKey": {
      "type": "string",
      "description": "Access key returned by picorn_projects_create."
    },
    "campaignId": {
      "type": "string",
      "description": "Campaign from picorn_campaigns_create (needs a Picorn access token). Pass together with ideaId."
    },
    "ideaId": {
      "type": "string",
      "description": "Campaign idea this file realises."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡picorn_editor_create_slideshow(title, aspectRatio, width, height, background, ...)

Create, persist and render a complete 1–20 slide Picorn file in one deterministic call from finished agent-authored SVG and/or native editable layers. The calling agent is the only design model: this path does not call /api/generate-svg, Gemini, OpenRouter, or another LLM. Work is bounded before persistence to 50,000,000 total canvas pixels and 1,000 total layers. Fair-use cost is one unit per four slides, rounded up. Returns every persistent render URL, an inline contact-sheet preview, and the canonical editorUrl. Response provenance is modelProvider="calling-agent" and externalLlmCalls=0.

Input Schema

{
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "maxLength": 160
    },
    "aspectRatio": {
      "type": "string",
      "enum": [
        "1:1",
        "2:3",
        "3:4",
        "4:3",
        "4:5",
        "5:4",
        "9:16",
        "16:9",
        "21:9",
        "1:2",
        "custom"
      ]
    },
    "width": {
      "type": "integer",
      "minimum": 64,
      "maximum": 4096
    },
    "height": {
      "type": "integer",
      "minimum": 64,
      "maximum": 4096
    },
    "background": {
      "type": "object",
      "additionalProperties": {},
      "description": "Default background for slides that omit their own background."
    },
    "caption": {
      "type": "string",
      "maxLength": 2200
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 80
      },
      "maxItems": 30
    },
    "workspaceProjectId": {
      "type": "string"
    },
    "workspaceProjectKey": {
      "type": "string"
    },
    "slides": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "role": {
            "type": "string",
            "enum": [
              "hook",
              "empathy",
              "insight",
              "cta",
              "other",
              "single",
              "problem",
              "agitation",
              "solution",
              "proof",
              "benefit",
              "story"
            ]
          },
          "background": {
            "type": "object",
            "additionalProperties": {}
          },
          "svg": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120000,
            "description": "Complete self-contained agent-authored SVG with a positive viewBox; no scripts, events, external assets, or placeholders."
          },
          "layers": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": {}
            },
            "maxItems": 150,
            "description": "Native editable Picorn layers in deterministic bottom-to-top order. SVG, when present, is the bottom layer."
          }
        },
        "additionalProperties": false
      },
      "minItems": 1,
      "maxItems": 20
    },
    "campaignId": {
      "type": "string",
      "description": "Campaign from picorn_campaigns_create (needs a Picorn access token). Pass together with ideaId."
    },
    "ideaId": {
      "type": "string",
      "description": "Campaign idea this slideshow realises."
    },
    "format": {
      "type": "string",
      "enum": [
        "png",
        "jpeg"
      ]
    },
    "quality": {
      "type": "number",
      "minimum": 0.1,
      "maximum": 1
    },
    "transparentBackground": {
      "type": "boolean"
    }
  },
  "required": [
    "slides"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢picorn_editor_inspect_project(projectId)

Read the complete project, including every slide, layer, property, z-index, and latest rendered image URL.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "projectId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡picorn_editor_add_slide(projectId, role, background)

Add another slide to an editor project. Projects support up to 20 slides. Returns the new slide as an inline preview.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "minLength": 1
    },
    "role": {
      "type": "string",
      "enum": [
        "hook",
        "empathy",
        "insight",
        "cta",
        "other",
        "single",
        "problem",
        "agitation",
        "solution",
        "proof",
        "benefit",
        "story"
      ]
    },
    "background": {
      "type": "object",
      "additionalProperties": {}
    }
  },
  "required": [
    "projectId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡picorn_editor_update_slide(projectId, slideId, role, background, imagePrompt)

Change a slide background, semantic role, or image prompt. Returns the changed slide as an inline preview.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "minLength": 1
    },
    "slideId": {
      "type": "string",
      "minLength": 1
    },
    "role": {
      "type": "string"
    },
    "background": {
      "type": "object",
      "additionalProperties": {}
    },
    "imagePrompt": {
      "type": "string"
    }
  },
  "required": [
    "projectId",
    "slideId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴picorn_editor_delete_slide(projectId, slideId)

Delete a slide and its layers. A project always keeps at least one slide.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "minLength": 1
    },
    "slideId": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "projectId",
    "slideId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡picorn_editor_add_layer(projectId, slideId, layer)

Add a native editor layer. Use text, image, shape, group and qr layers for static designs. SVG uses an image layer with isSvg:true. Position is the layer CENTER in canvas pixels. The layer accepts the same persisted fields as /editor: transforms, opacity, blendMode, text styles/effects/rich text, image filters/customFilters/crop/masks/local effects/perspective, shape gradients/strokes/shadows, QR styling and persisted editor fields. Returns the changed slide as an inline preview automatically. Does not create or render video.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "minLength": 1
    },
    "slideId": {
      "type": "string",
      "minLength": 1
    },
    "layer": {
      "type": "object",
      "additionalProperties": {},
      "description": "Native layer object. At minimum provide type and its content field."
    }
  },
  "required": [
    "projectId",
    "slideId",
    "layer"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡picorn_editor_update_layer(projectId, slideId, objectId, patch, commitType)

Patch any editable property on a layer: content, position, size, transform, style, filters, masks, effects, blend mode, visibility, lock state, SVG overrides, timing, audio, or keyframes. Returns the changed slide as an inline preview automatically.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "minLength": 1
    },
    "slideId": {
      "type": "string",
      "minLength": 1
    },
    "objectId": {
      "type": "string",
      "minLength": 1
    },
    "patch": {
      "type": "object",
      "additionalProperties": {}
    },
    "commitType": {
      "type": "string",
      "enum": [
        "move",
        "scale",
        "rotate",
        "transform",
        "style",
        "content",
        "lock",
        "visibility",
        "bulk-style"
      ]
    }
  },
  "required": [
    "projectId",
    "slideId",
    "objectId",
    "patch"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴picorn_editor_delete_layers(projectId, slideId, objectIds)

Delete one or more layers and clean their group references.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "minLength": 1
    },
    "slideId": {
      "type": "string",
      "minLength": 1
    },
    "objectIds": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 1
    }
  },
  "required": [
    "projectId",
    "slideId",
    "objectIds"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡picorn_editor_reorder_layers(projectId, slideId, objectIds)

Set layer order. objectIds are bottom-to-top; omitted existing IDs retain their relative order on top.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "minLength": 1
    },
    "slideId": {
      "type": "string",
      "minLength": 1
    },
    "objectIds": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 1
    }
  },
  "required": [
    "projectId",
    "slideId",
    "objectIds"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡picorn_editor_group_layers(projectId, slideId, objectIds, name)

Create the same metadata group used by the visual editor. Grouping preserves world positions and render output.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "minLength": 1
    },
    "slideId": {
      "type": "string",
      "minLength": 1
    },
    "objectIds": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 2
    },
    "name": {
      "type": "string"
    }
  },
  "required": [
    "projectId",
    "slideId",
    "objectIds"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴picorn_editor_ungroup_layers(projectId, slideId, groupId)

Remove a group while preserving all child layers.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "minLength": 1
    },
    "slideId": {
      "type": "string",
      "minLength": 1
    },
    "groupId": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "projectId",
    "slideId",
    "groupId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪picorn_editor_align_layers(projectId, slideId, objectIds, mode)

Align positioned layers to their shared left, center, right, top, middle, or bottom bound.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "minLength": 1
    },
    "slideId": {
      "type": "string",
      "minLength": 1
    },
    "objectIds": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 2
    },
    "mode": {
      "type": "string",
      "enum": [
        "left",
        "center",
        "right",
        "top",
        "middle",
        "bottom"
      ]
    }
  },
  "required": [
    "projectId",
    "slideId",
    "objectIds",
    "mode"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪picorn_editor_distribute_layers(projectId, slideId, objectIds, axis)

Evenly distribute three or more positioned layers horizontally or vertically.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "minLength": 1
    },
    "slideId": {
      "type": "string",
      "minLength": 1
    },
    "objectIds": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 3
    },
    "axis": {
      "type": "string",
      "enum": [
        "horizontal",
        "vertical"
      ]
    }
  },
  "required": [
    "projectId",
    "slideId",
    "objectIds",
    "axis"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪picorn_editor_duplicate_layer(projectId, slideId, objectId, offsetX, offsetY)

Duplicate a non-group layer, including all style, filter, effect, mask, and animation properties.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "minLength": 1
    },
    "slideId": {
      "type": "string",
      "minLength": 1
    },
    "objectId": {
      "type": "string",
      "minLength": 1
    },
    "offsetX": {
      "type": "number"
    },
    "offsetY": {
      "type": "number"
    }
  },
  "required": [
    "projectId",
    "slideId",
    "objectId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡picorn_editor_render_project(projectId, slideIds, format, quality, transparentBackground, ...)

Render selected or all slides through Picorn's real Fabric editor pipeline. Returns persistent public image URLs, a multi-page PDF, or a page-faithful DOCX download, creationUrl, and the canonical editorUrl that must be given to the user. DOCX preserves the visual layout as page images; edit text and layers in SEEZ Editor. Static renders include text, image/SVG, shape, group and QR layers; video/audio timing remains editable project data for the video editor.

Input Schema

{
  "type": "object",
  "properties": {
    "projectId": {
      "type": "string",
      "minLength": 1
    },
    "slideIds": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "format": {
      "type": "string",
      "enum": [
        "png",
        "jpeg",
        "pdf",
        "docx"
      ]
    },
    "quality": {
      "type": "number",
      "minimum": 0.1,
      "maximum": 1
    },
    "transparentBackground": {
      "type": "boolean"
    },
    "pageWidthMm": {
      "type": "number",
      "minimum": 10,
      "maximum": 2000
    },
    "pageHeightMm": {
      "type": "number",
      "minimum": 10,
      "maximum": 2000
    }
  },
  "required": [
    "projectId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢picorn_search_library(kind, q, orientation, transparent, limit)

LIBRARY FIRST. Browse Picorn's own libraries (photos, wallpapers, vector illustrations, ~300k icons, stickers, textures, shapes, badges) and SEE the hits as one numbered contact sheet. Free, also without an account. This is the same search the Blueprint engine runs: once a hit fits, write `search q1 <kind> "<words>"` with the same kind and words in picorn_blueprint_compile and the compile gets these pictures in this order (wallpaper → background, vector → illustration). Words may be German or English; short concrete English nouns match best. Generating a picture costs credits and is the exception: only when nothing here fits and the design would benefit massively.

Input Schema

{
  "type": "object",
  "properties": {
    "kind": {
      "type": "string",
      "enum": [
        "photo",
        "background",
        "wallpaper",
        "illustration",
        "vector",
        "icon",
        "sticker",
        "texture",
        "shape",
        "badge"
      ]
    },
    "q": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "orientation": {
      "type": "string",
      "enum": [
        "portrait",
        "landscape",
        "square"
      ]
    },
    "transparent": {
      "type": "boolean"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 12
    }
  },
  "required": [
    "kind",
    "q"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢picorn_search_icons(query, style, visualStyle, limit)

Search Picorn's vector icon library before composing a design.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 1
    },
    "style": {
      "type": "string",
      "enum": [
        "mono",
        "color"
      ]
    },
    "visualStyle": {
      "type": "string",
      "enum": [
        "lineart",
        "monoline",
        "rounded",
        "bulky",
        "sketch",
        "artistic",
        "geometric",
        "stamp"
      ]
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 25
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢picorn_search_areas(aspect, style, limit)

Find approved torn, wavy, blob, banner and other decorative shapes for a design.

Input Schema

{
  "type": "object",
  "properties": {
    "aspect": {
      "type": "string",
      "enum": [
        "square",
        "tall",
        "wide"
      ]
    },
    "style": {
      "type": "string"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢picorn_blueprint_spec

Return the complete Picorn Blueprint Language (PBL) spec: syntax, design rules, a full example and the repair patch rules. Read it once before writing PBL. PBL is a compact line language: regions + stacks, library asset search, components, every editor effect. The engine measures text with real fonts and does all geometry.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢picorn_blueprint_examples

Return reviewed PBL showcase posts (photo-led post, tips carousel with master, type-led story, typographic event) that compile with 0 errors. Use them to learn proven structure, spacing and effect choices; write new copy, colours and fonts from the brief instead of reusing theirs.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢picorn_blueprint_compile(pbl, blueprintId, patch, preview)

Compile a PBL document you wrote (pbl) or apply #id patch lines to an earlier compile (blueprintId + patch). No model is called: Picorn searches the curated asset libraries, measures text with the real fonts, lays out, reviews and renders. Returns blueprintId, errors/warnings with codes and fixes, the scene report + ASCII wireframe (exact boxes, colours, effects, search hits), the canonical source and an inline preview of every slide. Patches reuse the cached asset searches, so iterate with small patches until errors=0 and the preview is visually finished. blueprintId alone re-sends the current revision (preview and report) without compiling. Set preview:false for an even faster text-only check. A line `search q2 generate photo "…"` (or `generate text` for lettering-heavy mockups) creates a NEW picture as ref when the library has nothing fitting; Library first: browse with picorn_search_library (or use search lines in picorn_blueprint_compile), and generate only when the design would benefit massively from a new picture (no fitting hero photo exists). Generation needs a connected Picorn account with credits; it is charged at 1.2 × the fal price (a Krea 2 Turbo picture of about 1 MP costs about 1 ct). Generated pictures are cached in the blueprint, so patches never pay twice.

Input Schema

{
  "type": "object",
  "properties": {
    "pbl": {
      "type": "string",
      "maxLength": 60000,
      "description": "Full PBL document starting with \"pbl v1\". Creates a new blueprintId."
    },
    "blueprintId": {
      "type": "string",
      "description": "From an earlier compile, together with patch (or alone to see the current revision again)."
    },
    "patch": {
      "type": "string",
      "maxLength": 20000,
      "description": "Repair lines, e.g. \"#title size=96 color=primary\" or \"#n12 delete\"."
    },
    "preview": {
      "type": "boolean",
      "description": "Render the inline preview. Default true."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡picorn_blueprint_create_file(blueprintId, title, caption, tags, workspaceProjectId, ...)

Turn a compiled blueprintId into a persistent, fully editable Picorn editor file (native text, shape and image layers through the editor importer), render every slide and return the editorUrl, render URLs and a contact sheet. With a Picorn access token the file lands in your account and can be linked to a campaign idea (campaignId + ideaId) and scheduled with picorn_posts_schedule.

Input Schema

{
  "type": "object",
  "properties": {
    "blueprintId": {
      "type": "string",
      "minLength": 1
    },
    "title": {
      "type": "string",
      "maxLength": 160
    },
    "caption": {
      "type": "string",
      "maxLength": 2200,
      "description": "Post caption stored on the file and used when scheduling."
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 80
      },
      "maxItems": 30
    },
    "workspaceProjectId": {
      "type": "string"
    },
    "workspaceProjectKey": {
      "type": "string"
    },
    "campaignId": {
      "type": "string"
    },
    "ideaId": {
      "type": "string"
    },
    "allowErrors": {
      "type": "boolean",
      "description": "Create the file although the last compile still reports errors. Default false."
    }
  },
  "required": [
    "blueprintId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡picorn_posts_upload_video(mediaBase64, contentType, caption)

Upload an existing MP4, WebM or MOV clip to your own Picorn account. No video generation, editing or rendering. Pass raw mediaBase64 and contentType; maximum 15 MB decoded. Download a licensed source clip in your client first; a webpage URL is not video bytes. Returns fileId, mediaUrl and published:false. Inspect the clip, then publish with picorn_posts_schedule using that fileId, exact accountIds and publishNow:true or scheduledAt. Upload alone does not publish or incur a social posting charge. Requires account access.

Input Schema

{
  "type": "object",
  "properties": {
    "mediaBase64": {
      "type": "string",
      "minLength": 1,
      "maxLength": 20971520
    },
    "contentType": {
      "type": "string",
      "enum": [
        "video/mp4",
        "video/webm",
        "video/quicktime"
      ]
    },
    "caption": {
      "type": "string",
      "maxLength": 2200
    }
  },
  "required": [
    "mediaBase64",
    "contentType"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢picorn_account_status

Show which Picorn account the MCP is connected to and its connected social media accounts. Requires a personal Picorn access token; without one it explains how to connect.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡picorn_social_accounts_connect(platform)

Create an OAuth link that connects a social media account to the user's Picorn account. Give the authUrl to the user to open in a browser, then check picorn_account_status. Requires a Picorn access token.

Input Schema

{
  "type": "object",
  "properties": {
    "platform": {
      "type": "string",
      "enum": [
        "instagram",
        "tiktok",
        "facebook",
        "x",
        "linkedin",
        "youtube",
        "pinterest",
        "threads"
      ]
    }
  },
  "required": [
    "platform"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡picorn_campaigns_create(topic, description, ideas, workspaceProjectId, workspaceProjectKey)

Create a campaign in the user's Picorn account from agent-authored post ideas (no model is called). The campaign lives in a marketing project: pass workspaceProjectId + workspaceProjectKey from picorn_projects_create, or omit both to create a new project named after the topic. Returns campaignId and one ideaId per idea. Create each post file with the same workspace plus campaignId + ideaId, then schedule it with picorn_posts_schedule. Requires a Picorn access token.

Input Schema

{
  "type": "object",
  "properties": {
    "topic": {
      "type": "string",
      "minLength": 1,
      "maxLength": 500
    },
    "description": {
      "type": "string",
      "maxLength": 1000,
      "description": "Campaign goal, audience or promise."
    },
    "ideas": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "hook": {
            "type": "string",
            "minLength": 1,
            "maxLength": 500
          },
          "title": {
            "type": "string",
            "maxLength": 200
          },
          "caption": {
            "type": "string",
            "maxLength": 2200,
            "description": "Post caption for this idea."
          },
          "cta": {
            "type": "string",
            "maxLength": 300
          },
          "angle": {
            "type": "string",
            "maxLength": 300
          }
        },
        "required": [
          "hook"
        ],
        "additionalProperties": false
      },
      "maxItems": 50
    },
    "workspaceProjectId": {
      "type": "string"
    },
    "workspaceProjectKey": {
      "type": "string"
    }
  },
  "required": [
    "topic"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢picorn_campaigns_list

List the user's campaigns with their ideas and the files linked to each idea. Requires a Picorn access token.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢picorn_campaigns_inspect(campaignId)

Read one campaign with its ideas and linked file IDs. Requires a Picorn access token.

Input Schema

{
  "type": "object",
  "properties": {
    "campaignId": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "campaignId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢picorn_media_list(limit, cursor, includeGenerated)

List the photos the user already uploaded to Picorn (newest first), so a post can be built from them without uploading again. Returns mediaId, imageUrl, thumbnailUrl and pixel size per photo. Pass a mediaId to picorn_editor_import_image, or use the imageUrl directly in an image layer. includeGenerated: true also lists images Picorn generated for the user. Page with nextCursor. Requires a Picorn access token.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "description": "Default 30."
    },
    "cursor": {
      "type": "string",
      "description": "nextCursor from the previous page."
    },
    "includeGenerated": {
      "type": "boolean"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢picorn_files_list(limit, cursor)

List the user's own Picorn files (posts and slideshows, newest first) with fileId, title, project, aspect ratio, thumbnail and editorUrl. No workspace key is needed. Any fileId can be scheduled with picorn_posts_schedule; files made in the web editor post the slides Picorn last rendered for them. Files with mcpEditable: true can also be changed with the picorn_editor_* tools. Page with nextCursor. Requires a Picorn access token.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "description": "Default 20."
    },
    "cursor": {
      "type": "string",
      "description": "nextCursor from the previous page."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡picorn_posts_schedule(fileId, platforms, accountIds, scheduledAt, publishNow, ...)

Schedule a finished static Picorn file (one image, or several slides as one carousel), or an existing video from picorn_posts_upload_video, on the user's connected social accounts for the given platforms. Static MCP files are re-rendered; uploaded videos publish the original bytes without rendering. scheduledAt is ISO-8601 with timezone (e.g. 2026-11-02T09:00:00+01:00); publishNow: true posts immediately. Calling it again for the same file reschedules the existing post. Each post costs $0.02 from the Picorn balance. With several accounts on one platform pass accountIds (from picorn_account_status); otherwise the first connected account per platform posts. The file must belong to the user: created while connected with the token, or listed by picorn_files_list. Requires a Picorn access token.

Input Schema

{
  "type": "object",
  "properties": {
    "fileId": {
      "type": "string",
      "minLength": 1
    },
    "platforms": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "instagram",
          "tiktok",
          "facebook",
          "x",
          "linkedin",
          "youtube",
          "pinterest",
          "threads",
          "bluesky"
        ]
      },
      "minItems": 1,
      "maxItems": 9
    },
    "accountIds": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1
      },
      "maxItems": 20,
      "description": "Exact accountIds from picorn_account_status. Each must be on one of the platforms."
    },
    "scheduledAt": {
      "type": "string"
    },
    "publishNow": {
      "type": "boolean"
    },
    "caption": {
      "type": "string",
      "maxLength": 2200,
      "description": "Overrides the file caption."
    },
    "render": {
      "type": "boolean",
      "description": "Re-render before scheduling. Default true."
    },
    "platformConfigurations": {
      "type": "object",
      "additionalProperties": {},
      "description": "Post for Me platform_configurations keyed by platform, e.g. { \"instagram\": { \"placement\": \"timeline\" } }."
    }
  },
  "required": [
    "fileId",
    "platforms"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢picorn_posts_list(from, to, limit)

List the user's scheduled and published posts in a time window (ISO dates). Requires a Picorn access token.

Input Schema

{
  "type": "object",
  "properties": {
    "from": {
      "type": "string"
    },
    "to": {
      "type": "string"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴picorn_posts_cancel(fileId)

Cancel the scheduled post of a file before it is published; it is removed from the social media scheduler. Requires a Picorn access token.

Input Schema

{
  "type": "object",
  "properties": {
    "fileId": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "fileId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded44 tools
verifiedversion not recorded44 tools
verifiedversion not recorded32 tools
verifiedversion not recorded32 tools
verifiedversion not recorded32 tools
verifiedversion not recorded32 tools