Skip to main content
Glama

mcp-zettel

Gib Claude (oder jedem beliebigen MCP-Client) persistenten Speicher in Form eines Zettelkastens.

Ein MCP-Server, der eine persönliche Wissensdatenbank aus atomaren, miteinander verknüpften Markdown-Notizen für Claude Desktop, Claude Code, Cursor oder jeden anderen MCP-kompatiblen Client bereitstellt. Schließe ihn an, und der Assistent kann Notizen erstellen, sie mit [[wiki-links]] kreuzverweisen, nach Schlüsselwörtern oder Tags suchen und Backlinks verfolgen – so kann er dauerhaften Kontext über Sitzungen hinweg aufbauen und nutzen, ohne dass du etwas kopieren und einfügen musst.


Warum

Jeder Chat, den du mit einem LLM beginnst, startet ohne Kontext darüber, was du bereits entschieden, geschrieben oder gelernt hast. Die Zettelkasten-Methode (kleine atomare Notizen + explizite Links zwischen ihnen) eignet sich hervorragend als LLM-zugänglicher Speicher: Die Einheiten sind von Natur aus klein, Links machen die Relevanz explizit und die Speicherung erfolgt als einfaches Markdown auf deiner eigenen Festplatte.

Dieser MCP-Server stellt diese Wissensdatenbank jedem LLM-Client über MCP-Tools zur Verfügung, sodass das Modell:

  • Erstellen einer neuen Notiz, wenn du eine Entscheidung oder Erkenntnis teilst, die es wert ist, behalten zu werden

  • Suchen nach Notizen zu einem Thema vor der Beantwortung („Was habe ich über X entschieden?“)

  • Verknüpfen von Notizen in beide Richtungen, um einen Graphen aufzubauen („Dies widerspricht [[a3f2c9]]“)

  • Verfolgen von Backlinks, um alles zu finden, was mit einem Konzept verbunden ist

Du behältst einfache Markdown-Dateien auf der Festplatte. Das Modell erhält strukturierten Zugriff darauf.

Related MCP server: obsidian-pkm

Wie es in einem Client aussieht

Nach dem Verbinden des Servers kann das LLM Dinge wie diese tun (dein Client zeigt die tatsächlichen Tool-Aufrufe an):

> What did I conclude about RAG chunk sizes?
[searches notes with query "rag chunk size"]
[reads 2 matching notes]
Based on your notes a3f2c9 ("RAG chunk sizing") and b7e412 ("Sentence-boundary
splitting"), you concluded: 800 chars with ~15% overlap, sentence-aligned.
You flagged that pure character chunking ([[2f00a1]]) hurt recall on your
arxiv set and moved away from it.

Verfügbare MCP-Tools

Tool

Zweck

create_note(title, body, tags)

Erstellt eine neue atomare Notiz. Verwende [[other_id]] im Text zum Verlinken.

read_note(note_id)

Ruft eine einzelne Notiz ab.

update_note(note_id, title?, body?, tags?)

Aktualisiert beliebige Felder, während andere unverändert bleiben.

delete_note(note_id)

Entfernt eine Notiz dauerhaft.

list_notes(tags?)

Listet alle Notizen auf; optionaler Tag-Filter ist eine Schnittmenge.

search_notes(query, tags?, limit?)

Stichwortsuche — Titel und Tags werden stärker gewichtet als der Textkörper.

search_notes_semantic(query, tags?, limit?)

v0.2. Einbettungsbasierte Suche für konzeptionelle Anfragen. Verwendet fastembed auf dem Gerät (kein API-Aufruf).

link_notes(from_id, to_id, label?)

Fügt einen [[to_id]] Wiki-Link zum Textkörper von from_id hinzu.

get_backlinks(note_id)

Jede Notiz, deren Textkörper auf diese verweist.

linked_notes(note_id)

Die IDs, auf die diese Notiz verlinkt (ausgehend).

suggest_links(text, exclude_ids?, limit?)

v0.6. Gibt bei beliebigem Text (z. B. was du als neue Notiz speichern möchtest) die wahrscheinlichsten existierenden Notizen zurück, die verlinkt werden sollten. Verwendet Hybrid-Fusion von Stichwort- und semantischen Rankings via RRF, sodass du nicht wählen musst, welche Suche verwendet werden soll.

Plus MCP-Ressourcen:

  • zettel://all — einzeiliger Index jeder Notiz

  • zettel://{note_id} — vollständig gerenderte Notiz

  • zettel://graphv0.4. Mermaid-Diagramm jeder Notiz + [[wiki-link]] im Tresor, inline gerendert von jedem Markdown+Mermaid-Client (Claude Desktop, Obsidian, mdBook…).

  • zettel://graph/tag/{tag}v0.4. Dasselbe Diagramm, aber beschränkt auf Notizen mit {tag} plus deren direkte Nachbarn – nützlich, sobald der vollständige Graph zu unübersichtlich wird.

Zwei Suchwerkzeuge, nicht eines

Die Stichwortsuche ist das, was du willst, wenn du den Begriff kennst. Sie ist kostengünstig, das Ranking ist vorhersehbar und exakte Übereinstimmungen schlagen immer ähnlich klingende. Die semantische Suche gewinnt, wenn der Wortlaut der Anfrage nicht mit dem Wortlaut der Notiz übereinstimmt – wenn man nach „Rate Limiting“ fragt, während die Notiz es „Throttling“ nennt, oder „warum mein Cache kalt ist“, wenn die Notiz von „TTL Tuning“ handelt. Das LLM kann aufrufen, was sinnvoll ist; die Tool-Beschreibungen sagen ihm, welches welches ist.

Das Einbettungsmodell ist standardmäßig BAAI/bge-small-en-v1.5 (384-dim, ~130 MB, nur CPU). Überschreibe dies mit MCP_ZETTEL_EMBEDDING_MODEL. Der Index wird bei der ersten semantischen Abfrage nach einem Schreibvorgang träge neu aufgebaut, daher gibt es beim ersten Mal eine kurze Wartezeit – danach bleibt er für die Lebensdauer des Serverprozesses im Speicher.

Installation

git clone https://github.com/dhruvpatel1706/mcp-zettel.git
cd mcp-zettel
pip install -e .

Python 3.10+.

Einrichten

Claude Desktop

Bearbeite ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) oder das Äquivalent auf deinem Betriebssystem und füge hinzu:

