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 分

    请在仓库或注册中心条目中声明许可证。