Remote browsers for AI agents

Give your agent a browser.
Keep yours private.

Start an isolated Chromium browser for one task. An agent can control it using CDP. A human can take over when needed.

  • No signup needed
  • $0.01 / 5 min
  • Headful Chromium
  • Humans can take over

agent-session.log

LIVE
NEW BROWSER
SESSION ACTIVEBrowser ready

One task. One browser.

Agent controlPlaywrightHuman viewSame browserRuntime proofAvailableTask isolationDedicated session
PAY PER USE$0.01 / 5 min
ONE TASK · ONE BROWSER

Works in your existing agents with a small top up

Add Popcorn to any
compatible agent.

No sign up required. Just connect and pay per use!

SERVER URL

https://popcorn-mcp-gcp.reclaimprotocol.org/mcp

PORTABLE CONFIGURATION

{
  "mcpServers": {
    "popcorn": {
      "url": "https://popcorn-mcp-gcp.reclaimprotocol.org/mcp"
    }
  }
}

CLAUDE CODE

claude mcp add --transport http popcorn \
  "https://popcorn-mcp-gcp.reclaimprotocol.org/mcp"

CODEX CLI

codex mcp add popcorn --url https://popcorn-mcp-gcp.reclaimprotocol.org/mcp
codex mcp login popcorn

Any other compatible client: add a remote MCP server named popcorn, select Streamable HTTP, and paste the server URL.

FIRST PROMPT

Use Popcorn to check my balance, then create one browser. Open https://www.google.com/ and return the live-view URL. If credit is insufficient, return the checkout URL and stop.

HOW MCP BILLING WORKS

One credit gives 10 minutes of browser time. A $5 checkout buys 100 credits. If the agent needs credit, it returns a checkout URL for a person to open.

Full MCP setup

Pay per use using Agent Wallets

x402 Compatible

Accepts payments in USDC on Base network.

INSTALLnpm install mppx@0.8.15 viem@2.55.10 playwright
one paid browser · request/response
POST https://app.popcorn.reclaimprotocol.org/v1/x402/sessions
→ 402 Payment Required

Validate network, USDC token, payee, and price.
Sign the offer in the agent wallet.
Repeat the request with the payment signature.

→ 200 OK
{ connectUrl, liveViewUrl, expiresAt }
connect
const browser = await chromium.connectOverCDP(session.connectUrl);
console.log(session.liveViewUrl);
Open the full TypeScript integration
INSTALLnpm install mppx@0.8.15 viem@2.55.10 playwright
agent.ts · minimal first session
import { Fetch, evm } from "mppx/client";
import type { Hex } from "viem";
import { privateKeyToAccount } from "viem/accounts";
import { chromium } from "playwright";

function required(name: string): string {
  const value = process.env[name]?.trim();
  if (!value) throw new Error(name + " is required");
  return value;
}

const endpoint =
  "https://app.popcorn.reclaimprotocol.org/v1/x402/sessions";
const expected = {
  network: "eip155:8453",
  chainId: 8453,
  asset: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913" as Hex,
  payTo: "0x28f26a191D6bCa1FfD129261E726033188d65138" as Hex,
  amount: "10000"
};

const account = privateKeyToAccount(
  required("PAYER_PRIVATE_KEY") as Hex
);

const paidFetch = Fetch.from({
  methods: [evm.charge({
    account,
    authorization: { name: "USD Coin", version: "2" },
    currencies: [expected.asset],
    decimals: 6,
    maxAtomicAmount: expected.amount,
    networks: [expected.chainId]
  })],
  onChallenge: async (challenge, { createCredential }) => {
    const offer = challenge.request as Record<string, unknown>;
    if (offer.network !== expected.network ||
        String(offer.asset).toLowerCase() !== expected.asset.toLowerCase() ||
        String(offer.payTo).toLowerCase() !== expected.payTo.toLowerCase() ||
        offer.amount !== expected.amount) {
      throw new Error("Untrusted payment offer");
    }
    return await createCredential();
  }
});

const response = await paidFetch(endpoint, {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Idempotency-Key": crypto.randomUUID()
  },
  body: "{}"
});
if (!response.ok) throw new Error("Request failed: " + response.status);

const session = await response.json();
const browser = await chromium.connectOverCDP(session.connectUrl);
console.log("Human view:", session.liveViewUrl);

This example validates the current payment terms and opens one session. Use the complete x402 guide for retries, secret storage, and recovery after uncertain responses.

Endpointhttps://app.popcorn.reclaimprotocol.org/v1/x402/sessions
NetworkBase mainnet · eip155:8453
AssetUSDC · 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
Payee0x28f26a191D6bCa1FfD129261E726033188d65138
Price10,000 atomic units · $0.01
Time300 seconds per block

What Popcorn does

A real browser,
separate from yours.

Popcorn starts a fresh Chromium session for each task, gives the agent a CDP connection, and removes the browser afterward. A person can open the same session through live view when required by the agent.

Your browserPopcorn browser
Existing tabs and sessionsFresh session
Browser historyNo prior history
Mixed tasksOne task
Manual cleanupExpires or ends

Verify when needed

Verifiably private
and secure.

End to end encrypted. The browser runs in a Trusted Execution Environment (TEE). All your credentials and browsing data are secured by cryptography.

Each session gives you an attestation of a protected environment. You can verify it each time you open a browser session using Popcorn.

Enterprise

Need dedicated capacity?

Talk to us for dedicated browser capacity, specific regions, private networking, managed access, or support.

ENTERPRISE INTEGRATION

Plan a larger deployment.

For self-serve access, use the public x402 API above—no form required.

Give your agent a browser.
Keep yours private.