{
  "mcpServers": {
    "zettel": {
      "command": "mcp-zettel-server"
    }
  }
}

Starte Claude Desktop neu. Die Zettel-Tools stehen dem Modell nun zur Verfügung.

Claude Code

claude mcp add zettel -- mcp-zettel-server

Cursor / Continue / jeder stdio MCP-Client

Verweise den Client auf mcp-zettel-server als Befehl; der Server spricht MCP über stdio.

Benutzerdefinierter Speicherort

Setze MCP_ZETTEL_ROOT, um das Standardverzeichnis ~/.mcp-zettel zu überschreiben:

{
  "mcpServers": {
    "zettel": {
      "command": "mcp-zettel-server",
      "env": { "MCP_ZETTEL_ROOT": "/Users/you/vault" }
    }
  }
}

CLI direkt verwenden (kein MCP-Client erforderlich)

Der gleiche Speicher ist über eine einfache CLI zugänglich – nützlich für Power-User, die die Wissensdatenbank außerhalb einer LLM-Sitzung inspizieren, bearbeiten oder befüllen möchten.

mcp-zettel create "RAG chunk sizing" \
  --body "Settled on 800 chars, 15% overlap, sentence-aligned. See [[b7e412]]." \
  --tag rag --tag decisions

mcp-zettel list --tag rag
mcp-zettel search "sentence boundary"
mcp-zettel show a3f2c9
mcp-zettel backlinks a3f2c9

Layout auf der Festplatte

~/.mcp-zettel/
└── notes/
    ├── a3f2c9.md          ← one markdown file per note
    ├── b7e412.md          ← YAML frontmatter: title, tags, created_at, updated_at
    └── ...                ← body is plain markdown; [[id]] is a wiki-link

Jede Notiz ist eine einzelne Datei. Das bedeutet: einfache Backups (git), einfaches Grep, kein Lock-in. Wenn du jemals aufhörst, diesen Server zu verwenden, hast du immer noch ein Verzeichnis mit Markdown-Dateien.

