Experimental · local MCP runtime

A Browser Runtime
For Your Agent

Give your existing agent a way to navigate, read, and act on the web. Callisto connects over MCP and returns a concise view of the page.

MCP over stdio 10 structured tools ax-N refs 12,000-char bounded snapshots 1440 × 900 pinned viewport Same-origin frames No model API key Isolated Chromium
THE RUNTIME / TODAY
Isolated by defaultA fresh Chromium session for each MCP process.
Connected, in progressBrowse relay integration is experimental.
Read the project status
The problem

The Web Is Messy.
Give Agents A Clearer View.

An agent repeatedly dumps the DOM, guesses an action, and retries. A loop diagram: agent sends a request, receives a raw DOM, guesses a selector, fails, and loops. AGENT MODEL RAW DOM SELECTOR FAIL RETRY MORE TOKENS
A browser task needs a useful view of the page and a way to act on it. Callisto brings both into the agent loop.
Perception 001

Pages Carry A Lot Of Context

Raw markup can be large and difficult to navigate. A task may need only a small part of the page.

Action 002

Pages Keep Changing

Elements move, disappear, or become covered. An action needs to check the page as it exists now.

Setup 003

Browser Plumbing Adds Up

Agents need a browser connection, an interface, and a way to understand the result of each action.

Trust 004

Results Need Context

A useful response makes it easier for the agent to inspect the page and decide what to do next.

Introducing Callisto

One Server.
Ten Tools. A Real Browser.

Callisto runs a local Chromium and exposes it over MCP. The agent navigates, reads a bounded accessibility tree, and acts on page refs — without a separate Playwright install or model API key.

callisto / mcp ISOLATED · 1440 × 900
⌘   stdio session connected
›_ Host agent opencode
You

Find the top Show HN post and summarize its comments.

Agent

I'll open Hacker News and take a snapshot.

⌄callistonavigateRunning

Launching isolated Chromium…

THE LOOP / 01

Connect an MCP host.

Callisto speaks stdio MCP. OpenCode, Claude Code, Codex, or your own host launches one process. The host supplies the model; Callisto requires Node.js and a local Chromium or Chrome binary.

The difference

Less Context.
Sharper Actions.

Give the agent the page it needs to act on, not the markup the browser happened to build.

01 / RAW DOMillustrative
<div class="sc-1x2y3z">
<div class="header__nav">
<button class="btn btn--primary">Add to Cart</button>
</div>
<script>window.__DATA__ = {…}</script>
More to sift through

Markup mixes the page structure with implementation details.

02 / CALLISTO SNAPSHOTillustrative
navigation "Main"
[ax-3] link "Home"
[ax-12] button "Add to Cart" {clickable}
[ax-18] textbox "Search"
[ax-24] heading "Featured"
Act on the node that matters

Actionable nodes first, page refs, bounded output. The agent decides with less noise.

Illustrative example, not a benchmark. Snapshot sizes depend on the page. Read the benchmark notes ↗
01

See the page, not the markup.

A pruned accessibility tree keeps roles, names, state, and values. Scripts, styles, and wrapper divs stay out.

02

Act on refs, not guesses.

Click and fill check visibility, stability, enabled state, and hit testing before they touch the page.

03

Bound the context.

Snapshots default to 12,000 characters. Page with nextOffset or search the full tree with callisto_find.

How it works

Four Steps.
One Loop.

The host agent stays in charge. Callisto is the hands and eyes: a browser process, a protocol, and a readable page.

The agent stays the decision maker. Callisto only exposes the page and performs the action you asked for.

Get started

From Repository
To Browser.

  1. 01 / BUILD

    Install the engine.

    With Node.js 20+ and Chrome or Chromium available, clone the repo and build Mini.

    git clone https://github.com/Lothnic/callisto.git
    cd callisto
    npm --prefix packages/mini ci
    npm --prefix packages/mini run build
  2. 02 / REGISTER

    Add the MCP server.

    OpenCode can use the included project configuration. For other MCP hosts, use an absolute path to the compiled server.

    {
      "mcpServers": {
        "callisto": {
          "command": "node",
          "args": ["/absolute/path/to/callisto/packages/mini/dist/mcp.js"]
        }
      }
    }
  3. 03 / ASK

    Give it a task.

    The first browser call starts an isolated session. Set CHROME_PATH if your browser is not discovered.

    Open Hacker News and summarize
    the top three Show HN posts.
⌘

Prefer a CLI? callisto-sidecar speaks the same engine over JSON-RPC on stdio.

Works with stdio MCP hosts

Hosts

OpenCodeClaude CodeCodexCursor

Protocol

MCP stdioJSON-RPC

Engine

CDPChromeChromium

License

MIT engineLocal only
Questions

Before You Install

01 Is this Playwright?

No. Callisto is a CDP engine with a Playwright-shaped subset. It exposes structured MCP actions, not arbitrary JavaScript. Treat it as a lean runtime, not a drop-in Playwright replacement.

02 Does it use my browser or my logins?

By default Callisto starts an isolated browser. An experimental bridge can open its own tab through a paired browse extension, but it cannot yet adopt existing tabs or provide browse’s handoff and stop controls. Background input is refused. Read connected-mode limitations ↗

03 Do I need a model API key?

No. Your host agent supplies the model. Callisto only supplies the browser and the page representation.

04 How big are the snapshots?

MCP snapshots default to 12,000 characters. Use nextOffset to page through the last capture, or callisto_find to search the full tree without sending all of it.

05 Is it safe to run unattended?

Callisto is not a sandbox. Browser actions can change real websites, and snapshots are not a general secret filter. Use a dedicated profile and your own approval layer for sensitive work. The experimental connected mode requires an origin allowlist; it does not block all subresources.

06 What is actually shipped today?

The CDP engine, the MCP server, bounded snapshots, same-origin frame actions, batching, and an eval kit. Cross-origin frames, human handoff, and full Playwright compatibility are still open work. The project is experimental and says so.

Give Your Agent
A Browser.

LOCAL · ISOLATED · NO API KEY

MIT engine · experimental · bring your own model