Skip to main content
Glama
infinitepi-io

Bookmark Manager MCP

🔖 Bookmark Manager MCP

A Model Context Protocol (MCP) server for managing bookmarks with persistent storage

Docker Hub GitHub TypeScript MCP

📋 Overview

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.

Related MCP server: Memory MCP Server

✨ Features

  • 📁 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

🛠️ Installation

🔧 Claude Code Integration

# 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

🔧 VS Code Integration

# 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"
      ]
    }
  }
}

Local Development

# 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

🚀 Usage

GitHub Copilot (VS Code)

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

Claude Code (CLI)

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

MCP Resources Available

  • bookmarks://all - All bookmarks

  • bookmarks://mcp - MCP-related bookmarks

  • bookmarks://general - General bookmarks

  • bookmarks://{category} - Custom category bookmarks

Example Usage with Claude

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

💾 Data Storage

Storage Location

  • Local: ~/.data/bookmarks.json

  • Container (Docker/Podman): /app/.data/bookmarks.json (mount your local ~/.data directory)

Data Format

[
  {
    "title": "Model Context Protocol",
    "url": "https://modelcontextprotocol.io/introduction",
    "category": "mcp"
  },
  {
    "title": "infinitepi-io",
    "url": "https://github.com/infinitepi-io",
    "category": "general"
  }
]

Data Persistence

  • 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

🐳 Container Configuration

Image Details

  • Base Image: node:22-alpine

  • Size: Optimized for minimal footprint

  • Volumes: /app/.data for persistent storage

📊 Technical Details

Dependencies

  • @modelcontextprotocol/sdk: ^1.13.2

  • zod: ^3.25.67 (Schema validation)

  • Node.js: 22+

  • TypeScript: 5.0+

Build Process

# TypeScript compilation with esbuild
esbuild index.ts --bundle --platform=node --target=node22 --format=esm --outfile=dist/index.js

Architecture

┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   MCP Client    │◄──►│  MCP Server     │◄──►│  JSON Storage   │
│   (Claude)      │    │  (This App)     │    │  (~/.data/)     │
└─────────────────┘    └─────────────────┘    └─────────────────┘

Synching your bookmark to S3 or vice versa BYOS3(Bring your own s3 on aws)

🤝 Contributing

  1. Fork the repository

  2. Create your feature branch (git checkout -b feature/amazing-feature)

  3. Commit your changes (git commit -m 'Add some amazing feature')

  4. Push to the branch (git push origin feature/amazing-feature)

  5. Open a Pull Request

📝 License

This project is licensed under the Apache License 2.0.

👤 Author

Satish Tripathi

🆘 Support


Available Tools

2 tools
addAdd BookmarkC

Add a new bookmark

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesBookmark title
urlYesBookmark URL
categoryNoBookmark category (default: general)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. 'Add a new bookmark' implies a write/mutation operation, but doesn't disclose any behavioral traits: no information about permissions required, whether duplicates are allowed, what happens on failure, rate limits, or what the response contains. The description states what the tool does but not how it behaves.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is maximally concise at just four words ('Add a new bookmark'). Every word earns its place: 'Add' specifies the action, 'new' clarifies it's creation rather than update, and 'bookmark' identifies the resource. No wasted words or unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description is insufficiently complete. It doesn't explain what happens after adding (success/failure indicators), what permissions are needed, or how the tool integrates with the sibling 'list' tool. The description covers the basic purpose but leaves critical behavioral and contextual gaps unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already fully documents all three parameters (title, url, category). The description adds no parameter information beyond what's in the schema - it doesn't explain relationships between parameters, provide examples, or add context about parameter usage. This meets the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Add a new bookmark' clearly states the verb ('Add') and resource ('bookmark'), making the purpose immediately understandable. It distinguishes from the sibling 'list' tool by specifying a creation action rather than retrieval. However, it doesn't specify what system or context the bookmark is being added to, which prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. With a sibling tool named 'list', there's an obvious complementary relationship (create vs. retrieve), but the description doesn't mention this or provide any context about appropriate usage scenarios. No prerequisites, limitations, or exclusions are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listList BookmarksB

List all bookmarks

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but only states the action without behavioral details. It doesn't disclose whether this is a read-only operation, how results are returned (e.g., format, pagination), or any limitations like rate constraints or authentication needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no wasted words. It's front-loaded with the core action and resource, making it immediately clear what the tool does without unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with 0 parameters and no output schema, the description is minimally adequate but lacks context about behavioral traits (e.g., read-only nature, result format). Without annotations or output schema, it should ideally mention these to be more complete for agent use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters with 100% schema coverage, so the schema fully documents the absence of inputs. The description doesn't need to add parameter semantics, and 'List all bookmarks' appropriately implies no filtering parameters are required, aligning with the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'List all bookmarks' clearly states the verb ('List') and resource ('bookmarks'), with 'all' providing scope. However, it doesn't differentiate from the sibling 'add' tool, which would require mentioning it's for retrieval rather than creation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus the 'add' sibling. It doesn't mention prerequisites, alternatives, or exclusions, leaving the agent to infer usage from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updatesv1.0.0
    • First observedadd
    • First observedlist

TDQS

B3.1/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have clearly distinct purposes: 'add' is for creating new bookmarks, while 'list' is for retrieving existing ones. There is no overlap or ambiguity between these operations, making it easy for an agent to select the correct tool based on the task.

Naming Consistency5/5

Both tools use simple, imperative verb names ('add' and 'list') that follow a consistent pattern. This naming style is clear and predictable, with no deviations or mixed conventions, ensuring readability and ease of use.

Tool Count2/5

With only two tools, the server feels under-scoped for a bookmark manager, as it lacks essential operations like update, delete, or search. While the count is minimal, it does not provide complete coverage for basic CRUD functionality, making it borderline too few for the domain.

Completeness2/5

The toolset is severely incomplete for a bookmark manager, missing key operations such as update, delete, and search. This creates significant gaps that will likely cause agent failures when trying to manage bookmarks fully, as users cannot modify or remove entries.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server for Claude Desktop that provides structured memory management across chat sessions, allowing Claude to maintain context and build a knowledge base within project directories.
    11 npm
    6
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol (MCP) server implementation that provides seamless integration between Chrome bookmarks and AI assistants. This server enables AI models to access, search, analyze, and manage Chrome bookmarks through a standardized protocol.
    2
    MIT