Zettelkasten MCP Server
by rreben
README.md
# Zettelkasten MCP Server
Dieses Repository implementiert einen **Model Context Protocol (MCP) Server**, der als Brücke zwischen **Claude Desktop / Claude Code** und deinem Zettelkasten (basierend auf [tools4zettelkasten](https://github.com/rreben/tools4zettelkasten)) fungiert.
### Warum dieser MCP Server?
Die Bibliothek `tools4zettelkasten` bietet mächtige Python-Werkzeuge zur Verwaltung eines Zettelkastens (Dateinamen-Logik, Strukturen, Links). Dieser MCP Server macht diese Werkzeuge für KI-Assistenten wie Claude zugänglich.
**Der Nutzen:**
* **Direkter Zugriff:** Claude kann deinen Zettelkasten nicht nur "sehen" (als Dateien), sondern *versteht* die Struktur (Verwandte Zettel, Hierarchien).
* **Sichere Manipulation:** Statt dass die KI versucht, Dateien 'blind' umzubenennen, nutzt sie die getestete Logik der Bibliothek, um konsistente Dateinamen und IDs zu erzeugen.
* **Komplexe Analysen:** Claude kann Fragen beantworten wie "Welche Themen hängen damit zusammen?", indem es die Graphen-Analyse der Bibliothek nutzt.
## Architektur
```
┌─────────────────────────────────────────────────────────────┐
│ Claude Desktop / Claude Code │
└─────────────────────┬───────────────────────────────────────┘
│ stdio (JSON-RPC)
▼
┌─────────────────────────────────────────────────────────────┐
│ zettelkasten_mcp/server.py │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ MCP Protocol Handler (FastMCP) │ │
│ └───────────────────────────────────────────────────────┘ │
│ │ │
│ ┌───────────────────────▼───────────────────────────────┐ │
│ │ 12 Tools │ │
│ │ • list_input_files • search_zettel │ │
│ │ • stage_file • get_zettel │ │
│ │ • preview_staging • list_zettel │ │
│ │ • get_statistics • get_links │ │
│ │ • find_related • analyze_structure │ │
│ │ • preview_reorganize • execute_reorganize │ │
│ └───────────────────────────────────────────────────────┘ │
│ │ │
│ ┌───────────────────────▼───────────────────────────────┐ │
│ │ tools4zettelkasten (importlib) │ │
│ │ • persistency.PersistencyManager │ │
│ │ • handle_filenames │ │
│ │ • reorganize │ │
│ │ • analyse │ │
│ └───────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ ~/Dropbox/zettelkasten/ │
│ ├── mycelium/ (567 Zettel) │
│ └── input/ (neue Notizen) │
└─────────────────────────────────────┘
```
## Projektstruktur
```
~/Dropbox/zettelkasten_mcp/
├── README.md # Diese Datei
├── venv/ # Python 3.11 Virtual Environment
│ └── bin/python # Python-Interpreter für MCP
└── zettelkasten_mcp/
├── __init__.py
├── __main__.py # Entry point: python -m zettelkasten_mcp
└── server.py # MCP Server mit allen Tools
```
## Abhängigkeiten
**Python-Version:** 3.11+ (MCP erfordert >= 3.10)
**Installierte Packages im venv:**
- `mcp[cli]` - MCP Protocol Library
- `flask`, `flask-wtf`, `flask-pagedown` - Flask-Abhängigkeiten von tools4zettelkasten
- `graphviz`, `pyfiglet`, `inquirerpy`, `colorama`, `markdown` - Weitere Abhängigkeiten
**Externe Abhängigkeit (`tools4zettelkasten`):**
- **Repository:** [rreben/tools4zettelkasten](https://github.com/rreben/tools4zettelkasten)
- **Beschreibung:** Python-Tools für das "Folgezettel"-Prinzip, Verwaltung alphanumerischer Sortierungen und Strukturanalyse.
- **Integration:** Dieses Projekt importiert die Bibliothek direkt (via `PYTHONPATH`), um deren Logik für Parsing und Dateisystem-Operationen zu nutzen.
## Konfiguration
### Claude Desktop / Claude Code
Datei: `~/Library/Application Support/Claude/claude_desktop_config.json`
```json
{
"mcpServers": {
"zettelkasten": {
"command": "/Users/rupertrebentisch/Dropbox/zettelkasten_mcp/venv/bin/python",
"args": ["-m", "zettelkasten_mcp"],
"env": {
"PYTHONPATH": "/Users/rupertrebentisch/Library/CloudStorage/Dropbox/tools4zettelkasten",
"TOOLS4ZETTELKASTEN_PATH": "/Users/rupertrebentisch/Library/CloudStorage/Dropbox/tools4zettelkasten",
"ZETTELKASTEN": "/Users/rupertrebentisch/Dropbox/zettelkasten/mycelium",
"ZETTELKASTEN_INPUT": "/Users/rupertrebentisch/Dropbox/zettelkasten/input"
},
"cwd": "/Users/rupertrebentisch/Dropbox/zettelkasten_mcp"
}
}
}
```
### Umgebungsvariablen
| Variable | Beschreibung | Standard |
|----------|--------------|----------|
| `ZETTELKASTEN` | Pfad zum Hauptordner des Zettelkastens | `~/Dropbox/zettelkasten/mycelium` |
| `ZETTELKASTEN_INPUT` | Pfad zum Input-Ordner für neue Notizen | `~/Dropbox/zettelkasten/input` |
| `TOOLS4ZETTELKASTEN_PATH` | Pfad zum tools4zettelkasten-Repository | `~/Library/CloudStorage/Dropbox/tools4zettelkasten` |
| `PYTHONPATH` | Muss tools4zettelkasten enthalten | (wie TOOLS4ZETTELKASTEN_PATH) |
## Tools-Übersicht
### Input-Management
| Tool | Parameter | Beschreibung |
|------|-----------|--------------|
| `list_input_files` | - | Zeigt alle Dateien im Input-Ordner |
| `preview_staging` | - | Vorschau der geplanten Umbenennungen |
| `stage_file` | `filename` | Benennt eine Datei nach Titel um |
### Zettelkasten-Abfragen
| Tool | Parameter | Beschreibung |
|------|-----------|--------------|
| `get_zettel` | `identifier` (ID oder Filename) | Liest einen einzelnen Zettel |
| `search_zettel` | `query`, `limit=10` | Volltextsuche |
| `list_zettel` | `prefix=""`, `limit=50` | Listet Zettel (optional nach Topic) |
| `get_statistics` | - | Statistiken über den Zettelkasten |
### Struktur & Analyse
| Tool | Parameter | Beschreibung |
|------|-----------|--------------|
| `get_links` | `identifier` | Ein-/ausgehende Links eines Zettels |
| `find_related` | `identifier`, `limit=5` | Verwandte Zettel (Links + Hierarchie) |
| `analyze_structure` | `topic=""` | Strukturanalyse (Tree + Links) |
### Reorganisation
| Tool | Parameter | Beschreibung |
|------|-----------|--------------|
| `preview_reorganize` | - | Zeigt geplante Änderungen |
| `execute_reorganize` | `confirm=False` | Führt Reorganisation durch |
## Technische Hinweise
### Import-Workaround
`tools4zettelkasten` hat in seiner `__init__.py` ein `from .cli import *`, das Click-Commands exportiert und dabei Modulnamen wie `reorganize` überschreibt. Der MCP-Server umgeht dies durch direkten Import via `importlib`:
```python
import importlib
ro = importlib.import_module("tools4zettelkasten.reorganize")
```
### Manuelles Testen
```bash
cd ~/Dropbox/zettelkasten_mcp
# Server-Import testen
PYTHONPATH="$HOME/Library/CloudStorage/Dropbox/tools4zettelkasten" \
ZETTELKASTEN="$HOME/Dropbox/zettelkasten/mycelium" \
ZETTELKASTEN_INPUT="$HOME/Dropbox/zettelkasten/input" \
./venv/bin/python -c "from zettelkasten_mcp.server import mcp; print('OK')"
# Tools testen
PYTHONPATH="$HOME/Library/CloudStorage/Dropbox/tools4zettelkasten" \
ZETTELKASTEN="$HOME/Dropbox/zettelkasten/mycelium" \
ZETTELKASTEN_INPUT="$HOME/Dropbox/zettelkasten/input" \
./venv/bin/python -c "
from zettelkasten_mcp.server import get_statistics
print(get_statistics())
"
```
### MCP-Status in Claude Code prüfen
```bash
claude mcp list
```
Oder im Chat: `/mcp`
## Deployment-Checkliste
1. **Python 3.11+ installiert?** (`python3.11 --version`)
2. **venv erstellt?** (`python3.11 -m venv venv`)
3. **Dependencies installiert?**
```bash
./venv/bin/pip install "mcp[cli]" flask flask-wtf flask-pagedown \
graphviz pyfiglet inquirerpy colorama markdown mistune
```
4. **claude_desktop_config.json konfiguriert?**
5. **Pfade korrekt?** (Dropbox-Symlinks beachten!)
6. **Claude Desktop/Code neu gestartet?**
## Beispiel-Nutzung
```
Du: "Was liegt im Input-Ordner?"
Claude: [ruft list_input_files auf]
Du: "Zeige mir den Zettel über Kreativität"
Claude: [ruft search_zettel(query="Kreativität") auf]
Du: "Welche Zettel sind mit 01_001 verwandt?"
Claude: [ruft find_related(identifier="01_001") auf]
Du: "Gib mir Statistiken"
Claude: [ruft get_statistics auf]
```
---
*Erstellt am: 27. Januar 2026*
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues