RPC Agent
A CLI and MCP server that lets coding agents screenshot a URL at real phone, tablet and desktop viewports, framed in device bezels and signed in when the page needs it. The successor to my RPC Chrome extension, on npm as rpc-agent.
Developer Tooling
2 Days

Introduction
A CLI and MCP server that lets coding agents screenshot a URL at real phone, tablet and desktop viewports, framed in device bezels and signed in when the page needs it. The successor to my RPC Chrome extension, on npm as rpc-agent.
Work Done
CLI & MCP Server

Challenges
Giving an agent a full-page view of pages taller than Chromium's 16,384 px capture limit, in a form a model can read, and screenshotting signed-in pages without sending a token to another host on a redirect.

Solutions
Clipped segments stitched in Node with a zlib-based PNG decoder, returned to the agent as labelled viewport-tall slices. Sessions saved per origin, and auth headers injected through the CDP Fetch domain so the origin is checked on every redirect hop.


Results
Published on npm as rpc-agent v0.4.0 under MIT, with setup for Claude Code, Codex and Cursor. One command registers the MCP server in Claude Code or Codex, and from then on the agent can screenshot its own work on any of the 49 devices.
Details
Why a CLI
Responsive Point Check is a Chrome extension. That works when I'm the one clicking through devices, but a coding agent can't open a toolbar. rpc-agent gives Claude Code, Codex and Cursor the same check. It's one npm package, `rpc-agent`, with two entry points: an `rpc` CLI and an MCP server with `screenshot`, `listdevices` and `listsessions` tools. Both call the same `capture()` function, and Playwright's Chromium takes the shot. The 49 devices and their bezels come straight from the extension.
Pages taller than Chromium
Chromium won't draw a bitmap taller than 16,384 px. Past that, rpc captures clipped segments and stitches them in Node with a small PNG decoder built on `node:zlib`, so there are no native dependencies. I picked segment heights so every seam lands on a whole pixel row, even at a 2.625 pixel ratio, and the e2e test checks a 21,656 px page at 3x row by row. What the agent gets back is a set of labelled JPEG slices, each one viewport tall.
Signed-in pages
`rpc login` saves a session per origin. Custom headers go through the CDP Fetch domain instead of `page.route`, because route overrides follow redirects and would hand a token to whatever host the redirect points at. Fetch pauses on every redirect hop, so rpc checks the origin each time.
Tope Akintola
October 30, 2026
Developer Tooling
