Sly is an open Firefox extension and native host for LLM-driven browser automation. It exposes browser control as an MCP server, so it works with any LLM client that supports MCP over stdio. It has no domain blocklist.
LLM client <--stdio MCP--> host/mcp-server.js <--TCP--> native host
<--Firefox extension
The extension provides navigation, screenshots, mouse and keyboard input,
accessibility-tree inspection, page text extraction, element search, forms,
uploads, console/network diagnostics, window control, and an optional
humanized input mode. The execute_code variants are available under
host/codemode/ when a sandboxed batch API is desired.
Requirements: Firefox 121+, Node.js 18+, and an MCP-compatible LLM client.
- Install host dependencies:
npm install --prefix host. - Open
about:debugging#/runtime/this-firefoxin Firefox. - Choose Load Temporary Add-on and select
extension/manifest.json. - Copy the generated extension ID and run
./install.sh <extension-id>. - Fully restart Firefox so it reloads the native messaging manifest.
- Configure the client to launch
node /absolute/path/to/host/mcp-server.jsas an stdio MCP server.
The extension is loaded temporarily by Firefox, so its ID changes if it is
loaded again. Re-run install.sh whenever that happens. The Firefox
background script is persistent and owns recorder state directly; no hidden
recorder tab or offscreen document is needed.
The recorder is optional. Its options page accepts an API key, endpoint, and
model for any OpenAI-compatible audio transcription API. Defaults target
OpenAI's /v1/audio/transcriptions endpoint with whisper-1.
There is no extension build step. Reload the temporary add-on after changing
extension/. Install host dependencies with npm install --prefix host, then
run npm test from host or node --check against changed JavaScript files.
MIT licensed.
