Atlas / MCP servers / nishantsny / browden

browdenCAUTION

mcp/nishantsny/browden

Read-only browser MCP server — a local, configurable MCP shell around real Chrome for LLM agents.

Verdict
CAUTION
Grade
B
Trust score
87 /100
Exposed tools
2 2r · 0w · 0d
Transport
sse · stdio
License
Apache-2.0
Stars
1
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

[](https://github.com/nishantsny/browden/actions/workflows/e2e.yml) [](./LICENSE) [](https://www.python.org/downloads/) [](https://modelcontextprotocol.io)

A local, cross-platform, read-only (configurable) MCP shell around a real Chrome browser. It lets an LLM agent look at and navigate the web through your own browser. The agent can read pages, query the DOM, and take screenshots, but can never execute any write action. The MCP is configurable to allow button-clicks and text-fill, allowlisted per website and visible element.

Short demo video: https://youtu.be/q-W3Z9nlj58

Disclaimer

With great power comes great responsibility: Only point this MCP to sites whose Terms of Service permit automated access.

When to use browden

browden is deliberately narrow: safe, local, undetected, and read-only, with allowlisted writes. This allows your agent to run wild on your own logged-in Chrome. Use browden for your daily research needs + a few writes. Defer to richer automation tools when you need to drive the browser rather than read it.

Typical usecases:

  • Let an agent read and navigate your logged-in pages while it stays

structurally unable to click "Buy", send mail, or delete anything.

  • You need a prompt-injection perimeter around the agent.

When NOT to use browden

Read from source at commit a9f16e72059fOBSERVED · 2026-10-11
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.

claude-code
claude mcp add browden -- uvx browden
claude-desktop
{
  "mcpServers": {
    "browden": {
      "command": "uvx",
      "args": [
        "browden"
      ]
    }
  }
}
03

Exposed tools (2)

2 read · 0 write · 0 destructive.

ToolRiskDescription
list_tabsreadList all open browser tabs across all profiles
new_blank_tabreadOpen a new blank tab and return it (navigate it afterwards).
04

Trust audit

CAUTIONgrade B · trust 87/100 Install with care. The audit found things worth knowing before you trust its output.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeWARN
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
none-observed
Network
declared (9 observation(s))
Shell
none-observed
Dependencies
pinned
Secrets in source
none-found

Findings (12)

MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
browden/web_navigator/selenium_chrome/backend.py:223
f"--remote-allow-origins=http://127.0.0.1:{port}",
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
browden/web_navigator/selenium_chrome/backend.py:263
url = f"http://127.0.0.1:{port}/json/version"
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
perf_benchmark/mem_profile.py:425
page_url = f"http://127.0.0.1:{httpd.server_address[1]}/"
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
setup/onetime_setup.py:148
service_name: {"type": "sse", "url": f"http://127.0.0.1:{port}/sse"}
MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
perf_benchmark/mem_profile.py:236
print(f"\n{'phase':<16}{'n':>4}{'uss_mb':>9}{'Δidle':>8}"
LOWInventory / provenance · inv.binary · CWE-1104
test/fixtures/tranco-mini.txt.gz
tranco-mini.txt.gz
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
test/e2e/test_upload_file.py:64
(tmp_path / "id_rsa").write_text("PRIVATE KEY")
Why it matters. touches a credential store
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
test/e2e/test_upload_file.py:123
secret = tmp_path / "id_rsa"
Why it matters. touches a credential store
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
test/unit/mcp/test_gated_page.py:354
secret = tmp_path / "id_rsa"
Why it matters. touches a credential store
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
test/unit/mcp/test_gated_page.py:370
assert "id_rsa" not in sent
Why it matters. touches a credential store
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
test/unit/mcp/test_server_upload_file.py:85
await server.upload_file("#bill_file_expense", str(receipts / "id_rsa"), "h1")
Why it matters. touches a credential store
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
README.md:485
"url": "http://127.0.0.1:22001/sse"

Gates applied: no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha a9f16e72059ffull audit observations/trust-audit/mcp-server/nishantsny__browden.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-11a9f16e72059fCAUTIONB87first audit
06

Questions

What is the browden MCP server?

Read-only browser MCP server — a local, configurable MCP shell around real Chrome for LLM agents.

What tools does browden expose?

2 in total: 2 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is browden safe to connect to an agent?

With care. The audit graded it B (87/100) and found 12 things worth knowing before you trust this server, listed below with the exact line each was found on.

What credentials does browden need?

No credential environment variables were found in its source, so it appears to need none.

How does browden run?

It speaks sse and stdio, so it runs as a local process your client starts. It is published on PyPI as browden.

How current is this page?

The grade is for one exact copy of the source (a9f16e72059f), read on 2026-10-11. The repository is watched and re-audited when it changes.

Advertisement