New in 0.2.0: hover and the page's console

A browser made for agents

Your coding agent opens your web app in Pudu, signs in, clicks through it and tells you what broke. You watch it happen, and take over at any moment.

Download for macOSPudu 0.2.0 · macOS 26 or later
github.com/search?q=mcp+server&s=stars

Log

On github.com, search for repositories about mcp server and sort them by most stars. Read the first three.

  1. navigatehttps://github.com2.76s
  2. clicke90.69s
  3. fille113 "mcp server"0.51s
  4. presse113 Enter1.65s
  5. clicke1660.40s
  6. clicke2371.44s

✓ 6 calls, 16.9 s

mcp serverSort: Most stars
  • punkpeye/awesome-mcp-servers★ 96,133
  • headroomlabs-ai/headroom★ 75,060
  • zylon-ai/private-gpt★ 57,564

A logged run from the measurements: 6 calls in 16.9 s, 7.4 s of it the page. The same task on Playwright MCP took 10 calls and 22.4 s.

Browsers were made for people. Agents use them differently.

  1. 01

    An agent that reads the whole page at every step pays for it in tokens and in steps.

    Pudu tells it only what changed.

  2. 02

    An agent in a browser that holds your sessions can reach your accounts.

    Pudu starts on a profile that keeps nothing.

  3. 03

    A test the agent already did costs a model again every time it is repeated.

    Pudu replays it without one.

Fast and light

Fewer steps, less time, fewer tokens

Each action tells the agent only what changed on the page, so it reads less and decides sooner. Against Playwright MCP, on six public sites, Pudu took fewer steps, less time and fewer input tokens on all six. It cost less on three, about the same on two and more on MercadoLibre.

Steps, six sites
42
Playwright MCP: 72
Time, seconds, six sites
149.9
Playwright MCP: 221.5
Input tokens, six sites
433k
Playwright MCP: 1385k
Cost, US dollars, six sites
0.65
Playwright MCP: 1.06
  • Pudu
  • Playwright MCP

Steps

Airbnb
6
11
Kayak
10
23
Booking
12
15
MercadoLibre
5
8
GitHub
6
10
YouTube
3
5

Time, seconds

Airbnb
24.0
32.9
Kayak
43.8
69.8
Booking
28.5
48.7
MercadoLibre
24.5
31.2
GitHub
15.5
21.4
YouTube
13.5
17.5

Input tokens

Airbnb
58k
290k
Kayak
112k
644k
Booking
131k
201k
MercadoLibre
60k
85k
GitHub
48k
108k
YouTube
25k
56k

Cost, US dollars

Airbnb
0.09
0.26
Kayak
0.14
0.41
Booking
0.16
0.16
MercadoLibre
0.12
0.07
GitHub
0.08
0.07
YouTube
0.05
0.08

The sums are of each site's median. Medians of three runs per site, as of 2026-10-11. Each run is Claude Code on Opus given one task and one browser, Pudu or @playwright/mcp@0.0.83, with no window. Three runs are few: a small difference between two bars says nothing.

The table, with the lowest and highest run
SiteBrowserStepsTime, secondsInput tokensCost, US dollars
AirbnbPudu6 4 to 824.0 22.2 to 28.158k 42k to 70k0.09 0.09 to 0.10
Playwright MCP11 11 to 1132.9 30.3 to 38.8290k 262k to 291k0.26 0.26 to 0.30
KayakPudu10 9 to 1343.8 41.9 to 52.9112k 84k to 153k0.14 0.13 to 0.23
Playwright MCP23 22 to 2569.8 63.0 to 69.9644k 554k to 646k0.41 0.39 to 0.44
BookingPudu12 11 to 1228.5 26.8 to 28.7131k 111k to 133k0.16 0.15 to 0.17
Playwright MCP15 14 to 1848.7 43.7 to 52.2201k 199k to 343k0.16 0.15 to 0.27
MercadoLibrePudu5 5 to 624.5 23.1 to 26.860k 59k to 78k0.12 0.12 to 0.13
Playwright MCP8 8 to 1031.2 29.4 to 32.285k 84k to 185k0.07 0.07 to 0.26
GitHubPudu6 6 to 615.5 15.3 to 16.948k 48k to 54k0.08 0.08 to 0.08
Playwright MCP10 10 to 1021.4 20.9 to 22.4108k 108k to 108k0.07 0.07 to 0.08
YouTubePudu3 3 to 313.5 12.4 to 14.525k 24k to 25k0.05 0.05 to 0.05
Playwright MCP5 5 to 517.5 16.8 to 20.856k 55k to 66k0.08 0.07 to 0.16

Isolated

Each profile keeps its own sessions

A profile is a name with its own cookies, logins and storage, kept between runs, so the same test runs as different users of your app. The temporary profile keeps nothing, and it is the one a first launch uses.

An agent can switch to any saved profile without asking. Keep your real accounts out of the profiles you give it.

Profiles
  • temporarykeeps nothing, has no variablesin use
  • adminapp.example.com · ${EMAIL} ${PASSWORD}
  • customerapp.example.com · ${EMAIL} ${PASSWORD}
  • signed-outno variables

+ new profile: name and return

Careful with credentials

Passwords stay in the keychain

A profile holds values such as an email and a password. They are stored in the keychain, each tied to a site, and typed only on pages of that site: a page elsewhere cannot be handed one.

The agent types a value by its name, and the name is what it gets back. That keeps a password out of the conversation; it does not hide it from an agent that goes looking for it in the page.

You can stop the agent at any moment with ⌘. and take over the page yourself.

The same variable, asked for on two sites

app.example.com

fill e12 ${PASSWORD}

Typed. The agent gets back ${PASSWORD}, not the value.

example-login.net

fill e7 ${PASSWORD}

The variable ${PASSWORD} belongs to example.com and this window is on example-login.net, so nothing was typed. A variable is typed only on its own site and that site's subdomains.

Flows

Recorded once, replayed without a model

While the agent drives the page, Pudu records what it does as a flow: one JSON file of steps, each finding its element by role and name. Replaying it needs no model, from the window, from the agent or from a terminal.

It exits with 0 when every step passed and 1 when one did not, so it runs in CI. A replay stops at the first step that fails and keeps a screenshot of it. When a button is renamed, the step can still find it by its CSS selector, and says so.

zsh
$ pudu run flow.json --var EMAIL=ana@example.com
Flow "Sign in": PASSED (5 of 5 steps passed)
✓ 1. navigate https://app.example.com/login
✓ 2. fill textbox "Email"
✓ 3. fill textbox "Password"
✓ 4. click button "Sign in" (its name changed; found by selector)
✓ 5. waitForText Welcome back
$ echo $?
0

Install

Give it to your agent

Pudu is a Model Context Protocol server. Add it to your project's .mcp.json and the agent launches it when it needs a browser; it quits when the agent disconnects.

Opened from Finder, it is just a browser.

Download for macOSPudu 0.2.0 · macOS 26 or later
.mcp.json
{
  "mcpServers": {
    "pudu": {
      "command": "/Applications/Pudu.app/Contents/MacOS/Pudu"
    }
  }
}

Let your agent open your app

Download for macOSPudu 0.2.0 · macOS 26 or later

Recently shipped

  1. 0.2.0 2026-10-13

    • hover, for menus and tooltips that open only under the pointer.
    • console: what the page wrote to its console and the errors nothing caught.
    • A page the server answered with a 4xx or 5xx says so before its content.
    • Form fields say what they ask for: required, their type, a dropdown's options.
  2. 0.1.0 2026-10-12

    • First release: the window, the MCP server, flows, profiles and the pudu command.