Playwright MCP dumps the entire accessibility tree per page, which is 50-540K tokens. After 2-3 page navigations your context window is gone. Firecrawl and Jina Reader are better on token count but they convert to markdown, so you can read but not interact. No clicking, no typing, no form filling.
PageMap takes a different approach. It runs a 5-stage HTML pruning pipeline and a 3-tier interactive element detector (ARIA roles, implicit HTML roles, CDP event listeners). The output is a structured map with numbered refs that an agent can act on.
I ran a benchmark across 66 tasks on 9 e-commerce sites. PageMap got 95.2% task success at $0.58 total. Firecrawl got 60.9% at $2.66. Jina Reader got 61.2% at $1.54. The gap mostly comes from PageMap being the only one that supports interaction and from the pruning keeping relevant content while cutting noise.
It works as an MCP server with three tools. get_page_map navigates to a URL and returns the compressed map. execute_action clicks, types, or selects by ref number. get_page_state is a lightweight status check.
pip install retio-pagemap
playwright install chromium
Add to .mcp.json and it works with Claude Code, Cursor, or any MCP client.Python, Playwright, lxml. MIT licensed.