Skip to main content
Glama

Omni-Web-MCP

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

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.

Related MCP server: Algonius Browser

🚀 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:

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)

{
  "mcpServers": {
    "omni-web": {
      "command": "npx",
      "args": ["-y", "github:doujiaozh/omni-web-mcp"]
    }
  }
}

Cursor (~/.cursor/mcp.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:

<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

Available Tools

5 tools
click_elementA

Performs a real click (focus + click) on the element that get_dom_tree numbered with the given id. Returns the refreshed page state and whether a navigation may have happened.

NameRequiredDescriptionDefault
idYesThe numeric element id returned by get_dom_tree.
clientIdNoOptional target page.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the full burden and does meaningful work: it discloses that the click is a real focus+click, that the page state is refreshed in the result, and that a navigation indicator is returned. It omits failure behavior (element not found, non-interactive element) and any wait-for-load semantics, which is the main remaining gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, mechanism and target front-loaded, followed by return behavior. No restatement of the name or filler wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter interaction tool with no annotations and no output schema, the description covers what it does, what it requires, and what comes back (refreshed state plus navigation signal). An agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, and the description adds provenance meaning by tying the id to get_dom_tree's numbering rather than leaving it as an opaque identifier. The optional clientId is left to the schema entirely, which is acceptable given full coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and mechanism ('Performs a real click (focus + click)') on a precisely scoped resource: the element that get_dom_tree numbered with the given id. This makes it distinguishable from siblings like input_text and scroll_page without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description establishes the prerequisite workflow by tying the id to get_dom_tree, so an agent knows it must number the DOM first. It does not explicitly contrast with input_text (e.g., click to focus vs. click to type), so a small inference remains, but the usage context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_dom_treeA

Extracts the visible page as structured data: rendered text, a heading outline, and a numbered list of interactive elements (links, buttons, inputs, selects, contenteditable). Action tools target elements by their numeric id.

NameRequiredDescriptionDefault
privacyNostrict masks every input value.default
clientIdNoOptional target page; defaults to the most recently active page.
include_textNoInclude the rendered visible text of the page.
max_elementsNoCap for numbered interactive elements.
max_text_charsNoCharacter cap for the text field.
include_outlineNoInclude the heading/section outline.
include_interactiveNoInclude numbered interactive elements.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description must carry the behavioral load. It discloses that only the visible rendered page is captured (not raw DOM/HTML) and that interactive elements come back numbered, which is meaningful beyond the schema. It does not state that the call is a non-mutating snapshot, that results can be truncated by the defaults, or what the returned structure looks like beyond a field list.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, and the output composition is front-loaded before the note about numeric ids. Every clause carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Seven optional parameters with full schema coverage and no output schema means the description has to convey return shape, and it does so by listing the three sections. The only gap is that it never explains that defaults trim the output (150 elements, 12000 chars), so an agent could underestimate truncation without reading the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — every parameter including privacy, clientId, max_elements and max_text_chars is documented in the schema itself. The description adds nothing per-parameter, so the baseline 3 applies: the schema does the work and the prose neither helps nor hurts.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Extracts the visible page as structured data" names a concrete verb and resource, and the description enumerates the three payloads (rendered text, heading outline, numbered interactive elements). It also implicitly separates this capture step from the action siblings by noting that action tools target elements by numeric id, though it never names list_pages, scroll_page, or the others directly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The line "Action tools target elements by their numeric id" hints that this tool must be called before click_element or input_text to obtain those ids, which is real usage context. However, there is no explicit when-to-use statement, no guidance on when to skip it (e.g. after acting on a page that has already been captured), and no mention of when to prefer list_pages instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

input_textB

Sets the value of an editable element identified by its numeric id, dispatching input/change so modern frameworks react. Optionally submits the surrounding form.

NameRequiredDescriptionDefault
idYesThe numeric element id returned by get_dom_tree.
textYesThe text to type. Cleared first, then replaced.
submitNoPress Enter / submit the form afterwards.
clientIdNoOptional target page.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It does disclose non-obvious mechanics — dispatching input/change so frameworks react, and optional form submission — which is valuable, but says nothing about failure modes (non-editable element, stale id), permission/frame constraints, or whether the action is reversible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with the core action front-loaded and the framework-reactivity detail second. The closing clause about submitting the form slightly duplicates the submit parameter, which keeps it just short of full marks.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-parameter mutation tool with no annotations and no output schema, the description covers the core action and event behavior but omits error handling, return value, and what happens when the id is stale or the element is not editable — gaps an agent would want filled.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so every parameter is already documented, including the clear-then-replace behavior and the default for submit. The description adds no meaning beyond restating that the form may be submitted, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Sets the value of an editable element') and identifies the element by its numeric id, which is enough to distinguish it from click_element and scroll_page among the siblings. It is clear, though it never names an alternative tool explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the id comes from get_dom_tree, so the natural workflow is implied by the schema's parameter description. There is no explicit statement of when to use this instead of click_element (e.g. submit vs. press) or when not to use it for non-editable elements.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_pagesA

Returns the live web pages attached to the local hub. Each entry has a clientId, url, title and lastSeenAt. Use the clientId with the other tools to target a specific page.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations and no output schema, the description carries the full burden and does disclose the return shape (clientId, url, title, lastSeenAt) plus the key trait that only 'live' pages are returned. It omits ordering, empty-result behavior, and whether calling it triggers any page discovery, which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action and resource, then the return fields, then the follow-up workflow. Every sentence earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, no-annotation, no-output-schema tool, the description supplies the two things an agent would otherwise lack: the returned fields and how the clientId feeds sibling tools. Only minor operational details like result ordering or pagination are absent, which is acceptable at this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4. The description does not need to explain any inputs, and it productively redirects parameter attention to the clientId that downstream tools consume.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Returns the live web pages attached to the local hub') and enumerates the entry fields, so the agent knows exactly what it gets. It does not explicitly contrast with siblings get_dom_tree / click_element, but the discovery-vs-action distinction is obvious from the resource alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear usage context by telling the agent to take the returned clientId and pass it to the other tools to target a specific page, which effectively establishes this as the discovery step before any page interaction. It stops short of explicit when-not-to-use or exclusion language, but there are no competing siblings that list pages.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scroll_pageA

Scrolls in a direction or to the top/bottom. When an element id is given, scrolls that container instead of the window.

NameRequiredDescriptionDefault
amountNoScroll steps for relative directions.
clientIdNoOptional target page.
directionNodown
element_idNoOptional container element id to scroll.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It usefully discloses the container-vs-window default behavior, but says nothing about whether the scroll is animated/awaited, whether lazy-loaded content is triggered, or what is returned (no output schema exists). Permission or rate concerns are also unaddressed, though these are less critical for a UI-scroll tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the primary behavior front-loaded and the conditional container behavior second. Nothing is padded or repeated from the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 4-parameter browser-automation tool this covers the core behavior adequately, but it omits return information, the meaning of an 'amount step', and how it interacts with the surrounding automation flow. With no annotations and no output schema, a little more disclosure would meaningfully help an agent call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, so the baseline is 3. The description does add real meaning by explaining that element_id redirects the scroll target from the window to a container, but it leaves 'amount' underspecified — the schema calls it 'scroll steps' while the description never clarifies what a step is in pixels or how it interacts with the top/bottom enum values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (scroll) and its two modes: directional/top-bottom movement, and container-targeted movement when an element id is supplied. This is clearly distinct from the listed siblings (click_element, input_text, get_dom_tree, list_pages), though the description never explicitly names or contrasts them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied — the agent can infer this is the way to bring off-screen content into view before reading the DOM or clicking, but the description never says when to use this versus get_dom_tree or when a scroll is unnecessary. No exclusions or prerequisites are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv0.1.0
    • First observedclick_element
    • First observedget_dom_tree
    • First observedinput_text
    • First observedlist_pages
    • First observedscroll_page

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

Related MCP Connectors

Related MCP Servers