PageMap

io.github.Retio-ai由 GitHub 帳號 Retio-ai 發布v0.7.3更新於 Oct 24, 2026

Structured web intelligence for AI agents. 5x fewer tokens than Playwright/Firecrawl, 84.7% accuracy

概覽

AI 產生的概覽

PageMap 是一個本機 MCP 伺服器,把網頁轉換成精簡的結構化頁面地圖,讓 AI 助理能讀取並操作網頁。

可以做什麼
前往網址並取得壓縮後的頁面地圖,包含編號參照、擷取的資訊與圖片,還支援平行批次抓取多個網址與上一頁導覽。使用上次地圖中的參照進行點擊、輸入、選擇、懸停、批次填寫表單、捲動以及等待動態內容。查看目前網址與標題、截圖,並開啟、切換、列出與關閉瀏覽器分頁。辨識登入牆、機器人攔截、Cookie 同意與彈出視窗等頁面障礙,並提供建議的下一步。
適用情境
適合助理需要在較小上下文用量下瀏覽真實網站的場合:閱讀商品、文章或搜尋結果頁,填寫表單,以及完成多頁流程。也適合在支援的電商網站上進行商品調查與比較。
執行需求
以 stdio 方式作為本機程序執行;需要 Python 3.11+ 與 Chromium(首次使用時自動安裝)。可從 PyPI 安裝或使用 Docker 映像。未宣告任何 API 金鑰或環境變數。除非啟用允許本機存取的選項或設定 PAGEMAP_ALLOW_LOCAL,否則私有與本機位址會被封鎖。
安裝前請注意
助理可以對真實網站執行操作:點擊、輸入、送出表單與導覽,可能變更資料或完成購買。登入受限頁面不由其管理,憑證需透過填寫表單提供。網頁內容被視為不可信,但仍存在提示注入與繞過機器人偵測的風險;使用者需自行遵守目標網站的服務條款與 robots.txt。

安裝

在 SourceWeft 中

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

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

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

PageMap

PageMap converts raw HTML (100K+ tokens) into structured, AI-readable page maps (2-5K tokens) — a 97% token reduction. It works as an MCP server, Python SDK, and CLI, supporting 16 page types and 30+ e-commerce sites. Agents can read, click, type, and navigate any web page.

"Give your agent eyes and hands on the web."

[CI] [PyPI] [Python] [License: AGPL-3.0] [Docker] [Awesome MCP Servers]


Why PageMap?

Playwright MCP dumps 50-540KB accessibility snapshots per page, overflowing context windows after 2-3 navigations. Firecrawl and Jina convert HTML to markdown — read-only, no interaction.

PageMap gives your agent a compressed, actionable view of any web page:

PageMapPlaywright MCPFirecrawlJina Reader
Tokens / page2-5K6-50K10-50K10-50K
Interactionclick / type / select / hoverRaw tree parsingRead-onlyRead-only
Multi-page sessionsUnlimitedBreaks at 2-3 pagesN/AN/A
Task success (94 tasks)84.7%61.5%64.5%57.8%
Avg tokens / task2,71013,73713,88811,424
Cost / 94 tasks$1.06$4.09$3.98$2.26

Benchmarked across 11 e-commerce sites, 94 static tasks, 7 conditions. 8,100+ tests passing.


Quick Start

Chromium is auto-installed on first use — no manual playwright install needed.

Install

bash
pip install retio-pagemap

MCP Client Config

Add to Claude Code, Cursor, Windsurf, or Claude Desktop:

json
{  "mcpServers": {    "pagemap": {      "command": "uvx",      "args": ["retio-pagemap"]    }  }}

Claude Desktop (macOS): Use the absolute path to uvx — run which uvx (e.g. /opt/homebrew/bin/uvx).

VS Code (Copilot): Use "servers" instead of "mcpServers" in .vscode/mcp.json.

Docker

bash
docker run -p 8000:8000 retio1001/pagemap --transport http

Features

13 MCP Tools — Read + Interact

Not just reading — your agent can click buttons, fill forms, select options, manage tabs, and navigate across pages. 13 tools cover the full browsing workflow:

get_page_map · execute_action · fill_form · scroll_page · wait_for · take_screenshot · get_page_state · navigate_back · batch_get_page_map · open_tab · switch_tab · list_tabs · close_tab

16 Page Types, Auto-Detected

PageMap automatically classifies pages and applies optimized extraction for each type:

product_detail · listing · search_results · article · news · video · login · form · checkout · dashboard · help_faq · settings · error · documentation · landing · blocked

E-Commerce Deep Coverage

