{"slug": "i-gave-my-coding-agent-eyes-on-my-real-logged-in-browser-stdlib-only-local", "title": "I gave my coding agent eyes on my real, logged-in browser (stdlib-only, local)", "summary": "A developer built browser-buddy, an MIT-licensed MCP server plus Chrome Manifest V3 extension that lets coding agents read pages through the user's real, logged-in Chrome profile, including cookies and sessions, to bypass 403s, login walls and bot detection. The tool uses a stdio MCP server, a Unix-socket native host and chrome.runtime.connectNative, exposes two tools (read_active_tab and open_and_read_url), passes 17/17 smoke tests, and is published on the official MCP registry as io.github.hahahahahahahahah6/browser-buddy. Everything runs locally with zero dependencies, and the developer says next steps are real-world testing on Windows Chrome.", "body_md": "Every agentic coding tool hits the same wall eventually: the page you need is behind a login, a 403, or bot detection, and the agent's server-side fetcher is locked out. Your browser is logged in. Your agent is not. So the fix is not a better scraper — it is letting the agent *borrow your eyes*.\n\nI built [browser-buddy](https://github.com/hahahahahahahahah6/browser-buddy), an MCP server + Chrome extension (Manifest V3) that lets coding agents read pages through the user's real Chrome profile: cookies, sessions, logins included. MIT licensed, zero dependencies, nothing leaves your machine.\n\nThree pieces, each dumb and replaceable:\n\n`chrome.runtime.connectNative` on one side, a socket server on the other.`mcp` SDK package; the protocol surface I need is two tools, so I hand-rolled the framing in ~200 lines:\n\n```\nTOOLS = [\n    {\n        \"name\": \"read_active_tab\",\n        \"description\": (\n            \"Read the user's currently active Chrome tab through their real, \"\n            \"logged-in browser profile. Returns the page URL, title, and \"\n            \"cleaned readable text. Use when WebFetch/fetch is blocked by a \"\n            \"403, login wall, or bot detection.\"\n        ),\n        \"inputSchema\": {\"type\": \"object\", \"properties\": {}, \"additionalProperties\": False},\n    },\n    {\n        \"name\": \"open_and_read_url\",\n        \"description\": (\n            \"Open a URL in a background Chrome tab using the user's real \"\n            \"browser profile (cookies and login sessions included), extract \"\n            \"its readable text, then close the tab.\"\n        ),\n        ...\n    },\n]\n```\n\nMessage flow for `open_and_read_url`:\n\n```\nagent ──JSON-RPC/stdio──▶ MCP server ──Unix socket──▶ native host\n                                                          │ connectNative\n                                                          ▼\n                                                   Chrome extension ──▶ tab\n```\n\nLogs go to stderr (stdout is reserved for protocol messages — the classic stdio footgun, handled once and never again).\n\nHeadless browsers are *new* browsers: no cookies, no sessions, and they get fingerprinted as bots — the exact problem I was trying to escape. The insight is embarrassingly simple: the most authenticated, least-bot-detected browser in existence is the one the user is already using. So don't automate a fake browser; ask the real one to read.\n\nThis design is only acceptable because everything is local:\n\n17/17 smoke tests pass (framing, tool schemas, socket relay, tab extraction mocks), and it's live on the official MCP registry as `io.github.hahahahahahahahah6/browser-buddy`. Next: real-world testing on Windows Chrome.\n\nTry it: `uvx browser-buddy-mcp` (needs the extension + host from the repo).\n\n*Built in the open. Issues and PRs welcome — especially from people whose agents keep getting 403'd.*", "url": "https://wpnews.pro/news/i-gave-my-coding-agent-eyes-on-my-real-logged-in-browser-stdlib-only-local", "canonical_source": "https://dev.to/haoli/i-gave-my-coding-agent-eyes-on-my-real-logged-in-browser-stdlib-only-local-5he0", "published_at": "2026-09-30 08:09:49+00:00", "updated_at": "2026-09-30 08:16:25.695472+00:00", "lang": "en", "topics": ["ai-agents", "agent-protocols", "developer-tools", "ai-tools"], "entities": ["browser-buddy", "Chrome", "MCP", "io.github.hahahahahahahahah6/browser-buddy", "uvx browser-buddy-mcp", "Windows Chrome"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/i-gave-my-coding-agent-eyes-on-my-real-logged-in-browser-stdlib-only-local", "markdown": "https://wpnews.pro/news/i-gave-my-coding-agent-eyes-on-my-real-logged-in-browser-stdlib-only-local.md", "text": "https://wpnews.pro/news/i-gave-my-coding-agent-eyes-on-my-real-logged-in-browser-stdlib-only-local.txt", "jsonld": "https://wpnews.pro/news/i-gave-my-coding-agent-eyes-on-my-real-logged-in-browser-stdlib-only-local.jsonld"}}