Skip to main content

Browser Agent MCP

Browser Agent MCP

Package: @ainative/browser-mcp
Install: npx @ainative/browser-mcp
npm: npmjs.com/package/@ainative/browser-mcp
Version: 1.1.0
Backend: https://api.ainative.studio/api/v1/public/browser

The Browser Agent MCP server gives your AI agents the ability to see and interact with the web. Extract structured data from any page, automate multi-step browser workflows, enrich CRM contacts, monitor competitors, and store insights directly into ZeroMemory — all from a single npx command.

It auto-detects ZeroLocal running on localhost:8000 and uses it automatically. Otherwise it connects to AINative Cloud.

Quick Start
npx @ainative/browser-mcp

Set AINATIVE_API_KEY=ak_your_key in your shell or .env file. Get a key at ainative.studio/dashboard.


Install & Configure

npx @ainative/browser-mcp

No global install needed. Always runs the latest version.

Option 2 — Global install

npm install -g @ainative/browser-mcp
ainative-browser-mcp

Configure in Claude Code

Add to your .claude/mcp.json (or claude_desktop_config.json):

{
"mcpServers": {
"browser": {
"command": "npx",
"args": ["@ainative/browser-mcp"],
"env": {
"AINATIVE_API_KEY": "ak_your_key_here"
}
}
}
}

Configure in Cursor / Windsurf

{
"mcpServers": {
"ainative-browser": {
"command": "npx",
"args": ["@ainative/browser-mcp"],
"env": {
"AINATIVE_API_KEY": "ak_your_key_here"
}
}
}
}

Authentication

Set one of the following environment variables:

VariableDescription
AINATIVE_API_KEYAPI key (recommended) — ak_... prefix
AINATIVE_USERNAME + AINATIVE_PASSWORDEmail + password login

Get your API key from ainative.studio/dashboard.


Tools

Eight tools are available. Each call costs credits from your AINative balance.

ToolDescriptionCredits
browser_actPerform an action on a page (click, type, navigate, scroll)50
browser_extractExtract structured data from a page75
browser_validateValidate content or state on a page25
browser_taskRun a multi-step automation task200
browser_extract_to_tableExtract data and write directly to a ZeroDB table100
browser_enrich_memoryExtract content and store in ZeroMemory agent memory100
browser_batch_extractExtract data from up to 10 URLs in one call and store rows in ZeroDB75/URL
browser_enrich_memory_asyncQueue a background memory enrichment task; returns task_id immediately100

Tool Reference

browser_act

Perform an action on a web page — navigate, click, type, scroll, submit a form.

Input schema:

ParameterTypeRequiredDescription
urlstringyesPage URL to act on
instructionstringyesNatural language action to perform
max_stepsintegernoMax steps to take (default: 5)

Example:

{
"tool": "browser_act",
"arguments": {
"url": "https://example.com/login",
"instruction": "Click the 'Sign in with Google' button",
"max_steps": 3
}
}

browser_extract

Extract structured data from any page. Returns JSON matching your requested schema or goal.

Input schema:

ParameterTypeRequiredDescription
urlstringyesPage URL to extract from
extract_goalstringyesWhat to extract (natural language)
schemaobjectnoOptional JSON schema to shape the output

Example — extract pricing:

{
"tool": "browser_extract",
"arguments": {
"url": "https://competitor.com/pricing",
"extract_goal": "Extract all plan names, prices, and features"
}
}

Example — with schema:

{
"tool": "browser_extract",
"arguments": {
"url": "https://linkedin.com/company/acme-corp",
"extract_goal": "Extract company details for CRM",
"schema": {
"type": "object",
"properties": {
"company_name": {"type": "string"},
"industry": {"type": "string"},
"employee_count": {"type": "string"},
"website": {"type": "string"},
"description": {"type": "string"}
}
}
}
}

browser_validate

Check that expected content exists on a page. Useful for monitoring, testing, and QA automation.

Input schema:

ParameterTypeRequiredDescription
urlstringyesPage URL to validate
assertionstringyesWhat to check (natural language)

Example:

{
"tool": "browser_validate",
"arguments": {
"url": "https://your-app.com/dashboard",
"assertion": "The page shows a welcome message and user account balance"
}
}

Returns {"valid": true, "details": "..."} or {"valid": false, "reason": "..."}.


browser_task

Run a full multi-step browser automation task. The agent navigates across pages, fills forms, clicks, and returns a structured result.

Input schema:

ParameterTypeRequiredDescription
taskstringyesFull task description (natural language)
start_urlstringyesURL to start the task on
max_stepsintegernoMax steps (default: 20)

Example:

