Page Scanner

io.github.sbd530由 GitHub 帳號 sbd530 發布v0.4.5更新於 Oct 25, 2026

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

概覽

AI 產生的概覽

一個本機 MCP 伺服器,從使用者自己的 Chrome 擷取網頁為可選取文字的 PDF 或圖片,並擷取設計權杖、捲動分鏡與差異比對。

可以做什麼
安裝並配對 Chrome 擴充功能輔助程式,列出已連線的瀏覽器設定檔及其視窗和分頁,以便選定目標。將整頁擷取到磁碟,輸出為文字可選取的 PDF,或 PNG、JPEG 圖片,來源可以是已開啟的分頁、單一網址或網址清單。讀取頁面實際呈現的設計——顏色、字體、間距、圓角、陰影、動效、斷點和自訂屬性——並寫出設計權杖、CSS、Tailwind 預設和稽核檔案。以穩定速度捲動頁面,把捲動行為切成場景並寫入 PDF。離線比較兩次擷取結果,Markdown 逐段比較,PNG 逐像素比較。在引用前核對引文是否逐字出現在擷取結果的 Markdown 中。
適用情境
適合讓助理封存或引用你已登入瀏覽器中的頁面、把線上網站的樣式轉成設計權杖、記錄捲動驅動的動畫,或查看同一頁面兩次擷取之間的變化。
執行需求
透過 npx 從 npm 套件以本機程序執行,僅限桌面端。需要裝有 Page Scanner 擴充功能的 Chrome 或其他 Chromium 瀏覽器;install 工具每台機器只需設定一次輔助程式,配對在擴充功能設定中完成。未宣告任何 API 金鑰、環境變數或請求標頭。
安裝前請注意
pair 工具會寫入並回傳連接埠和權杖;該權杖是密鑰,持有者可掃描使用者開啟的任何分頁,因此優先使用 install 工具,且不要外洩權杖。擷取結果和產生的檔案會寫入磁碟,掃描網址會在使用者瀏覽器中開啟該頁面。install 工具會變更本機所有 Chromium 瀏覽器的輔助程式設定。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Page Scanner,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

工具

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.

輸入參數extensionIds

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.

輸入參數rotate

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.

無需輸入參數。

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.

輸入參數browserIdwaitSeconds

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.

輸入參數urlhideurlstabIdformatslicestablesqualityfileNamemarkdownpageSizewindowId另有 12 個

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.

輸入參數urlurlscrawldepthtabIdminUsesmaxPagesbrowserIdcomponentsoutputPathwaitSecondstimeoutSeconds

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.

輸入參數urltabIdviewportwindowIdbrowserIdoutputPathwaitSecondstimeoutSeconds

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.

輸入參數newPath必填oldPath必填sectionoutputPath

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.

輸入參數pathloosequotes必填markdown

版本歷史

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

評分

已滿足適用檢查項的 65%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分

    請宣告包含 README 的 GitHub 儲存庫,或在 OAuth 受保護資源後設資料中提供 resource_documentation。

  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。