{
  "markdown": "# tapsite\n\n[![GitHub stars](https://img.shields.io/github/stars/mgriffen/tapsite?style=flat-square&color=0055b3)](https://github.com/mgriffen/tapsite)\n[![npm downloads](https://img.shields.io/npm/dm/tapsite?style=flat-square&color=00727d)](https://www.npmjs.com/package/tapsite)\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue?style=flat-square)](LICENSE)\n\n[![tapsite — 55 Tools, One MCP Server, Total Web Intelligence](https://mgriffen.github.io/tapsite/assets/tapsite-hero.png)](https://mgriffen.github.io/tapsite/)\n\nThe MCP server for **web intelligence extraction**. 55 tools that give AI agents the ability to *understand* websites — not just drive a browser, but extract structured intelligence about design systems, accessibility, performance, content, and more.\n\nOther MCP browser tools let agents click buttons. tapsite lets agents extract a complete color palette, audit WCAG contrast ratios, diff two sites' design tokens, detect tech stacks, or pull structured data with custom CSS/XPath/regex selectors — all as structured JSON that agents can reason about.\n\n**55 Tools · 11 Categories · 4 Workflows · Multi-Format Export**\n\nWorks with Claude, Cursor, Windsurf, and any MCP-compatible AI agent. LangChain/LangGraph integration coming soon.\n\n**[View the full docs site →](https://mgriffen.github.io/tapsite/)**\n\n## Installation\n\n```bash\n# Quick start (no install required)\nnpx -y tapsite\n\n# Or install globally\nnpm install -g tapsite\nnpx playwright install chromium\nnpx playwright install-deps chromium\n```\n\nAdd to your AI agent's MCP config:\n\n```json\n{\n  \"mcpServers\": {\n    \"tapsite\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"tapsite\"]\n    }\n  }\n}\n```\n\n> **First run:** Playwright will install Chromium automatically if not already present (~150MB one-time download).\n\nAlso available on the [MCP Registry](https://registry.modelcontextprotocol.io/servers/io.github.mgriffen/tapsite) and [Glama](https://glama.ai/mcp/servers/mgriffen/tapsite).\n\n## What makes tapsite different\n\n| Other browser MCPs | tapsite |\n|---|---|\n| Click buttons | Extract full design systems |\n| Fill forms | Audit WCAG accessibility |\n| Take screenshots | Diff sites over time |\n| Read raw HTML | Detect tech stacks & APIs |\n| | Custom CSS / XPath / regex extraction |\n| | Anti-bot resilience & proxy rotation |\n\n**Extract design systems** — colors, fonts, spacing scales, breakpoints, components, shadows, icons, CSS variables, and contrast ratios from any website. Output as structured JSON or W3C design tokens.\n\n**Audit quality** — accessibility scoring with WCAG contrast analysis, performance timing (Core Web Vitals), tech stack detection, dark mode support, and animation inventory.\n\n**Compare and track** — diff two sites side by side, or track a single site over time with snapshot-based temporal diffs. Regressions and improvements are flagged automatically. Disk caching means crawls resume where they left off, and results are reused across sessions.\n\n**Work behind login walls** — persistent browser sessions with full MFA support. A 3-tier anti-bot escalation system handles protected sites automatically — from stealth scripts to proxy rotation. Log in once manually, then extract across tool calls without re-authenticating. Credentials never enter the chat.\n\n## Tools (55)\n\n### Session (8)\n| Tool | Description |\n|------|-------------|\n| `tapsite_login_manual` | Open headed browser for manual login + MFA |\n| `tapsite_login_check` | Verify authenticated session state |\n| `tapsite_inspect` | Navigate to URL and inspect the DOM (nav, headings, buttons, forms, tables, links) |\n| `tapsite_screenshot` | Take a screenshot of the current page |\n| `tapsite_interact` | Click or fill an indexed element from the last inspect |\n| `tapsite_scroll` | Scroll the page |\n| `tapsite_run_js` | Execute arbitrary JavaScript and return the result |\n| `tapsite_close` | Close the browser session |\n\n### Content Extraction (6)\n| Tool | Description |\n|------|-------------|\n| `tapsite_extract_table` | Extract a specific table as structured data |\n| `tapsite_extract_links` | Extract all links with text and href |\n| `tapsite_extract_metadata` | Extract page metadata (title, description, OG tags, etc.) |\n| `tapsite_extract_content` | Extract main readable content (article body, headings, paragraphs) |\n| `tapsite_extract_forms` | Extract all forms with fields, labels, and actions |\n| `tapsite_extract_markdown` | Extract page content as clean Markdown (raw, fit, or citations mode) with optional chunking |\n\n### Custom Extraction (2)\n| Tool | Description |\n|------|-------------|\n| `tapsite_extract_custom` | Extract structured data using custom schemas (CSS selectors, XPath, or regex) |\n| `tapsite_extract_schema_suggest` | Analyze page DOM and auto-suggest extraction schemas |\n\n### Design Tokens (5)\n| Tool | Description |\n|------|-------------|\n| `tapsite_extract_colors` | Extract color palette (hex values + usage counts) |\n| `tapsite_extract_fonts` | Extract font families, sizes, weights |\n| `tapsite_extract_css_vars` | Extract CSS custom properties |\n| `tapsite_extract_spacing` | Extract spacing scale values |\n| `tapsite_extract_shadows` | Extract box-shadow and text-shadow patterns |\n\n### Visual Assets (4)\n| Tool | Description |\n|------|-------------|\n| `tapsite_extract_images` | Extract all images with src, alt, dimensions |\n| `tapsite_download_images` | Download images to local output directory |\n| `tapsite_extract_svgs` | Extract inline SVGs |\n| `tapsite_extract_favicon` | Extract favicon URLs and sizes |\n\n### Layout Intelligence (3)\n| Tool | Description |\n|------|-------------|\n| `tapsite_extract_layout` | Extract layout tree (inline text representation) |\n| `tapsite_extract_components` | Detect repeated UI components and patterns |\n| `tapsite_extract_breakpoints` | Extract responsive breakpoints from CSS media queries |\n\n### Quality & Compliance (7)\n| Tool | Description |\n|------|-------------|\n| `tapsite_extract_a11y` | Accessibility audit (ARIA, roles, contrast issues) |\n| `tapsite_extract_contrast` | Audit WCAG contrast ratios between text and background |\n| `tapsite_extract_perf` | Extract performance metrics (Core Web Vitals, resource sizes) |\n| `tapsite_extract_security` | Audit security headers (CSP, HSTS, SRI, permissions policy) |\n| `tapsite_extract_darkmode` | Detect dark mode support and extract dark palette |\n| `tapsite_extract_pwa` | Detect PWA support (manifest, service worker, installability) |\n| `tapsite_extract_i18n` | Extract internationalization signals (lang, hreflang, translations) |\n\n### Technology Detection (10)\n| Tool | Description |\n|------|-------------|\n| `tapsite_extract_stack` | Detect frontend framework, libraries, and tech stack |\n| `tapsite_extract_animations` | Extract CSS animations and transitions |\n| `tapsite_extract_icons` | Detect icon libraries and extract icon usage |\n| `tapsite_extract_graphql` | Detect GraphQL endpoints and introspect schemas |\n| `tapsite_extract_aiml` | Detect AI/ML integrations (models, embeddings, inference endpoints) |\n| `tapsite_extract_canvas` | Extract canvas and WebGL usage patterns |\n| `tapsite_extract_wasm` | Detect WebAssembly modules and usage |\n| `tapsite_extract_web_components` | Detect custom elements and shadow DOM usage |\n| `tapsite_extract_third_party` | Inventory third-party scripts, trackers, and services |\n| `tapsite_extract_storage` | Audit client-side storage (cookies, localStorage, sessionStorage, IndexedDB) |\n\n### Network & API (2)\n| Tool | Description |\n|------|-------------|\n| `tapsite_capture_network` | Capture network requests during a page load |\n| `tapsite_extract_api_schema` | Infer API schema from observed network traffic |\n\n### Multi-page (2)\n| Tool | Description |\n|------|-------------|\n| `tapsite_crawl` | Crawl multiple pages from a start URL |\n| `tapsite_diff_pages` | Compare two URLs (cross-site) or track changes over time (temporal) using real extractors |\n\n### Export (2)\n| Tool | Description |\n|------|-------------|\n| `tapsite_export` | Export inspection results as JSON + Markdown + HTML report + CSV tables + screenshots |\n| `tapsite_export_design_report` | Full design system report: `report.html` (visual), `design-tokens.json` (W3C format), `design-tokens.css` (copy-pasteable `:root` vars) |\n\n### Engine\n\nResilient extraction engine. Parallel browser pooling for concurrent page extraction. Persistent disk caching — crawls resume where they left off and results are reused across sessions. 3-tier anti-bot escalation with automatic proxy rotation for protected sites.\n\n### Workflows (4)\n| Tool | Description |\n|------|-------------|\n| `tapsite_teardown` | Comprehensive competitive design teardown (all extractors) |\n| `tapsite_audit` | Pre-launch quality audit (a11y, contrast, perf, SEO, darkmode) |\n| `tapsite_harvest` | Inventory all site assets (images, SVGs, forms, fonts, links) |\n| `tapsite_designsystem` | Extract design tokens as W3C JSON and CSS variables |\n\n## LangChain / LangGraph integration (coming soon)\n\nNative LangChain and LangGraph integration is on the roadmap. When released, it will provide a dedicated Python wrapper with tool subsets and managed session lifecycle.\n\n## Security\n\nPrompt injection defense (hidden element filtering + output sanitization), HTTPS enforced, private IPs blocked, auth headers redacted. Credentials never enter the chat — log in manually with full MFA support.\n\n### Prompt injection defense\n\nExtractors skip hidden elements (`display:none`, `visibility:hidden`, `opacity:0`, zero-size, clip-hidden) to prevent invisible text injection. All output is scanned for prompt injection patterns — instruction overrides, role hijacking, exfiltration attempts, and tool manipulation are flagged inline as `[INJECTION_DETECTED]`.\n\n### Credential safety\n\n**Never pass credentials through the chat.** Use `tapsite_login_manual` to open a headed browser, log in manually (including MFA), then `tapsite_login_check` to confirm. Credentials never touch the AI provider's servers or local transcripts.\n\n## Docker\n\ntapsite ships a `Dockerfile` and `docker-compose.yml` for headless-only use — CI pipelines, server deployments, or anywhere you don't want a local Node.js install.\n\n```bash\ndocker build -t tapsite .\ndocker compose up\n```\n\n`tapsite_login_manual` is not available in Docker (it requires a display). To use authenticated sessions in Docker, log in locally first, then mount the `profiles/` directory into the container:\n\n```yaml\nvolumes:\n  - ./output:/app/output\n  - ./profiles:/app/profiles\n```\n\n> **Security note:** `profiles/` contains live session cookies. Don't commit it to version control (it's already in `.gitignore`).\n\n## Development setup\n\n```bash\ngit clone https://github.com/mgriffen/tapsite\ncd tapsite\nnpm install\nnpx playwright install chromium\nnpx playwright install-deps chromium\n```\n\nMCP config pointing to local source:\n\n```json\n{\n  \"mcpServers\": {\n    \"tapsite\": {\n      \"command\": \"node\",\n      \"args\": [\"/absolute/path/to/tapsite/src/server.js\"]\n    }\n  }\n}\n```\n\n### Project structure\n\n```\nsrc/\n  server.js        — MCP server entry point\n  browser.js       — shared Chromium context (ensureBrowser, closeBrowser)\n  helpers.js       — shared helpers (safeNavigate, summarizeResult, indexPage)\n  sanitizer.js     — prompt injection detection\n  diff.js          — per-extractor diff logic and extractor name/args mapping\n  snapshots.js     — temporal snapshot I/O (saveSnapshot, loadLatestSnapshot)\n  browser-pool.js  — parallel browser context pooling\n  cache.js         — persistent disk caching with TTL\n  markdown.js      — HTML-to-Markdown converter (raw/fit/citations)\n  chunker.js       — LLM-friendly text chunking (fixed/semantic/sentence)\n  content-filter.js — BM25 relevance filtering\n  anti-bot.js      — block detection and tier escalation\n  proxy.js         — proxy rotation with failure tracking\n  stealth-setup.js — Puppeteer-extra stealth plugin registration\n  extraction-strategies.js — CSS/XPath/regex flexible extractors\n  extractors.js    — browser-context extraction functions (page.evaluate())\n  exporter.js      — file export: JSON, Markdown, HTML, CSV\n  inspector.js     — DOM extraction for inspect tools\n  cli.js           — standalone CLI (login, inspect, session)\n  config.js        — paths and defaults\n  tools/\n    session.js     — login, inspect, screenshot, interact, scroll, run_js, close\n    extraction.js  — all extract_* tools\n    network.js     — capture_network, extract_api_schema, extract_stack\n    multipage.js   — crawl, diff_pages\n    export.js      — export, export_design_report\n    workflows.js   — teardown, audit, harvest, designsystem\nprofiles/          — browser state / session cookies (gitignored)\noutput/            — export results + snapshots (gitignored)\n```\n\n### Output formats\n\n- `output/run-{timestamp}/` — `tapsite_export`: JSON, Markdown, HTML, screenshots, CSV tables\n- `output/design-report-{timestamp}/` — `tapsite_export_design_report`: `report.html`, `design-tokens.json`, `design-tokens.css`\n- `output/snapshots/{domain}/` — `tapsite_diff_pages` temporal snapshots\n\n## License\n\nMIT\n",
  "bytes": 13114,
  "sha": "5afde9cfc55a8502e1509c0991d802c7241e6d7d8e74d06d915e4cd45e5c46eb",
  "repo_slug": "mgriffen/tapsite",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_mgriffen_tapsite_486f05cd/readme"
}