Integrations
MCP
Point any MCP client at Morrow and an agent gets the same persistent, optionally logged-in browser a human uses.
Connect
Morrow serves an MCP server over streamable HTTP at /mcp, gated by the same MORROW_API_KEY (bearer header or ?token=):
{
"mcpServers": {
"morrow": {
"url": "http://localhost:3000/mcp",
"headers": {
"Authorization": "Bearer YOUR_MORROW_API_KEY"
}
}
}
}That's a Claude Desktop-style mcpServers config with type: "http" — check your client's docs for the exact key names it expects for a remote streamable-HTTP server vs. a local stdio one; the URL and bearer header above are the two things every client needs.
13 tools
| Tool | What it does |
|---|---|
| list_profiles | List all profiles and their status. |
| create_profile | Create a new profile (name, optional proxy/locale/timezone). |
| start_profile | Start a profile's browser. |
| stop_profile | Stop a profile's browser (flushes state to disk). |
| navigate | Navigate the profile's active page to a URL. |
| snapshot | Compact accessibility (aria) tree of the current page as YAML with [ref=eN] handles — the agent-friendly view. |
| click | Click an element matching a selector. |
| type | Fill an input (optionally submit with Enter). |
| press_key | Press a keyboard key. |
| scroll | Scroll the page by dx/dy pixels. |
| wait_for | Wait for a selector to appear. |
| screenshot | Screenshot the current page as a PNG image. |
| scrape | Scrape the current page (or a given url) into markdown/text/article. |
Tools act on a persistent, optionally logged-in profile
The transport is stateless — no session ID, no server-initiated stream — one request in, one response out. That's deliberate: Morrow's persistence story is the browser, not the MCP session. Every tool call that touches a page auto-starts the target profile if it's stopped, then acts on that profile's already-running browser, so state (cookies, logins, local storage, open tabs) survives across separate tool calls, separate MCP sessions, and even server restarts. The same profile an agent navigated and logged into an hour ago is still logged in now.
This is the differentiator over a stock browser-automation MCP server: those spin up a throwaway browser per session (or per call) with a blank profile. Morrow's tools act inside a persistent, optionally human-authenticated identity — an agent can pick up exactly where a human (or an earlier agent run) left off, with no cookie or session handoff required.
All page-control tools take a profile argument. A typical flow: create_profile, navigate to a login page, authenticate — either through the dashboard's human takeover or by driving click/type itself — then keep calling navigate/scrape/screenshot against that same logged-in identity indefinitely.
All 13 tools are thin wrappers
ProfileManager and scrape code the REST API and dashboard use — there is no separate MCP-only code path, and nothing an agent does is possible that a human or the REST API couldn't also do.