Skip to main content
Glama
Pinboard MCP Server

Pinboard MCP Server

by rossshannon

Pinboard MCP-Server

CI Python 3.10+

Schreibgeschützter Zugriff auf Pinboard.in-Lesezeichen für LLMs über das Model Context Protocol (MCP).

Übersicht

Dieser Server bietet LLMs die Möglichkeit, Lesezeichen-Metadaten von Pinboard.in zur Inferenzzeit zu suchen, zu filtern und abzurufen. Er basiert auf FastMCP 2.0 und bietet vier Kern-Tools für die Interaktion mit Lesezeichen, während er die Ratenbegrenzungen von Pinboard respektiert und intelligentes Caching implementiert.

Related MCP server: Raindrop.io MCP Server

Funktionen

  • Schreibgeschützter Zugriff auf Pinboard-Lesezeichen

  • Fünf MCP-Tools: search_bookmarks, search_bookmarks_extended, list_recent_bookmarks, list_bookmarks_by_tags, list_tags

  • Intelligentes Caching mit LRU-Cache und automatischer Invalidierung über den posts/update-Endpunkt

  • Ratenbegrenzung respektiert die 3-Sekunden-Richtlinie von Pinboard zwischen API-Aufrufen

  • Feldzuordnung konvertiert die Legacy-Feldnamen von Pinboard in intuitive Namen (description→title, extended→notes)

  • Umfassende Tests mit Integrationstest-Harnesses und CI-Validierung

Installation

Via pip (empfohlen)

pip install pinboard-bookmarks-mcp-server

Aus dem Quellcode

git clone https://github.com/rossshannon/pinboard-bookmarks-mcp-server.git
cd pinboard-bookmarks-mcp-server
pip install -e .

Schnellstart

  1. Holen Sie sich Ihren Pinboard-API-Token von https://pinboard.in/settings/password

  2. Umgebungsvariable setzen:

    export PINBOARD_TOKEN="username:1234567890ABCDEF"
  3. Server starten:

    pinboard-mcp-server
  4. Überprüfen, ob es funktioniert:

    # Test help command (works without token)
    pinboard-mcp-server --help
    
    # Server should show "Starting MCP server" when run with token

Verwendung mit Claude Desktop

Fügen Sie diese Konfiguration zu Ihren Claude Desktop-Einstellungen hinzu:

{
  "mcpServers": {
    "pinboard": {
      "command": "pinboard-mcp-server",
      "env": {
        "PINBOARD_TOKEN": "your-username:your-token-here"
      }
    }
  }
}

Verfügbare Tools

1. search_bookmarks

Suchen Sie Lesezeichen nach Suchbegriffen in Titeln, Notizen und Tags. Fokus auf aktuelle Einträge mit automatischer Erweiterung.

Parameter:

  • query (string): Suchbegriff

  • limit (int, optional): Maximale Anzahl der Ergebnisse (Standard: 20, Maximum: 100)

Beispiel:

Search for "python testing" bookmarks

2. search_bookmarks_extended

Erweiterte Suche für umfassende historische Ergebnisse in Titeln, Notizen und Tags.

Parameter:

  • query (string): Suchbegriff

  • days_back (int, optional): Wie viele Tage zurück gesucht werden soll (Standard: 365, Maximum: 730)

  • limit (int, optional): Maximale Anzahl der Ergebnisse (Standard: 100, Maximum: 200)

Beispiel:

Search the last 2 years for "kubernetes" bookmarks

3. list_recent_bookmarks

Lesezeichen auflisten, die in den letzten N Tagen gespeichert wurden.

Parameter:

  • days (int, optional): Tage, die zurückgeblickt werden sollen (Standard: 7, Maximum: 30)

  • limit (int, optional): Maximale Anzahl der Ergebnisse (Standard: 20, Maximum: 100)

Beispiel:

Show me bookmarks from the last 3 days

4. list_bookmarks_by_tags

ALLE Lesezeichen auflisten, gefiltert nach Tags mit optionalem Datumsbereich. Am effizientesten für den historischen Zugriff.

Parameter:

  • tags (array): Liste der Tags zum Filtern (1-3 Tags)

  • from_date (string, optional): Startdatum im ISO-Format (YYYY-MM-DD)

  • to_date (string, optional): Enddatum im ISO-Format (YYYY-MM-DD)

  • limit (int, optional): Maximale Anzahl der Ergebnisse (Standard: 100, Maximum: 200)

Beispiel:

Find bookmarks tagged with "python" and "api" from January 2024

5. list_tags