Design-Entscheidungen

  • Dateien, keine Datenbank. Eine Notiz pro Markdown-Datei bedeutet, dass du sie in jedem Editor bearbeiten, mit git sichern und ohne Tools inspizieren kannst. Der Speicher ist nur ein dünner Kleber darüber.

  • Kurze Hex-IDs, keine slugifizierten Titel. [[a3f2c9]] ist stabil – benenne den Titel um und alle eingehenden Links werden immer noch aufgelöst. Außerdem kürzer als ein dateinamenbasierter Slug.

  • Bidirektionale Links abgeleitet, nicht gespeichert. Backlinks werden beim Lesen berechnet, indem der Textkörper jeder Notiz nach [[target_id]] durchsucht wird. Kein separater Index, der konsistent gehalten werden muss. Trivial in der Größenordnung, für die dies konzipiert ist (≤ niedrige Tausender an Notizen).

  • Titel/Tag-gewichtete Suche. Titel-Treffer zählen 3×, Tag-Treffer 2×, Textkörper-Treffer 1×. Entspricht der Intuition, dass eine Notiz, deren Titel „Retrieval“ erwähnt, mehr über Retrieval aussagt als eine Notiz, die das Wort einmal mitten im Textkörper enthält.

  • FastMCP, nicht Low-Level MCP. Die dekoratorbasierte FastMCP-Oberfläche des MCP Python SDK bedeutet, dass Tools einfach Python-Funktionen mit Pydantic-typisierten Argumenten sind – kein manuelles Erstellen von JSON-Schemas.

Entwicklung

pip install -e ".[dev]"
pytest
black --check src tests
isort --check-only --profile black src tests
flake8 src tests --max-line-length=100 --ignore=E501,W503,E203

CI läuft auf Python 3.10 / 3.11 / 3.12.

Inspiziere den Server interaktiv mit dem MCP-Inspektor:

npx @modelcontextprotocol/inspector mcp-zettel-server

Prompt-Vorlagen (v0.3)

MCP-Clients, die Prompt-Menüs unterstützen (Claude Desktop, Cursor), erhalten vier serverseitige Vorlagen, die den „richtigen Weg“ für gängige Zettelkasten-Aktionen kodieren, ohne dass du die Anweisungen erneut eingeben musst:

Prompt

Was es tut

distill_conversation(conversation, max_notes?)

Nimmt ein Chat-Transkript, extrahiert diskrete Erkenntnisse, die es wert sind, als atomare Notizen gespeichert zu werden. Das Modell schlägt Titel/Texte/Tags vor; du genehmigst, es ruft create_note auf.

find_linkable_notes(concept, limit?)

Bevor du eine neue Notiz schreibst, werden existierende Notizen angezeigt, die möglicherweise darauf verlinken oder von ihr verlinkt werden sollten – via search_notes_semantic.

daily_note(prompt_date?)

Erstellt eine tägliche Journal-Vorlage (bearbeitet / gelernt / Blocker / heute erstellte Notizen).

summarize_by_tag(tag, style?)

Fasst alles unter einem Tag zusammen. Stil = bullets / essay / outline.

Dies sind nur String-zurückgebende Funktionen, die mit @mcp.prompt() registriert sind. Die serverseitige Formulierung bedeutet, dass sich derselbe „Distill“-Prompt konsistent verhält, egal ob du ihn von Claude Desktop, Claude Code oder Cursor aufrufst.

Roadmap

  • [x] v0.2 — einbettungsbasierte semantische Suche neben der Stichwortsuche

  • [x] v0.3 — @mcp.prompt() Vorlagen für gängige Notizoperationen

  • [x] v0.4 — Graph-View-Ressource (zettel://graph), die ein Mermaid-Diagramm der Links zurückgibt

  • [ ] v0.5 — Remote Streamable HTTP-Transport für geräteübergreifenden Zugriff

Lizenz

MIT. Siehe LICENSE.

A
license - permissive license
-
quality - not tested
D
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Persistent memory MCP server that allows Claude to store, organize, and retrieve knowledge across sessions without consuming context window tokens.
    24
    17
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    This MCP server enables Claude to interact with an Obsidian vault for persistent, structured memory, providing tools for note creation, semantic search, graph traversal, and session memory.
    18
    87
    13
    MIT
  • A
    license
    -
    quality
    D
    maintenance
    Enables users to create, link, explore, and synthesize atomic notes using the Zettelkasten method through MCP-compatible clients like Claude.
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    MCP server that gives Claude Code and other MCP clients persistent memory using plain Markdown notes stored on your disk and optionally synced to cloud storage (iCloud, OneDrive, Google Drive, Dropbox).
    36
    1
    MIT

View all related MCP servers

Related MCP Connectors

  • Serve a folder of Markdown notes as an MCP server: hybrid search, reading, and sourced answers.

  • Person-owned, portable AI memory as a remote MCP server, readable and writable by any MCP client.

  • Cloud-hosted MCP server for durable AI memory

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/dhruvpatel1706/mcp-zettel'

If you have feedback or need assistance with the MCP directory API, please join our Discord server