# io.github.matthewalexong/neo-vision (npm · neo-vision)

Spatial DOM maps for AI agent browser navigation with anti-bot stealth.

- Trust score: 60/100 (medium)
- Change this week: +24
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `neo-vision`: 60/100 (this document), [markdown](https://verifymcp.io/servers/matthewalexong-neo-vision/neo-vision.md), [page](https://verifymcp.io/servers/matthewalexong-neo-vision/neo-vision)

## Channel facts

- Registry: `npm`
- Package: `neo-vision`
- Version: `0.2.2`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 87/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (98 of 102), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (98 of 102), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 19/100
  - Repository check failed: the declared repository URL returned HTTP 404.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 120 days ago).
  - Security-disclosure policy not yet verified: we couldn't inspect the source repository.
- **Schema Quality & AI Usability**: 59/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 1573 tokens (~314/item across 5 items; 5 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 23/100
  - Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add matthewalexong-neo-vision -- npx -y neo-vision
```

### Codex

```bash
codex mcp add matthewalexong-neo-vision -- npx -y neo-vision
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "matthewalexong-neo-vision": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "neo-vision"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add matthewalexong-neo-vision --command npx --arg -y --arg neo-vision
```

### Hermes

```yaml
mcp_servers:
  matthewalexong-neo-vision:
    command: "npx"
    args: ["-y", "neo-vision"]
```

### Other

```json
{
  "mcpServers": {
    "matthewalexong-neo-vision": {
      "command": "npx",
      "args": [
        "-y",
        "neo-vision"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 60, +3)

- [functional improvement] Stability: unverified → 0.23

### 2026-08-02 (score 57, +45)

- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] Schema quality: unverified → excellent
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] License: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional] Licence: MIT

### 2026-07-31 (score 12, −24)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-27 (score 36)

First indexed and scored.

## MCP tools (5)

### `spatial_snapshot` (~837 tokens)

Navigate to a URL and return a spatial map of the page. Launches a real Chrome browser automatically — no setup required.

\**Output modes** (controlled by output_format parameter):
  \- 'compact' (default): Returns every visible element with pixel coordinates, ARIA roles, accessible labels, and actionability flags. Use the click_center coordinates from each element to target it with spatial_click or spatial_type.
  \- 'agent': Optimized for AI agent context windows on text-dense pages (Wikipedia, Amazon, long articles). Returns:
    * 'page_text': deduplicated readable text from the current viewport (overlapping DOM nodes collapsed by position via 2-pass dedup: 10px grid + substring elimination, JS code stripped, text limited to 120 chars)
    * 'interactive_elements': only actionable elements within the viewport, with their click_center coordinates. Elements are strictly confined to viewport bounds — wide-layout pages (multi-column) won't leak off-screen elements.
    * 'viewport_info': scroll position, page height, percent_seen, percent_remaining — tells you how much more content is below
    * '_navigation': a hint with the exact spatial_scroll delta to use to advance to the next viewport

\**When to use agent mode**: On any page that returns 1000+ elements in compact mode, or when you need the readable text content for research/summarization tasks. After calling spatial_scroll(delta_y=...), re-call spatial_snapshot with output_format='agent' to get the next viewport's content.

\**Note**: The full DOM map is always cached server-side. You do NOT need to re-snapshot after clicks, typing, or scrolling — every action returns an updated map automatically. Re-snapshot with the same URL only when you want to reload or switch URLs.

The browser session persists across calls. Calling this again with a different URL navigates to that URL. Calling with the same URL reloads it.

Input parameters:

- `compact` (boolean): Return compact elements (default: true). Compact strips CSS layout details, selectors, and DOM hierarchy — keeping only what you need: tag, role, label, text, bounds, click_center, actionable. Set fa…
- `include_non_visible` (boolean): Include hidden elements (display:none, visibility:hidden). Usually not needed.
- `max_depth` (integer): Max DOM depth to traverse (default: 50). Increase only for deeply nested pages.
- `max_elements` (integer): Maximum elements to return (default: 2000). If truncated, scroll + re-snapshot to see more.
- `output_format` (string): Output format: 'compact' (default) returns the full element list with coordinates, roles, and accessibility info for general browsing and UI tasks. 'agent' is optimized for AI context windows on text…
- `settle_ms` (integer): Milliseconds to wait after page load for dynamic content (SPAs, lazy-loading) to settle (default: 2000)
- `url` (string, required): URL to navigate to. A real Chrome browser is launched automatically — no setup needed.
- `verbosity` (string): What to include: 'actionable' = buttons/links/inputs only (default, fastest), 'landmarks' = + headings/nav/sections, 'all' = every visible element
- `viewport_height` (integer): Viewport height in CSS pixels (default: 720)
- `viewport_width` (integer): Viewport width in CSS pixels (default: 1280)
- `zoom` (number): Device scale factor / zoom level (default: 1.0)

### `spatial_click` (~174 tokens)

Click an element on the page at exact pixel coordinates. Use the click_center.x and click_center.y values from a spatial_snapshot element.

Returns an updated spatial map reflecting the page state after the click (including any navigation, modals, or DOM changes triggered by the click). You do NOT need to call spatial_snapshot again after clicking.

Requires an active session — call spatial_snapshot first to open a page.

Input parameters:

- `button` (string): Mouse button (default: left)
- `click_count` (integer): Number of clicks — 2 for double-click, 3 for triple-click (default: 1)
- `x` (number, required): X coordinate in CSS pixels — use click_center.x from a spatial_snapshot element
- `y` (number, required): Y coordinate in CSS pixels — use click_center.y from a spatial_snapshot element

### `spatial_type` (~189 tokens)

Type text into an element. If x/y coordinates are provided, clicks that position first to focus the element, then types. Otherwise types into whatever element currently has focus.

Set clear_first=true to replace existing text (selects all + deletes before typing). Set press_enter=true to submit after typing (useful for search boxes).

Returns an updated spatial map. Requires an active session — call spatial_snapshot first.

Input parameters:

- `clear_first` (boolean): Select all + delete existing text before typing (default: false)
- `press_enter` (boolean): Press Enter after typing — useful for search boxes and forms (default: false)
- `text` (string, required): Text to type into the focused element
- `x` (number): Optional: click this X coordinate first to focus the element, then type
- `y` (number): Optional: click this Y coordinate first to focus the element, then type

### `spatial_scroll` (~192 tokens)

Scroll the page or a specific scrollable container. Use delta_y with positive values to scroll down, negative to scroll up. Optionally target a specific scrollable element by passing its x/y coordinates.

Returns an updated spatial map reflecting the new scroll position and any newly visible elements. Requires an active session — call spatial_snapshot first.

Input parameters:

- `delta_x` (number): Horizontal scroll in pixels. Positive = right, negative = left (default: 0)
- `delta_y` (number): Vertical scroll in pixels. Positive = down, negative = up (default: 0). After scrolling in agent mode, call spatial_snapshot again to get the next viewport's content.
- `x` (number): Optional: scroll at this X coordinate (targets a specific scrollable container instead of the page)
- `y` (number): Optional: scroll at this Y coordinate (targets a specific scrollable container instead of the page)

### `spatial_query` (~181 tokens)

Filter the current spatial map without re-loading the page. Search for elements by ARIA role, HTML tag, label text, bounding box region, or actionability. Much faster than taking a new snapshot — use this when the page hasn't changed and you need to find specific elements.

Requires a prior spatial_snapshot call (uses the cached map).

Input parameters:

- `actionable_only` (boolean): Only return interactive elements (buttons, links, inputs)
- `label_contains` (string): Filter elements whose accessible label contains this text (case-insensitive)
- `region` (object): Only return elements within this bounding box (CSS pixels)
- `role` (string): Filter by ARIA role, e.g. "button", "link", "textbox", "heading"
- `tag` (string): Filter by HTML tag, e.g. "input", "a", "div"

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/matthewalexong-neo-vision/neo-vision#diagnostics

## Score history

- 2026-08-03: 60
- 2026-08-02: 57
- 2026-08-01: 12
- 2026-07-31: 12
- 2026-07-30: 36
- 2026-07-28: 36
- 2026-07-27: 36

## Links

- npm package: https://www.npmjs.com/package/neo-vision
- Socket report: https://socket.dev/npm/package/neo-vision
- Changelog RSS feed: https://verifymcp.io/servers/matthewalexong-neo-vision/neo-vision/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/matthewalexong-neo-vision/neo-vision/changelog.json
- HTML version of this page: https://verifymcp.io/servers/matthewalexong-neo-vision/neo-vision
