Keyframer

150+ React Native animation recipes, scene authoring, phone preview via QR, Reanimated v4 codegen

¿Debería usar esto?

Calidad y seguridad

A
Calidad de la descripción
100%
Integridad del esquema
86%
Calidad de los nombres
98%
Riesgo de envenenamiento
100%
Coincidencia de permisos
100%
Cumplimiento del protocolo
100%

Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.

Costo de contexto

~1,848Tokens (definiciones de herramientas)
~1.2 KBTamaño de respuesta típico
Impacto moderado en la atención (1.44% del contexto de 128k)

Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.

Instalar

Instalación con un clic

Agrega esto a tu archivo `claude_desktop_config.json`:

{
  "mcpServers": {
    "keyframer": {
      "url": "https://api.keyframer.dev/mcp"
    }
  }
}

Puntos de conexión remotos

https://api.keyframer.dev/mcpstreamable-http

Qué puede hacer

Inventario de herramientas

Herramientas (11)

🟢 Solo lectura🟡 Escritura🔴 Eliminación⚪ Desconocido
🟢search_recipes(query, category, limit)

Search 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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "What to build, e.g. \"snap carousel with parallax\" or \"countdown ring\""
    },
    "category": {
      "type": "string",
      "enum": [
        "guides",
        "keyframes",
        "node-graphs",
        "shaders",
        "timing",
        "gestures",
        "scroll-lists"
      ]
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 25
    }
  },
  "required": [
    "query"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_recipe(slug, id, scene_id, include_code)

Fetch 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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "slug": {
      "description": "Recipe slug from search_recipes",
      "type": "string"
    },
    "id": {
      "description": "Alias for slug — a scene id from a recipe works too",
      "type": "string"
    },
    "scene_id": {
      "description": "When a recipe has several scenes, pick one (defaults to the first)",
      "type": "string"
    },
    "include_code": {
      "description": "Include generated code (default true)",
      "type": "boolean"
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_scene_format(section)

The 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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "section": {
      "description": "Default \"scene\"",
      "type": "string",
      "enum": [
        "scene",
        "nodes"
      ]
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢validate_scene(scene)

Validate 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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "scene": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {}
        }
      ],
      "description": "The scene as a JSON object (preferred) or a JSON string. Call get_scene_format for the shape."
    }
  },
  "required": [
    "scene"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢sample_scene(scene, samples, element_ids)

Numerically 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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "scene": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {}
        }
      ],
      "description": "The scene as a JSON object (preferred) or a JSON string. Call get_scene_format for the shape."
    },
    "samples": {
      "description": "Sample count across the duration (default 9)",
      "type": "integer",
      "minimum": 3,
      "maximum": 25
    },
    "element_ids": {
      "description": "Only report these element ids",
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "scene"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡create_scene(scene, name, make_public)

Save 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).

Esquema de entrada

{
  "type": "object",
  "properties": {
    "scene": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {}
        }
      ],
      "description": "The scene as a JSON object (preferred) or a JSON string. Call get_scene_format for the shape."
    },
    "name": {
      "description": "Scene name shown in the editor (default \"MCP scene\")",
      "type": "string",
      "maxLength": 120
    },
    "make_public": {
      "description": "Make the scene publicly viewable — its share link (keyframer.dev/share/<id>) and QR then work for anyone, not just this account",
      "type": "boolean"
    }
  },
  "required": [
    "scene"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴update_scene(scene_id, scene, name, make_public)

Replace 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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "scene_id": {
      "type": "string",
      "description": "Scene id from create_scene or list_scenes"
    },
    "scene": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {}
        }
      ],
      "description": "The scene as a JSON object (preferred) or a JSON string. Call get_scene_format for the shape."
    },
    "name": {
      "description": "New name (unchanged if omitted)",
      "type": "string",
      "maxLength": 120
    },
    "make_public": {
      "description": "Change public visibility (unchanged if omitted)",
      "type": "boolean"
    }
  },
  "required": [
    "scene_id",
    "scene"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_scenes

List the scenes in the connected Keyframer account (id, name, updated, visibility). Requires an API key.

Esquema de entrada

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

Fetch 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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Scene id from list_scenes or an editor URL"
    }
  },
  "required": [
    "id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_preview_qr(scene_id)

A 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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "scene_id": {
      "type": "string",
      "description": "Scene id from create_scene or list_scenes"
    }
  },
  "required": [
    "scene_id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢generate_code(scene, scene_id, api, relative_positioning, gesture_handler_version)

Compile 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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "scene": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {}
        }
      ],
      "description": "The scene as a JSON object (preferred) or a JSON string. Call get_scene_format for the shape."
    },
    "scene_id": {
      "description": "Generate from a saved scene instead of inline JSON",
      "type": "string"
    },
    "api": {
      "description": "Default \"reanimated\"",
      "type": "string",
      "enum": [
        "reanimated",
        "animated"
      ]
    },
    "relative_positioning": {
      "description": "Emit flex-relative layout instead of absolute coordinates",
      "type": "boolean"
    },
    "gesture_handler_version": {
      "description": "react-native-gesture-handler major (default v2)",
      "type": "string",
      "enum": [
        "v2",
        "v3"
      ]
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Comunidad

Califica este servidor

Evidencia

Observaciones recientes

verificadoversión no registrada11 herramientas
verificadoversión no registrada11 herramientas