# Playwright MCP streams the page. Ghostget returns the result.

[Playwright MCP](https://github.com/microsoft/playwright-mcp) is Microsoft's tool server that gives any MCP-capable agent browser controls: `browser_navigate`, `browser_snapshot`, `browser_click`, `browser_type`, and friends, backed by the same engine as Playwright. Ghostget is not a tool server and publishes no MCP surface; it is a local CLI and SDK where the agent calls a named operation and gets back one bounded result.

This page describes Playwright MCP's published architecture and Ghostget's v0.18.28 contract, checked against public sources in September 2026.

## Two contracts with the model's context

Playwright MCP's contract is per-step: each tool call returns the page's accessibility tree, so the agent re-reads the world after every action. That keeps the model oriented inside a live page, and it is the direct price of generality. Microsoft-reported figures cited in a July 2026 [comparison matrix](https://modernqacourse.com/docs/en/01-agent-skills-browser-automation/07-competitive-landscape/01-tool-comparison-matrix) put a typical Playwright MCP task near 114,000 tokens versus about 27,000 for its disk-first CLI path; treat any single figure as an estimate, not a spec, but the direction is structural.

Ghostget's contract is per-operation: the agent sends one typed request and receives one typed result. A public-page read returns the page as bounded Markdown and nothing else; a provider action returns its contract's fields and nothing else. No accessibility tree, screenshot, or intermediate page state enters context because no steering surface exists to report on.

## The guardrail question

With Playwright MCP, the guardrail is the harness: whatever permission prompts your agent runtime implements stand between the model and every action the tool server exposes, on every page the session can reach. The capability set is the whole browser; the allowlist is conversation policy.

With Ghostget, the guardrail is the contract set. The agent can only request operations reviewed into the installed release, each bound to one account realm, provider target, transport, and risk level. Writes require an exact preview and a fresh confirmation; an indeterminate dispatch is never blindly retried. A page that drifts out of contract fails closed rather than improvising a workaround.

## Side by side

| Decision | Playwright MCP | Ghostget |
| --- | --- | --- |
| Transport | MCP tool server inside your agent's tool loop | Local CLI commands or TypeScript SDK calls; no server, no MCP |
| Context per step | The accessibility tree plus the action result | The operation result only |
| Action surface | Any navigation, click, type, or evaluation the browser supports | Only the named operations in the installed release's contract catalog |
| Credentials | Live in the browser profile or context the agent controls | Opaque to the caller and resolved inside an isolated credential helper |
| Best fit | Occasional live control for an agent that must improvise | Repeatable reads and account actions where the boundary is the requirement |

## When to pick which

Pick Playwright MCP when your agent genuinely needs to navigate the open web itself: exploratory browsing, sites without a stable operation contract, or flows the tool server must improvise through. Microsoft's engine, auto-wait behavior, and MCP transport are the strengths.

Pick Ghostget when the task decomposes into named operations and per-step page state is context you would rather not pay for or firewall around. If your agent runtime speaks MCP, it can still wrap Ghostget commands; Ghostget just never joins the loop as a steerable surface.

## Measure before you standardize

Run `ghostget read <url>` once against a page your agent currently browsers. The byte difference is the context argument in miniature. See [How agents reach the web](https://ghostget.com/compare/) for the lane map and the [supported action set](https://ghostget.com/docs/reference/provider-capabilities/) for current operations.
