Get Gather
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Get GatherOpen my LinkedIn profile and summarize the most recent activity from my network"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Remote Browser
Remote Browser is an open-source, self-hosted browser orchestration system for AI agent harness engineering.
It launches and manages multiple isolated, containerized Chrome instances with CDP (Chrome Devtools Protocol) support for scalable web automation. Remote Browser is designed to integrate with AI agent runtimes and browser tools, and works with OpenClaw, Hermes Agent, etc.
It also bundles an MCP server for extracting personal data from many services: Amazon order history, Garmin activity stats, Zillow favorites, and more. This MCP server works with Claude Code, LM Studio, Gemini CLI, and many more.

Quickstart
Remote Browser is a Python app. To run it, you need uv and Podman:
uvx remotebrowserThen open http://localhost:23456.
Related MCP server: web-scraper-server
MCP
Standard config works with most tools:
{
"mcpServers": {
"remotebrowser-mcp": {
"url": "http://127.0.0.1:23456/mcp"
}
}
}Use the Claude Code CLI to add the MCP server:
claude mcp add --transport http remotebrowser-mcp http://localhost:23456/mcpFollow the MCP install guide, use the standard config above.
Follow the MCP install guide, use the standard config above.
Go to Program in the right sidebar -> Install -> Edit mcp.json. Use the standard config above.
Follow the MCP install guide, use the standard config above.
API
Start a new browser
POST /api/v1/browsers/{browser_id} creates a new browser with the specified browser_id. The browser runs in a container. If the browser_id is omitted, POST /api/v1/browsers creates a new browser with an automatically generated name.
Example: curl -X POST localhost:8300/api/v1/browsers/xyz123 creates a container named chromium-xyz123 and returns:
{ "container_name": "chromium-xyz123", "status": "created" }Stop a browser
DELETE /api/v1/browsers/{browser_id} terminates the browser with the specified browser_id and returns the container name. Returns HTTP 404 if the browser ID is not found.
Example: curl -X DELETE localhost:8300/api/v1/browsers/xyz123 terminates the container named chromium-xyz123 and returns:
{ "container_name": "chromium-xyz123", "status": "deleted" }Query a browser
GET /api/v1/browsers/{browser_id} returns information about the browser with the specified browser_id. Returns HTTP 404 if the browser is not found.
Example: curl localhost:8300/api/v1/browsers/xyz123 returns:
{ "last_activity_timestamp": 1772069081 }List all browsers
GET /api/v1/browsers returns a JSON array of all running browser IDs.
Example: curl localhost:8300/api/v1/browsers returns:
["xyz123", "abc234"]List pages of a browser
GET /api/v1/browsers/{browser_id}/pages returns a JSON array of page identifiers (CDP target IDs) for all open pages in the specified browser. Returns HTTP 404 if the browser is not found.
Example: curl localhost:23456/api/v1/browsers/test/pages returns:
["96FDE4162B8EEEBF98E26756D21CF0C5"]Get page HTML
GET /api/v1/browsers/{browser_id}/pages/{page_id}/html returns the raw HTML of the specified page. Returns HTTP 404 if the browser or page is not found.
Example: curl localhost:23456/api/v1/browsers/test/pages/96FDE4162B8EEEBF98E26756D21CF0C5/html
Navigate a page
POST or GET /api/v1/browsers/{browser_id}/pages/{page_id}/navigate navigates the specified page to a URL taken from the request's query string. The url query parameter is preferred if present; otherwise the entire raw query string is used as the URL. Returns HTTP 400 if no URL is provided, HTTP 404 if the browser or page is not found, and HTTP 502 if the navigation fails.
Example: curl -X POST 'localhost:23456/api/v1/browsers/test/pages/96FDE4162B8EEEBF98E26756D21CF0C5/navigate?url=https://text.npr.org/' returns:
{ "status": "success" }Get distilled page JSON
GET /api/v1/browsers/{browser_id}/pages/{page_id}/distilled returns the distilled JSON representation of the specified page, produced by matching the page against distillation patterns. Returns HTTP 404 if the browser or page is not found.
Example: curl localhost:23456/api/v1/browsers/test/pages/96FDE4162B8EEEBF98E26756D21CF0C5/distilled
Submit distilled page form
POST /api/v1/browsers/{browser_id}/pages/{page_id}/distill submits form field values for the specified page and continues the distillation loop, returning the next rendered distilled HTML form. The request body is form-encoded (application/x-www-form-urlencoded or multipart/form-data); each field is mapped by its name to the corresponding form input. Returns HTTP 404 if the browser or page is not found.
Example: curl -X POST localhost:23456/api/v1/browsers/test/pages/96FDE4162B8EEEBF98E26756D21CF0C5/distill -d 'email=user@example.com&password=secret' returns the next distilled HTML page.
List all patterns
GET /api/v1/patterns returns a JSON array of all pattern filenames (sorted alphabetically), including the extension (.html or .json).
Example: curl localhost:8300/api/v1/patterns returns:
["amazon_signin.html", "amazon_signin.json", "goodreads_signin.html"]Get a pattern
GET /api/v1/patterns/{pattern_name} returns the content of the named pattern. Accepts an optional ext query parameter (html or json, defaults to html). Returns HTTP 404 if the pattern is not found, HTTP 400 if the name contains invalid characters or the extension is unsupported.
Example: curl localhost:8300/api/v1/patterns/amazon_signin returns the raw HTML of amazon_signin.html.
Example: curl localhost:8300/api/v1/patterns/amazon_signin?ext=json returns the JSON content of amazon_signin.json.
Create or update a pattern
POST /api/v1/patterns/{pattern_name} writes content to the named pattern file, creating it if it does not exist. Accepts an optional ext query parameter (html or json, defaults to html). Returns HTTP 400 if the name contains invalid characters or the extension is unsupported.
Example: curl -X POST localhost:8300/api/v1/patterns/amazon_signin -H 'Content-Type: application/json' -d '{"content": "<div gg-match=\"...\">"}' returns:
{ "pattern_name": "amazon_signin", "status": "created" }On subsequent calls the status field is "updated".
Example (JSON): curl -X POST 'localhost:8300/api/v1/patterns/amazon_signin?ext=json' -H 'Content-Type: application/json' -d '{"content": "{\"rows\": \"tr\"}"}'
Delete a pattern
DELETE /api/v1/patterns/{pattern_name} removes the named pattern file. Accepts an optional ext query parameter (html or json, defaults to html). Returns HTTP 404 if the pattern is not found, HTTP 400 if the name contains invalid characters or the extension is unsupported.
Example: curl -X DELETE localhost:8300/api/v1/patterns/amazon_signin returns:
{ "pattern_name": "amazon_signin", "status": "deleted" }Example (JSON): curl -X DELETE 'localhost:8300/api/v1/patterns/amazon_signin?ext=json'
Backends
The browser API runs on one of three backends, selected at startup:
Backend | Selected by | Browser runs as | CDP reached via |
Podman (default) | (default) | local podman container | local mapped port |
Daytona |
| on-demand Daytona sandbox | a signed HTTPS preview URL |
External Fleet |
| upstream Chrome Fleet | the upstream fleet's |
Podman is the default and needs no extra setup. Daytona is an on-demand sandbox provider: install the extra (uv sync --extra daytona) and set DAYTONA_API_KEY and DAYTONA_SNAPSHOT, plus DAYTONA_API_URL for a self-hosted Daytona. Setting CHROMEFLEET_URL takes precedence and proxies the browser API to an external Chrome Fleet. Because Daytona is reached over a signed HTTPS preview URL rather than a local port, the VNC live view (/live, /websockify) and the residential-proxy / geo-IP features are podman only.
Development
To run the development version, clone this repository and run:
uv run -m uvicorn getgather.main:app --port 23456Deployment
Supported deployment:
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/remotebrowser/remotebrowser'
If you have feedback or need assistance with the MCP directory API, please join our Discord server