Browser Agent MCP
Package: @ainative/browser-mcp
Install: npx @ainative/browser-mcp
npm: npmjs.com/package/@ainative/browser-mcp
Version: 1.1.1
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
Six 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 |
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"
}
}
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