Skip to main content
Glama
README.md
# Omni-Web-MCP

**Turn any web page into an AI playground — in one line.**

<img src='demo.svg' alt='Demo' width='100%' />

Zero-dependency, zero-build, single-file MCP bridge for Claude Desktop, Cursor, Windsurf, and any MCP-compatible agent.

⭐ **Star this repo** if you want AI to stop asking you to "copy-paste the page content".

## ✨ Why Omni-Web-MCP?

Most MCP servers require:
- `npm install` of 10+ heavy dependencies (puppeteer, ws, etc.)
- Complex configuration files
- A running Chrome instance

Omni-Web-MCP is different:
- **Zero dependencies** — client is a single IIFE; hub uses only Node built-ins (Node ≥ 14).
- **Windows 7 friendly** — runs on any old machine.
- **Dual protocols** — MCP over stdio/HTTP + OpenAI function-call JSON.
- **Privacy-first** — password fields masked, `data-omni-ignore` skips sensitive nodes.
- **Enterprise-grade security** — 192-bit pairing token, timing-safe comparison.

## 🚀 60-Second Quick Start

### Step 1: Start the hub
Since the package is not yet published to NPM, you can run it directly from GitHub:
```bash
npx -y github:doujiaozh/omni-web-mcp
# or
node mcp-hub.js
# Hub runs at http://127.0.0.1:8787
```

### Step 2: Connect your AI agent

#### Claude Desktop (`claude_desktop_config.json`)
```json
{
  "mcpServers": {
    "omni-web": {
      "command": "npx",
      "args": ["-y", "github:doujiaozh/omni-web-mcp"]
    }
  }
}
```

#### Cursor (`~/.cursor/mcp.json`)
```json
{
  "mcpServers": {
    "omni-web": {
      "command": "npx",
      "args": ["-y", "github:doujiaozh/omni-web-mcp"]
    }
  }
}
```

### Step 3: Attach a web page
Open any page you want the AI to interact with, and inject:
```html
<script src="http://127.0.0.1:8787/client.js"></script>
```
The page auto-pairs with the hub. The AI can now:
- `get_dom_tree` — see the page structure
- `click_element` — click buttons
- `input_text` — fill forms
- `scroll_page` — navigate

## 🛠️ 5 Core Tools

| Tool | What it does |
|------|--------------|
| `list_pages` | See all paired pages |
| `get_dom_tree` | Get numbered outline + interactive elements |
| `click_element` | Click any element by ID |
| `input_text` | Fill inputs and submit |
| `scroll_page` | Scroll the page |

## 🔒 Security & Privacy

- **Pairing token**: 192-bit, timing-safe compared, persisted with `0600` permissions.
- **Privacy masking**: Password fields are automatically masked. Use `privacy="strict"` to mask everything. Use `data-omni-ignore` to skip specific nodes.
- **Local-only**: The hub runs on `127.0.0.1`. No data leaves your machine.

## 📄 License

MIT

TDQS

A3.9/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a clearly distinct role: listing available pages, extracting DOM structure, clicking, entering text, and scrolling. Their descriptions explicitly explain how they compose, such as using clientId from list_pages and numeric ids from get_dom_tree.

Naming Consistency5/5

All tool names follow a consistent snake_case verb_noun pattern: list_pages, get_dom_tree, click_element, input_text, scroll_page. The convention is predictable and readable.

Tool Count5/5

Five tools is well-scoped for a focused browser-interaction server. Each tool earns its place in the inspect-and-act workflow without obvious redundancy.

Completeness3/5

The core loop of listing pages, inspecting the DOM, clicking, typing, and scrolling is covered. However, there is no tool to open or navigate directly to a URL, close a page, take a screenshot, or wait for async state, which are notable gaps for general web automation.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues