Measurements
What Deputy saves an agent, measured against Playwright MCP on the same tasks, with the method.
Measured on 2026-09-12 on one machine, Linux with Chromium 152. The runs used Deputy's own model at the time, qwen/qwen3.7-flash through OpenRouter. Reproducible, not cited: the method and both tasks are in docs/measurements.md in the open-source repository.
Filling a real form
The task: book a table on a seven-field form (text, email, number, date, time, <select> and a textarea). Same prompt, same data, both through claude -p --output-format json. Both runs succeeded, and the form was really submitted in both.
| Claude + Playwright MCP | Claude + Deputy | ||
|---|---|---|---|
| Turns | 9 | 6 | |
| Claude tokens | 216,888 | 133,366 | 1.63× fewer |
| Deputy's own model | 1 call · 229 in / 55 out · $0.000014 | ||
| Total cost | $0.2730 | $0.1861 | 1.47× cheaper |
| Wall clock | 26.1 s | 17.2 s | 1.52× faster |
Deputy isn't free, and it was measured: its model made one call costing fourteen millionths of a dollar, against Claude's $0.19. The saving survives full accounting.
Deputy's entire view of that form (every field, its type, allowed values, minimum and maximum, which are required, and what each holds) is 611 tokens.
The finding worth reading twice
browser_capabilities first returned tool names only, to keep the reply small. The agent had to probe for parameter names: 246,003 tokens, 11 turns.
Returning the full JSON Schemas brought it to 155,774 tokens, 7 turns. Adding even more, the fields' current values and every button and link with a clickable ref, brought it to 133,366 tokens, 6 turns.
Sending about 5× more data made the task 1.8× cheaper. Every probe an agent is forced to make costs more than the context that would have prevented it.
What crosses the wire per observation
en.wikipedia.org/wiki/Main_Page, the same page at the same moment:
| Representation | ~Tokens |
|---|---|
| Full accessibility tree | 215,495 |
| Raw HTML | 62,184 |
| Screenshot (PNG, 1440 × 900) | 57,134 |
| Trimmed accessibility snapshot, what Playwright MCP sends | 14,170 |
| Deputy on a form page (schemas, values, actions) | 611 |
| Deputy on Wikipedia (5 tools, 25 actions) | 3,545 |
Deputy: an answer from browser_ask | ~40 |
The Playwright baseline was given browser_snapshot, its cheap text path, not only screenshots. The comparison is deliberately conservative: an agent sending 57,134-token screenshots would look far worse.
Long pages
Wikipedia's main page has 263 links. Deputy returns a window of them, never a silent subset:
| Call | Returns | Payload |
|---|---|---|
browser_capabilities() | 25 actions, and Showing 1-25 of 263 with how to get the rest | ~2,094 tokens |
browser_capabilities({ actionQuery: "Contact" }) | 3 of 263: refs a8, a257, a258 | ~1,224 tokens |
browser_capabilities({ actionOffset: 25, actionLimit: 5 }) | Items 26 to 30, with the next offset | ~1,346 tokens |
The filter reaches a257 directly, an item 230 places past the default window.
A second task: a Wikipedia lookup
Search Wikipedia for "Byzantine Empire", open the article, report its first sentence.
| Playwright MCP | Deputy | |
|---|---|---|
| Wall clock | 95.0 s | 28.0 s (3.4× faster) |
| Cost | $0.2820 | $0.2464 |
| Total tokens | 218,135 | 221,975 |
The session totals are about equal here. On a three-step lookup both are dominated by Claude Code's own system prompt (202,310 of the baseline's 218,135 tokens are cache reads), not by the browser payload. The form task has enough steps for the difference to show.
Live, on the real Wikipedia
Deputy grafted search_wikipedia and search_wikipedia_2 onto a site that has never heard of WebMCP, invoked one, and the real form submitted and went to /wiki/Byzantine_Empire. browser_ask answered "what is today's featured article?" in 1.96 s from the live page.