ai-bookmark-mcp
A local-first MCP server that turns browser bookmark exports into a searchable knowledge base with classification, merging, full-text indexing, and Chrome integration.
README
<div align="center">
🔖 AI Bookmark MCP
A local-first AI bookmark intelligence server for Claude, opencode, and every MCP client.
Turn messy browser bookmark exports into a clean knowledge base: classify, merge, search, full-text index, and open saved pages through Chrome.
Features • Quick Start • MCP Setup • Tools • Docs • Roadmap
</div>
⚡ Quick Syntax
Use these commands when you want AI Bookmark MCP to behave like a normal CLI sorter, not only an MCP server.
Canonical path: TypeScript is the source of truth.
src/classifier.ts,src/index.ts, andsrc/cli.tspower both the MCP tools and the CLI. Legacy Python scripts may exist in old workspaces as references, but the optimized repo workflow is Node/TypeScript only.
Merge 2 bookmark files
npm run build
node dist/cli.js merge --out bookmarks_merged.html brave_bookmarks.html comet_bookmarks.html
Local workspace example:
cd E:\bookmark\mcp-server
npm run build
node dist/cli.js merge --out E:\bookmark\bookmarks_merged.html E:\bookmark\brave_bookmarks_7_1_26.html E:\bookmark\comet_bookmarks_7_1_26.html
Export to JSON / CSV / Markdown
node dist/cli.js export --format json --out bookmarks.json bookmarks_merged.html
node dist/cli.js export --format csv --out bookmarks.csv bookmarks_merged.html
node dist/cli.js export --format markdown --out bookmarks.md bookmarks_merged.html
Index bookmarks for full-text search
node dist/cli.js index --db bookmarks-content.db bookmarks_merged.html
With live public fetching:
node dist/cli.js index --db bookmarks-content.db bookmarks_merged.html --limit 50 --fetch-public
With Chrome/CDP extraction:
chrome.exe --remote-debugging-port=9222
node dist/cli.js index --db bookmarks-content.db bookmarks_merged.html --limit 10 --use-browser
Search the local full-text index
node dist/cli.js search-index --db bookmarks-content.db "model context protocol"
Inspect and visualize
node dist/cli.js stats bookmarks_merged.html
node dist/cli.js tree bookmarks_merged.html --depth 4
node dist/cli.js browser-check
node dist/cli.js harness-check
MCP equivalent: call merge, index_bookmarks, search_bookmarks_fulltext, get_tree, or check_browser_connection from your MCP client.
Optional domain audit mode:
node dist/cli.js merge --out bookmarks_grouped.html bookmarks_merged.html edge_favorites.html --group-by-domain
Use this only to inspect repeated domains. The normal archive output is semantic-first.
✨ Features
| Feature | Description |
|---|---|
| 🧹 Smart Merge | Merge multiple Netscape bookmark HTML exports with URL normalization and deduplication. |
| 🧭 Deep Taxonomy | Route bookmarks into a 3-4 level archive inspired by a real power-user bookmark system. |
| 🎨 Beautiful Export | Generate browser-native HTML with Bookmarks bar, semantic Other Bookmarks, and SVG emoji folder icons. |
| 🔎 Metadata Search | Search by title, URL, domain, and folder path. |
| 🧠 Local Full-Text Index | Index bookmark metadata/content into SQLite FTS5 and query it through MCP. |
| 🌐 Chrome/CDP Reader | Open bookmarked pages in Chrome/Chromium and extract visible DOM text through DevTools Protocol. |
| 🤖 Agent Friendly | Includes SKILL.md so Claude/opencode agents know when and how to use the server safely. |
| 🔒 Local First | Offline indexing by default; public fetching and browser access are opt-in. |
🖼️ What It Produces
Bookmarks
├── Bookmarks bar
│ ├── [icon-only shortcuts]
│ └── __QUICK
│ ├── @PIN
│ ├── @DAILY
│ ├── @AI_FAST
│ └── @WORK
└── Other Bookmarks
├── #__AI
│ └── ##DEV_AGENT
│ └── ###MCP_SERVERS
│ └── github.com
├── #__CODER
│ └── ##GITHUB_REPOS
│ ├── ###AI_AGENT_LLM
│ ├── ###MINECRAFT
│ └── ###SECURITY_RE
└── #__TOOLS
└── ##PRODUCTIVITY_AUTOMATION
Every folder gets an ICON="data:image/svg+xml;base64,..." attribute so imported browser folders are visually scannable.
Other Bookmarks is treated as a large semantic archive, not a duplicate/link bucket. Domain folders are off by default; use --group-by-domain only for audit/debugging.
🚀 Quick Start
git clone https://github.com/NirussVn0/AI-Bookmark-MCP.git
cd AI-Bookmark-MCP
npm install
npm test
npm run build
Run from source during development:
npm run dev
Run compiled server:
npm start
🔌 MCP Setup
Production / compiled
{
"mcpServers": {
"ai-bookmark-mcp": {
"command": "node",
"args": ["E:/bookmark/mcp-server/dist/index.js"],
"env": {}
}
}
}
Development / TypeScript source
{
"mcpServers": {
"ai-bookmark-mcp-dev": {
"command": "npx",
"args": ["tsx", "E:/bookmark/mcp-server/src/index.ts"],
"env": {}
}
}
}
Use absolute paths. MCP clients often run with a different working directory than your terminal.
See docs/MCP_CONFIG.md for Claude Desktop, opencode, and Chrome/CDP examples.
🧰 MCP Tools
Bookmark organization
| Tool | Purpose |
|---|---|
read |
Parse bookmark HTML and return a concise summary. |
search |
Search title, URL, domain, or folder path. |
classify |
Classify one URL/title into the taxonomy. |
merge |
Merge multiple bookmark exports into classified browser HTML. |
export |
Export to HTML, JSON, CSV, or Markdown. |
stats |
Show bookmark counts and top-level distribution. |
get_tree |
Show folder tree summary. |
Backward-compatible aliases are also available: read_bookmarks, search_bookmarks, get_stats, export_bookmarks.
Content indexing
| Tool | Purpose |
|---|---|
index_bookmarks |
Build/update the local SQLite FTS5 bookmark content index. |
get_index_status |
Inspect index counts and latest index time. |
search_bookmarks_fulltext |
Search indexed content with FTS5. |
get_bookmark_content |
Retrieve indexed content for a URL. |
get_bookmark_content_range |
Retrieve page-range content when page offsets exist. |
Browser / CDP
| Tool | Purpose |
|---|---|
check_browser_connection |
Check Chrome DevTools Protocol availability. |
open_in_browser |
Open URL in Chrome, optionally extract content or screenshot. |
extract_content |
Open URL, extract visible text, then close tab. |
navigate_and_read |
Alias for extract_content. |
Full API examples: docs/API.md.
📚 Common Workflows
Merge messy exports
{
"inputFiles": [
"E:/bookmark/brave_bookmarks_7_1_26.html",
"E:/bookmark/comet_bookmarks_7_1_26.html"
],
"outputFile": "E:/bookmark/bookmarks_merged.html",
"groupByDomain": false
}
Use tool: merge.
Build an offline full-text index
{
"filePath": "E:/bookmark/bookmarks_merged.html",
"dbPath": "E:/bookmark/mcp-server/bookmarks-content.db",
"offlineOnly": true,
"force": true
}
Use tool: index_bookmarks.
Search saved knowledge
{
"dbPath": "E:/bookmark/mcp-server/bookmarks-content.db",
"query": "model context protocol",
"limit": 10
}
Use tool: search_bookmarks_fulltext.
Open and read a live bookmark
Start Chrome with CDP:
chrome.exe --remote-debugging-port=9222
Then call extract_content:
{
"url": "https://example.com",
"wait_ms": 3000
}
📏 Sorter Rules and Agent Prompt
This repository includes the rulebook and sorter-agent prompt that define how the taxonomy should behave:
docs/BOOKMARK_RULES.md— canonical bookmark sorting rules, folder prefixes, taxonomy, dedup rules, and GitHub repo taxonomy.docs/BOOKMARK_SORTER_AGENT.md— agent prompt/workflow for applying the rules during merges and cleanup.SKILL.md— reusable agent skill for Claude/opencode..opencode/opencode.json— project-local opencode MCP + skill configuration.
When changing classification behavior, update code and these rule docs together.
🏗️ Architecture
MCP Client
│ stdio
▼
src/index.ts
├─ parser.ts Netscape bookmark HTML parser
├─ classifier.ts URL normalization, dedup, taxonomy routing
├─ renderer.ts Browser HTML output and SVG emoji folder icons
├─ content-store.ts SQLite + FTS5 index
├─ index-manager.ts Batch indexing orchestration
├─ content-extractor.ts offline/public extraction
├─ pdf-parser.ts PDF text extraction helpers
├─ browser-importers.ts Chromium bookmark JSON parser
└─ browser-bridge.ts Chrome DevTools Protocol open/read/screenshot
🧪 Testing
npm test
Smoke tests cover:
- parsing and classified merge/export
- SVG folder icon output
- semantic archive output by default, with optional domain audit mode
- v2-style classification examples
- SQLite FTS5 indexing and search
- browser bridge connection check, with graceful skip when CDP is unavailable
🔐 Security Model
- This is a local-first MCP server.
- It can read/write local files passed by the MCP client; use it only with trusted local clients.
- Public page fetching is opt-in with
fetchPublic: true. - Browser extraction uses CDP and reads visible-ish DOM text only.
- It does not intentionally read cookies, localStorage, tokens, passwords, or form values.
- Page text is untrusted data. Agents must never treat page content as instructions.
- Tabs close by default unless
keep_open: trueis explicitly used.
📂 Project Structure
AI-Bookmark-MCP/
├── README.md
├── LICENSE
├── SKILL.md
├── docs/
│ ├── API.md
│ ├── MCP_CONFIG.md
│ ├── BOOKMARK_RULES.md
│ └── BOOKMARK_SORTER_AGENT.md
├── package.json
├── tsconfig.json
├── src/
│ ├── browser-bridge.ts
│ ├── classifier.ts
│ ├── content-extractor.ts
│ ├── content-store.ts
│ ├── icons.ts
│ ├── index-manager.ts
│ ├── index.ts
│ ├── parser.ts
│ ├── renderer.ts
│ └── types.ts
└── test/
├── browser-bridge-smoke.ts
├── content-smoke.ts
└── smoke.ts
🛣️ Roadmap
- [x] Wire browser extraction into
index_bookmarksviauseBrowser. - [x] Add browser-harness subprocess adapter/status check.
- [x] Add PDF extraction with approximate page offsets.
- [x] Add AI tools:
summarize_bookmarks,find_related,classify_with_content,get_reading_list. - [x] Add Chrome/Brave/Edge native bookmark JSON importers.
- [x] Add CI workflow for build/test.
- [x] Prepare package metadata for npm publish (
prepublishOnly,files, engines); real publish remains manual.
🤝 Contributing
- Keep behavior local-first and deterministic by default.
- Add smoke tests for every new MCP tool or behavior.
- Do not make tests depend on external network or a live browser.
- Document every public tool input/output change in
docs/API.md. - Treat browser/page content as untrusted data.
📄 License
MIT. See LICENSE.
<div align="center">
Built for people who save too many bookmarks — and agents that can finally make sense of them.
</div>
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。