Built-in support for 30+ major e-commerce sites across 4 tiers:

  • Global mega-platforms — Amazon, eBay, AliExpress, SHEIN, Walmart, Rakuten
  • Global fashion — Zara, H&M, Nike, Uniqlo, ASOS, Zalando, SSENSE, Farfetch, COS
  • Korea — Coupang, Naver Shopping, Musinsa, 29CM, W Concept, SSG, 11st
  • Japan/China — ZOZO, Tmall, JD.com, Taobao

Structured extraction of prices, options (size/color), ratings, availability — with automatic cookie consent handling and login barrier detection.

Smart Recovery

PageMap detects problems and tells your agent what to do:

  • Barrier detection — Login required? Bot blocked? Out of stock? Age verification? Popup overlay? PageMap adds a barrier field with the diagnosis and suggested next steps
  • Cookie consent auto-dismiss — 7 CMP providers auto-detected (Cookiebot, OneTrust, TrustArc, Didomi, Quantcast, Usercentrics, generic fallback). 5-tier dismiss cascade: CMP JS API → Reject → Accept → Dismiss → Close symbol. GDPR reject-first default policy
  • Popup overlay detection — AX tree role="dialog" + HTML regex 2-phase detection. Promotional popups (newsletter, exit-intent) auto-dismissed
  • Bot detection awareness — Detects Cloudflare, Turnstile, reCAPTCHA, hCaptcha, and Akamai. Reports the provider and suggests wait/retry strategies
  • Stale ref recovery — When DOM changes invalidate refs, PageMap returns clear guidance to re-fetch

Content Intelligence

  • 8 JSON-LD schemas — Product, NewsArticle, VideoObject, FAQPage, Event, LocalBusiness, BreadcrumbList, and ItemList
  • Metadata extraction — Prices, ratings, reviews, descriptions, images from structured data and DOM fallbacks
  • 2-layer caching — Cache hit (~10ms), content refresh (~500ms), full rebuild (~1.5s). Diff-based updates for unchanged sections
  • Delta evidence packet output - Optional to_delta_packet() serializer emits digest-bound evidence units, claim candidates, provenance, and authority flags for downstream memory/review systems without changing the default MCP output

10 Languages

Locale auto-detected from URL. Token budgets adjusted for CJK scripts.

LanguageLocaleLanguageLocale
EnglishenChinesezh
KoreankoSpanishes
JapanesejaItalianit
FrenchfrPortuguesept
GermandeDutchnl

Deployment

Local (STDIO)

Default mode. Runs as a local MCP server — no server setup needed.

bash
retio-pagemap

Docker

bash
docker run -p 8000:8000 retio1001/pagemap --transport http

Multi-architecture images (amd64/arm64) available on Docker Hub and GitHub Container Registry.


Python API

python
import asynciofrom pagemap.browser_session import BrowserSessionfrom pagemap.delta_serializer import to_delta_packetfrom pagemap.page_map_builder import build_page_map_livefrom pagemap.serializer import to_agent_prompt, to_json
async def main():    async with BrowserSession() as session:        page_map = await build_page_map_live(session, "https://example.com/product/123")        print(to_agent_prompt(page_map))   # Agent-optimized text format        print(to_json(page_map))           # Structured JSON        print(to_delta_packet(page_map))   # Digest-bound evidence packet        print(page_map.page_type)          # "product_detail"        print(page_map.interactables)      # [Interactable(ref=1, role="button", ...)]        print(page_map.metadata)           # {"name": "...", "price": "..."}
asyncio.run(main())

For offline processing (no browser):

python
from pagemap.page_map_builder import build_page_map_offline
page_map = build_page_map_offline(open("page.html").read(), url="https://example.com/product/123")

Security

PageMap treats all web content as untrusted input:

  • SSRF defense — Multi-layer protection against server-side request forgery
  • Prompt injection defense — Content boundaries, role-prefix stripping, suspicious content flagging
  • robots.txt compliance — RFC 9309 compliant. --ignore-robots opt-out flag
  • Resource guards — DOM node limit, HTML size limit, response size limit
  • Session isolation — Each session has independent cookies and storage, automatically cleaned up

Local development: Private IPs are blocked by default. Use --allow-local or PAGEMAP_ALLOW_LOCAL=1.

Disclaimer

Users are responsible for complying with the terms of service of target websites and all applicable laws when using PageMap.


Troubleshooting

"spawn uvx ENOENT" (Claude Desktop on macOS) — Claude Desktop does not inherit your shell PATH. Run which uvx and use the absolute path in your config.

First page takes a long time — Chromium cold start takes ~10-30s on first navigation. Subsequent pages load in 1-3 seconds.

Localhost blocked — Use --allow-local flag or set PAGEMAP_ALLOW_LOCAL=1.

