chrome-bookmarks-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., "@chrome-bookmarks-mcpfind duplicate bookmarks and propose a cleanup plan"
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.
chrome-bookmarks-mcp
An MCP server that lets Claude search and reorganize your Chrome bookmarks, with an interactive approval UI rendered inside Claude.
Reads come straight from Chrome's Bookmarks JSON file, so search works even with
Chrome closed. Writes go through a companion extension, because Chrome keeps
bookmarks in memory and overwrites any external edit to that file.
Works with Chrome, Chromium, Brave, Edge, and Vivaldi on macOS, Windows, and Linux.
What it does
Hybrid search. A text scorer over title, url, and folder path, blended by reciprocal rank fusion with semantic similarity from a local MiniLM model. No API key, nothing leaves the machine. Finds "the thing about rate limiting" when no title contains those words.
Bulk reorganization. Claude proposes a plan, you review it as a readable diff with per-row checkboxes, and only the rows you keep get applied.
Duplicate and dead link cleanup, folded into the same review flow.
Real undo. Every batch records its inverse ops.
Related MCP server: Pinboard MCP Server
Setup
Four steps, all one-time. Node 22 or newer and pnpm.
1. Build
git clone https://github.com/sirwilliamiv/chrome-bookmarks-mcp
cd chrome-bookmarks-mcp
pnpm install
pnpm build2. Register the server
pnpm registerThat prints the exact claude mcp add command and the Claude Desktop JSON for
this machine, with absolute paths already filled in. Copy whichever you use.
Both point at dist/server/proxy.js, a featherweight stdio front end. Every client
forwards to one shared daemon, so there is exactly one bookmark index and one
extension connection no matter how many clients are open. The first client to
start brings the daemon up automatically.
Restart the client afterwards. Quit Claude Desktop fully with Command-Q, not just the window.
3. Load the companion extension
Writes need it. Reads do not.
Open
chrome://extensionsand turn on Developer mode.Choose "Load unpacked" and pick the
extension/directory.Open the extension's options page and paste the pairing token, or click Paste if it is on your clipboard.
The token is printed when the server starts, and lives at
~/.chrome-bookmarks-mcp/token. pnpm register prints the full path.
Ask Claude to run bridge_status to confirm the connection.
4. Warm the search index (optional)
pnpm warmThe first semantic search downloads a 25MB model and embeds the whole library, about 25 seconds for 2,000 bookmarks. Running this once up front means the first search inside Claude is instant. Embeddings are cached by guid and only recomputed for bookmarks whose title, folder, or url changed.
5. Enable MCP Apps rendering (Claude Code only)
Claude web and desktop render server-provided views natively. In Claude Code:
/plugin marketplace add modelcontextprotocol/ext-apps
/plugin install mcp-apps@modelcontextprotocol-ext-appsOther browsers and profiles
The default is Chrome's Default profile. Point elsewhere with environment
variables in the MCP server config:
Variable | Default | Purpose |
|
|
|
|
| Profile directory name, for example |
| derived | Full path to a |
The extension applies writes to whichever browser you load it in, so load it in the same browser and profile the server reads from.
Tools
Reads, no extension required:
Tool | Purpose |
| Folder tree with per-folder counts |
| Bookmarks directly inside one folder |
| One bookmark by id or guid |
| Hybrid search. |
Planning, applies nothing:
Tool | Purpose |
| Validate a plan and return it for review. |
Writes, extension required:
Tool | Purpose |
| Apply a batch. Supports |
| Single-purpose ops, all routed through the same write path |
| Reverse the most recent applied batch |
| Whether the extension is connected |
Plans can move, rename, and soft-delete folders as well as bookmarks. New folders
are referenced by later ops in the same plan as temp:<tempId>.
Safety
Bulk edits to two thousand bookmarks are exactly where this could hurt, so:
Every write path supports
dry_runand returns the diff first.The
Bookmarksfile is copied to~/.chrome-bookmarks-mcp/backups/before each batch. The newest 20 are kept.Deletes move to an
_MCP Trashfolder unless you passhard: true. Folders can only be soft deleted.Each batch records inverse ops, so
undo_last_batchgenuinely reverses it.Plans are validated against the live index before applying. A stale id fails the whole batch rather than applying half of it.
If an op fails mid-batch, the ops that already applied are rolled back.
Environment
Variable | Default | Purpose |
|
| Which Chromium browser to read |
|
| Which profile to read |
| derived from the two above | Explicit path to a |
|
| Bridge port, must match the extension options |
|
| Port the shared daemon serves MCP on |
|
| Token, embeddings cache, backups, undo record |
Development
pnpm test # unit tests
pnpm typecheck # server and views
pnpm build # views then server, restarts a running daemon
pnpm smoke # end to end, standalone stdio server
pnpm smoke:shared # end to end, two clients against one daemonDaemon control, only needed to inspect or recycle it:
node scripts/daemon.mjs status
node scripts/daemon.mjs restart
node scripts/daemon.mjs logsSee CONTRIBUTING.md for how the daemon, proxy, and extension fit together.
Layout
src/server/ MCP server: parser, search, plans, bridge, tools
core.ts builds it, daemon.ts is the shared instance,
proxy.ts is the per-client stdio front end
src/shared/ Protocol types shared with the extension
extension/ MV3 companion extension, applies op batches via chrome.bookmarks
views/src/ MCP App views, bundled to single self-contained HTML files
scripts/ register, warm, smoke tests, daemon controlViews render under default-src 'none' with only 'self' and 'unsafe-inline'
allowed, so everything they need is inlined at build time.
License
MIT
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 Connectors
Persistent context for Claude. Your AI always knows your projects and next actions across sessions.
Personal CRM for Claude. Contacts live as plain-text files in your own Google Drive.
Search, read, create and edit your Memol notes from Claude. Team note-taking with AI search.
- platform7nOAuthtech.p7n
Connect Claude to your Platform7n workspaces — chat, links, and tasks. One-click OAuth.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceTransforms Chrome browser into an AI-controlled automation tool that allows AI assistants like Claude to access browser functionality, enabling complex automation, content analysis, and semantic search while preserving your existing browser environment.MIT
- FlicenseNot gradedqualityFmaintenanceEnables users to access and manage their Pinboard bookmarks directly through Claude Desktop. Supports retrieving, adding, and updating bookmarks with date filtering, tagging, and bookmark analysis capabilities.9-
- FlicenseNot gradedqualityDmaintenanceLets you save, tag, and search bookmarks directly from Claude Code using natural language commands, with persistent storage in a local JSON file.-
- AlicenseAqualityDmaintenanceEnables Claude Code and other MCP clients to manage bookmarks, collections, and tags in Raindrop.io accounts via natural language.152MIT