Site Sense

Created By
YotamNordman2 months ago
Overview

site-sense

CI License: Apache-2.0

Give your AI coding CLI eyes into web portals. No cloud. No storage. Read-only.

site-sense demo

You're in a conversation with your AI assistant. It says "go to the Azure Portal and check the NSG rules." You alt-tab, navigate, screenshot, describe what you see, paste it back. You are the human middleware.

site-sense eliminates this. The AI calls an MCP tool → your browser extension captures the active tab → the AI sees what you see.

Quick Start

git clone https://github.com/YotamNordman/site-sense.git
cd site-sense
npm install && npm run build
npm run setup -- --browser edge    # or chrome

Load the extension in your browser:

  1. Open edge://extensions (or chrome://extensions)
  2. Enable Developer mode
  3. Click Load unpacked → select dist/extension/

Add to your CLI's MCP config:

{
  "mcpServers": {
    "site-sense": {
      "command": "node",
      "args": ["/path/to/site-sense/dist/bridge/src/index.js"]
    }
  }
}

Then ask your AI: "What's on my browser tab?"

First time → popup appears → click Allow → done. All subsequent captures are automatic until you close the terminal.

How It Works

CLI (Claude Code / Copilot CLI)
    ↕ stdin/stdout (MCP protocol)
MCP Server (TypeScript)
    ↕ Unix domain socket (no network)
Native Host (thin relay)
    ↕ Chrome native messaging (stdio)
Extension (TypeScript, Manifest V3)
    ↕ inject → content → background
Browser Tab → accessibility tree + screenshot

Two MCP tools:

ToolWhat it does
site_sense_captureAccessibility tree + screenshot of active tab
site_sense_statusCheck connection and session approval

Permission Modes

ModeWhat happensInstall warning
DefaultClick extension icon per page to grant accessNone
All-sitesToggle in popup → captures work on any pageOne-time prompt

All-sites permission is revoked when the CLI session ends.

Security

PrincipleHow
No networkNative messaging (stdio) — invisible to DLP
No storageMemory only — gone when CLI disconnects
No write opsNever clicks, types, or modifies pages
No broad permsactiveTab + scripting + nativeMessaging
No secrets capturedSkips form values, strips URL tokens
Session-scopedPermission resets every CLI session

See SECURITY.md for threat model and DLP compliance.

Architecture

Three-layer extension pipeline:

LayerContextRole
InjectPage (world: MAIN)Walks DOM, builds compact accessibility tree
ContentIsolatedRelays capture via postMessage (origin-validated)
BackgroundService workerNative messaging, session state, screenshot

Tech Stack

ComponentTechnology
ExtensionTypeScript + Vite
MCP ServerTypeScript + @modelcontextprotocol/sdk + zod
Testsvitest — 11 tests, <1s
Bundle9KB extension, 7 total deps

Troubleshooting

SymptomFix
connected: falseExtension not loaded, or ID mismatch. Check edge://extensions.
Cannot captureNavigate to an http:// or https:// page.
Content script not respondingClick the extension icon on the page, or enable all-sites mode.
Extension icon grayed outReload the extension at edge://extensions.

Docs

DocPurpose
SECURITY.mdThreat model, DLP compliance

License

Apache-2.0

Project Info
Created At
2 months ago
Updated At
2 months ago
Author Name
YotamNordman
Star
-
Language
-
License
-
Category
Tags

Recommend Servers

View All
Bring your real authenticated browser session to AI coding agents. Local-first MCP server + Chrome MV3 extension. No cloud. No telemetry.
@Cubenest

peek records the user's actual logged-in browser (DOM via rrweb, console events, network metadata, optional response bodies via opt-in Deep capture) through a Chrome MV3 extension. The extension ships events through a native-messaging stdio bridge to a local MCP server (peek-mcp), which persists them to a SQLite database at ~/.peek/sessions.db. AI coding agents (Claude Code, Cursor, Cline, Windsurf) read sessions from the database via 10 MCP tools: Tool What it does list_recent_sessions List recently recorded sessions (id, origin, ts, event count). get_session_summary LLM-readable narrative summary of a session. get_session_console_errors Console errors recorded in a session. get_session_network_errors Failed/notable network requests in a session. get_user_action_before_error Last N user actions before a console error. generate_playwright_repro Generate a runnable Playwright test from a session. get_dom_snapshot Reconstruct the DOM at a given timestamp. query_dom_history Timeline of attribute/text changes for a selector. request_authorization Side-panel consent for write actions (Level 3). execute_action Dispatch a UI action (gated by permission level + destructive blocklist). Why local-first matters Every other "browser session for AI" tool ships to a vendor cloud. peek's SQLite + extension live on the user's machine — no remote endpoints, no telemetry. The privacy policy (docs/peek/PRIVACY_POLICY.md) is the source of truth. Install # 1. Add the MCP server to Claude Code claude mcp add peek -- npx -y @peekdev/mcp # 2. Install the Chrome extension from the Chrome Web Store # (link added once the CWS listing is approved)

a day ago