Oya Browser

Hosted MCP endpoint for driving real Chrome sessions: cloud, third-party or your own desktop browser

Official · Oya AI TypeScript Remote (hosted) · Streamable HTTPLocal · Streamable HTTP Browser automation

62 popularity score ★ 348 ↓ 900/wk

Connect your client

Remote (hosted)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

Claude Codeterminal
claude mcp add --transport http oya https://oyabrowser.com/mcp/pool \
  --header "Authorization: Bearer $OYA_API_KEY"
CursorMCP config file
{
  "mcpServers": {
    "oya": {
      "url": "https://oyabrowser.com/mcp/pool",
      "headers": { "Authorization": "Bearer <YOUR_API_KEY>" }
    }
  }
}
windsurfMCP config file
{
  "mcpServers": {
    "oya": {
      "url": "https://oyabrowser.com/mcp/pool",
      "headers": { "Authorization": "Bearer <YOUR_API_KEY>" }
    }
  }
}
Claude (desktop and web)Settings → Connectors → Add custom connector; sign in to Oya when asked
https://oyabrowser.com/mcp/pool
Local (once it is running)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude CodeTerminal
claude mcp add --transport http oya-browser http://127.0.0.1:47321/mcp
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "oya-browser": {
      "url": "http://127.0.0.1:47321/mcp"
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "oya-browser": {
      "type": "http",
      "url": "http://127.0.0.1:47321/mcp"
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.oya-browser]
url = "http://127.0.0.1:47321/mcp"
Gemini CLITerminal
gemini mcp add --scope user --transport http oya-browser http://127.0.0.1:47321/mcp

Settings 2

OYA_API_KEY Required: Oya API key, sent as a bearer token to the hosted endpoint.
OYA_MCP_PORT Optional: Moves the desktop app's local MCP port from 47321.

What it does

Oya Browser is a browser control plane from Oya with an MCP endpoint in front of it. An assistant connects to the hosted pool endpoint at oyabrowser.com, starts a browser on its key with start_browser (Oya Cloud, a self-hosted Oya worker, or a Browserbase, Steel, Anchor or Browser Use session), and then drives it: analyze_page returns the page with every interactive element given a number, and click, type, select_option and the rest act on those numbers. Element numbers are reset on each analysis, so the page has to be read again after it changes.

Beyond page actions it keeps signed-in identities ('personas': a fingerprint, cookie jar and proxy kept together), can fill a login or a one-time code from a persona's stored credentials without passing them back to the caller, clear CAPTCHAs with a configured solver, and replay saved playbooks (recorded runs stored as Playwright code). run_task hands a whole task to Oya's own browser agent, which runs on an LLM key you configure yourself.

The docs list 32 tools on the pool endpoint; seven more (the four tab tools, read_elements, read_console, read_network) exist only on the per-browser endpoint https://oyabrowser.com/mcp/{BROWSER_ID}. The Oya desktop app also opens its own local MCP port: its source sets http://127.0.0.1:47321/mcp (moved with OYA_MCP_PORT), a bearer token kept in the OS keychain, a 120-second limit per tool call, and only 14 tools (page, tab and dialog actions), with press_key limited to navigation keys. The whole stack can also be self-hosted with Docker, ECS, Kubernetes or GKE.

What it needs

An Oya API key from oyabrowser.com (or created by an agent through the self-signup endpoint); claude.ai and Claude Desktop connectors can sign in with OAuth instead. Oya Cloud browsers need the key to be claimed by a person's Oya account and are billed until stopped. run_task, playbook repair and CAPTCHA reading need your own LLM provider key set on the account. Using your own signed-in browser needs the Oya desktop app. Self-hosting needs git, Docker (running) and Node 20 or newer.

Limits

On the pool endpoint, the tab tools, read_elements, read_console and read_network are not available; use the per-browser endpoint. read_console and read_network work on Oya browsers only. wait_for times out after at most 20 seconds. Until a person claims a self-signed-up key, cloud browser calls answer 403 claim_required. run_task and chat answer 422 until an LLM key is configured. The desktop app's local port offers 14 tools, not the hosted set. Its docs say stealth is not guaranteed: they publish detector benchmarks rather than claim undetectability.

Who it suits

Suits teams that want an assistant to work in real, signed-in browser sessions they can watch and take over, to switch between cloud and third-party browser vendors without changing tool calls, or to rerun recorded workflows cheaply as playbooks. It is a hosted service tied to an Oya account and key, and cloud browsers cost money, so someone who only needs a local browser for a few page reads may prefer a local browser-automation server. Regulated organisations can self-host the community edition; the HIPAA-ready enterprise edition is separate and private.

Tools 39

start_browser
Start a browser on the key (choice of provider and persona) and make it the active one; pool endpoint
stop_browser
Stop a browser and end its session; pool endpoint
pool_status
Show pool size and the browsers connected to it
analyze_page
Return the current page with numbered interactive elements, as TOON, markdown or JSONL
navigate
Load a URL
click
Click an element by its number from analyze_page
type
Clear a field and type text into it
press_key
Press one keyboard key
screenshot
Capture the visible tab as a PNG
scroll
Scroll up or down, 500 pixels by default
handle_dialog
Accept or dismiss an alert, confirm or prompt
wait
Wait for a CSS selector to appear, 10 s by default
wait_for
Wait for text, a URL fragment or network idle, up to 20 s
click_coordinates
Click at a screen position
mouse_move
Move the mouse pointer
double_click
Double-click on the page
keyboard_type
Type keystrokes without targeting an element
drag
Drag from one point to another
select_option
Pick an option of a native select by its text
find
Find elements matching a plain description, best match first
hover
Hover over an element to open menus or tooltips
run_script
Run read-only JavaScript in an isolated world and return JSON
go_back
Go back in the tab's history
go_forward
Go forward in the tab's history
reload
Reload the page
solve_captcha
Clear a CAPTCHA with the configured solver
sign_in
Fill a site's login from the persona's stored credentials
complete_mfa
Enter a one-time code from the persona's stored factors
list_saved_logins
List sites the persona has a saved login for, usernames only
list_playbooks
List the playbooks saved on the key
run_playbook
Replay a saved playbook with new variables
run_task
Give a whole task to Oya's own agent, using your configured model
list_tabs
List open tabs and which are the agent's own; per-browser endpoint
open_tab
Open a new tab; per-browser endpoint
switch_tab
Switch to one of the agent's own tabs; per-browser endpoint
close_tab
Close a tab the agent opened; per-browser endpoint
read_elements
List interactive elements, lighter than analyze_page; per-browser endpoint
read_console
Read what the page logged; Oya browsers, per-browser endpoint
read_network
Read the requests the page made; Oya browsers, per-browser endpoint

Similar servers