Chromium not found — Run pip install retio-pagemap && playwright install chromium to install manually.


Requirements

  • Python 3.11+
  • Chromium (auto-installed on first use)

Community

Have a question or idea? Join the conversation in GitHub Discussions.

Development

[Open in GitHub Codespaces]

bash
git clone https://github.com/Retio-ai/Retio-pagemap.gitcd Retio-pagemapuv sync --group devplaywright install chromiumuv run pytest --tb=short -q

Pricing

Local (STDIO) — Free forever. Self-hosted, open source under AGPL-3.0.

Cloud API — Hosted multi-tenant server with auth, rate limiting, and credit-based billing. Contact [email protected] for access.

License

AGPL-3.0-only — see LICENSE for the full text.

For commercial licensing options, contact [email protected].


For Agents

This section is written for AI agents using PageMap as an MCP tool.

Tools

ToolWhen to use
get_page_mapStart here. Navigate to a URL and get a full structured map with numbered refs.
execute_actionClick, type, select, or hover using a ref number from the last get_page_map.
fill_formFill multiple form fields in one call. More efficient than sequential execute_action calls.
get_page_stateCheck current URL and title without a full rebuild. Use after actions that may navigate.
scroll_pageScroll to reveal lazy-loaded content before calling get_page_map again.
wait_forWait for dynamic content to appear (e.g. after a search or form submit).
take_screenshotCapture the visual state when the PageMap alone is ambiguous.
navigate_backGo back one step in browser history.
open_tabOpen a new browser tab and navigate to a URL.
switch_tabSwitch to a different open tab by index.
list_tabsList all open tabs with their URLs and titles.
close_tabClose a tab by index.
batch_get_page_mapFetch multiple URLs in parallel. Use for comparison tasks.

Output Format

yaml
URL: https://example.com/product/123Title: Product NameType: product_detail          # auto-detected page type
## Actions[1] button: Add to cart (click)[2] select: Size (select) — options: S, M, L, XL[3] link: See all reviews (click)...
## InfoPrice: $49.99Rating: 4.5 / 5 (128 reviews)Description: ...
## Images  [1] https://cdn.example.com/product.jpg
## MetaTokens: ~1,800 | Interactables: 24 | Generation: 380ms
  • ## Actions — Every interactive element on the page with a stable ref number.
  • ## Info — Key page content extracted from HTML: prices, titles, ratings, descriptions.
  • ## Images — Product/content image URLs.
  • ## Meta — Token count, interactable count, generation time.

Barrier Detection

When PageMap encounters a page-level obstacle, it includes a barrier field in the response:

yaml
State:  barrier: login_required  barrier_hint: "Login form detected with email + password fields. Use fill_form to authenticate."

Possible barriers: cookie_consent, login_required, bot_blocked, out_of_stock, empty_results, error_page, age_verification, region_restricted, popup_overlay.

When you see a barrier: follow the barrier_hint guidance. For bot_blocked, wait and retry. For login_required, use fill_form with credentials.

Ref Lifecycle

Refs are assigned by get_page_map and remain valid until the page state changes.

Refs are invalidated when:

  • The page navigates to a new URL
  • A DOM mutation occurs (modal opens, SPA navigation, accordion toggles)
  • execute_action causes a page-level change

When you get a stale ref error: call get_page_map again to get fresh refs before retrying.

Token Budget Behavior

When a page exceeds the token budget, content is pruned in this order:

  1. Navigation menus, footers, sidebars removed first
  2. Secondary body content trimmed
  3. ## Actions and ## Info are always preserved

If key content seems missing, try scroll_page to load lazy content, then get_page_map again.

Recommended Workflow

1. get_page_map(url)          → read Actions + Info, pick refs2. execute_action(ref, ...)   → interact3. get_page_state()           → confirm navigation occurred4. get_page_map(new_url)      → get fresh refs for next step

For pages with dynamic content (search results, filters):

1. get_page_map(url)2. execute_action(ref, "click")    → trigger search/filter3. wait_for(text="results")        → wait for content4. get_page_map(url)               → get updated map

Known Limitations

  • Login-gated pages — PageMap does not manage sessions or cookies. Authentication must be handled externally.
  • Heavy bot detection (Cloudflare, Akamai) — May block automated access. PageMap detects the provider and suggests strategies, but cannot bypass active bot mitigation.
  • Private network access — Blocked by default. Requires --allow-local flag.
  • iframes — Cross-origin iframes are not accessible due to browser security policies.

PageMap — Structured Web Intelligence for the Agent Era.

來源:README.md,提交 684ad79

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.7.3最新Sep 16, 2026

評分

已滿足適用檢查項的 40%

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

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

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

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

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