Keyframer
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
150+ React Native animation recipes, scene authoring, phone preview via QR, Reanimated v4 codegen
| Author | dev.keyframer |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 2177 ms |
| Last measured | 2026-10-24 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"Keyframer": {
"url": "https://api.keyframer.dev/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (11)
search_recipesread-onlySearch 150+ free Keyframer recipes (bounce, carousels, progress rings, particles, text effects, shaders, scroll animations…). Each recipe has a scene + verified React Native Reanimated code. Returns slugs for get_recipe.
Parameters:
query(required) — string — What to build, e.g. "snap carousel with parallax" or "countdown ring"limit— integercategory— string
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
get_reciperead-onlyFetch one recipe by slug: metadata, the scene JSON (usable as a starting point for create_scene), and the generated React Native Reanimated component code. Recipe code is free to use.
Parameters:
id— string — Alias for slug — a scene id from a recipe works tooslug— string — Recipe slug from search_recipesscene_id— string — When a recipe has several scenes, pick one (defaults to the first)include_code— boolean — Include generated code (default true)
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
get_scene_formatread-onlyThe Keyframer scene JSON format — read this before authoring a scene. Section "scene" covers elements/keyframes/easing; section "nodes" covers node graphs (procedural animation: clocks, springs, repeaters) with the full node-type schema.
Parameters:
section— string — Default "scene"
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
validate_sceneread-onlyValidate a scene against the Keyframer format before create_scene or generate_code. Returns errors (must fix) and warnings (advisory). Free to call — iterate until clean.
Parameters:
scene(required) — The scene as a JSON object (preferred) or a JSON string. Call get_scene_format for the shape.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
sample_sceneread-onlyNumerically preview a scene: evaluates keyframes AND node graphs at N evenly spaced times and returns each moving prop as a value series (the same math the editor preview runs). validate_scene checks structure — this checks MOTION: confirm ranges, spring overshoot, stagger offsets, and that elements actually move before create_scene. Free to call — iterate: author → sample → adjust.
Parameters:
scene(required) — The scene as a JSON object (preferred) or a JSON string. Call get_scene_format for the shape.samples— integer — Sample count across the duration (default 9)element_ids— array — Only report these element ids
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
create_sceneSave a scene and get an editor URL where it opens in the visual editor (timeline, canvas, node graphs, mobile QR preview). Validates first. Works without a key: the scene is then a public 24-hour guest scene with a scannable QR, kept forever by signing up (free) and pressing Remix. With a key it saves to the account (free accounts up to the free scene limit, paid unlimited).
Parameters:
scene(required) — The scene as a JSON object (preferred) or a JSON string. Call get_scene_format for the shape.name— string — Scene name shown in the editor (default "MCP scene")make_public— boolean — Make the scene publicly viewable — its share link (keyframer.dev/share/<id>) and QR then work for anyone, not just this account
Hints: read-only no · destructive no · idempotent no · open-world not declared
update_scenedestructiveReplace the content of one of your scenes (full scene JSON, validated first) — the edit loop for iterating instead of duplicating. Live previews watching the scene update in place. Requires an API key; own scenes only.
Parameters:
scene_id(required) — string — Scene id from create_scene or list_scenesscene(required) — The scene as a JSON object (preferred) or a JSON string. Call get_scene_format for the shape.name— string — New name (unchanged if omitted)make_public— boolean — Change public visibility (unchanged if omitted)
Hints: read-only no · destructive yes · idempotent not declared · open-world not declared
list_scenesread-onlyList the scenes in the connected Keyframer account (id, name, updated, visibility). Requires an API key.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
get_sceneread-onlyFetch one of your scenes (or any public scene) as JSON — edit it and re-save with update_scene, or feed it to generate_code. Requires an API key.
Parameters:
id(required) — string — Scene id from list_scenes or an editor URL
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
get_preview_qrread-onlyA terminal-scannable QR code for a scene. Scan it with a phone camera and the scene runs live in the Keyframer preview app on real hardware — edits sync as they happen. Public scenes (including guest scenes) work without a key; private scenes need an API key on a paid plan.
Parameters:
scene_id(required) — string — Scene id from create_scene or list_scenes
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
generate_coderead-onlyCompile a scene into a runnable React Native component. Pass inline scene JSON or a scene_id from your account. Output targets Reanimated v4 by default ("animated" targets the RN core Animated API, reduced feature set). Deterministic — no AI, no credits. Requires an API key on a paid plan.
Parameters:
api— string — Default "reanimated"scene— The scene as a JSON object (preferred) or a JSON string. Call get_scene_format for the shape.scene_id— string — Generate from a saved scene instead of inline JSONrelative_positioning— boolean — Emit flex-relative layout instead of absolute coordinatesgesture_handler_version— string — react-native-gesture-handler major (default v2)
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.