[Mr. Browser]
>

SDKs

TypeScript SDK

npm install @mrbrowser/sdk — a fully typed client for Node 18+. Instantiate new MrBrowser({host, port}), open a page, and interact with elements by plain-English description.

# Basic usage

quickstart.ts
typescript
import { MrBrowser } from "@mrbrowser/sdk";

const browser = new MrBrowser({ host: "localhost", port: 7331 });
const page = await browser.open("https://shop.example.com");

await page.type("the search field", "mechanical keyboard");
await page.click("the search button");
await page.click("the first product card");

const html = await page.getHtml();
if (!html.includes("Add to cart")) {
  throw new Error("product page did not load");
}
await page.close();
await browser.close();

# Typed extraction

Pass a type parameter to extract and the result is typed end to end — your scraper breaks at compile time, not in production.

invoices.ts
typescript
import { MrBrowser } from "@mrbrowser/sdk";

const browser = new MrBrowser();
const page = await browser.open("https://billing.corp.com/invoices");

// Extract text by plain-English description
const balance = await page.extractText("the account balance");

// Inspect all interactive elements
const elements = await page.inspect({ visibleOnly: true });
elements.forEach(el => console.log(el.text, el.role, el.selector));

// Run arbitrary JS
const title = await page.executeJs<string>("return document.title");

// Cookies
const cookies = await page.getCookies();
await page.setCookies([{ name: "session", value: "abc123" }]);

await browser.close();

# Configuration & full API

api-reference.ts
typescript
import { MrBrowser } from "@mrbrowser/sdk";

const browser = new MrBrowser({
  host: "localhost",
  port: 7331,          // default engine port
  timeout: 30_000,     // ms per request (default 30s)
  apiKey: process.env.MR_BROWSER_KEY, // optional auth
});

// Available Page methods:
// page.click(target)             — click by plain-English description
// page.type(target, value)       — type into a field
// page.hover(target)             — hover over an element
// page.scroll(direction, pixels) — scroll: up/down/left/right/top/bottom
// page.navigate(url)             — navigate to a new URL
// page.reload()                  — reload current page
// page.screenshot()              — returns PNG Buffer
// page.getHtml()                 — returns full page HTML
// page.extractText(target)       — extract text by intent
// page.inspect(opts)             — list all elements
// page.waitForSelector(css)      — wait for element visibility
// page.waitForUrl(substring)     — wait for URL change
// page.assertText(text)          — assert text is in page HTML
// page.getCookies()              — get all cookies
// page.setCookies(cookies)       — set cookies
// page.executeJs(script)         — execute JavaScript
// page.close()                   — close this tab
Tip
The SDK requires the Mr. Browser engine to be running. Start it with docker compose -f docker/docker-compose.yml up -d or run mr-browser --help if installed from source. The engine listens on localhost:7331 by default.
Warning
If the engine is unreachable you will get ECONNREFUSED 127.0.0.1:7331. Make sure the engine is started before calling browser.open().