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.
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
Option 1 — npx (recommended)
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:
| Variable | Description |
|---|---|
AINATIVE_API_KEY | API key (recommended) — ak_... prefix |
AINATIVE_USERNAME + AINATIVE_PASSWORD | Email + password login |
Get your API key from ainative.studio/dashboard.
Tools
Eight tools are available. Each call costs credits from your AINative balance.
| Tool | Description | Credits |
|---|---|---|
browser_act | Perform an action on a page (click, type, navigate, scroll) | 50 |
browser_extract | Extract structured data from a page | 75 |
browser_validate | Validate content or state on a page | 25 |
browser_task | Run a multi-step automation task | 200 |
browser_extract_to_table | Extract data and write directly to a ZeroDB table | 100 |
browser_enrich_memory | Extract content and store in ZeroMemory agent memory | 100 |
browser_batch_extract | Extract data from up to 10 URLs in one call and store rows in ZeroDB | 75/URL |
browser_enrich_memory_async | Queue a background memory enrichment task; returns task_id immediately | 100 |
Tool Reference
browser_act
Perform an action on a web page — navigate, click, type, scroll, submit a form.
Input schema:
| Parameter | Type | Required | Description |
|---|---|---|---|
url | string | yes | Page URL to act on |
instruction | string | yes | Natural language action to perform |
max_steps | integer | no | Max 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:
| Parameter | Type | Required | Description |
|---|---|---|---|
url | string | yes | Page URL to extract from |
extract_goal | string | yes | What to extract (natural language) |
schema | object | no | Optional 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:
| Parameter | Type | Required | Description |
|---|---|---|---|
url | string | yes | Page URL to validate |
assertion | string | yes | What 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:
| Parameter | Type | Required | Description |
|---|---|---|---|
task | string | yes | Full task description (natural language) |
start_url | string | yes | URL to start the task on |
max_steps | integer | no | Max 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:
| Parameter | Type | Required | Description |
|---|---|---|---|
url | string | yes | Page URL to extract from |
extract_goal | string | yes | What to extract |
table_name | string | yes | ZeroDB table to write to |
project_id | string | yes | Your 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:
| Parameter | Type | Required | Description |
|---|---|---|---|
url | string | yes | Page URL to extract from |
extract_goal | string | yes | What to extract and remember |
memory_type | string | no | semantic (default) or episodic |
project_id | string | yes | Your 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:
| Parameter | Type | Required | Description |
|---|---|---|---|
urls | array of strings | yes | URLs to extract from (max 10) |
extract_goal | string | yes | What to extract from each page |
table_name | string | yes | ZeroDB table to write rows into |
project_id | string | yes | Your 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:
| Parameter | Type | Required | Description |
|---|---|---|---|
url | string | yes | URL to visit and extract from |
project_id | string | yes | Your ZeroDB project ID |
extract_goal | string | no | What to extract (default: extract key facts) |
memory_type | string | no | semantic (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
| Example | Meaning |
|---|---|
0 9 * * * | Every day at 9am UTC |
0 */6 * * * | Every 6 hours |
0 9 * * 1 | Every 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
| Plan | Price | Daily limit | Monthly limit |
|---|---|---|---|
| Free | $0 | 5 tool calls/day | 50 tool calls/mo |
| Pro | $49/mo | 50 tool calls/day | 1,000 tool calls/mo |
| Enterprise | Custom | Unlimited | Unlimited |
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 Code | Error | Description |
|---|---|---|
| 400 | invalid_url | URL is not reachable or malformed |
| 401 | unauthorized | Missing or invalid API key |
| 402 | insufficient_credits | Not enough credits for this operation |
| 422 | validation_error | Missing required fields |
| 429 | rate_limit_exceeded | Daily or monthly limit reached |
| 500 | extraction_failed | Browser automation failed on the target page |
| 503 | browser_unavailable | Browser service temporarily unavailable |
Links
- ainative.studio/products/zerotime/browser — use case landing page
- ainative.studio/dashboard — get API key, view usage
- npmjs.com/package/@ainative/browser-mcp — npm package
- GitHub Issues — report bugs