{
"tool": "browser_task",
"arguments": {
"task": "Go to the product catalog, find all products in the 'Electronics' category, and return a list of names and prices",
"start_url": "https://shop.example.com",
"max_steps": 15
}
}

browser_extract_to_table

Extract data from a page and write it directly into a ZeroDB table. No intermediate steps — the agent scrapes and stores in one call.

Input schema:

ParameterTypeRequiredDescription
urlstringyesPage URL to extract from
extract_goalstringyesWhat to extract
table_namestringyesZeroDB table to write to
project_idstringyesYour ZeroDB project ID

Example — competitor price monitoring:

{
"tool": "browser_extract_to_table",
"arguments": {
"url": "https://competitor.com/products",
"extract_goal": "Extract product name, SKU, and price for all products",
"table_name": "competitor_prices",
"project_id": "proj_abc123"
}
}

browser_enrich_memory

Extract content from a page and store it in ZeroMemory as agent memory. Useful for research, lead enrichment, and building agent context over time.

Input schema:

ParameterTypeRequiredDescription
urlstringyesPage URL to extract from
extract_goalstringyesWhat to extract and remember
memory_typestringnosemantic (default) or episodic
project_idstringyesYour ZeroDB project ID

Example — CRM lead enrichment:

{
"tool": "browser_enrich_memory",
"arguments": {
"url": "https://acme-corp.com/about",
"extract_goal": "Extract company overview, products, team size, and recent news",
"memory_type": "semantic",
"project_id": "proj_abc123"
}
}

browser_batch_extract

Extract structured data from up to 10 URLs in a single MCP call and store each result as a row in a ZeroDB table. Ideal for bulk lead enrichment or competitor snapshots without looping individual calls.

Input schema:

ParameterTypeRequiredDescription
urlsarray of stringsyesURLs to extract from (max 10)
extract_goalstringyesWhat to extract from each page
table_namestringyesZeroDB table to write rows into
project_idstringyesYour ZeroDB project ID

Example — bulk competitor research:

{
"tool": "browser_batch_extract",
"arguments": {
"urls": [
"https://competitor-a.com/about",
"https://competitor-b.com/about",
"https://competitor-c.com/about"
],
"extract_goal": "Company name, employee count, product focus, pricing model",
"table_name": "competitor_profiles",
"project_id": "proj_abc123"
}
}

Credits are charged per URL (75 credits each). A batch of 10 URLs costs 750 credits.


browser_enrich_memory_async

Queue an async background task to visit a URL and store extracted content in ZeroMemory. Returns a task_id immediately — the browser work happens in the background via Celery. Use this when you don't want to block on enrichment (e.g., enriching many contacts in parallel).

Input schema:

ParameterTypeRequiredDescription
urlstringyesURL to visit and extract from
project_idstringyesYour ZeroDB project ID
extract_goalstringnoWhat to extract (default: extract key facts)
memory_typestringnosemantic (default), episodic, or procedural

Example:

{
"tool": "browser_enrich_memory_async",
"arguments": {
"url": "https://prospect-company.com/blog/latest",
"extract_goal": "Key product updates, pricing changes, and strategic direction",
"memory_type": "semantic",
"project_id": "proj_abc123"
}
}

Response:

{
"task_id": "celery-task-uuid",
"status": "queued",
"message": "Memory enrichment task queued successfully"
}

Use the task_id to poll task status via the AINative backend if needed.


ZeroTime Use Cases

The Browser Agent is the 5th app in the ZeroTime business operations suite. Each use case connects a ZeroTime app to live web data.

ZeroPipeline — CRM Lead Enrichment

Before a sales call, enrich a CRM contact from their company website:

// In your agent or Claude Code session
await browser_enrich_memory({
url: "https://prospect-company.com",
extract_goal: "Company size, product offering, recent funding, key executives",
memory_type: "semantic",
project_id: "proj_abc123"
});

// Memory is now available in subsequent ZeroPipeline CRM calls
await zeropipeline_update_contact({
contact_id: "con_456",
enriched: true
});

ZeroCommerce — Competitor Price Monitoring

Schedule daily competitor price checks and store results in ZeroDB:

// Extract competitor pricing
const prices = await browser_extract({
url: "https://competitor.com/pricing",
extract_goal: "All plan names, monthly prices, and included features"
});

// Write to ZeroDB table for tracking
await browser_extract_to_table({
url: "https://competitor.com/pricing",
extract_goal: "Plan name, monthly price, annual price, features",
table_name: "competitor_pricing_snapshots",
project_id: "proj_abc123"
});

ZeroInvoice — Invoice Portal Extraction

