Chrome Bookmarks MCP
This MCP server manages Chrome synced bookmarks via a WebSocket bridge to a Chrome extension.
Connection & Status
bookmarks_status— check whether the Chrome extension bridge is active
Reading & Searching
list_bookmarks— flat list of bookmarks, optionally scoped to a folder pathlist_folders— all folders with id, depth, and full pathsearch_bookmarks— filter bookmarks by text in title or URLstats— counts of total bookmarks and folders
Creating & Organizing
add_bookmark— create a bookmark in any folder (by path or id)create_folder— create a new folder under any parent path or idensure_folder_path— idempotently create nested folder paths
Editing & Moving
update_bookmark— rename a bookmark and/or change its URL by idmove_bookmark— relocate any bookmark or folder to a new parent (by path or id)
Removing & Cleaning
remove_bookmark— delete a bookmark or recursively delete a folderfind_duplicates— list groups of bookmarks sharing the same URLremove_duplicates— keep one copy of each URL, delete the rest (supportsdry_run)remove_empty_folders— prune folders with no descendants (supportsdry_run)
Bulk Operations
apply_moves— move bookmarks in bulk using a TSV plan file, withdry_runanddelete_junkoptions
Export & Import
export_json— dump the entire bookmark tree as JSON (inline or to file)import_json— restore a previously exported JSON tree under a target folder
Manage Chrome's synced bookmarks programmatically, including listing, searching, adding, moving, renaming, deduplicating, and reorganizing folder trees via the chrome.bookmarks API.
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 MCPlist all bookmarks in the Work folder"
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
Manage Chrome's synced bookmarks from Claude Code — list, search, add, move,
rename, deduplicate, and reorganize whole folder trees. Every edit goes through
Chrome's official chrome.bookmarks API, so changes are written into Chrome's
own model and sync durably across devices (unlike direct edits to the
bookmark file, which the sync engine discards on launch).
How it works
Two coupled components talk over a localhost WebSocket:
Claude Code ──stdio──▶ MCP server ──ws://127.0.0.1:8765──▶ Chrome extension ──▶ chrome.bookmarks
(this plugin) (localhost bridge) (load unpacked) (synced store)MCP server (
dist/bundle.cjs) — a stdio MCP server exposing 17 bookmark tools. It starts a localhost WebSocket bridge on port8765.Chrome extension (
extension/) — dials into that bridge and runs each operation inside the browser'schrome.bookmarkscontext.
The MCP server can only act while Chrome is open with the extension loaded; the
bookmarks_status tool reports whether the bridge is connected.
Related MCP server: Chrome Bookmark MCP Server
Requirements
Node.js 18+ (the MCP host runs the bundled server)
Google Chrome (or a Chromium browser supporting unpacked MV3 extensions)
Install
1. The plugin (MCP server)
From the RedJay marketplace:
/plugin marketplace add JoshuaRamirez/claude-code-plugins
/plugin install chrome-bookmarks-mcp@RedJayThe server is pre-bundled (dist/bundle.cjs) — no npm install needed at
plugin-load time.
2. The Chrome extension (one time)
The extension lives in this plugin's extension/ directory. After install,
find the plugin root (typically
~/.claude/plugins/cache/RedJay/chrome-bookmarks-mcp/<version>/), then:
Open
chrome://extensionsTurn on Developer mode (top-right)
Click Load unpacked and select the plugin's
extension/folderThe full bookmark manager opens on first load; re-open any time from the toolbar icon
Not sure which folder to pick? Ask Claude to run bookmarks_status — while
disconnected it prints the exact absolute path to load (its extension_dir
field). Once loaded and Chrome is running, run it again to confirm the bridge is
connected.
Tools
Tool | Purpose |
| Is the extension bridge connected? |
| Count of folders and URLs |
| Every folder with id, depth, and full path |
| Flat list of bookmarks ( |
| Live filter across all bookmarks |
| Create a bookmark, targeting any folder or path |
| Create a folder under any parent or path |
| Idempotently create a nested folder path |
| Rename and/or change a bookmark's URL |
| Relocate a bookmark or folder |
| Delete a bookmark or folder (optionally recursive) |
| Group bookmarks sharing a URL |
| Keep one of each URL, remove the rest |
| Prune folders with no descendants (supports |
| Batch-move bookmarks from a plan TSV (supports |
| Export the whole tree as portable JSON |
| Recreate an exported JSON tree under a target folder (backup restore) |
See examples/USAGE.md for a step-by-step walkthrough — first-run check, adding to a folder, safe deduplication, and batch reorganization.
Destructive tools (remove_*, apply_moves) accept a dry_run flag; export
first for a backup.
Configuration
Env var | Default | Purpose |
|
| WebSocket port the server listens on / the extension dials |
|
| Default plan file for |
If you change the port, update the extension's bridge.js to match.
Troubleshooting
Run bookmarks_status first — when the bridge is disconnected it returns the
exact steps to fix it. Common cases:
Symptom | Cause | Fix |
Tools error with "Chrome bridge not connected" | Extension not loaded, or Chrome is closed | Open Chrome; load the extension unpacked (see step 2 above) |
Was working, now times out | Chrome was quit, or the MV3 service worker went idle | Re-open Chrome / click the toolbar icon once to wake the worker; the extension re-dials automatically within a few seconds |
Still disconnected after loading | Port mismatch | The extension dials |
| No plan file at the default path | Pass |
The extension auto-reconnects (3s retry) if the MCP server restarts, so you rarely need to reload it — just make sure Chrome is running.
Build from source
npm install
npm run build # esbuild → dist/bundle.cjs
npm test # smoke + port-conflict suites (no browser needed)
npm run probe # optional: live connectivity probe (needs the extension)Contributing? See CONTRIBUTING.md — note that dist/bundle.cjs
is committed, so any src/ change must be rebuilt and committed (CI enforces this).
Privacy
No network access beyond the localhost bridge. Bookmarks never leave your
machine; the extension talks only to 127.0.0.1.
License
MIT © Joshua Ramirez
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- 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/JoshuaRamirez/chrome-bookmarks-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server