Skip to main content
Glama
README.md
# agenteyes-mcp

A Node.js MCP server (stdio transport) exposing agent tools backed by headless Chromium. One tool call returns screenshot PNG(s), an accessibility snapshot, and page text — **eyes for agents**.

## Requirements

- Node.js **20+**
- On first install, Playwright downloads the Chromium headless shell (`postinstall` script)

## Install and run

```bash
npx agenteyes-mcp@0.1.0
```

Or from a clone:

```bash
git clone https://github.com/tech-lead-bunny/agenteyes-mcp.git
cd agenteyes-mcp
npm install
node index.js
```

The process speaks MCP over **stdio**; connect it from an MCP host (Claude Desktop, Cursor, etc.).

## Tools

| Tool | Description |
|------|-------------|
| `screenshot_url` | Open a public `http`/`https` URL; return PNG screenshot(s), accessibility tree, and visible text |
| `get_page_text` | Same page context without screenshots (title, a11y, text) |

### `screenshot_url` parameters

- `url` (required) — public http(s) URL
- `full_page` (optional, default `false`) — capture full scroll height
- `segment_height` (optional, default `0`) — when `full_page` is true and the page is taller than this value, capture **stacked** viewport PNGs of this height (top to bottom), then one combined accessibility + text block
- `width` / `height` (optional) — viewport size (defaults 1280×720)

### Security (SSRF)

URLs are checked **before navigation** and again on the **final URL after redirects**:

- Only `http:` and `https:`
- DNS resolution must not point at private/local addresses (localhost, loopback, RFC1918, link-local `169.254.0.0/16`, `fe80::/10`, `::1`, IPv4-mapped IPv6, etc.)

## Claude Desktop

Add to `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "agenteyes": {
      "command": "npx",
      "args": ["-y", "agenteyes-mcp@0.1.0"]
    }
  }
}
```

## Cursor

In **Cursor Settings → MCP**, add a stdio server:

```json
{
  "mcpServers": {
    "agenteyes": {
      "command": "npx",
      "args": ["-y", "agenteyes-mcp@0.1.0"]
    }
  }
}
```

Or use a local path after `npm install` in this repo:

```json
{
  "mcpServers": {
    "agenteyes": {
      "command": "node",
      "args": ["/absolute/path/to/agenteyes-mcp/index.js"]
    }
  }
}
```

## Example prompt

> Use the `screenshot_url` tool on `https://example.com` with `full_page: true`. Summarize the page title and main message from the returned text, and describe what you see in the screenshot.

## Limits (v0)

- **No hosted API** — run the MCP server locally (or wherever your host spawns it)
- **No authentication or rate limiting** in the server itself
- **Public URLs only** — private networks and metadata endpoints are blocked
- **Chromium only** — no Firefox/WebKit; no persistent login sessions between calls
- **One browser process, one page per tool call** — pages are always closed after each call
- **Best-effort rendering** — heavy SPAs, infinite scroll, or bot blocking may produce incomplete captures
- **Segmented full-page capture** returns multiple PNGs (not a single stitched image)

## MCP registry

- **[mcp.so](https://mcp.so)** — primary listing target; submission to the registry is planned once `0.1.0` is on npm.
- **[awesome-mcp](https://github.com/punkpeye/awesome-mcp-servers)** — PR to add `agenteyes-mcp` planned the same week as the npm publish.

## License

MIT — see [LICENSE](LICENSE).

Maintenance

ActivityMaintained
ResponsivenessNo issues