Browse Together
STDIOA Playwright browser and MCP Server for controlling browser via HTTP API.
A Playwright browser and MCP Server for controlling browser via HTTP API.
A Playwright browser and MCP Server on your desktop. You can spin up a headful browser (for human interaction) and an accompanying MCP server that can be used to control the browser via HTTP API or MCP server.
This project provides two complementary services for browser automation and co-browsing:
Both services are built with Deno and TypeScript and work together seamlessly.
Note: Currently supports Mac OS, but can be extended to other platforms with minor changes.
No, not at this time. This is a (headful) web browser that behaves like a normal human-controlled browser, but also allows you to control your session via HTTP API or MCP client. While you CAN get screenshots, pull down docs, etc., this is not a Computer Use / Operator service.
Think of it like MCP-based remote control of a browser session, for pulling down documentation or other tasks while you code.
Browser Service:
browser.ts
: The main browser proxy service implementationtypes.ts
: Defines the command structures and types using ZodMCP Server:
mcp.ts
: FastMCP implementation that connects to the browser serviceInstall Prerequisites:
Install Playwright's browser packages (assumes you have npx
installed):
# Install all browsers npx playwright install # Or install specific browsers npx playwright install chromium npx playwright install firefox
Install Deno:
curl -fsSL https://deno.land/install.sh | sh
See Deno Installation for more details.
Start the Browser Service:
deno task browser
This starts the browser proxy on http://localhost:8888
(or the port specified in your environment)
Configure your MCP Client:
{ "mcpServers": { "browse-together": { "command": "deno", "args": ["run", "-A", "/Users/duane/Projects/browse-together-mcp/mcp.ts"] }, } }
You can also start the MCP server directly for testing:
deno task mcp
You can choose which browser to use by setting the BROWSER_TYPE
environment variable or using the --browser-type
flag:
# Use Firefox via environment variable BROWSER_TYPE=firefox deno task browser # Or via CLI flag deno task browser --browser-type firefox
Send POST requests to /api/browser/:pageId
with a JSON body describing the action.
Example: Navigate to a URL
curl -X POST http://localhost:8888/api/browser/myTab \ -H "Content-Type: application/json" \ -d '{"action":"goto","url":"https://example.com"}'
Example: Click an Element
curl -X POST http://localhost:8888/api/browser/myTab \ -H "Content-Type: application/json" \ -d '{"action":"click","selector":"#submit-button"}'
See the API Reference in 002-browser.md
for more details.
claude_desktop_config.json
:{ "mcpServers": { "browse-together": { "command": "/path/to/deno", "args": [ "run", "--allow-read", "--allow-net", "--allow-env", "--allow-sys", "/path/to/browse-together-mcp/mcp.ts" ], "env": { "PORT": "8888" } } } }
Let's browse to jsr.io together.
The MCP server exposes the following tools to clients:
This project was vibe-coded via a series of documents describing incremental planning steps:
Some of these steps may be outdated or no longer relevant, but are included as a reference and for insight into how the project was built.
See also vibe-coders.org for more information about our local vibe-coding group in Sandy, UT.
deno task browser
deno task mcp
deno fmt
deno check --all browser.ts mcp.ts types.ts
+----------------+ +--------------+ +------------------+
| | | | | |
| Cline/LLM | ---- | MCP Server | ---- | Browser Service |
| (MCP Client) | | (mcp.ts) | HTTP | (browser.ts) |
| | | | | |
+----------------+ +--------------+ +------------------+
| |
FastMCP API Playwright API
| |
STDIO/SSE Chromium Browser
The system works as follows:
browser.ts
) manages a persistent Chromium browser instance using Playwrightmcp.ts
) provides a standard MCP interface using FastMCP