May 29, 2026 · 13 min read

Browser MCP: Connect Claude & Cursor to a Real Browser

Puzzle pieces connecting chat, cursor, and browser — Browser MCP illustration

What is a Browser MCP?

"Browser MCP" (or WebMCP) is emerging shorthand for a Model Context Protocol server that exposes a real web browser as tools to an AI model. Instead of giving Claude or Cursor a brittle HTTP scraper, you give them a persistent, controllable browser running in the cloud, reachable through MCP.

Practically, a browser MCP is an MCP server that offers tools like:

Lego-style MCP socket plugged into a brain icon — what is a Browser MCP

Claude Code or Cursor call these tools through MCP; the MCP server translates tool calls into real browser actions via Playwright, Puppeteer, or similar. The main point: the model stops hallucinating what the DOM might look like and starts reacting to the actual, rendered page.

Two-rail subway map comparing MCP and A2A lines
MCP is the cable. A2A is the network. Don't confuse the two.

MCP vs A2A: Two Ways to Wire a Real Browser

There are two patterns you should know:

With a browser MCP you can either:

Human Browser exposes a dedicated A2A endpoint at https://agent.humanbrowser.cloud/a2a. Your MCP server can forward tool calls to this agent, which runs the real browser, manages sessions, and returns structured results. That keeps your MCP process light while still giving Claude or Cursor a full-featured cloud browser.

Why Browser MCP Beats Raw HTTP Scraping

Most devs start with fetch tools: they work for static HTML but fall apart on modern web apps. A browser MCP solves several pain points:

This matters for AI coding assistants. If you want Claude or Cursor to automate a dashboard, scrape internal tools, or test an SPA end to end, you want them talking to something that looks like a real user browser, not just an HTTP client.

How Claude Code Uses a Browser MCP

Claude Code can talk to any MCP server that implements the protocol and exposes tools in a manifest. A browser MCP is just another tool provider, but its tools are stateful and typically tied to a session id.

The basic flow:

  1. You configure Claude Code to load your MCP server (via mcp.config.json or GUI).
  2. The MCP advertises tools like open_page, click, and extract_text.
  3. Claude sees the tool descriptions and uses them as needed when you prompt it (e.g., “log into this internal tool and download today’s CSV”).
  4. The MCP server talks to the real browser (either bundled or via A2A) and returns results.

The same pattern works in Cursor. Cursor has in-IDE support for MCP, so you can mount a browser MCP and then write prompts like: “Use the browser tools to open <URL>, log in, and screenshot the dashboard; then write Playwright tests that cover this flow.”

Architecture: MCP-Embedded vs A2A-Backed Browser

You have two main design options for implementing a browser MCP for Claude or Cursor.

PatternHow it worksProsCons
MCP-embedded browserMCP server runs Playwright/Puppeteer directly.Simple local setup; fewer moving parts.Heavy process; scaling and proxy rotation are your problem.
MCP + A2A browser agentMCP server calls an external agent at /a2a to run browser sessions.Lightweight MCP; easier scaling; managed proxy & captcha handling.Needs network access; one more component to configure.

For anything beyond trivial local experiments, an A2A-backed browser MCP is usually the right call. It lets you keep the MCP implementation thin and stateless while delegating browsers, proxies, geolocation, and CAPTCHAs to a dedicated system.

Giving Claude & Cursor a Real Cloud Browser via A2A

Human Browser provides that external agent, with:

You interact with it via the A2A endpoint: https://agent.humanbrowser.cloud/a2a. Your MCP server just needs to translate a model tool call into an A2A JSON request, then relay the response back to Claude or Cursor.

If you want a broader view of how this fits into agent architectures, see the cluster article on AI agent browser automation, which walks through the agent patterns you can reuse on top of MCP.

Sequence diagram with vertical lifelines and horizontal arrows — MCP request flow

Step-by-Step: Minimal Browser MCP Server (Node.js)

Below is a highly simplified MCP-style server that exposes two tools backed by the Human Browser A2A endpoint: open_page and get_text. In a real implementation you would conform exactly to the MCP spec for transport and tool schema, but the core wiring remains the same.

import express from "express";
import fetch from "node-fetch";

// Environment
const PORT = process.env.PORT || 4000;
const HUMAN_BROWSER_A2A = "https://agent.humanbrowser.cloud/a2a";
const HUMAN_BROWSER_API_KEY = process.env.HUMAN_BROWSER_API_KEY;

if (!HUMAN_BROWSER_API_KEY) {
  throw new Error("HUMAN_BROWSER_API_KEY is required");
}

// Very minimal MCP-like shape
// POST /tools/invoke { name: string, arguments: object }
const app = express();
app.use(express.json());

// Keep track of a session per conversation or user
// In real MCP you would attach this to the model conversation id.
const sessionStore = new Map();

async function callHumanBrowserAgent(sessionId, task) {
  const body = {
    sessionId,
    task, // free-form DSL understood by the browser agent
  };

  const res = await fetch(HUMAN_BROWSER_A2A, {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "Authorization": `Bearer ${HUMAN_BROWSER_API_KEY}`,
    },
    body: JSON.stringify(body),
  });

  if (!res.ok) {
    const text = await res.text();
    throw new Error(`Human Browser error: ${res.status} ${text}`);
  }

  return res.json();
}

