BraveMCP gives Claude a local browsing memory via MCP
Kiell Tampubolon built BraveMCP, a local-first system that connects Claude Desktop to browser history, bookmarks, highlights, and notes via an HTTP bridge and hybrid SQLite/ChromaDB search — all without any cloud dependency.
Score breakdown
The stdio-vs-HTTP bridge pattern Tampubolon describes is a reusable solution to a fundamental MCP constraint — browser extensions and MCP servers cannot communicate directly — making it directly applicable to anyone building browser-aware MCP integrations.
- 01BraveMCP is open-source (MIT licensed) and stores all data locally — no cloud, no tracking.
- 02A browser extension cannot speak stdio, so an Express HTTP bridge on port 3747 connects it to the MCP server.
- 03Hybrid search combines SQLite FTS5 (BM25 keyword ranking) and ChromaDB (cosine vector similarity); results in both get a 1.1× relevance boost.
Kiell Tampubolon built BraveMCP, an open-source, MIT-licensed "second brain" that gives Claude Desktop access to browsing history, bookmarks, highlights, and notes through the Model Context Protocol. The core architectural constraint is that browser extensions live in a sandbox and can only make outbound HTTP requests, while MCP servers communicate with Claude Desktop over stdio (a JSON-RPC stream on stdin/stdout). These two halves cannot talk directly, so the solution is a small Express HTTP bridge running on port 3747 inside the same process as the MCP server: the extension POSTs browsing events to it, and the MCP server reads from a shared SQLite database when Claude invokes a tool.
Results appearing in both are boosted by a 1.1× relevance multiplier.
Search is hybrid: SQLite with FTS5 provides fast BM25 keyword ranking over titles, summaries, notes, and highlights, while ChromaDB handles cosine vector similarity so semantically related pages surface even when titles don't match. Results appearing in both are boosted by a 1.1× relevance multiplier. The most-used tool, `find_forgotten_content`, further re-ranks results with time decay (`Math.exp(-0.01 * daysElapsed)`) and a visit-count boost, so frequently revisited pages rank above single glances. When no LLM is available, the system falls back from Ollama (llama3.2 for summaries, nomic-embed-text for embeddings) to the Anthropic API, and if neither is running, it builds extractive summaries directly from SQLite data rather than returning useless canned strings.
Two bugs consumed the most debugging time. First, `dotenv` v17 prints a status line to stdout by default, which corrupted the JSON-RPC channel and caused Claude Desktop to reject the connection with a cryptic `Unexpected token` error — fixed by pinning `dotenv@16`. Second, Claude Desktop and a dev client each spawn their own MCP server process; only the instance that binds port 3747 receives extension data, leaving the other with empty in-memory state. The fix was making SQLite — shared by both processes — the authoritative source of truth instead of in-memory state. The full system exposes 13 MCP tools and includes a test suite on Node's built-in runner wired into CI.
Key facts
- 01BraveMCP is open-source (MIT licensed) and stores all data locally — no cloud, no tracking.
- 02A browser extension cannot speak stdio, so an Express HTTP bridge on port 3747 connects it to the MCP server.
- 03Hybrid search combines SQLite FTS5 (BM25 keyword ranking) and ChromaDB (cosine vector similarity); results in both get a 1.1× relevance boost.
- 04If ChromaDB is unavailable, the system degrades to FTS5-only search rather than failing.
- 05LLM processing tries Ollama first (llama3.2 for summaries, nomic-embed-text for embeddings), then falls back to the Anthropic API.
- 06dotenv v17 corrupted the JSON-RPC stdout channel; the fix was pinning dotenv@16.
- 07The dual-process bug — two MCP server instances, only one receiving extension data — was fixed by using SQLite as the shared source of truth instead of in-memory state.
- 08The system exposes 13 MCP tools including search_memory, find_forgotten_content, summarize_research_topic, generate_weekly_digest, and suggest_tab_cleanup.
Topics
Summary and scoring are generated automatically from the original article. We always link back to the publisher and never republish images or paywalled content. Last processed Jun 15, 2026 · 11:57 UTC. How this works →