A Model Context Protocol (MCP) server for managing bookmarks with persistent storage
This MCP server provides a simple yet powerful bookmark management system that integrates seamlessly with Claude and other MCP-compatible clients. It offers persistent storage, categorization, and easy retrieval of your bookmarks.
- π Persistent Storage: Bookmarks are saved to
~/.data/bookmarks.json
- π·οΈ Categories: Organize bookmarks with custom categories
- π Resource Discovery: Browse bookmarks by category using MCP resources
- π³ Container Support: Ready-to-use container image (Docker/Podman)
- β‘ TypeScript: Type-safe implementation with Zod validation
- π MCP Integration: Full Model Context Protocol compliance
# Add to Claude Code (Docker)
docker pull mindriftfall2infinitepiio/bookmark-manager-mcp:latest
claude mcp add bookmark-manager -- docker run \
--rm \
--interactive \
--volume ~/.data:/app/.data \
mindriftfall2infinitepiio/bookmark-manager-mcp:latest
# Or with Podman
podman pull mindriftfall2infinitepiio/bookmark-manager-mcp:latest
claude mcp add bookmark-manager -- podman run \
--rm \
--interactive \
--volume ~/.data:/app/.data \
mindriftfall2infinitepiio/bookmark-manager-mcp:latest
# Docker
docker pull mindriftfall2infinitepiio/bookmark-manager-mcp:latest
# Or Podman
podman pull mindriftfall2infinitepiio/bookmark-manager-mcp:latest
- Create
.vscode/mcp.json
{
"servers": {
"bookmark-manager": {
"command": "docker",
"args": [
"run",
"--rm",
"--interactive",
"--volume",
"~/.data:/app/.data",
"mindriftfall2infinitepiio/bookmark-manager-mcp:latest"
]
}
}
}
For Podman users:
{
"servers": {
"bookmark-manager": {
"command": "podman",
"args": [
"run",
"--rm",
"--interactive",
"--volume",
"~/.data:/app/.data",
"mindriftfall2infinitepiio/bookmark-manager-mcp:latest"
]
}
}
}
# Clone the repository
git clone https://github.com/infinitepi-io/bookmark-manager-mcp.git
cd bookmark-manager-mcp
# Install dependencies
pnpm install
# Development mode
pnpm run dev
# Build for production
pnpm run build
pnpm start
Agent Mode + Natural Language or #
prefix
Add bookmark for GitHub at https://github.com category development
#add bookmark: title "GitHub", url "https://github.com"
#list all my bookmarks in development category
Usage: @
prefix
claude @bookmark-manager add bookmark for GitHub at https://github.com
claude @bookmark-manager search development bookmarks
claude @bookmark-manager list all bookmarks
bookmarks://all
- All bookmarksbookmarks://mcp
- MCP-related bookmarksbookmarks://general
- General bookmarksbookmarks://{category}
- Custom category bookmarks
Add a bookmark for "OpenAI Documentation" with URL "https://docs.openai.com" in category "ai"
List all my bookmarks
Show me all MCP-related bookmarks
- Local:
~/.data/bookmarks.json
- Container (Docker/Podman):
/app/.data/bookmarks.json
(mount your local~/.data
directory)
[
{
"title": "Model Context Protocol",
"url": "https://modelcontextprotocol.io/introduction",
"category": "mcp"
},
{
"title": "infinitepi-io",
"url": "https://github.com/infinitepi-io",
"category": "general"
}
]
- Automatic Creation: If no bookmarks file exists, default bookmarks are created
- Error Handling: Graceful error handling for file operations
- Backup Strategy: Simple JSON format allows easy backup and restoration
- Base Image:
node:22-alpine
- Size: Optimized for minimal footprint
- Volumes:
/app/.data
for persistent storage
- OpenTelemetry Data Collection: We collect telemetry data only for the tool list and add calls to improve performance and debugging
- No Personal Data: We do not collect any personal information or bookmark content
- Security First: We prioritize your privacy and data security in all our implementations
- @modelcontextprotocol/sdk: ^1.13.2
- zod: ^3.25.67 (Schema validation)
- Node.js: 22+
- TypeScript: 5.0+
# TypeScript compilation with esbuild
esbuild index.ts --bundle --platform=node --target=node22 --format=esm --outfile=dist/index.js
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β MCP Client βββββΊβ MCP Server βββββΊβ JSON Storage β
β (Claude) β β (This App) β β (~/.data/) β
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
- Use below function to copy the data from local to s3 or s3 to local:
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add some amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
This project is licensed under the Apache License 2.0.
Satish Tripathi
- GitHub: @infinitepi-io
- Blog: https://dev.to/mindriftfall2infinitepiio/building-a-bookmark-manager-with-ai-integration-my-journey-with-model-context-protocol-2j32
- Issues: GitHub Issues
- Documentation: MCP Documentation
- Container Registry: mindriftfall2infinitepiio/mcp