![[Authentication-required sites are also searchable] I created an MCP Server that indexes Chrome Bookmark contents and makes them searchable](https://images.ctfassets.net/ct0aopd36mqt/4AJd3M26yescaNaY21CYmQ/9730e95c53a7b3049c6da6d4c0b1dec9/mcp.png)
[Authentication-required sites are also searchable] I created an MCP Server that indexes Chrome Bookmark contents and makes them searchable
Introduction
Until recently, I used to search for information like this:
[Previous information gathering style]
- Search on Google to find the desired site
- Save to bookmarks
- Reference from bookmarks when needed later
Now, my main approach is to ask LLMs and get answers like this:
[Current information gathering style]
- Ask questions/request research from ChatGPT/Claude/perplexity
- Get organized responses
- Ask follow-up questions or have them document and summarize content
(Depending on the content) I almost never need to search for myself anymore.
Also, using MCP or RAG mechanisms allows referencing custom sources.
I've been using Notion a lot lately,
and I wanted to reference it with claude code as well, but (with mcp server)
it was somewhat troublesome with token settings required.
"Even though I can view it in a browser, isn't there an easier way for AI to reference Notion?"
With this motivation, I created
MCP-Bookmark, which I'm introducing today. (Also as a way to learn about MCP server)
This is a tool that exports your bookmark contents to a local DB
and makes them accessible via MCP server.
With this, you can have AI reference your bookmarks such as:
- GitHub private repository information
- Notion company documents
- Google Docs content
- Paid article site content
- Internal wiki content requiring login
Initially, I tried to have the MCP Server fetch bookmark URLs and search them,
but normal program fetches couldn't get the content due to authentication requirements or redirects.
However, by using a Chrome Extension, any site you can log into and view in a browser can be indexed. (Though not in real-time)
If it can be opened in a browser, it can be indexed, so "that content written on that Notion page" or "that procedure manual on the company wiki" can be referenced by AI.
MCP Server?
For MCP Server, please refer to the many explanation articles available.
I'll just give a brief explanation here.
MCP (Model Context Protocol) is a protocol developed by Anthropic
for connecting AI with external data and tools.
MCP Server is a server application that conforms to this protocol,
providing AI with access to specific functions or data.
For example, it can search local files or access databases.
When you request these things from AI using natural language, they're called via MCP and results are retrieved.
MCP-Bookmark?
MCP-Bookmark is an MCP Server that makes Chrome bookmarks searchable by AI.
Using a Chrome Extension to index to a local DB,
it enables full-text search of page content.
※ Currently only works on Mac
Features
Full-text search engine (Tantivy)
Bookmark data is indexed using Tantivy, a Rust-based full-text search engine.
It also uses lindera-tantivy for morphological analysis to enable document searching with analyzed keywords.#### Chrome Extension Indexing
Using a Chrome Extension with Native Messaging to index bookmark content with Tantivy.
This method allows fetching content from authenticated sites.
Implemented in Rust
The Native Messaging Host for indexing from MCP Server and Chrome Extension
is implemented entirely in Rust.
MCP Server uses Anthropic's official SDK mcp-server-rs.
Architecture
When creating Tantivy indexes,
Chrome Extension retrieves bookmarks and fetches content,
sends it via Native Messaging to the Native Host,
which creates/updates the Tantivy Index.
When searching with MCP Server,
the flow is Claude Code → MCP Server → Tantivy Index (Read).
【During Indexing】
┌──────────────────┐ ┌──────────────────┐
│ Chrome Extension │────▶│ Chrome Bookmarks │
│ (contents Fetch) │◀────│ │
└──────────────────┘ └──────────────────┘
│
│ Native Messaging
▼
┌──────────────────┐ ┌────────────────┐
│ Native Host │────▶│ Tantivy Index │
│(mcp-bookmark- │ │ (Create/ │
│ native) │ │ Update) │
└──────────────────┘ └────────────────┘
【During Search】
┌─────────────┐ ┌──────────────┐ ┌────────────────┐
│ Claude │────▶│ MCP Server │────▶│ Tantivy Index │
│ Code │◀────│(mcp-bookmark)│◀────│ (Full-text) │
└─────────────┘ └──────────────┘ └────────────────┘
For Native Messaging, refer to previous article.
Available MCP Tools
- search_bookmarks_fulltext: full-text search
- get_bookmark_content: retrieve all content for a specific URL
- get_indexing_status: check indexing status
Find sites with search_bookmarks_fulltext,
then get detailed content information with get_bookmark_content.
Environment
- MacBook Pro (14-inch, M3, 2023)
- OS: MacOS 14.5
- Browser: Chrome, 139.0.7258.139 (Official Build) (arm64)
- Claude Code SDK: v1.0.90
- Rust: 1.88
Setup
Let's set up MCP-Bookmark and use it from Claude Code.### Prerequisites
Currently only works on Mac + Chrome.
Also, you'll need the Rust runtime environment to build it.
Please install Claude Code for testing as well.
Installation
Clone the repository, build it, and run the installation script.
Follow the script's instructions.
# clone
% git clone https://github.com/nakamura-shuta/mcp-bookmark.git
% cd mcp-bookmark
# build
% cargo build --release
% chmod +x ./install.sh
% ./install.sh
Chrome Extension Setup
- Open
chrome://extensions/
in Chrome - Enable "Developer mode"
- Click "Load unpacked extension"
- Select the
bookmark-indexer-extension
folder
Once installed, an ID will be displayed, copy it and
paste it into the installation script.
Creating a Bookmark Index
Run Bookmark Indexer to execute the following process:
- Select the bookmark folder you want to index
- Enter an Index Name
- Click Index Selected Folder
When you press the button, bookmarks will open in tabs and be indexed.
Please log in to bookmark pages in advance.
Claude Code Setup
When you run the installation script, a .mcp.json
appropriate for your environment will be created.
You can use it by copying it to any repository.
You can also write it yourself as shown below:
{
"mcpServers": {
"mcp-bookmark": {
"command": "/path/your/mcp-bookmark/target/release/mcp-bookmark",
"args": [],
"env": {
"RUST_LOG": "info",
"INDEX_NAME": "<created_index_name>"
}
}
}
}
For INDEX_NAME, you should set the index name that appears in
the Extension's Existing Indexes.
Alternatively, run the mcp-bookmark binary as follows
to check the index name:
./target/release/mcp-bookmark --list-indexes
Available indexes:
==================
hoge_index_test) [235.1KB]
```### Try using it
Let's actually try it with Claude Code.
Copy the previous .mcp.json to the repository and launch Claude Code.
When you type /mcp, if you see mcp-bookmark showing as connected as below, you're good to go.
```bash
> /mcp
╭────────────────────────────────────────╮
│ Manage MCP servers │
│ │
│ 1. aws-documentation-mcp-server ✔ │
│ connected · Enter to view details │
│ ❯ 2. mcp-bookmark ✔ │
│ connected · Enter to view details │
│ 3. playwright ✔ │
│ connected · Enter to view details │
│ 4. serena ✔ │
│ connected · Enter to view details │
Now let's ask Claude Code.
By the way, this time I indexed a page from our company's Notion about "accommodation and flight tickets for business trips" as a bookmark.
When I launch Claude Code and ask using the mcp-bookmark tool,
it properly answers from the Notion content.
(The response has been moderately edited)
> Use bookmark to look up how to book flights
⏺ mcp-bookmark - search_bookmarks_fulltext (MCP)(query: "航空券 予約 方法",
limit: 20)
⎿ {
"indexing_complete": true,
"indexing_status": "✅ Chrome Extension index loaded: 12 documents
rea
… +115 lines (ctrl+r to expand)
⏺ Found information about flight booking methods. Retrieving details from the
most relevant results.
⏺ mcp-bookmark - get_bookmark_content (MCP)(url: "・・・")
⏺ I found the following information about flight booking methods from the bookmark:
Two methods for booking flights
1. Self-booking by the business traveler
Benefits
- Can book immediately whenever you want
- Can handle cancellations and changes yourself
Available airlines
- HOGE Airlines
2. Proxy booking by specialized department
Benefits
- No booking work needed (just submit a request)
Drawbacks
- Contacts after X o'clock will be handled the next business day
- Changes after X o'clock the day before may not be completed in time
Available airlines
- HOGE Airlines
- FUGA Airlines
- Others
Key points in the booking procedure
1. Prior approval is mandatory
- Obtain department head approval in advance
2. Airline priority order
- If X route is available: X takes priority
- If X route is not available: Y takes priority
3. Response to flight cancellations
- X: Rebook at airport counter or reservation center (000-0000-0000)
- Y/Z: Request rebooking at airport counter or by phone
4. For overseas business trips
- Passport copy required
> Tell me more details about the specific booking method
⏺ I'll search the bookmarks for more detailed information about the flight booking
procedure.
⏺ mcp-bookmark - search_bookmarks_fulltext (MCP)(query: "予約 手順
操作 マニュアル", limit: 10)
⎿ {
"indexing_complete": true,
"indexing_status": "✅ Chrome Extension index loaded: 12 documents
rea
… +104 lines (ctrl+r to expand)
・・・・・
⏺ Here's a summary of the specific booking methods detailed in the previous bookmark:
🛫 Specific flight booking methods
📱 1. HOGE Airlines (self-booking)
<omitted>
・
・
・
---
🏨 Hotel booking methods
<omitted>
・
・
・
```## Summary
This time I created a tool that combines Chrome Extension and MCP Server
to perform index searches on bookmarks.
(All implementation done with Claude Code)
There are still many areas in the code that need to be modified,
so I'd like to improve it while actually using it.
## References
* [GitHub](https://github.com/nakamura-shuta/mcp-bookmark)
* [Model Context Protocol](https://docs.anthropic.com/docs/model-context-protocol)
* [Claude Code](https://docs.anthropic.com/docs/claude-code)
* [Tantivy](https://github.com/quickwit-oss/tantivy)
* [Lindera](https://github.com/lindera-morphology/lindera)
* [Chrome Extensions Documentation](https://developer.chrome.com/docs/extensions/)
* [modelcontextprotocol/rust-sdk](https://github.com/modelcontextprotocol/rust-sdk)