app.post("/tools/invoke", async (req, res) => {
  const { name, arguments: args, conversationId } = req.body;
  const sessionId = sessionStore.get(conversationId) || null;

  try {
    let agentTask;

    if (name === "open_page") {
      const { url } = args;
      agentTask = {
        steps: [
          { action: "open", url },
        ],
      };
    } else if (name === "get_text") {
      const { selector } = args;
      agentTask = {
        steps: [
          { action: "extractText", selector },
        ],
      };
    } else {
      return res.status(400).json({ error: "Unknown tool" });
    }

    const agentResponse = await callHumanBrowserAgent(sessionId, agentTask);

    // Persist session id returned by Human Browser
    if (agentResponse.sessionId && conversationId) {
      sessionStore.set(conversationId, agentResponse.sessionId);
    }

    return res.json({
      content: agentResponse.result,
      sessionId: agentResponse.sessionId,
    });
  } catch (err) {
    console.error(err);
    return res.status(500).json({ error: String(err.message || err) });
  }
});

app.listen(PORT, () => {
  console.log(`Browser MCP adapter listening on :${PORT}`);
});

This is not a full MCP server; it is the core of what your browser MCP does:

From here, you’d flesh out:

Configuring Claude Code / Cursor to Use Your MCP

Once you have a browser MCP server running, you wire it into Claude Code or Cursor.

Claude Code

Claude Code supports MCP via configuration. You define your MCP servers with their transport (e.g., stdio or HTTP bridge) and tool configuration. Each workspace can load one or more MCP servers, so you can combine your browser MCP with other data sources (code search, docs, internal APIs).

When you open a Claude session in your editor, the model will discover the browser tools, and you can explicitly ask it to use them: “Use the browser tools to log in to our staging app, walk through the onboarding flow, and summarize any client-side errors in the console.”

Cursor

Cursor similarly lets you attach MCP providers that surface tools to the model. With a browser MCP configured, Cursor can:

The configuration steps depend on Cursor’s MCP UI at the time you read this, but the pattern is the same: point Cursor at your MCP endpoint, enable the tools, and then write prompts that invite the model to use those tools.

Residential IPs and Geo-Sensitive Flows

Real browsers are only half the story for serious automation. Many sites change behavior by country or aggressively block datacenter IPs. A browser MCP backed by residential proxies solves this without forcing you to own your own proxy fleet.

Human Browser offers residential IPs in 75 countries. From your MCP adapter you specify the desired location (e.g., country code or region) when creating or resuming a session. That unlocks use cases like:

Because the A2A browser agent handles the proxy routing, your MCP code remains simple: it asks for “US” or “DE” and lets the agent figure out exit IPs and rotations.

Pricing Model for a Browser MCP Backed by Human Browser

When you wire your browser MCP to Human Browser’s A2A endpoint, you keep a clear mental model of costs. The service is strictly pay-as-you-go:

There is no subscription, and unused balance never expires. You can try it for $1 (about 4 typical tasks), so you can benchmark how your browser MCP behaves under real usage before committing. Because you pay for actual agent steps, browser time and data, it fits nicely with MCP’s tool-call model: your cost is proportional to how often Claude or Cursor actually drive the browser.

You can always check the current details and quick-start path from Human Browser — pay as you go, no subscription, and if you want a one-command setup, there’s an install flow described at /install.

Operational Considerations

When you move from “demo” to “production-ish” with a browser MCP, you need to think like an SRE for AI tools.

Session Lifecycle

Models don’t understand cost, but your wallet does. Don’t keep sessions alive forever:

Error Handling

Real websites are messy. Build resilience into your browser MCP:

Security and Data Boundaries

Because your browser MCP can see what the browser sees, treat it like you would any automation hitting internal or customer systems:

Extending Beyond Basic Navigation

Once you have the basic browser MCP wired up, you can enrich the toolset to make Claude or Cursor more capable and less brittle.

Higher-Level Tools

Instead of exposing only atomic actions like click and type, provide composable, semantic tools:

Inside your MCP, these high-level tools still call the A2A browser agent, but they hide implementation details from the model. This produces more reliable behavior and simpler prompts.

Testing and CI

A browser MCP is also useful for non-interactive automation. Your CI pipeline can spawn a small MCP session that:

Because the plumbing is the same as what you use for in-IDE Claude or Cursor sessions, you avoid maintaining parallel stacks for “developer assistance” and “automated testing”.

Frequently asked questions

What is a browser MCP?

A browser MCP is a Model Context Protocol server that exposes a real cloud browser as tools to models like Claude or Cursor, enabling stateful navigation and DOM interaction instead of simple HTTP scraping.

How is MCP different from A2A for browser control?

MCP defines how tools are exposed to models, while A2A is an HTTP interface for one agent to call another. A typical setup uses MCP as a thin adapter that forwards browser tool calls to a dedicated browser agent via an A2A endpoint.

Can I give Claude Code access to a real browser from my IDE?

Yes. You run a browser MCP server, configure Claude Code to load it, and back that MCP with a cloud browser service such as Human Browser via its A2A endpoint so Claude can open pages, click, type, and extract data in a real browser.

Why do I need residential IPs for a browser MCP?

Residential IPs help avoid blocks and access geo-specific content. Many sites treat data-center IPs as bots or show different UIs by country, so a browser MCP backed by residential proxies behaves more like a real user in the target region.

How is Human Browser priced for MCP-based browser automation?

Human Browser is pay-as-you-go: $0.10 per hour of browser time, $4 per GB of residential proxy data, $0.005 per CAPTCHA solved, and $0.02 per agent step with the AI included, with no subscription and balance that never expires.

Related guides

Top up — $20

Loading secure checkout…

More coins →