# Picorn

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

- name: io.github.cueqzapper/picorn
- version: 2.2.0
- connection class: R0 (autonomous)
- trust: 76/100 flags: no-repository
- quality: 63/100 (needs work)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.cueqzapper%2Fpicorn
- tools: https://api.protogrid.dev/v1/servers/io.github.cueqzapper%2Fpicorn/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "picorn": {
      "type": "http",
      "url": "https://picorn.com/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 99
- freshness: 85
- provenance: 45
- drivers: +website +reachable +uptime-97% ~updated-68d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 63/100 (needs work)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 71 (weight 30)

- pass `tools.descriptions`: every tool has a description
- warn `tools.description_length`: 1 tools have descriptions over 1,024 characters, which crowds the context
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 44 of 44 tools declare readOnlyHint or destructiveHint
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: picorn_editor_reorder_layers (destructiveHint, idempotentHint); picorn_projects_update (destructiveHint, idempotentHint); picorn_design_image (destructiveHint, idempotentHint); …
- warn `tools.token_cost`: about 8,912 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 25 (weight 15)

- warn `stability.changes`: 34 tool changes in 30 days
- fail `stability.rug_pull`: 3 tools kept their name but changed most of their description in 30 days; review before trusting them

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 44, about 8,912 tokens to load them all
- tool set hash: 2a3e7305c9102d803eaaacfc96b2fb2d
- tools last changed: 2026-10-20T06:06:43.279Z
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.cueqzapper/picorn.svg)](https://protogrid.dev/servers/io.github.cueqzapper/picorn)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-20 `picorn_video_render_project` removed
  - Render the native timeline to a finished MP4/H.264 or WebM/VP9 file. The render includes multi-slide sequencing, timed layers, video frames, keyframe animation and mixed audio, and returns a public video URL plus /video/editor link.
- 2026-10-20 `picorn_video_add_clip` removed
  - Add a video or audio clip to a Picorn timeline. Source URLs must use an approved public media host. Video positions are center coordinates; timing and trim values are frame-based.
- 2026-10-20 `picorn_video_import_media` removed
  - Upload agent-owned MP4, WebM, MOV, MP3, WAV, AAC, M4A or OGG bytes into Picorn storage for use by video/audio timeline layers. Maximum 15 MB.
- 2026-10-20 `picorn_video_create_project` removed
  - Create a persistent video project with a real 30fps timeline, native layers, keyframes and a canonical /video/editor link.
- 2026-10-20 `picorn_posts_schedule` changed (description)
  - before: Schedule a finished static Picorn file (one image, or several slides as one carousel) on the user's connected social accounts for the given platforms. The file is re-rendered first so the post shows its current state. 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.
  - after: 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.
- 2026-10-20 `picorn_posts_upload_video` added
  - 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.
- 2026-10-20 `picorn_blueprint_compile` changed (description, inputSchema)
  - before: 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. 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.
  - after: 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.
- 2026-10-20 `picorn_editor_add_layer` changed (description)
  - before: Add a native editor layer. Supported types: text, image, shape, group, qr, video, audio. 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, timeline ranges, trims, volume, and keyframes. Returns the changed slide as an inline preview automatically.
  - after: 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.
- 2026-10-19 `picorn_blueprint_compile` changed (description)
  - before: 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. 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: search picorn_search_icons 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.
  - after: 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. 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.
- 2026-10-19 `picorn_search_library` added
  - 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.

Full history: https://api.protogrid.dev/v1/servers/io.github.cueqzapper%2Fpicorn/changes

## Remotes

- https://picorn.com/mcp (streamable-http, auth none, reachable true, uptime30d 0.9741379)

## Packages

_none_

## Tools (44)

- `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.
- `picorn_blueprint_compile`: 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.
- `picorn_blueprint_create_file`: 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.
- `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.
- `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.
- `picorn_campaigns_create`: 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.
- `picorn_campaigns_inspect`: Read one campaign with its ideas and linked file IDs. Requires a Picorn access token.
- `picorn_campaigns_list`: List the user's campaigns with their ideas and the files linked to each idea. Requires a Picorn access token.
- `picorn_capabilities`: List live canvas formats, fonts, layouts, image models, GPU reachability and fair-use limits.
- `picorn_design_image`: 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.
- `picorn_edit_image`: 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.
- `picorn_editor_add_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.
- `picorn_editor_add_slide`: Add another slide to an editor project. Projects support up to 20 slides. Returns the new slide as an inline preview.
- `picorn_editor_align_layers`: Align positioned layers to their shared left, center, right, top, middle, or bottom bound.
- `picorn_editor_create_project`: 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.
- `picorn_editor_create_slideshow`: 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.
- `picorn_editor_delete_layers`: Delete one or more layers and clean their group references.
- `picorn_editor_delete_slide`: Delete a slide and its layers. A project always keeps at least one slide.
- `picorn_editor_distribute_layers`: Evenly distribute three or more positioned layers horizontally or vertically.
- `picorn_editor_duplicate_layer`: Duplicate a non-group layer, including all style, filter, effect, mask, and animation properties.
- `picorn_editor_group_layers`: Create the same metadata group used by the visual editor. Grouping preserves world positions and render output.
- `picorn_editor_import_image`: 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.
- `picorn_editor_inspect_project`: Read the complete project, including every slide, layer, property, z-index, and latest rendered image URL.
- `picorn_editor_render_project`: 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.
- `picorn_editor_reorder_layers`: Set layer order. objectIds are bottom-to-top; omitted existing IDs retain their relative order on top.
- `picorn_editor_ungroup_layers`: Remove a group while preserving all child layers.
- `picorn_editor_update_layer`: 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.
- `picorn_editor_update_slide`: Change a slide background, semantic role, or image prompt. Returns the changed slide as an inline preview.
- `picorn_files_list`: 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.
- `picorn_generate_image`: 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.
- `picorn_generate_vector_assets`: 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.
- `picorn_media_list`: 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.
- `picorn_posts_cancel`: Cancel the scheduled post of a file before it is published; it is removed from the social media scheduler. Requires a Picorn access token.
- `picorn_posts_list`: List the user's scheduled and published posts in a time window (ISO dates). Requires a Picorn access token.
- `picorn_posts_schedule`: 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.
- `picorn_posts_upload_video`: 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.
- `picorn_projects_create`: 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.
- `picorn_projects_inspect`: 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.
- `picorn_projects_update`: Update the name, description, or named color scheme of a marketing project, then return its complete file, asset, and brand index.
- `picorn_render_svg`: 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.
- `picorn_search_areas`: Find approved torn, wavy, blob, banner and other decorative shapes for a design.
- `picorn_search_icons`: Search Picorn's vector icon library before composing a design.
- `picorn_search_library`: 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.
- `picorn_social_accounts_connect`: 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.
