Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,547Letters: 14Defects: 1,324counted 4 min ago
teppi

Server definition

Hash
sha256:938e964651852cddb78397b2f2d25cff521ea3069243236271313820827591d6
What it is
What a remote MCP server returned when asked what it offers: 11 tools

The blob, as servednamed by its sha256

{ "instructions": "Keyframer (keyframer.dev) is a visual animation editor that generates production React Native Reanimated v4 code. Workflow for building an animation: get_scene_format → author scene JSON → validate_scene (iterate until clean) → create_scene (opens in the visual editor, returns a phone-scannable QR) → update_scene to iterate → generate_code. For known patterns start from search_recipes/get_recipe — recipes include ready, verified code. No key needed for exploration or for create_scene (which then makes a public 24-hour guest scene the user can keep by signing up and pressing Remix). list_scenes/get_scene/update_scene need an API key; generate_code needs a key on a paid plan (Starter and up).", "tools": [ { "description": "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).", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "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" }, "name": { "description": "Scene name shown in the editor (default \"MCP scene\")", "maxLength": 120, "type": "string" }, "scene": { "anyOf": [ { "type": "string" }, { "additionalProperties": {}, "propertyNames": { "type": "string" }, "type": "object" } ], "description": "The scene as a JSON object (preferred) or a JSON string. Call get_scene_format for the shape." } }, "required": [ "scene" ], "type": "object" }, "name": "create_scene", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "api": { "description": "Default \"reanimated\"", "enum": [ "reanimated", "animated" ], "type": "string" }, "gesture_handler_version": { "description": "react-native-gesture-handler major (default v2)", "enum": [ "v2", "v3" ], "type": "string" }, "relative_positioning": { "description": "Emit flex-relative layout instead of absolute coordinates", "type": "boolean" }, "scene": { "anyOf": [ { "type": "string" }, { "additionalProperties": {}, "propertyNames": { "type": "string" }, "type": "object" } ], "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" } }, "type": "object" }, "name": "generate_code", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "scene_id": { "description": "Scene id from create_scene or list_scenes", "type": "string" } }, "required": [ "scene_id" ], "type": "object" }, "name": "get_preview_qr", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "id": { "description": "Alias for slug — a scene id from a recipe works too", "type": "string" }, "include_code": { "description": "Include generated code (default true)", "type": "boolean" }, "scene_id": { "description": "When a recipe has several scenes, pick one (defaults to the first)", "type": "string" }, "slug": { "description": "Recipe slug from search_recipes", "type": "string" } }, "type": "object" }, "name": "get_recipe", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "id": { "description": "Scene id from list_scenes or an editor URL", "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "get_scene", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "section": { "description": "Default \"scene\"", "enum": [ "scene", "nodes" ], "type": "string" } }, "type": "object" }, "name": "get_scene_format", "outputSchema": null }, { "description": "List the scenes in the connected Keyframer account (id, name, updated, visibility). Requires an API key.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": {}, "type": "object" }, "name": "list_scenes", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "element_ids": { "description": "Only report these element ids", "items": { "type": "string" }, "type": "array" }, "samples": { "description": "Sample count across the duration (default 9)", "maximum": 25, "minimum": 3, "type": "integer" }, "scene": { "anyOf": [ { "type": "string" }, { "additionalProperties": {}, "propertyNames": { "type": "string" }, "type": "object" } ], "description": "The scene as a JSON object (preferred) or a JSON string. Call get_scene_format for the shape." } }, "required": [ "scene" ], "type": "object" }, "name": "sample_scene", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "category": { "enum": [ "guides", "keyframes", "node-graphs", "shaders", "timing", "gestures", "scroll-lists" ], "type": "string" }, "limit": { "maximum": 25, "minimum": 1, "type": "integer" }, "query": { "description": "What to build, e.g. \"snap carousel with parallax\" or \"countdown ring\"", "type": "string" } }, "required": [ "query" ], "type": "object" }, "name": "search_recipes", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "make_public": { "description": "Change public visibility (unchanged if omitted)", "type": "boolean" }, "name": { "description": "New name (unchanged if omitted)", "maxLength": 120, "type": "string" }, "scene": { "anyOf": [ { "type": "string" }, { "additionalProperties": {}, "propertyNames": { "type": "string" }, "type": "object" } ], "description": "The scene as a JSON object (preferred) or a JSON string. Call get_scene_format for the shape." }, "scene_id": { "description": "Scene id from create_scene or list_scenes", "type": "string" } }, "required": [ "scene_id", "scene" ], "type": "object" }, "name": "update_scene", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "scene": { "anyOf": [ { "type": "string" }, { "additionalProperties": {}, "propertyNames": { "type": "string" }, "type": "object" } ], "description": "The scene as a JSON object (preferred) or a JSON string. Call get_scene_format for the shape." } }, "required": [ "scene" ], "type": "object" }, "name": "validate_scene", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:938e964651852cddb78397b2f2d25cff521ea3069243236271313820827591d6 | sha256sum