{"name":"io.github.EmirhanOzl/playproof","slug":"emirhanozl-playproof","title":"playproof","description":"See and playtest browser games: frame-by-frame motion, crash hunting, phone layouts, frame pacing.","url":"https://mcp.market/server/emirhanozl-playproof","rating":null,"grade":"A","score":92,"certified":false,"status":"active","category":"scraping","tags":["scraping"],"presence":{"score":33,"stars":0,"forks":0,"downloads_week":893,"last_push_at":"2026-10-22T20:46:00.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/EmirhanOzl/playproof","website":"https://github.com/EmirhanOzl/playproof","version":"0.3.2","remotes":[],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"playproof","version":"0.3.2","runtimeHint":"npx","transport":{"type":"stdio"},"packageArguments":[{"value":"mcp","type":"positional"}]}],"tools":[{"name":"check","description":"Films every scenario in playproof.config.json and compares it with its committed baseline (a snapshot test for motion), then runs monkey and devices. Changed motion is an error with a compare image; update = true accepts the current motion as the new baseline (rewrites files: only when the change is intended).","write_action":false,"price_micros":0,"input_schema":null},{"name":"devices","description":"Loads the game on nine screens and returns them side by side, with layout findings: blurry or stretched canvas, canvas cut off, page scrolling, missing viewport meta, missing touch-action, clipped text, small touch targets.","write_action":false,"price_micros":0,"input_schema":null},{"name":"frames","description":"Runs the game on a virtual clock, optionally performs steps to trigger something, then films it frame by frame. Returns a contact sheet (tiles with frame number and time, dashed boxes around what moved, a bar per frame of how much changed) and an onion-skin image (the whole motion ghosted into one picture), plus flagged sudden jumps, one-frame flicker and stalls. Runs are deterministic: pass compa","write_action":true,"price_micros":0,"input_schema":null},{"name":"monkey","description":"Random taps, drags, keys and backgrounding, repeatable by seed. Reports uncaught errors, failed requests, hangs, soft-locks and a render loop that stops, each with a command that reproduces it.","write_action":false,"price_micros":0,"input_schema":null},{"name":"perf","description":"Measures real frame times (fps, p95/p99, dropped frames at the display's refresh rate, long tasks, heap growth) while the game idles, runs steps, or takes random taps. Locally the CPU is slowed 4x; android = true measures Chrome on a USB-connected Android phone.","write_action":false,"price_micros":0,"input_schema":null},{"name":"play","description":"Plays a script of taps, drags, keys and waits on the virtual clock and returns a storyboard of every \"shot\" and \"film\" step. Use \"until <js> <time>\" to wait for game states instead of guessing.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":92,"grade":"A","scanned_at":"2026-10-25T05:01:10.673Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-25T05:01:10.599Z","components":{"code":{"score":25,"max":25,"notes":["27 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":15,"max":15,"notes":["last push 2 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"playproof","version":"0.3.2","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":1,"publishedAt":"2026-10-22T20:33:42.898Z","repositoryUrl":"git+https://github.com/EmirhanOzl/playproof.git","weeklyDownloads":893}],"repo":{"found":true,"owner":"EmirhanOzl","repo":"playproof","archived":false,"pushedAt":"2026-10-22T20:46:00Z","stars":0,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/114580444?v=4","ownerCreatedAt":"2022-09-28T11:06:47Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/114580444?v=4&s=128","source":"github"},"presence":{"stars":0,"forks":0,"downloadsWeek":893,"license":"MIT","lastPushAt":"2026-10-22T20:46:00.000Z","score":33}}}},"grade_history":[],"reviews":[]}