MCP.Market

Keyframer Inspector MCP server

by keyframer.dev·dev.keyframer/inspector·v0.4.0·3 stars

Give your agent eyes for motion: record, slow down and test animations in mobile apps

B80/100grade B
What users say
No reviews yet
Be the first
Safety scan
B80/100

full report

Adoption
Growing

3 stars83 downloads/wk

Reviews

Write one

Nobody has reviewed Keyframer Inspector yet.

If you have run it, two minutes of your experience saves the next person an afternoon.

Keyframer Inspector tools (23, 2 write)

write = sends, deletes, buys or posts

Read from the package source without running it. The installed server may list more.

  • capture_frame

    A screenshot of the app. With atMs, first shows that moment of the last recording. Needs an app that can capture its screen (inspector_status says how to set it up).

  • check

    Start a fix loop: measure the app and keep the result as the baseline recheck compares with. Scenarios (default all the app registered) run the median of several runs after a warm-up, each from a clean start (the app's reload). Or a recording: a .kfrec.json file (with sourceMap for a preview build), or "current" for the last recording; each of its problems is then verified by a scenario that repro

  • compare

    Compare two recorded sessions (ids from record / stop_recording / run_scenario, default the last two): frame rates, frames lost, longest frames, rendering, JS task and worklet time, and which problems were fixed, remain or are new.

  • export_recording

    Render the last recording to a GIF or MP4 file, frame by frame from the app (needs captureScreen). MP4 needs ffmpeg on the PATH; GIF does not.

  • field_compare

    Compare two versions of a Motion Vitals project, the way its Versions page does: hitch time, slow and frozen frames, janky sessions, and every problem call site as Worse, Came back, New, Still there, Better, Fixed or Ignored, with its drop rate in each version. Default: the latest version against the one before it with enough sessions. After a fix ships, it says whether the field problem is Fixed.

  • field_problems

    The top field problems of a Motion Vitals project (slow frames from production, keyframer.dev/app/vitals), most frames lost first, in the dashboard's words: where each is (call site and screen), how many frames it drops while it runs against its screen's baseline, the devices and OS where it is worst, the causes of its slow frames, its status (New, Came back, Worse, Ongoing, Resolving, Fixed, Igno

  • get_screenshot

    A screenshot the recording took on the device (recordings made on the device carry a few): the one shown at atMs.

  • get_trace

    A session as a timeline: frame drops, JS tasks with where they are written, UI worklets over 2 ms a frame, React commits with the components that rendered and why, animations with symbolicated stacks, logs.

  • inspector_status

    Which app is connected through Metro, the scenarios it registered, the recorded sessions, the shared values (useSharedValue) it has rendered, the worklet mistakes in its code that crash it (with the fix), and what animates now as the app counts it: animated styles and shared values mounted on the screen, what each value drives (fan-out), animation starts per frame by call site, rows that remount,

  • lint_project

    Read the project's source for the mistakes the inspector's Babel plugin finds while Metro builds it, without running the app (keyframer-inspect lint): worklet crashes (a worklet using a value declared after it, or calling a JS function on the UI thread; severity crash, always listed) and motion mistakes that do not crash

  • list_recordings

    The recordings in this project's library (.keyframer/recordings), newest first: ones made on a device, saved in the panel or with save_recording, and the ones kept automatically when a recording stops (the panel's, record's, stop_recording's and run_scenario's; marked automatic, only the newest are kept), with the titles they were renamed to.

  • open_recording

    Open a recording file (.kfrec.json) made on a device (Motion Scan record button) or saved from the panel. It becomes the recording every other tool reads; returns its report. A recording from a build without Metro (an internal preview build) has raw stacks: pass that build's source map to map them to source lines.

  • play

    Play the last recording back into the app in real time, from a moment (default the start).

  • recheck

    Measure what check measured again, the same way, and compare with check's baseline. Returns Fixed (gone, and its animations still start and its values still move), Still there, New, Removed (gone because its animation or value stopped: not a fix), Not verifiable, the numbers before and after, and done: true or false with the reason. Call it after a change has reloaded in the app (Fast Refresh, hot

  • record

    Record the app for a while: every shared value (also ones that mount mid-recording), both threads' frame rates and long frames, animations with call sites and stacks, React commits with why components rendered, JS tasks (handlers, effects, timers) and UI-thread worklet time. A person interacts with the app meanwhile (or pass replay: true). Returns the problems found, ranked, each with where it is

  • replaywrite action

    Run the app's registered replay (registerReplay): re-mount the screen, re-run its entrance.

  • run_scenariowrite action

    Run one of the app's registered scenarios (registerScenario: a reproducible interaction, like opening a sheet or scrolling a feed) while recording, and report the problems. Run it before and after a change, then compare the two sessions to check the fix.

  • save_recording

    Keep the last recording for good in the library, as a .kfrec.json file the dev tools panel can open. record, stop_recording and run_scenario keep each recording automatically (only the newest automatic ones stay): saving one of those keeps that copy instead of writing a second one.

  • scrub

    Set every recorded shared value to its value at a moment of the last recording, so the app shows that frame.

  • select_app

    Pick which connected app the other tools inspect, when several are connected to the Keyframer Inspector desktop app (inspector_status lists them). Omit app to follow the newest.

  • set_time

    Slow down, pause or step the app's animations on the device, to watch a fast animation or a glitch frame by frame (capture_frame shows the screen). scale: 1 is normal speed, 0.5 half, 0.25 a quarter, 0.1 a tenth, 0 paused. step, with scale 0: advance that many frames at the display's refresh rate, then hold again. Returns the speed the app says it runs at now; every panel shows the same. Recording

  • start_recording

    Start recording the app and return at once, so you can drive it with another tool between this call and stop_recording: taps, swipes and flows from a simulator agent (Argent, agent-device, Maestro) or anything else. Records what record does (every shared value, both threads' frame rates and long frames, animations with call sites, React commits, JS tasks, UI-thread worklet time). One recording at

  • stop_recording

    Stop the recording start_recording began and report the problems found, ranked, each with where it is written and how to fix it: the same report as record. The session is kept for get_trace, compare, save_recording and export_recording. Says so when the recording stopped early: the app disconnected or restarted, or the cap was reached.

Public scan report

scanner v0.1.10 · 2026-10-24 · same rubric, same numbers if you re-run it

no findings
  • Code scan64 source files scanned25/25
  • –Live reliabilityno gateway calls yet and no remote to proben/a
  • –Tool poisoningtools not inspected (local package is not executed); not countedn/a
  • Auth qualitystatic API keys via environment variables6/15
  • Maintenancelast push 1 days ago15/15
  • Maintainer identitynamespace and repository owner differ; website matches verified namespace6/10
Overall 80/100. Components that don't apply are left out of the denominator. Any critical finding is an F.RubricAppeal a findingJSON

How Keyframer Inspector compares

Against every graded AI and agents MCP server, from our own scans and uptime checks. Updated after each scan run.

Safety score
80/100
higher than 60% of 4,460 AI and agents servers
Tools
23
the typical AI and agents server has 6
Tools that change things
9%
typical: 0%. Fewer write tools means less an agent can break
GitHub stars
3
more than 75% of 2,711 AI and agents servers
Downloads a week
83
more than 60% of 1,538 AI and agents servers with a package

What its tools let an agent do: 16 read · 2 create · 2 change · 3 run or deploy

Install Keyframer Inspector in Claude Code, Cursor or VS Code

Runs npx -y @keyframerdev/inspector on your machine. Read the scan report first; the gateway never runs local packages.

claude mcp add inspector -- npx -y @keyframerdev/inspector
Add to Cursor

What the publisher says

From the Keyframer Inspector repository's README, as published. We do not edit it. Read it on GitHub

Keyframer Inspector

A motion debugger for apps. Every animation, with the line of code that started it, what it cost, and why frames dropped, recorded on the device and scrubbed like a video. Tune a duration or a spring and write the numbers back to your source. Hand the recording to a coding agent over MCP, or gate pull requests on it in CI.

https://github.com/user-attachments/assets/81d909d3-64fb-431b-a06f-1d20da5d5952

This repository holds the SDKs that go into your app, for every platform, under MIT.

The apps connect to Keyframer Inspector, the desktop app (below). React Native apps can also use the panel inside Expo's dev tools, no desktop app needed.

Quick start

React Native. Add the Babel plugin in development (before react-native-worklets/plugin), connect, then press shift+m in Metro and open @keyframerdev/inspector. The npm README has the details, bare React Native included, and react-native/example is an Expo app with it all set up.

// babel.config.js (Expo)
plugins: process.env.NODE_ENV !== 'production' ? ['@keyframerdev/inspector/babel'] : []
// your root layout
if (__DEV__) require('@keyframerdev/inspector/devtools').connectDevTools({ app: 'MyApp' })

iOS.

import KeyframerInspector

#if DEBUG
KeyframerInspector.start()                              // simulator: ws://127.0.0.1:8790
KeyframerInspector.start(.init(host: "192.168.1.20"))   // a device: the Mac's LAN address
#endif

Android.

// Application.onCreate (debuggable builds only)
Keyframer.start(this)
ObjectAnimator.ofFloat(title, View.ALPHA, 0f, 1f).kfTrack("title").start()

Flutter.

void main() => runApp(const KeyframerInspector(app: 'My app', appPackage: 'my_app', child: MyApp()));

Each folder's README covers the API, what is reported and how, and its tests.

The desktop app

Keyframer Inspector for macOS (Apple silicon and Intel) is where every SDK connects. Download it from Releases. It is free, signed and notarized, and keeps itself up to date.

ws://:8790: simulators and emulators on their own, devices on the same network with the address the status bar shows. Several apps at once, with a switcher.

  • Every platform, one place. iOS, Android, Flutter and React Native apps connect to it on

every animation as segments you can click to tune (duration, delay, spring) live, then apply the numbers to your source. Problems come ranked by the frames they cost, each with where it is, what was running and the fix. Compare two sessions, before and after a change. Open any step in Cursor, VS Code, Zed or Xcode.

  • The panel. Record, then drag to scrub: the app follows, back to the screen it was on. Tracks show

Claude Code, Codex, Cursor, VS Code, Windsurf, Zed and Claude Desktop can record your app, run its scenarios, read the trace and the problems, and take screenshots. With check and recheck an agent runs the fix loop: measure, change the code, measure again, until the problems are gone and the motion still works. Settings shows the setup for each client; for Claude Code:

  • An MCP server for coding agents. Built in, one switch in Settings, and nothing else to install.
claude mcp add --transport http keyframer-inspector http://127.0.0.1:8789/mcp

Shortened. The full README is on GitHub.

Nothing above is checked by us. What we check is on the safety report.

Keyframer Inspector: common questions

Is Keyframer Inspector MCP server safe?
Mostly: it is graded B (80/100). Read the Keyframer Inspector safety report
How do I install Keyframer Inspector?
It runs on your machine. Copy the Claude Code, Cursor, VS Code or Claude Desktop config from the install section.
Does Keyframer Inspector need an API key?
Yes. The registry entry asks for KEYFRAMER_VITALS_READ_KEY.
Is Keyframer Inspector maintained?
The last commit was 12 days ago (2026-10-23). The latest release is v0.4.0.
What can I use instead of Keyframer Inspector?
Servers from other publishers that do the same job: agent-device MCP server, Mockserver MCP server and Figma Context MCP server.
How does Keyframer Inspector compare with other AI and agents MCP servers?
safety score 80/100 (higher than 60% of 4,460 AI and agents servers); tools 23 (the typical AI and agents server has 6); tools that change things 9% (typical: 0%. Fewer write tools means less an agent can break). Full comparison.

Alternatives to Keyframer Inspector

Same job from other publishers: the closest match first, then the best rated.

  • agent-device
    Open source device layer for AI agents: control mobile, web, TV, and desktop apps over MCP
    A
  • Mockserver
    Mock, record/replay, verify and chaos-test any HTTP, REST, gRPC or LLM dependency over MCP.
    A
  • Figma Context
    Give your coding agent access to your Figma data. Implement designs in any framework in one-shot.
    B
  • agent-device
    Let AI agents inspect, control, and debug real iOS, Android, desktop, and TV apps
    A
  • CHAP Coordinator
    Auditable records of human decisions over AI agent work. Approvals, edits, overrides, escalations.
    A