S

SideButton Marketing Website Knowledge Module

Features — Browser MCP — SideButton Marketing Website Knowledge Module

Feature page for SideButton Browser MCP — the MCP server that gives AI tools (Claude Code, Cursor, Windsurf) full browser control. Includes: animated hero with live chat mock (support inbox scenario …

Available free v1.0.3 Browser
$ sidebutton install sidebutton.com
Download ZIP
/features/browser-mcp 95% confidence Verified 2026-02-21

What This Is

Feature page for SideButton Browser MCP — the MCP server that gives AI tools (Claude Code, Cursor, Windsurf) full browser control. Includes: animated hero with live chat mock (support inbox scenario with auto-drafting reply cycling through 3 conversations), "How It Works" architecture diagram (AI Tool -> JSON-RPC -> SideButton MCP -> WebSocket -> Browser) with run log screenshot, MCP Tools Reference grid (8 tools in 2-column layout via CapabilityList component), Quick Setup section with 3 tabbed config examples (Claude Code / Cursor / Windsurf) and copy buttons, "Why Browser MCP?" 3-paragraph explainer, Related Features 3-card grid, and dark CTA section.

URL Patterns

PatternDescription
/features/browser-mcpBrowser MCP feature page

Page Structure

+--[Header]-----------------------------------------------------+
|                                                                |
|  [1. HERO — BrowserMcpHero component]                         |
|  Animated background mesh (2 gradient blobs + grid overlay)    |
|  Badge: "Browser MCP" (orange dot + text, rounded pill)        |
|  H1: "Talk to AI. Control any website." (gradient text)        |
|  Subtitle + "Install Free Extension" / "Setup Guide" CTAs     |
|  Right: animated browser mockup (#mcp-hero-browser)            |
|    - Browser bar with lock icon + "support.sidebutton.com/inbox"|
|    - SideButton extension icon with notification pulse          |
|    - Sender avatar + name + role (cycles 3 conversations)      |
|    - 2 message bubbles                                         |
|    - Textarea with typing cursor animation                     |
|    - "Draft Reply" button with click ripple effect             |
|    - "One-click automation" floating annotation (>=1280px)     |
|                                                                |
|  [2. HOW IT WORKS — architecture diagram]                      |
|  bg-slate-50, 3-column flex layout inside white rounded card   |
|  AI Tool -> (JSON-RPC label) -> SideButton MCP -> (WebSocket  |
|  label) -> Browser                                             |
|  Flow description text below separator                         |
|  Run log screenshot: /screenshots/run-log.png (lazy loaded)    |
|                                                                |
|  [3. MCP TOOLS REFERENCE — CapabilityList component]           |
|  2×4 grid of capability cards                                  |
|  Each: icon + function name (h3) + one-line description        |
|                                                                |
|  [4. QUICK SETUP — tabbed config panel]                        |
|  bg-slate-50, dark panel (#mcp-config-panel, bg-slate-900)     |
|  3 tabs: [Claude Code] [Cursor] [Windsurf]                    |
|  Active tab: bg-slate-800 + border-primary + text-white        |
|  Config: filename (mono) + JSON block + Copy button            |
|                                                                |
|  [5. WHY BROWSER MCP? — 3 paragraphs in white card]           |
|  "Most apps don't have APIs..."                                |
|  "Browser MCP is the bridge..."                                |
|  "Real-time context..."                                        |
|                                                                |
|  [6. RELATED FEATURES — 3-card grid]                           |
|  bg-slate-50, hover:border-primary + shadow-md                 |
|  SideButton AI Assistant | AI Automation | Integrations        |
|                                                                |
|  [7. CTA — FeatureCTA component, bg-slate-900]                |
|  "Give AI Browser Control"                                     |
|  [Get Started Free] [View AI Automation]                       |
+--[Footer]-----------------------------------------------------+

Key Elements

Hero Section (BrowserMcpHero component)

ElementSelectorNotes
Hero section.browser-mcp-heroCustom component, not FeatureHero
Background gradient 1.hero-gradient-1Green radial gradient, 8s pulse animation
Background gradient 2.hero-gradient-2Purple radial gradient, 10s pulse animation
Background grid.hero-gridSubtle 60px grid pattern with radial mask
Badge.hero-badgeOrange dot + "Browser MCP" text, rounded pill
Badge dot.hero-badge-dot6px dot, 2s pulse animation
Main heading.hero-title"Talk to AI. Control any website." clamp(2.5rem, 5vw, 3.75rem)
Gradient text.gradient-text"Control any website." with gradient effect
Subtitle.hero-subtitle1.25rem, secondary color
Install Free Extension.btn.btn-primaryLinks to Chrome Web Store
Setup Guide.btn.btn-secondaryLinks to docs.sidebutton.com/mcp-setup
Browser mockup#mcp-hero-browser.hero-browser class, 640px max-width
Browser URL bar.hero-browser-urlShows "support.sidebutton.com/inbox"
Extension icon#mcp-hero-ext-icon.hero-ext-icon, gains .active class during scan
Extension pulse.hero-ext-pulseRed notification dot, appears when .active
Scanline#mcp-hero-scanlinePurple scanning line, .scanning class triggers 2s sweep
Sender area#mcp-hero-sender.hero-sender, gains .reading class during scan
Avatar#mcp-hero-avatar44px circle, background-image set by JS
Name#mcp-hero-nameSender name, set by JS
Role#mcp-hero-roleSender role text, set by JS
Message 1#mcp-hero-msg-1First message bubble
Message 2#mcp-hero-msg-2Second message bubble
Messages area#mcp-hero-messagesGains .reading class during scan
Textarea#mcp-hero-textareaReadonly, gains .typing / .focused / .thinking classes
Typing cursor#mcp-hero-cursorPurple blinking cursor, .visible class shows it
Draft Reply button#mcp-hero-draft-btn.hero-btn, cycles: default -> .pressed -> .loading -> .success
Ripple 1#mcp-hero-ripple-1.hero-ripple, .animate class triggers expansion
Ripple 2#mcp-hero-ripple-2.hero-ripple, .animate-delay class (0.1s delay)
Hint text#mcp-hero-draft-hintShows "Uses conversation + your instructions as context" after draft
Annotation.hero-annotation"One-click automation" floating label, visible only >= 1280px

How It Works Section

ElementSelectorNotes
Sectionsection.py-16.bg-slate-50 (first)Architecture diagram section
Section headingh2 "How It Works"text-2xl md:text-3xl
Subtitlep "AI tools communicate through MCP..."text-slate-600
Architecture card.bg-white.rounded-2xl.border.border-slate-200Contains 3-column diagram
AI Tool columnh3 "AI Tool"With computer icon, "Claude Code, Cursor, ChatGPT, Windsurf"
JSON-RPC labelspan.text-xs.font-mono "JSON-RPC"On horizontal connector arrow
SideButton MCP columnh3 "SideButton MCP"Primary color, "Translates AI requests to browser actions"
WebSocket labelspan.text-xs.font-mono "WebSocket"On horizontal connector arrow
Browser columnh3 "Browser"With globe icon, "Extension controls any website"
Flow description.mt-8.pt-8.border-t"AI requests action -> MCP translates -> Extension executes -> Results returned to AI"
Arrow (desktop).hidden.md\\:flexHorizontal arrows with protocol labels, hidden on mobile
Arrow (mobile).md\\:hiddenVertical arrows, shown only on mobile
Run log captionp.text-center.text-sm"Real execution logs from the SideButton dashboard"
Run log screenshotimg[alt*="SideButton run log"]/screenshots/run-log.png, 1280x800, lazy loaded, rounded-xl shadow-2xl

MCP Tools Reference (CapabilityList component)

ElementSelectorNotes
Sectionsection.py-16 (CapabilityList)White background
Section headingh2 "MCP Tools Reference"text-2xl md:text-3xl
Subtitlep "Available tools for AI agents..."text-slate-600
Grid.grid.md\\:grid-cols-2.gap-42-column grid of capability cards
navigate(url) cardCard containing h3 "navigate(url)"Icon + "Navigate the browser to any URL"
snapshot() cardCard containing h3 "snapshot()"Icon + "Capture accessibility tree for AI understanding"
click(ref) cardCard containing h3 "click(ref)"Icon + "Click element by reference from snapshot"
type(ref, text) cardCard containing h3 "type(ref, text)"Icon + "Type text into input element"
scroll(direction) cardCard containing h3 "scroll(direction)"Icon + "Scroll page up, down, left, or right"
extract(selector) cardCard containing h3 "extract(selector)"Icon + "Extract text content from elements"
screenshot() cardCard containing h3 "screenshot()"Icon + "Capture visual screenshot of page"
run_workflow(id) cardCard containing h3 "run_workflow(id)"Icon + "Execute automation workflow by ID"

Quick Setup Section

ElementSelectorNotes
Section headingh2 "Quick Setup"text-2xl md:text-3xl
Subtitlep "Add to your AI tool's config and restart"text-slate-600
Config panel#mcp-config-panelbg-slate-900 rounded-2xl
Claude Code tabbutton[data-config-tab="0"]Active by default (bg-slate-800 + border-primary)
Cursor tabbutton[data-config-tab="1"]Inactive style: border-slate-700 text-slate-400
Windsurf tabbutton[data-config-tab="2"]Inactive style
Config content 0div[data-config-content="0"]claude_desktop_config.json
Config content 1div[data-config-content="1"].cursor/mcp.json (hidden by default)
Config content 2div[data-config-content="2"]~/.codeium/windsurf/mcp_config.json (hidden by default)
Config filenamespan.font-mono.text-xs.text-slate-400Shows config file path
Copy button 0button[data-copy-btn="0"]Copies Claude Code config JSON
Copy button 1button[data-copy-btn="1"]Copies Cursor config JSON
Copy button 2button[data-copy-btn="2"]Copies Windsurf config JSON
Config JSONpre.text-sm.text-slate-300Displays JSON config block

Why Browser MCP Section

ElementSelectorNotes
Section headingh2 "Why Browser MCP?"text-2xl md:text-3xl
Content card.bg-white.rounded-2xl.border.border-slate-200.p-8Contains 3 paragraphs
Paragraph 1 strongstrong "Most apps don't have APIs."text-slate-900
Paragraph 2 strongstrong "Browser MCP is the bridge."text-slate-900
Paragraph 3 strongstrong "Real-time context."text-slate-900

Related Features

ElementSelectorNotes
Section headingh2 "Related Features"text-xl
Grid.grid.md\\:grid-cols-3.gap-43-column card grid
AI Assistant carda[href="/features/chat"]h3 "SideButton AI Assistant", hover:border-primary
AI Automation carda[href="/features/ai-automation"]h3 "AI Automation", hover:border-primary
Integrations carda[href="/integrations"]h3 "Integrations", hover:border-primary

CTA Section (FeatureCTA component)

ElementSelectorNotes
CTA container.bg-slate-900.rounded-2xlDark background with blur decorations
Section headingh2 "Give AI Browser Control"text-white
Subtitlep "Set up SideButton Browser MCP in 1 minute..."text-slate-300
Get Started Freea[href*="docs.sidebutton.com/installation"]bg-primary button
View AI Automationa[href="/features/ai-automation"]bg-white/10 button

Data Model

Static feature page — no editable entities. Content is rendered at build time from Astro components and inline data.

FieldTypeDescription
mcpToolsarray[8]MCP tool definitions: icon, title (function signature), description
configsarray[3]Tab config entries: name (tool name), file (config path), config (JSON string)
mcpConversationsarray[3]Hero animation data: name, role, avatar path, msg1, msg2, reply (~75 chars)
TIMINGobjectAnimation timing constants: INITIAL_DELAY=1200, CLICK_RIPPLE=500, SCAN_TOTAL=2000, THINKING=800, TYPING_TOTAL=900, HOLD=3500
Related featuresarray[3]AI Assistant (/features/chat), AI Automation (/features/ai-automation), Integrations (/integrations)
SEO schemasarray[2]BreadcrumbList (Home > Features > Browser MCP), SoftwareApplication (free, DeveloperApplication)

States & Variations

StateTriggerVisual Indicator
DefaultPage loadHero animation starts after 1200ms delay if visible
Hero idleConversation loaded, waitingSender info + messages shown, Draft Reply button default green
Button pressedAnimation: click event.pressed class, scale(0.95), ripple circles expand
AnalyzingAfter press.loading class on button, text "Analyzing...", extension icon gets .active + red pulse dot
ScanningDuring analysis#mcp-hero-scanline.scanning — purple line sweeps top-to-bottom over 2s
Reading senderScan phase 1 (400ms).hero-sender.reading — purple highlight border + glow around sender
Reading messagesScan phase 2 (800ms).hero-messages.reading — purple highlight border + glow around messages
ThinkingAfter scanTextarea gets .focused + .thinking, placeholder "Thinking...", purple border + glow
TypingAfter thinkingButton text "Drafting...", textarea .typing, cursor .visible, text typed char-by-char
DoneAfter typing completeButton .success (green gradient), text "Done", hint text appears
Conversation cycleAfter 3500ms holdLoads next conversation (3 total: Mike Chen SRE, Rachel Torres AE, James Wilson Support Lead)
Tab activeClick config tabActive: bg-slate-800 + border-primary + text-white; inactive: border-slate-700 + text-slate-400
Tab content shownClick config tabdata-config-content div: active visible, others .hidden
Copy successClick copy buttonButton text "Copied!" for 2000ms, adds text-primary + border-primary classes
Cookie dialogFirst visitCookie Notice dialog overlay with Accept/Reject buttons
SideButton FABExtension installedGreen "S" circle at bottom-right corner
Reduced motionprefers-reduced-motion: reduceAll animations disabled, manual click mode enabled on Draft Reply
Annotation visibleViewport >= 1280px"One-click automation" floating label with green pulse dot appears right of mockup
Responsive mobile<= 768pxHero becomes single-column, architecture arrows rotate vertical, tabs stack
Responsive tablet<= 1024pxHero padding reduced (3rem 0 2rem), MCP tools grid may collapse
Tab not visibledocument.hiddenAnimation pauses, timeouts cleared
Tab visible againdocument.visibilitychangeAnimation reloads current conversation and restarts
Intersection outHero scrolled out of viewIntersectionObserver (threshold 0.3) stops animation
Intersection inHero scrolled into viewIntersectionObserver restarts animation

Common Tasks

Verify Page Loads Correctly

  1. Navigate to /features/browser-mcp
  2. Verify hero heading "Talk to AI. Control any website." is visible
  3. Verify browser mockup #mcp-hero-browser renders with sender info
  4. Scroll down and verify all 7 sections are present
  5. Check that run log screenshot loads (no broken image)

Verify Hero Animation Cycle

  1. Observe hero mockup for first conversation (Mike Chen, SRE)
  2. Wait for Draft Reply button to show "Analyzing..." then "Drafting..."
  3. Verify text types into textarea character by character
  4. Verify button changes to green "Done" state
  5. Wait 3500ms for next conversation (Rachel Torres, AE)
  6. Verify name, role, avatar, and messages all update
  7. Wait for full cycle back to Mike Chen (3 conversations total)

Test Config Tab Switching

  1. Scroll to "Quick Setup" section
  2. Verify Claude Code tab is active by default (bg-slate-800 + border-primary)
  3. Verify config shows claude_desktop_config.json filename
  4. Click "Cursor" tab button
  5. Verify Cursor tab becomes active, Claude Code tab becomes inactive
  6. Verify config shows .cursor/mcp.json filename
  7. Click "Windsurf" tab and verify ~/.codeium/windsurf/mcp_config.json

Test Config Copy Functionality

  1. Scroll to Quick Setup section
  2. Click the "Copy" button for the active tab
  3. Verify button text changes to "Copied!" with primary color
  4. Wait 2000ms and verify button reverts to "Copy"
  5. Verify clipboard contains valid JSON with mcpServers.sidebutton config

Verify All Links Work

  1. Check hero "Install Free Extension" links to Chrome Web Store URL
  2. Check hero "Setup Guide" links to docs.sidebutton.com/mcp-setup
  3. Check Related Features: /features/chat, /features/ai-automation, /integrations
  4. Check CTA "Get Started Free" links to docs installation page
  5. Check CTA "View AI Automation" links to /features/ai-automation

Verify Responsive Layout

  1. Resize viewport to mobile (375px width)
  2. Verify architecture diagram arrows change from horizontal to vertical
  3. Verify MCP tools grid collapses to single column
  4. Verify config tabs remain accessible
  5. Resize to tablet (768px) and verify 2-column grids
  6. Resize to desktop (1280px+) and verify annotation label appears

Tips

  • The hero animation uses IntersectionObserver (threshold 0.3) and visibilitychange — it only runs when the mockup is visible on screen and the tab is active
  • Hero conversations cycle through 3 personas: Mike Chen (SRE @ Dataflow), Rachel Torres (AE @ CloudScale), James Wilson (Support Lead @ FinServe) — all replies are approximately 75 characters to avoid layout shifts
  • The typing animation calculates per-character delay as TYPING_TOTAL / reply.length for consistent total duration
  • Cursor position is calculated using a hidden canvas measureText for accurate placement
  • All 3 config tab JSON contents are identical (npx @sidebutton/mcp) — only the filename differs
  • Copy buttons use navigator.clipboard.writeText which requires secure context (HTTPS or localhost)
  • The architecture diagram uses flex-col md:flex-row so the layout is vertical on mobile, horizontal on desktop
  • BrowserMcpHero is a standalone component (not using the shared FeatureHero) with its own scoped styles and inline script

Gotchas

  • Hero animation timing is sequential: Each phase depends on the previous completing — interrupting (scrolling away, tab switch) resets the entire animation to the beginning of the current conversation
  • Reduced motion completely changes behavior: With prefers-reduced-motion: reduce, all CSS animations are disabled and the Draft Reply button becomes a manual click trigger that shows the reply instantly
  • Annotation only visible at 1280px+: The "One-click automation" floating label uses display: none by default, only display: flex at min-width: 1280px — tests at smaller viewports will never see it
  • Copy button requires clipboard API: navigator.clipboard.writeText fails silently in non-secure contexts — the catch block logs to console but shows no user-facing error
  • Config tab state is DOM-based: Tab switching uses classList.add/remove not framework state — a snapshot after tab click will show the new state immediately
  • Run log screenshot is lazy-loaded: The loading="lazy" attribute means the image may not be loaded when you first scroll to the section — wait or scroll past it to trigger load