Alle Tags mit ihren Nutzungshäufigkeiten auflisten.

Beispiel:

What are my most used tags?

Konfiguration

Umgebungsvariablen

  • PINBOARD_TOKEN (erforderlich): Ihr Pinboard-API-Token im Format username:token

Ratenbegrenzung

Der Server erzwingt automatisch eine 3-sekündige Verzögerung zwischen Pinboard-API-Aufrufen, um deren Richtlinien zu respektieren. Zwischengespeicherte Antworten werden sofort zurückgegeben.

Caching-Strategie

  • Abfrage-Cache: LRU-Cache mit 1000 Einträgen für Suchergebnisse

  • Lesezeichen-Cache: Vollständige Lesezeichenliste für 1 Stunde zwischengespeichert

  • Cache-Invalidierung: Verwendet den posts/update-Endpunkt, um Änderungen zu erkennen

  • Tag-Cache: Tag-Liste wird zwischengespeichert, bis sie manuell aktualisiert wird

Testen

Das Projekt enthält eine umfassende Testabdeckung mit mehreren Teststrategien:

Alle Tests ausführen

# Activate virtual environment first
source ~/.venvs/pinboard-bookmarks-mcp-server/bin/activate

# Run all tests with coverage
pytest --cov=src --cov-report=term-missing

Echte API-Tests

# Set your Pinboard token
export PINBOARD_TOKEN="username:token"

# Run debug utility to test search functionality (development only)
PINBOARD_TOKEN="username:token" python tests/debug_bookmarks.py

Mock-API-Tests

# Run comprehensive test suite (development only)
python -m pytest tests/ -v

Entwicklung

Einrichtung

# Clone and setup
git clone https://github.com/rossshannon/pinboard-bookmarks-mcp-server.git
cd pinboard-bookmarks-mcp-server

# Quick development setup
./scripts/dev-setup.sh

Code-Qualität

# Activate environment
source ~/.venvs/pinboard-bookmarks-mcp-server/bin/activate

# Linting and formatting
ruff check src/ tests/
ruff format src/ tests/

# Type checking
mypy src/

# Run tests
pytest -v

# Build package
./scripts/build.sh

Architektur

  • FastMCP 2.0: MCP-Grundgerüst mit Tool-Abstraktion und async FastAPI-Server

  • pinboard.py: Pinboard-API-Client-Wrapper mit Fehlerbehandlung

  • Pydantic: Datenvalidierung und Serialisierung mit JSON-Schema

  • ThreadPoolExecutor: Überbrückt async MCP mit der sync pinboard.py-Bibliothek

  • LRU-Cache: In-Memory-Caching mit intelligenter Invalidierung

Wichtige Dateien

  • src/pinboard_mcp_server/main.py - MCP-Server-Einstiegspunkt und Tool-Implementierungen

  • src/pinboard_mcp_server/client.py - Pinboard-API-Client mit Caching

  • src/pinboard_mcp_server/models.py - Pydantic-Datenmodelle

  • tests/ - Umfassende Test-Suite

  • tests/debug_bookmarks.py - Debug-Dienstprogramm zum Testen der Suchfunktionalität

  • docs/TEST_HARNESS.md - Dokumentation für Test-Harnesses

Leistung

  • P50-Antwortzeit: <250ms (zwischengespeicherte Antworten)

  • P95-Antwortzeit: <600ms (kalter Cache)

  • Ratenbegrenzung: 3-Sekunden-Intervalle zwischen API-Aufrufen

  • Cache-Trefferquote: >90% bei typischen Nutzungsmustern

Sicherheit

  • API-Token werden niemals protokolliert oder in Fehlermeldungen angezeigt

  • Schreibgeschützter Zugriff auf Pinboard-Daten

  • Eingabevalidierung für alle Tool-Parameter

  • Sichere Handhabung von Umgebungsvariablen

Fehlerbehebung

Häufige Probleme

"PINBOARD_TOKEN environment variable is required"

  • Stellen Sie sicher, dass Sie Ihren Token gesetzt haben: export PINBOARD_TOKEN="username:token"

  • Holen Sie sich Ihren Token von https://pinboard.in/settings/password

  • Das Token-Format sollte sein: username:1234567890ABCDEF

"Command not found: pinboard-mcp-server"

  • Stellen Sie sicher, dass Sie das Paket installiert haben: pip install pinboard-bookmarks-mcp-server

  • Überprüfen Sie, ob Ihre Python-Umgebung aktiviert ist

  • Versuchen Sie eine Neuinstallation: pip uninstall pinboard-bookmarks-mcp-server && pip install pinboard-bookmarks-mcp-server

