Secure Browser MCP
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., "@Secure Browser MCPnavigate to https://github.com and get the page text"
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.
Secure Browser MCP
An MCP server that gives an AI client (Claude, etc.) controlled access to a real headless browser on your server — with domain allowlisting, SSRF protection, per-session isolation, an audit log, and cookies/state that survive restarts.
Why "secure" specifically
Browser-automation MCPs are risky by default because the LLM effectively gets a pair of hands on a live browser that can reach anywhere on the internet (and, if misconfigured, your internal network). This server closes the common holes:
Risk | Mitigation |
SSRF (browser tricked into hitting internal services / cloud metadata endpoint) |
|
DNS rebinding (domain allowlisted, but later resolves to an internal IP) | DNS is re-resolved and IP-checked on every navigation, not cached |
| Scheme is rejected before anything touches the browser |
Unrestricted destinations | Hard allowlist via |
Unauthenticated access to the MCP endpoint | Bearer token required on every request ( |
Session/cookie leakage across tasks | Each |
Resource exhaustion |
|
Silent/undetectable misuse | Every tool call is written to a SQLite |
Oversized responses blowing up context | Text and screenshot payloads are size-capped |
Drive-by downloads |
|
This covers the common attack surface, but you're still exposing a browser to
an LLM. Keep ALLOWED_DOMAINS as narrow as your task allows, and run this on
a host/container with no access to anything sensitive — treat it like you
would a CI runner that executes untrusted code.
Related MCP server: mcp-browser-server
Persistent storage — what's actually persisted
Two things, both in SQLite at ./data/browser-mcp.db (path configurable via
DATA_DIR):
Browser state — cookies + localStorage per session, captured via Playwright's
storageState()and restored on the nextbrowser_navigatecall for thatsessionId. This is what lets a session stay logged in to a site across server restarts. Callbrowser_persist_sessionto save explicitly, orbrowser_close_session(which persists automatically).Audit log — every tool invocation, its params, and outcome, so you can review what the browser actually did later (
browser_audit_log).
If you'd rather keep this in Supabase instead of local SQLite (e.g. so
multiple server instances share state), swap storage.ts for Supabase calls
— the function signatures are small and self-contained, so it's a drop-in
replacement.
Setup
npm install
npx playwright install --with-deps chromium # downloads the browser binary
cp .env.example .env
# edit .env: set MCP_AUTH_TOKEN and ALLOWED_DOMAINS
npm run build
npm startFor local iteration without building: npm run dev.
The server listens on POST http://localhost:8787/mcp (Streamable HTTP
transport). Point your MCP client at that URL with:
Authorization: Bearer <your MCP_AUTH_TOKEN>Tools exposed
browser_navigate(sessionId, url)— allowlist + SSRF-checked navigationbrowser_get_text(sessionId, selector?)— read page/element textbrowser_click(sessionId, selector)browser_type(sessionId, selector, text)browser_screenshot(sessionId)— base64 PNGbrowser_persist_session(sessionId)— force-save cookies/localStoragebrowser_close_session(sessionId)— persist + free browser resourcesbrowser_list_sessions()browser_audit_log(sessionId, limit?)
sessionId is any string you choose (e.g. "pranav-github-login") — reuse
the same one to keep continuity (logged-in state, cookies) across calls.
Deploying on your existing server
Render: same pattern you used for the MongoDB MCP — set env vars in the dashboard (don't bake
MCP_AUTH_TOKENinto the image), expose port8787, and set the health check toGET /mcpreturning 401 (expected, since it's unauthenticated) rather than a 200.Put this behind HTTPS (Render/most PaaS do this for you) — the bearer token is meaningless over plain HTTP.
If the server also hosts other things, run this in its own container so the idle-session reaper and
MAX_SESSIONScap actually bound its resource use independently.
Extending
To let the LLM choose domains dynamically instead of a static allowlist, add an approval step (return a tool result asking for confirmation) rather than opening
ALLOWED_DOMAINSwide.To persist to Supabase instead of SQLite, replace the functions in
src/storage.ts; the audit log schema maps directly to a Postgres table.The MCP TypeScript SDK evolves — if
npm installpulls a version with a differentStreamableHTTPServerTransportAPI, check https://github.com/modelcontextprotocol/typescript-sdk for the current signature.
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.
Related MCP Servers
Alicense-qualityDmaintenanceAn open-source MCP server that provides browser automation capabilities to external AI systems, enabling navigation, DOM interaction, and web content extraction.Last updated20Apache 2.0- AlicenseAqualityDmaintenanceA MCP server that gives AI assistants full browser control, enabling navigation, clicking, form filling, and screenshots via any MCP client.Last updated8MIT
- Alicense-qualityCmaintenanceSecurity-hardened MCP server that gives AI assistants full control over your real browser session, supporting 36 tools for navigation, data extraction, monitoring, and more.Last updatedMIT
- AlicenseAqualityAmaintenanceA headless, agent-controllable real browser as an MCP server that enables AI agents to navigate, click, fill, eval JavaScript, and take screenshots on localhost and allowed hosts, with no GUI required.Last updated194MIT
Related MCP Connectors
A paid remote MCP for AI agent browser MCP session, built to return verdicts, receipts, usage logs,
A paid remote MCP for AI agent browser approval MCP, built to return verdicts, receipts, usage logs,
Driflyte MCP server which lets AI assistants query topic-specific knowledge from web and GitHub.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- 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/pranavgawasproject/secure-browser-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server