Give your AI agents, QA scripts, and integrations a real browser — with a REST API, built-in MCP server, and network interception out of the box.
# Create a tab and navigate curl -X POST http://localhost:3000/api/browser/tabs \ -H "Content-Type: application/json" \ -d '{"url": "https://example.com"}' # Click a button on the page curl -X POST http://localhost:3000/api/browser/tabs/0/click \ -d '{"selector": "button.submit"}' # Get the page content curl http://localhost:3000/api/browser/tabs/0/source?type=text
Point Claude Desktop or any MCP-compatible agent at LumaBrowser's built-in MCP server. Navigate, click, and evaluate the DOM natively — no glue code required.
SPAs and randomized CSS classes break scripts daily. LumaBrowser's REST API with on-board LLM Template Builder resolves selectors dynamically, keeping your scripts stable.
Use the CDP-based Network Watcher to intercept HTTP traffic without root certificates or proxy setups, and forward it directly to your backend.
Three lines to navigate, click, and extract — against any website.
# Create a tab and navigate to a page
curl -X POST http://localhost:3000/api/browser/tabs \
-H "Content-Type: application/json" \
-d '{"url": "https://news.ycombinator.com"}'
# Get the page content as clean text
curl http://localhost:3000/api/browser/tabs/0/source?type=text
# Set up a network watcher with webhook forwarding
curl -X POST http://localhost:3000/api/watchers \
-H "Content-Type: application/json" \
-d '{"urlPattern": "*/api/*", "sendTo": "https://my-backend.com/hook"}'
import requests
# Create a tab and navigate
requests.post("http://localhost:3000/api/browser/tabs", json={
"url": "https://news.ycombinator.com"
})
# Get page text content
page = requests.get("http://localhost:3000/api/browser/tabs/0/source",
params={"type": "text"})
# Click a specific element
requests.post("http://localhost:3000/api/browser/tabs/0/click", json={
"selector": ".titleline > a"
})
print(page.json()["data"])
// Create a tab and navigate
await fetch("http://localhost:3000/api/browser/tabs", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ url: "https://news.ycombinator.com" })
});
// Take a screenshot
const screenshot = await fetch(
"http://localhost:3000/api/browser/tabs/0/screenshot"
);
// Fill a form and submit
await fetch("http://localhost:3000/api/browser/tabs/0/fill", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ fields: [
{ selector: "input[name=q]", value: "LumaBrowser" }
]})
});
A lightweight JavaScript data grid with virtual scrolling, sortable columns, context menus, column reordering, and CSV export. Fast and dependency-free.
A lightweight reactive UI library for building dynamic interfaces with minimal overhead. Simple API, no build step, no virtual DOM.
The textbook price comparison engine. Find the best deals on textbooks across multiple retailers in one search.
LumaBrowser is in active development. Sign up to be notified when it launches.