Extract invoice data from a client vendor portal when they don't have an API:

const invoiceData = await browser_extract({
url: "https://vendor-portal.com/invoices",
extract_goal: "All unpaid invoices — invoice number, amount, due date, status",
schema: {
type: "array",
items: {
type: "object",
properties: {
invoice_number: { type: "string" },
amount: { type: "number" },
due_date: { type: "string" },
status: { type: "string" }
}
}
}
});

OpenCapStack — Investor Research

Enrich investor profiles before a fundraise:

await browser_enrich_memory({
url: "https://vc-firm.com/team/partner-name",
extract_goal: "Investment thesis, portfolio companies, check size, contact info",
memory_type: "semantic",
project_id: "proj_abc123"
});

Async Pipeline (Batch Mode)

For enriching many URLs at once, use the AINative backend batch endpoint directly instead of looping individual MCP calls.

POST /api/v1/public/browser/batch-extract

Extract structured data from multiple URLs in one request (max 10 URLs, 75 credits each).

curl -X POST https://api.ainative.studio/api/v1/public/browser/batch-extract \
-H "X-API-Key: ak_your_key" \
-H "Content-Type: application/json" \
-d '{
"urls": [
"https://company1.com/about",
"https://company2.com/about"
],
"extract_goal": "Company name, industry, employee count, products"
}'

Response:

{
"results": [
{
"url": "https://company1.com/about",
"status": "success",
"data": { "company_name": "Acme Corp", "industry": "SaaS", ... }
},
{
"url": "https://company2.com/about",
"status": "success",
"data": { ... }
}
],
"total": 2,
"succeeded": 2,
"failed": 0,
"credits_used": 150
}

POST /api/v1/public/browser/enrich-memory-async

Dispatch an async Celery task to enrich memory from a URL. Returns immediately with a task_id.

curl -X POST https://api.ainative.studio/api/v1/public/browser/enrich-memory-async \
-H "X-API-Key: ak_your_key" \
-H "Content-Type: application/json" \
-d '{
"url": "https://company.com/blog/latest-post",
"extract_goal": "Key insights and takeaways",
"memory_type": "semantic",
"project_id": "proj_abc123"
}'

Response (202 Accepted):

{
"task_id": "celery-task-uuid",
"status": "queued",
"message": "Memory enrichment task queued successfully"
}

Scheduled Enrichment

Create scheduled browser enrichment jobs that run on a cron schedule.

POST /api/v1/public/browser/schedules

curl -X POST https://api.ainative.studio/api/v1/public/browser/schedules \
-H "X-API-Key: ak_your_key" \
-H "Content-Type: application/json" \
-d '{
"name": "Daily competitor price check",
"urls": ["https://competitor.com/pricing"],
"cron_expr": "0 9 * * *",
"memory_type": "semantic",
"project_id": "proj_abc123"
}'

Cron expression format: Standard 5-field cron — minute hour dom month dow

ExampleMeaning
0 9 * * *Every day at 9am UTC
0 */6 * * *Every 6 hours
0 9 * * 1Every Monday at 9am
*/30 * * * *Every 30 minutes

GET /api/v1/public/browser/schedules

List all your schedules.

DELETE /api/v1/public/browser/schedules/{schedule_id}

Delete a schedule.


ZeroLocal (Local-First Mode)

The server auto-detects ZeroLocal running on localhost:8000. If detected, all requests go to your local instance — no cloud calls, no data leaves your machine.

## Start ZeroLocal
pip install zerodb-local
zerodb serve

## Then in another terminal — browser-mcp auto-connects to localhost:8000
npx @ainative/browser-mcp

Pricing

PlanPriceDaily limitMonthly limit
Free$05 tool calls/day50 tool calls/mo
Pro$49/mo50 tool calls/day1,000 tool calls/mo
EnterpriseCustomUnlimitedUnlimited

Credits are consumed per tool call (see Tools table above). Upgrade at ainative.studio/dashboard.


Rate Limits

All plans enforce per-day and per-month limits. When a limit is exceeded the API returns:

{
"error": "rate_limit_exceeded",
"message": "Daily browser tool call limit reached (5/5). Resets at midnight UTC.",
"limit": 5,
"used": 5,
"resets_at": "2026-05-20T00:00:00Z"
}

Error Reference

HTTP CodeErrorDescription
400invalid_urlURL is not reachable or malformed
401unauthorizedMissing or invalid API key
402insufficient_creditsNot enough credits for this operation
422validation_errorMissing required fields
429rate_limit_exceededDaily or monthly limit reached
500extraction_failedBrowser automation failed on the target page
503browser_unavailableBrowser service temporarily unavailable