All source files from Page Structure MCP v2 are listed below as formatted code blocks. This page is designed for another AI agent to read β share the URL and it can review every file, check for issues, and suggest improvements.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Page Structure MCP β Extract Any Webpage</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
<style>
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
:root{--bg:#0a0a0f;--bg2:#12121a;--bg3:#1a1a2e;--surface:#1e1e32;--border:#2a2a44;--accent:#818cf8;--accent2:#6366f1;--accent3:#4f46e5;--green:#34d399;--amber:#fbbf24;--pink:#f472b6;--text:#e2e8f0;--muted:#8892a4;--radius:12px;--radius-sm:8px}
html{scroll-behavior:smooth}
body{font-family:'Inter',system-ui,-apple-system,sans-serif;background:var(--bg);color:var(--text);line-height:1.6;overflow-x:hidden}
a{color:var(--accent);text-decoration:none}
a:hover{color:#a5b4fc}
/* ββ NOISE OVERLAY ββ */
.noise{position:fixed;inset:0;pointer-events:none;z-index:9999;opacity:.03;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}
/* ββ ANIMATIONS ββ */
@keyframes fadeUp{from{opacity:0;transform:translateY(24px)}to{opacity:1;transform:translateY(0)}}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
@keyframes scaleIn{from{opacity:0;transform:scale(.92)}to{opacity:1;transform:scale(1)}}
@keyframes slideLeft{from{opacity:0;transform:translateX(30px)}to{opacity:1;transform:translateX(0)}}
@keyframes slideRight{from{opacity:0;transform:translateX(-30px)}to{opacity:1;transform:translateX(0)}}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.5}}
@keyframes float{0%,100%{transform:translateY(0)}50%{transform:translateY(-8px)}}
@keyframes shimmer{to{background-position:200% 0}}
@keyframes glow{0%,100%{box-shadow:0 0 20px rgba(129,140,248,.15)}50%{box-shadow:0 0 40px rgba(129,140,248,.3)}}
@keyframes cursor{0%,100%{opacity:1}50%{opacity:0}}
@keyframes typing{from{width:0}to{width:100%}}
@keyframes blob{0%,100%{border-radius:60% 40% 30% 70%/60% 30% 70% 40%}50%{border-radius:30% 60% 70% 40%/50% 60% 30% 60%}}
@keyframes spin{to{transform:rotate(360deg)}}
.anim-fade{animation:fadeUp .7s ease-out both}
.anim-fade-d1{animation-delay:.1s}
.anim-fade-d2{animation-delay:.2s}
.anim-fade-d3{animation-delay:.3s}
.anim-fade-d4{animation-delay:.4s}
.anim-fade-d5{animation-delay:.5s}
.anim-fade-d6{animation-delay:.6s}
.anim-fade-d7{animation-delay:.7s}
.anim-fade-d8{animation-delay:.8s}
.anim-scale{animation:scaleIn .6s ease-out both}
.anim-slide-l{animation:slideLeft .7s ease-out both}
.anim-slide-r{animation:slideRight .7s ease-out both}
/* ββ HERO ββ */
.hero{position:relative;min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:80px 24px;overflow:hidden}
.hero-bg{position:absolute;inset:0;overflow:hidden}
.hero-bg .gradient{position:absolute;width:600px;height:600px;border-radius:50%;filter:blur(120px);opacity:.15}
.hero-bg .g1{top:-200px;left:-200px;background:var(--accent);animation:blob 8s ease-in-out infinite}
.hero-bg .g2{bottom:-300px;right:-200px;background:var(--accent3);animation:blob 10s ease-in-out infinite reverse}
.hero-bg .g3{top:50%;left:50%;transform:translate(-50%,-50%);width:800px;height:800px;background:var(--accent2);opacity:.05;animation:blob 12s ease-in-out infinite}
.hero-badge{display:inline-flex;align-items:center;gap:6px;padding:6px 16px;border-radius:100px;background:rgba(129,140,248,.1);border:1px solid rgba(129,140,248,.2);font-size:12px;font-weight:500;color:var(--accent);margin-bottom:24px;letter-spacing:.3px}
.hero-badge .dot{width:6px;height:6px;border-radius:50%;background:var(--green);animation:pulse 2s ease-in-out infinite}
.hero h1{font-size:clamp(36px,6vw,72px);font-weight:800;text-align:center;line-height:1.08;letter-spacing:-1.5px;max-width:900px;margin-bottom:20px}
.hero h1 .highlight{background:linear-gradient(135deg,var(--accent),var(--accent2),var(--pink));-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}
.hero p{font-size:18px;color:var(--muted);text-align:center;max-width:560px;margin-bottom:40px;line-height:1.7}
.hero-actions{display:flex;gap:12px;flex-wrap:wrap;justify-content:center}
.btn{display:inline-flex;align-items:center;gap:8px;padding:12px 28px;border-radius:var(--radius-sm);font-size:15px;font-weight:600;border:none;cursor:pointer;transition:all .25s}
.btn-primary{background:linear-gradient(135deg,var(--accent),var(--accent2));color:#fff;box-shadow:0 4px 20px rgba(99,102,241,.3)}
.btn-primary:hover{transform:translateY(-2px);box-shadow:0 8px 30px rgba(99,102,241,.45)}
.btn-secondary{background:var(--surface);color:var(--text);border:1px solid var(--border)}
.btn-secondary:hover{background:var(--bg3);border-color:var(--accent);transform:translateY(-2px)}
.btn-ghost{background:transparent;color:var(--muted)}
.btn-ghost:hover{color:var(--text)}
/* ββ CMD DEMO ββ */
.cmd-demo{position:relative;margin-top:48px;animation:fadeUp .7s .5s ease-out both;max-width:640px;width:100%}
.cmd-window{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;box-shadow:0 20px 60px rgba(0,0,0,.5)}
.cmd-header{display:flex;align-items:center;gap:8px;padding:12px 16px;background:var(--surface);border-bottom:1px solid var(--border)}
.cmd-dot{width:10px;height:10px;border-radius:50%}
.cmd-dot.r{background:#ff5f56}
.cmd-dot.y{background:#ffbd2e}
.cmd-dot.g{background:#27c93f}
.cmd-title{font-size:12px;color:var(--muted);margin-left:12px;font-family:'JetBrains Mono',monospace}
.cmd-body{padding:20px;font-family:'JetBrains Mono',monospace;font-size:13px;line-height:1.8;color:var(--muted)}
.cmd-body .prompt{color:var(--green)}
.cmd-body .cmd{color:var(--text)}
.cmd-body .output{color:var(--muted);padding-left:0}
.cmd-body .key{color:var(--accent)}
.cmd-body .str{color:var(--amber)}
.cmd-body .num{color:var(--pink)}
.cmd-body .comment{color:#555;font-style:italic}
/* ββ SECTIONS ββ */
section{padding:100px 24px}
.section-inner{max-width:100%;margin:0 auto;padding:0 48px}
@media(max-width:768px){.section-inner{padding:0 24px}}
.section-tag{display:inline-block;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:2px;color:var(--accent);margin-bottom:12px}
.section-title{font-size:clamp(28px,3.5vw,42px);font-weight:700;margin-bottom:16px;line-height:1.2}
.section-desc{color:var(--muted);max-width:800px;font-size:16px;line-height:1.7}
/* ββ FEATURES GRID ββ */
.features-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:16px;margin-top:48px}
.feature-card{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);padding:28px;transition:all .3s;position:relative;overflow:hidden}
.feature-card::before{content:'';position:absolute;top:0;left:0;right:0;height:2px;background:linear-gradient(90deg,var(--accent),var(--accent2));opacity:0;transition:opacity .3s}
.feature-card:hover{transform:translateY(-4px);border-color:var(--accent);box-shadow:0 8px 30px rgba(0,0,0,.3)}
.feature-card:hover::before{opacity:1}
.feature-card .icon{width:44px;height:44px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:20px;margin-bottom:16px;background:rgba(129,140,248,.1);color:var(--accent)}
.feature-card h3{font-size:16px;font-weight:600;margin-bottom:8px}
.feature-card p{font-size:14px;color:var(--muted);line-height:1.6}
/* ββ DATA FLOW VISUALIZATION ββ */
.flow-section{background:var(--bg2);border-top:1px solid var(--border);border-bottom:1px solid var(--border)}
.flow-diagram{display:flex;align-items:center;justify-content:center;gap:16px;flex-wrap:wrap;margin-top:48px;padding:40px;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius)}
.flow-node{padding:20px 28px;border-radius:var(--radius-sm);text-align:center;min-width:140px}
.flow-node.url{background:linear-gradient(135deg,rgba(251,191,36,.1),rgba(251,191,36,.05));border:1px solid rgba(251,191,36,.2)}
.flow-node.url .label{color:var(--amber)}
.flow-node.parse{background:linear-gradient(135deg,rgba(129,140,248,.1),rgba(99,102,241,.05));border:1px solid rgba(129,140,248,.2)}
.flow-node.parse .label{color:var(--accent)}
.flow-node.output{background:linear-gradient(135deg,rgba(52,211,153,.1),rgba(52,211,153,.05));border:1px solid rgba(52,211,153,.2)}
.flow-node.output .label{color:var(--green)}
.flow-node .label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:1px;margin-bottom:6px}
.flow-node .value{font-size:13px;color:var(--text);font-weight:500}
.flow-arrow{color:var(--muted);font-size:24px;animation:pulse 2s ease-in-out infinite}
/* ββ OUTPUT SHOWCASE ββ */
.showcase-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:48px}
.showcase-card{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}
.showcase-card .preview{padding:24px;font-family:'JetBrains Mono',monospace;font-size:12px;line-height:2;overflow-x:auto}
.showcase-card .preview .section-line{padding:2px 0;display:flex;gap:8px}
.showcase-card .preview .depth-0{padding-left:0;color:var(--text);font-weight:600}
.showcase-card .preview .depth-1{padding-left:16px;color:#c4b5fd}
.showcase-card .preview .depth-2{padding-left:32px;color:var(--muted)}
.showcase-card .preview .depth-3{padding-left:48px;color:#666}
.showcase-card .preview .key{color:var(--accent)}
.showcase-card .preview .val{color:var(--amber)}
.showcase-card .preview .tag{display:inline-block;padding:0 6px;border-radius:3px;font-size:10px;margin-right:4px}
.showcase-card .preview .tag-h1{background:rgba(129,140,248,.15);color:var(--accent)}
.showcase-card .preview .tag-h2{background:rgba(251,191,36,.1);color:var(--amber)}
.showcase-card .preview .tag-h3{background:rgba(52,211,153,.1);color:var(--green)}
.showcase-card .preview .tag-form{background:rgba(244,114,182,.1);color:var(--pink)}
.showcase-card .footer{display:flex;align-items:center;justify-content:space-between;padding:12px 24px;background:var(--surface);border-top:1px solid var(--border);font-size:12px;color:var(--muted)}
/* ββ TECH SPECS ββ */
.specs-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;margin-top:40px}
.spec-item{display:flex;align-items:center;gap:12px;padding:16px;background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius-sm);font-size:14px}
.spec-item .spec-icon{width:32px;height:32px;border-radius:8px;display:flex;align-items:center;justify-content:center;background:rgba(129,140,248,.1);color:var(--accent);font-size:14px;flex-shrink:0}
.spec-item .spec-label{color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.5px}
.spec-item .spec-value{font-weight:600;font-size:14px}
/* ββ USE CASES ββ */
.use-cases{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px;margin-top:40px}
.use-case{padding:20px;background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius-sm);display:flex;align-items:flex-start;gap:14px;transition:all .25s}
.use-case:hover{border-color:var(--accent);transform:translateY(-2px)}
.use-case .num{width:28px;height:28px;border-radius:8px;background:rgba(129,140,248,.1);color:var(--accent);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;flex-shrink:0}
.use-case .uc-content h4{font-size:14px;font-weight:600;margin-bottom:4px}
.use-case .uc-content p{font-size:13px;color:var(--muted);line-height:1.5}
/* ββ DIFF TABLE ββ */
.comparison{margin-top:48px;overflow-x:auto}
.comp-table{width:100%;border-collapse:collapse;font-size:14px}
.comp-table th{text-align:left;padding:14px 20px;background:var(--surface);color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.5px;font-weight:600;border-bottom:1px solid var(--border)}
.comp-table td{padding:14px 20px;border-bottom:1px solid var(--border);color:var(--text)}
.comp-table tr:hover td{background:var(--bg2)}
.comp-table .win{color:var(--green)}
.comp-table .lose{color:#f87171}
.comp-table .tie{color:var(--amber)}
/* ββ CTA ββ */
.cta-section{text-align:center;padding:100px 24px;position:relative}
.cta-section .glow{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:500px;height:500px;background:radial-gradient(circle,rgba(129,140,248,.08),transparent 70%);pointer-events:none}
.cta-section h2{font-size:clamp(28px,3.5vw,42px);font-weight:700;margin-bottom:16px;position:relative}
.cta-section p{color:var(--muted);max-width:480px;margin:0 auto 32px;font-size:16px;position:relative}
.cta-actions{display:flex;gap:12px;justify-content:center;flex-wrap:wrap;position:relative}
/* ββ FOOTER ββ */
.footer{padding:40px 24px;border-top:1px solid var(--border);text-align:center;font-size:13px;color:var(--muted)}
.footer span{color:var(--accent)}
/* ββ RESPONSIVE ββ */
@media(max-width:768px){
.cmd-demo{max-width:100%}
.showcase-grid{grid-template-columns:1fr}
.flow-diagram{flex-direction:column;gap:8px;padding:24px}
.flow-arrow{transform:rotate(90deg)}
section{padding:60px 20px}
.hero{padding:60px 20px}
}
</style>
</head>
<body>
<div class="noise"></div>
<!-- ββ HERO ββ -->
<div class="hero">
<div class="hero-bg">
<div class="gradient g1"></div>
<div class="gradient g2"></div>
<div class="gradient g3"></div>
</div>
<div class="hero-badge anim-fade anim-fade-d1"><span class="dot"></span> Now Available as MCP Tool</div>
<h1 class="anim-fade anim-fade-d2">Page<br><span class="highlight">Structure</span> MCP</h1>
<p class="anim-fade anim-fade-d3">One HTTP call turns any URL into a structured map β headings, sections, forms, links, and metadata. No browser. No JavaScript. Under 2 seconds.</p>
<div class="hero-actions anim-fade anim-fade-d4">
<a href="#demo" class="btn btn-primary">See it in action β</a>
<a href="#specs" class="btn btn-secondary">How it works</a>
</div>
<!-- CMD Demo -->
<div class="cmd-demo" id="demo">
<div class="cmd-window">
<div class="cmd-header">
<span class="cmd-dot r"></span>
<span class="cmd-dot y"></span>
<span class="cmd-dot g"></span>
<span class="cmd-title">extract structure β preview.aivibehosting.com</span>
</div>
<div class="cmd-body">
<div><span class="prompt">$</span> <span class="cmd">extract_structure("https://propertieschiangmai.com/about-us/")</span></div>
<div> </div>
<div><span class="key">β</span> <span class="str">URL</span>: <span class="str">"https://propertieschiangmai.com/about-us/"</span></div>
<div><span class="key">β</span> <span class="str">Title</span>: <span class="str">"About Us β Properties Chiang Mai"</span></div>
<div><span class="key">β</span> <span class="str">Sections</span>: <span class="num">20</span></div>
<div><span class="key">β</span> <span class="str">Headings</span>: <span class="num">25</span></div>
<div><span class="key">β</span> <span class="str">Forms</span>: <span class="num">6</span></div>
<div><span class="key">β</span> <span class="str">Links</span>: <span class="num">49</span></div>
<div><span class="key">β</span> <span class="str">Response time</span>: <span class="num">1.2s</span></div>
<div> </div>
<div><span class="comment">// Full heading tree extracted below</span></div>
<div class="output">
<span class="key">βββ</span> H1: <span class="str">"About Properties Chiang Mai"</span><br>
<span class="key">β βββ</span> H2: <span class="str">"Who We Are"</span><br>
<span class="key">β βββ</span> H2: <span class="str">"Why Buy With Us?"</span><br>
<span class="key">β β βββ</span> H3: <span class="str">"Ease Of Communication"</span><br>
<span class="key">β β βββ</span> H3: <span class="str">"Company Values"</span><br>
<span class="key">β β βββ</span> H3: <span class="str">"Multi-Agency Colabs"</span><br>
<span class="key">β βββ</span> H2: <span class="str">"Messsage Us"</span><br>
<span class="key">β βββ</span> H2: <span class="str">"Try Our App"</span>
</div>
</div>
</div>
</div>
</div>
<!-- ββ FEATURES ββ -->
<section>
<div class="section-inner">
<div class="section-tag anim-fade">What it extracts</div>
<h2 class="section-title anim-fade anim-fade-d1">Every structural layer,<br>instantly mapped</h2>
<p class="section-desc anim-fade anim-fade-d2">No rendering engine, no DOM traversal, no style computation. Just raw structure β served as clean, readable text.</p>
<div class="features-grid">
<div class="feature-card anim-fade anim-fade-d3">
<div class="icon">π</div>
<h3>Heading Hierarchy</h3>
<p>Full H1βH4 tree in DOM order. Know exactly how a page is organized β sections, subsections, and their nesting.</p>
</div>
<div class="feature-card anim-fade anim-fade-d4">
<div class="icon">π§©</div>
<h3>Elementor Widgets</h3>
<p>Identifies every Elementor widget type per section β headings, icon-boxes, text-editors, forms, spacers, and more.</p>
</div>
<div class="feature-card anim-fade anim-fade-d5">
<div class="icon">π</div>
<h3>Form Detection</h3>
<p>All form fields extracted with placeholders, types, and required flags. Know what data a page expects before you scrape.</p>
</div>
<div class="feature-card anim-fade anim-fade-d3">
<div class="icon">π</div>
<h3>Link Inventory</h3>
<p>Every link on the page with text + href. Navigation menus, footer links, CTAs β all captured in one pass.</p>
</div>
<div class="feature-card anim-fade anim-fade-d4">
<div class="icon">π¨</div>
<h3>Icon Classes</h3>
<p>All houzez-iconfont and CSS icon classes used on the page. Know which icons a design depends on without inspecting.</p>
</div>
<div class="feature-card anim-fade anim-fade-d5">
<div class="icon">π</div>
<h3>Section Metadata</h3>
<p>Background colors, inline styles, data-settings, CSS classes, and widget types for every section on the page.</p>
</div>
</div>
</div>
</section>
<!-- ββ DATA FLOW ββ -->
<section class="flow-section">
<div class="section-inner">
<div class="section-tag anim-fade">The pipeline</div>
<h2 class="section-title anim-fade anim-fade-d1">One URL β Structured Data<br>in under 2 seconds</h2>
<p class="section-desc anim-fade anim-fade-d2">No browser, no JavaScript execution, no headless Chrome. Just raw HTTP + pattern matching.</p>
<div class="flow-diagram anim-scale">
<div class="flow-node url">
<div class="label">Input</div>
<div class="value">URL</div>
</div>
<div class="flow-arrow">β</div>
<div class="flow-node parse">
<div class="label">Process</div>
<div class="value">HTTP Fetch + Parse</div>
</div>
<div class="flow-arrow">β</div>
<div class="flow-node output">
<div class="label">Output</div>
<div class="value">Structured Text</div>
</div>
</div>
</div>
</section>
<!-- ββ OUTPUT SHOWCASE ββ -->
<section>
<div class="section-inner">
<div class="section-tag anim-fade">Real output</div>
<h2 class="section-title anim-fade anim-fade-d1">What you get back</h2>
<p class="section-desc anim-fade anim-fade-d2">Clean, readable structure β not raw HTML or JSON blob. Designed for human review and agent consumption.</p>
<div class="showcase-grid">
<div class="showcase-card anim-scale anim-fade-d3">
<div class="preview">
<div class="section-line depth-0"><span class="tag tag-h1">H1</span> About Properties Chiang Mai</div>
<div class="section-line depth-1"><span class="tag tag-h2">H2</span> Who We Are</div>
<div class="section-line depth-1"><span class="tag tag-h2">H2</span> Why Buy With Us?</div>
<div class="section-line depth-2"><span class="tag tag-h3">H3</span> Ease Of Communication</div>
<div class="section-line depth-2"><span class="tag tag-h3">H3</span> Company Values</div>
<div class="section-line depth-2"><span class="tag tag-h3">H3</span> Multi-Agency Colabs</div>
<div class="section-line depth-1"><span class="tag tag-h2">H2</span> What we do for buyers</div>
<div class="section-line depth-2"><span class="tag tag-h3">H3</span> Shortlisted Recommendations</div>
<div class="section-line depth-1"><span class="tag tag-h2">H2</span> Property types we cover</div>
<div class="section-line depth-1"><span class="tag tag-h2">H2</span> Where we operate</div>
<div class="section-line depth-1"><span class="tag tag-h2">H2</span> Letβs find your place</div>
<div class="section-line depth-1"><span class="tag tag-h2">H2</span> What our customers saying</div>
</div>
<div class="footer"><span>π 25 headings Β· 6 levels</span><span>Tree view</span></div>
</div>
<div class="showcase-card anim-scale anim-fade-d4">
<div class="preview">
<div class="section-line depth-0"><span class="tag tag-form">FORM</span> Contact Info</div>
<div class="section-line depth-1"><span class="key">text</span> <span class="val">"First name"</span> *</div>
<div class="section-line depth-1"><span class="key">text</span> <span class="val">"Last name"</span> *</div>
<div class="section-line depth-1"><span class="key">email</span> <span class="val">"Email address"</span> *</div>
<div class="section-line depth-1"><span class="key">tel</span> <span class="val">"Phone number (+66 946381920)"</span> *</div>
<div class="section-line depth-1"><span class="key">number</span> <span class="val">"Min. bedrooms"</span></div>
<div class="section-line depth-1"><span class="key">number</span> <span class="val">"Your budget (THB)"</span></div>
<div class="section-line depth-1"><span class="key">textarea</span> <span class="val">"Tell us a bit about your needs"</span></div>
<div class="section-line depth-0" style="margin-top:8px;"><span class="tag tag-form">BTN</span> Submit</div>
<div class="section-line depth-0" style="margin-top:12px;"><span class="key">βββ</span> <span class="num">8</span> fields Β· <span class="num">5</span> required</div>
</div>
<div class="footer"><span>π 6 forms detected Β· 8 fields</span><span>Form view</span></div>
</div>
</div>
</div>
</section>
<!-- ββ TECH SPECS ββ -->
<section class="flow-section" id="specs">
<div class="section-inner">
<div class="section-tag anim-fade">Technical specifications</div>
<h2 class="section-title anim-fade anim-fade-d1">Built for speed,<br>designed for agents</h2>
<p class="section-desc anim-fade anim-fade-d2">Zero browser dependencies. Pure Node.js HTTP + pattern matching. Runs as a stdio MCP server.</p>
<div class="specs-grid anim-fade anim-fade-d3">
<div class="spec-item">
<div class="spec-icon">β‘</div>
<div><div class="spec-label">Avg Response Time</div><div class="spec-value">< 2 seconds</div></div>
</div>
<div class="spec-item">
<div class="spec-icon">π¦</div>
<div><div class="spec-label">Dependencies</div><div class="spec-value">Zero (stdlib only)</div></div>
</div>
<div class="spec-item">
<div class="spec-icon">π</div>
<div><div class="spec-label">Max Page Size</div><div class="spec-value">2 MB</div></div>
</div>
<div class="spec-item">
<div class="spec-icon">π</div>
<div><div class="spec-label">Protocol</div><div class="spec-value">MCP stdio</div></div>
</div>
<div class="spec-item">
<div class="spec-icon">π</div>
<div><div class="spec-label">Output Format</div><div class="spec-value">Readable text</div></div>
</div>
<div class="spec-item">
<div class="spec-icon">π</div>
<div><div class="spec-label">Redirects</div><div class="spec-value">Auto-follows</div></div>
</div>
</div>
</div>
</section>
<!-- ββ USE CASES ββ -->
<section>
<div class="section-inner">
<div class="section-tag anim-fade">Use cases</div>
<h2 class="section-title anim-fade anim-fade-d1">When to reach for this tool</h2>
<p class="section-desc anim-fade anim-fade-d2">The style-inliner gives you pixel-perfect CSS. This one gives you the blueprint.</p>
<div class="use-cases anim-fade anim-fade-d3">
<div class="use-case">
<div class="num">1</div>
<div class="uc-content">
<h4>Design Replication</h4>
<p>Before building a page, understand its section structure, heading hierarchy, and form fields.</p>
</div>
</div>
<div class="use-case">
<div class="num">2</div>
<div class="uc-content">
<h4>Content Audit</h4>
<p>Map out every heading, link, and form on a page in seconds β no manual scrolling.</p>
</div>
</div>
<div class="use-case">
<div class="num">3</div>
<div class="uc-content">
<h4>WordPress Analysis</h4>
<p>Identify Elementor widgets, section settings, and icon dependencies without logging into WP admin.</p>
</div>
</div>
<div class="use-case">
<div class="num">4</div>
<div class="uc-content">
<h4>Agent Pre-flight</h4>
<p>Before an agent edits a page, load its structure so it knows exactly what exists and where.</p>
</div>
</div>
</div>
</div>
</section>
<!-- ββ COMPARISON ββ -->
<section class="flow-section">
<div class="section-inner">
<div class="section-tag anim-fade">Comparison</div>
<h2 class="section-title anim-fade anim-fade-d1">Two MCP tools,<br>one pipeline</h2>
<p class="section-desc anim-fade anim-fade-d2">Use together for full page replication: structure first, then styles.</p>
<div class="comparison anim-fade anim-fade-d3">
<table class="comp-table">
<thead>
<tr><th>Feature</th><th>page-structure MCP</th><th>style-inliner MCP</th></tr>
</thead>
<tbody>
<tr><td>Speed</td><td class="win">~1-2s</td><td>~1-2s (90 properties)</td></tr>
<tr><td>Browser required</td><td class="win">β No</td><td>β
Headless Chrome</td></tr>
<tr><td>CSS computed</td><td>β</td><td class="win">β
Full inline</td></tr>
<tr><td>Heading tree</td><td class="win">β
Full hierarchy</td><td>β</td></tr>
<tr><td>Form fields</td><td class="win">β
With placeholders</td><td>β</td></tr>
<tr><td>Max page size</td><td class="win">2MB</td><td>~500KB (before timeout)</td></tr>
<tr><td>Use case</td><td class="win">Blueprint / structure</td><td class="win">Pixel-perfect export</td></tr>
</tbody>
</table>
</div>
</div>
</section>
<!-- ββ CTA ββ -->
<section class="cta-section">
<div class="glow"></div>
<div class="section-tag anim-fade">Get started</div>
<h2 class="anim-fade anim-fade-d1">Ready to use it?</h2>
<p class="anim-fade anim-fade-d2">Already registered in this Hermes session. Just reload MCP and call <code style="background:var(--surface);padding:2px 8px;border-radius:4px;font-size:14px;">extract_structure(url)</code></p>
<div class="cta-actions anim-fade anim-fade-d3">
<span class="btn btn-primary" style="pointer-events:none;opacity:.9">/reload-mcp</span>
<span class="btn btn-secondary" style="pointer-events:none;opacity:.7">then call the tool</span>
</div>
</section>
<!-- ββ FOOTER ββ -->
<div class="footer">
Built with <span>β₯</span> for the Hermes Agent ecosystem • <span>page-structure</span> MCP v1.0.0
</div>
</body>
</html>