Page Scanner

io.github.sbd530Published by GitHub account sbd530v0.4.5Updated Oct 25, 2026

Capture a web page from your own Chrome as a PDF whose text is still text.

Overview

AI-generated overview

A local MCP server that captures pages from the user's own Chrome as PDFs or images and extracts design tokens, scroll storyboards and diffs.

What you can do
Set up and pair the Chrome extension helper, and list connected browser profiles and their open windows and tabs so a target can be chosen. Capture a whole page to disk as a PDF with selectable text, or as PNG or JPEG, from an open tab, a URL or a list of URLs. Read a page's design as drawn — colors, type, spacing, radii, shadows, motion, breakpoints and custom properties — and write design tokens, CSS, a Tailwind preset and audit files. Scroll a page at a steady pace and record its scroll behavior as scenes in a PDF. Compare two captures offline, passage by passage for Markdown or pixel by pixel for PNGs. Verify that quotes occur verbatim in a capture's Markdown before they are used.
When to use it
Useful when you want an assistant to archive or quote pages from the browser you are already logged into, to turn a live site's styling into design tokens, to document scroll-driven animation, or to check what changed between two captures of a page.
Requirements
Runs as a local process via npx from the npm package, on desktop only. Chrome or another Chromium browser with the Page Scanner extension is needed; the install tool sets up the helper once per machine, and pairing is done in the extension's settings. No API keys, environment variables or headers are declared.
Before you install
The pair tool writes and returns a port and token; that token is a secret that lets anything holding it scan any tab the user has open, so prefer the install tool and do not expose the token. Captures and generated files are written to disk, and scanning a URL opens it in the user's browser. The install tool changes helper setup across every Chromium browser on the computer.

Installation

In SourceWeft

  1. Open Page Scanner in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Tools

9

install

Set up Page Scanner on this computer

Sets up Page Scanner's helper, which Chrome starts to connect the extension to this server, in every Chromium browser on this computer. Needs no port and no token, and returns no secret. Only needed once per machine. Afterwards the user opens the Page Scanner settings in Chrome, Local Agents, presses Connect and allows the prompt; tell them that, since you cannot do it for them.

ParametersextensionIds

pair

Pair this machine with Chrome

The older way to connect, for a machine where the install tool cannot set up the helper: writes the port and token the Page Scanner extension needs, and returns them so you can tell the user what to paste. Prefer install. The token is a secret that lets anything holding it scan any tab the user has open, and it will appear in this conversation, so do not repeat it anywhere else.

Parametersrotate

list_browsers

List connected browsers

The Chrome profiles that have Page Scanner paired and connected right now. Each is a separate browser: use its browserId to say which one you mean.

Takes no parameters.

list_tabs

List windows and tabs

The windows and open tabs of one browser, so you can pick what to scan. Tabs carry the windowId they belong to, and windows say which one is focused.

ParametersbrowserIdwaitSeconds

scan_page

Capture a page to a file

Captures a whole web page and writes it to disk. Name a tabId from list_tabs to capture a tab that is already open, a url to open one and capture that, or urls to capture a list of pages one after another. A PDF keeps real, selectable text; PNG and JPEG are images. Returns the absolute path it wrote, and a truncated report when the page was too large to capture whole; for urls, one result per page, each with its path or its error. Set markdown to get the page as text too, which is far easier to read than a PDF. A tall page or a long list can take minutes. When the answer has status "running", the capture is still going in the browser: call this tool again with exactly the same arguments to wait for its result, and do not start another capture of that tab meanwhile.

ParametersurlhideurlstabIdformatslicestablesqualityfileNamemarkdownpageSizewindowId+12 more

extract_design

Read a page's design tokens

Reads a page's design as it is drawn: the colors, type, spacing, radii, shadows, motion and breakpoints its elements use, and the custom properties it declares, in both color schemes. Writes tokens.json (W3C design tokens), tokens.css, tailwind.preset.js, audit.md (values nearly equal), contrast.md (WCAG contrast of every text color over its background) and extract.json (the raw measurements) into outputPath, a directory. Give urls for several pages of one site, or crawl with a start address to have the pages found by following its links. A page that answered an HTTP error is not read in, and in a crawl a page that a redirect took to another site or to a page already read is left out (pages[].left says why). Inferred tokens are numbered by use, not named; name them yourself if the user wants names. A tall page or a long list can take minutes. When the answer has status "running", the capture is still going in the browser: call this tool again with exactly the same arguments to wait for its result, and do not start another capture of that tab meanwhile.

ParametersurlurlscrawldepthtabIdminUsesmaxPagesbrowserIdcomponentsoutputPathwaitSecondstimeoutSeconds

storyboard_page

Scan a page's scroll as a storyboard

Scrolls a page from its top at a steady pace, 1.25 screens a second, and records how it behaves: where the screen holds while its content plays, what fades, slides, scales or is uncovered, and whether it glides on or plays once when the scroll stops. The scroll is cut into scenes. Writes a PDF (an overview and a page per scene with six frames from its entry to its exit), a .json beside it with every scene measured, and each scene's six frames as JPEGs in a .frames folder. Use it to rebuild a page's scroll animations, or to show them without a video. The result is that JSON, every frame with its absolute path, and the files' paths. The scan takes up to two minutes; a tabId is scrolled where the user sees it, and their touching the page or the popup's Stop ends it early with what it had (ended says so). A tall page or a long list can take minutes. When the answer has status "running", the capture is still going in the browser: call this tool again with exactly the same arguments to wait for its result, and do not start another capture of that tab meanwhile.

ParametersurltabIdviewportwindowIdbrowserIdoutputPathwaitSecondstimeoutSeconds

diff_captures

Say what changed between two captures

Compares two captures of the same page that scan_page wrote, with no browser needed. Two Markdown files are compared a passage at a time and the answer carries the changed lines and a unified diff; two PNGs are compared pixel by pixel and the newer one is written again with the changed regions outlined. For PDFs, scan with markdown "beside" and pass the PDFs or their .md files. "section" limits a text comparison to one section by its heading. "changed" says whether anything did.

ParametersnewPathrequiredoldPathrequiredsectionoutputPath

check_quotes

Check quotes against a capture

Before quoting a page in an answer, checks that each quote or value occurs in the capture’s Markdown as written, with no browser and no model. The Markdown’s own markup (escapes, emphasis, link syntax, list and quote prefixes) is undone and line wrapping ignored; a quote never runs across two blocks, and a word or number has to stand apart (4.99 is not in 14.99). Each quote comes back with the line and the section it is under, or, when missing, where the capture parts from it, to correct it by. A match only once curly quotes, dashes and case are folded is reported as "loose" and does not count as found unless loose is set. "allFound" says whether every quote is there.

Parameterspathloosequotesrequiredmarkdown

Version history

4
  1. v0.4.5LatestOct 24, 2026
  2. v0.4.4Oct 2, 2026
  3. v0.4.3Sep 29, 2026
  4. v0.4.2Sep 24, 2026

Score

65% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts

    Declare a GitHub repository with a README, or serve resource_documentation in the OAuth protected-resource metadata.

  • License10 pts

    Declare a license in the repository or the registry entry.