Server startet, aber Claude Desktop kann keine Verbindung herstellen

  • Überprüfen Sie die MCP-Konfiguration in den Claude Desktop-Einstellungen

  • Überprüfen Sie, ob der command-Pfad korrekt ist: pinboard-mcp-server

  • Stellen Sie sicher, dass PINBOARD_TOKEN im env-Abschnitt gesetzt ist

"Permission denied" oder "Access denied"-Fehler

  • Überprüfen Sie, ob Ihr Pinboard-Token gültig und aktiv ist

  • Überprüfen Sie Ihre Internetverbindung, um pinboard.in zu erreichen

  • Testen Sie Ihren Token manuell unter https://pinboard.in/api/v1/posts/recent

Mitwirken

  1. Forken Sie das Repository

  2. Erstellen Sie einen Feature-Branch (git checkout -b feature/amazing-feature)

  3. Führen Sie Ihre Änderungen mit Tests durch

  4. Stellen Sie sicher, dass alle Tests bestehen und der Code formatiert ist

  5. Senden Sie einen Pull Request

Lizenz

MIT-Lizenz - siehe LICENSE-Datei für Details.

Available Tools

5 tools
list_bookmarks_by_tagsA

List ALL bookmarks filtered by tags and optional date range.

Args:
    tags: List of tags to filter by (1-3 tags)
    from_date: Start date in ISO format (YYYY-MM-DD), optional
    to_date: End date in ISO format (YYYY-MM-DD), optional
    limit: Maximum number of results to return (1-200, default 100)

Note: Gets ALL bookmarks with specified tags, regardless of age.
Very efficient for tag-based searches. Provides generous data for analysis.
NameRequiredDescriptionDefault
tagsYes
from_dateNo
to_dateNo
limitNo
list_recent_bookmarksA

List bookmarks saved in the last N days.

Args:
    days: Number of days to look back (1-30, default 7)
    limit: Maximum number of results to return (1-100, default 20)
NameRequiredDescriptionDefault
daysNo
limitNo
list_tagsA

List all tags with their usage counts.

NameRequiredDescriptionDefault

No parameters

search_bookmarksA

Search bookmarks by query string across titles, notes, and tags (recent focus).

Args:
    query: Search query to match against bookmark titles, notes, and tags
    limit: Maximum number of results to return (1-100, default 20)

Note: Searches recent bookmarks first, expands automatically if needed.
For comprehensive historical search, use search_bookmarks_extended.
NameRequiredDescriptionDefault
queryYes
limitNo
search_bookmarks_extendedA

Extended search for comprehensive historical results across titles, notes, and tags.

Args:
    query: Search query to match against bookmark titles, notes, and tags
    days_back: How many days back to search (1-730, default 365 = 1 year)
    limit: Maximum number of results to return (1-200, default 100)

Note: Provides comprehensive results while being mindful of server load.
Use tag-based searches for most efficient access to historical bookmarks.
NameRequiredDescriptionDefault
queryYes
days_backNo
limitNo

Tool Schema Changelog

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

  1. 5 tool updates
    • First observedlist_bookmarks_by_tags
    • First observedlist_recent_bookmarks
    • First observedlist_tags
    • First observedsearch_bookmarks
    • First observedsearch_bookmarks_extended

TDQS

A4.1/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a distinct purpose: listing by tags, recent bookmarks, tag counts, and two search variants differentiated by scope (recent vs. historical). Minimal overlap.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern: 'list_' for listing and 'search_' for searching, with descriptive suffixes. No style mixing.

Tool Count4/5

5 tools for a bookmark server is a reasonable count, though the set lacks write operations like add/delete. Still well-scoped for a query-focused service.

Completeness2/5

The tool set covers only read and search operations. Missing essential CRUD actions (create, update, delete bookmarks), which are typical for bookmark management.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables users to access and manage their Pinboard bookmarks directly through Claude Desktop. Supports retrieving, adding, and updating bookmarks with date filtering, tagging, and bookmark analysis capabilities.
    10
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to access and manage Raindrop.io bookmarks, collections, tags, and highlights through the Model Context Protocol. Supports CRUD operations, advanced search, file uploads, and bulk editing of bookmarks.
    238 npm
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to save and search bookmarks using OpenAI's RAG capabilities for intelligent bookmark management and retrieval.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables language models to access and manage Raindrop.io bookmarks, collections, tags, and highlights through the Model Context Protocol.
    24 npm
    MIT