browser-mcp-demo
Provides search capabilities on TripAdvisor through the platform_search tool, enabling querying for attractions, restaurants, and hotels with site-aware search.
Provides search capabilities on Yelp through the platform_search tool, enabling querying for businesses and places with support for site-aware search.
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., "@browser-mcp-demosearch XHS for hiking gear and extract first result"
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 + MCP Tool Gateway (Multi-Site MVP)
This project provides a minimal HITL (human-in-the-loop) remote browser session and an MCP tool gateway for restricted search/extraction. It currently supports XHS and includes real search adapters for Yelp and TripAdvisor.
Requirements
Node.js >= 18
Playwright Chromium (
npx playwright install chromium)
Install
npm install
npx playwright install chromiumCopy the environment template and adjust as needed:
cp .env.example .envRun
npm run devThis starts:
HTTP server on
http://HOST:PORTMCP server on stdio (connect with an MCP client)
Docker (single-user + noVNC)
This path is intended for a single user (or MAX_SESSIONS=1). It runs the browser inside Xvfb and streams the desktop via noVNC.
Build:
docker build -t browser-mcp-demo .Run:
docker run --rm \
-p 3000:3000 -p 7900:7900 \
-e HOST=0.0.0.0 \
-e HEADLESS=false \
-e MAX_SESSIONS=1 \
-e VIEW_MODE=novnc \
-e PUBLIC_BASE_URL=http://YOUR_SERVER_IP:3000 \
-e NOVNC_URL_TEMPLATE="http://YOUR_SERVER_IP:7900/vnc.html?autoconnect=1&resize=scale&path=websockify" \
-e PROFILES_DIR=/data/profiles \
-e AUDIT_LOG_PATH=/data/logs/audit.log \
-e DELETE_PROFILE=false \
-v "$PWD/profiles:/data/profiles" \
-v "$PWD/logs:/data/logs" \
browser-mcp-demoNotes:
VIEW_MODE=novncmakes/session/view/:idembed the live browser stream.Update
PUBLIC_BASE_URLandNOVNC_URL_TEMPLATEwith your public host or domain.
HITL Login Flow
Call MCP tool
create_session->{ sessionId, viewUrl }Open
viewUrlin your browser.Default mode: a local Chromium window is opened for login.
noVNC mode (
VIEW_MODE=novnc): the remote browser stream is embedded in the page.
Login on that window (QR/OTP/2FA handled by the user).
Call
wait_for_loginuntil status isREADY(site-aware whensiteis provided).
MCP Tools (stdio)
Tools:
create_sessionwait_for_login(optionalsite)platform_search(site-aware viasiteparam)xhs_open_and_extract(site-aware viasiteparam)destroy_session
Example (pseudo):
const session = await client.callTool("create_session", {});
await client.callTool("wait_for_login", { sessionId: session.sessionId, timeoutSec: 120 });
const results = await client.callTool("platform_search", {
sessionId: session.sessionId,
query: "camping",
maxNotes: 10,
scrollTimes: 0,
site: "xhs" // xhs | yelp | tripadvisor
});
const detail = await client.callTool("xhs_open_and_extract", {
sessionId: session.sessionId,
url: results.notes[0]?.url,
site: "xhs"
});Security Boundary
Tools return sanitized structured JSON only.
No cookies, localStorage, sessionStorage, storageState, or userDataDir exposure.
No screenshot tool.
Audit log is written to
logs/audit.logwith redaction.
Agent HTTP Endpoints
POST /agent/run→ start a run and execute until login required or donePOST /agent/continue→ continue a run after user loginGET /agent/run/:id→ fetch current run state
Example request body:
{
"query": "camping",
"maxNotes": 10,
"scrollTimes": 0,
"detailCount": 3,
"detailParallel": 4,
"site": "xhs"
}Configuration
Key environment variables:
HOST,PORT,PUBLIC_BASE_URLUI_DIST_DIR(serve built UI from the same server)VIEW_MODE(info|novnc)NOVNC_URL_TEMPLATE(supports{sessionId}placeholder)OPENAI_API_KEY,OPENAI_MODELAGENT_RUN_TTL_MINUTESMAX_SESSIONS,SESSION_TTL_MINUTESPROFILES_DIR,DELETE_PROFILEHEADLESSXHS_BASE_URLAUDIT_LOG_PATH
Notes
XHS, Yelp, and TripAdvisor all support search in the current adapter layer. XHS detail extraction is implemented; Yelp/TripAdvisor detail extraction is still stubbed.
The DOM selectors for each site may change. Update
src/browser/xhs.tsorsrc/sites/*.tsif extraction breaks.This MVP does not implement large-scale crawling or anti-bot bypass.
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
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/Hanny658/browser-mcp-demo'
If you have feedback or need assistance with the MCP directory API, please join our Discord server