Slipbox MCP Server
Slipbox MCP Server

Gib deinem KI-Assistenten eine aktive Rolle bei der Verwaltung deines Wissens. Slipbox ist ein MCP-Server, der jeden MCP-kompatiblen Agenten in einen Zettelkasten-Partner verwandelt – atomare Notizen erstellt, semantische Verknüpfungen bildet, aufkommende Cluster erkennt und Erkenntnisse aus deinem vorhandenen Wissen synthetisiert.
Deine Ideen hinein, strukturiertes Wissen heraus. Der Agent übernimmt Formatierung, Verknüpfung und Integration.
Neu bei der Methode? Beginne mit Introduction to the Zettelkasten Method, um das Warum hinter atomaren Notizen und vernetztem Denken zu verstehen. Um zu sehen, wie Slipbox deinen Agenten mit dieser Methode vertraut macht, lies die Server-Anweisungen, die es beim Verbinden automatisch mitliefert.
Entwickelt und getestet mit Claude. Funktioniert mit jedem MCP-Client (Claude Desktop, Claude Code, OpenCode, Copilot oder allem, was MCP spricht).
Einfache Dateien, null Lock-in. Notizen sind Markdown mit YAML-Frontmatter – lesbar in Obsidian, Foam, Logseq oder jedem Editor. Die SQLite-Datenbank ist ein Index, nicht die Quelle der Wahrheit. Lösche sie und baue sie jederzeit aus den Dateien neu auf.
19 MCP-Tools für Notizen, Verknüpfungen, Suche, Graphenanalyse und Cluster-Verwaltung
6 Workflow-Prompts (plus passende Skills), die die Zettelkasten-Methode kodieren, damit du sie nicht in jeder Sitzung neu lernst
BM25-Volltextsuche über Titel und Inhalt per SQLite FTS5
Cluster-Erkennung findet aufkommende Themengruppen und unterstützt Strukturnotizen
Sieben typisierte Verknüpfungen (reference, extends, refines, contradicts, questions, supports, related)
Python 3.10+ | macOS oder Linux

Rundgang
![]()
Related MCP server: vault-master-mcp
Schnellstart
1. Installieren
pipx install slipbox-mcp
# or, with uv:
uv tool install slipbox-mcpDadurch wird ein slipbox-mcp-Launcher auf deinen PATH gelegt (in ~/.local/bin). Dieser einzelne Befehl ist der gesamte MCP-Server: kein Klonen, keine PYTHONPATH-Variable, kein fest codierter venv-Python-Pfad. Alles unten verwendet ihn. Um es ganz ohne Installation auszuprobieren, führt uvx slipbox-mcp den Server in einer Wegwerf-Umgebung aus.
(Du arbeitest an Slipbox selbst? Siehe Entwicklung für das Einrichten mit Klonen und editierbarer Installation.)
2. Datenverzeichnis wählen
Eine einzige Variable, SLIPBOX_BASE_DIR, konfiguriert alles: Notizen landen in <base>/data/notes und der SQLite-Index in <base>/data/db/zettelkasten.db. Der Server erstellt diese beim ersten Start mit Berechtigungen nur für den Besitzer (0700).
Richte SLIPBOX_BASE_DIR (oder die einzelnen Pfade SLIPBOX_NOTES_DIR / SLIPBOX_DATABASE_PATH weiter unten) auf ein dediziertes Datenverzeichnis, das du kontrollierst, nicht auf einen gemeinsamen oder System-Speicherort. Diese Pfade werden unverändert verwendet: Der Server verwaltet den Notizbaum und den Index darunter und behandelt das Notizverzeichnis als Quelle der Wahrheit, wenn er den Index neu aufbaut.
# Example: use any absolute path you like
/Users/yourname/.local/share/mcp/slipboxVerwende einen vollständigen absoluten Pfad. Ein führendes
~wird in MCP-Client-Konfigurationsdateien nicht expandiert und würde ein buchstäbliches~-Verzeichnis erzeugen.
3. Verbinde dich mit deinem MCP-Client
Claude Code (ein Befehl, keine Dateibearbeitung):
claude mcp add slipbox \
--env SLIPBOX_BASE_DIR=/Users/yourname/.local/share/mcp/slipbox \
-- slipbox-mcpClaude Desktop (Konfigurationsdatei bearbeiten):
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonLinux:
~/.config/claude/claude_desktop_config.json
{
"mcpServers": {
"slipbox": {
"command": "slipbox-mcp",
"env": {
"SLIPBOX_BASE_DIR": "/Users/yourname/.local/share/mcp/slipbox"
}
}
}
}Desktop-PATH-Hinweis: Die macOS-Desktop-App erbt
~/.local/binnicht immer in ihrem PATH, daher könnte das nackte"slipbox-mcp"nicht aufgelöst werden. Wenn der Server nicht startet, ersetze"command": "slipbox-mcp"durch den absoluten Pfad, der vonwhich slipbox-mcpausgegeben wird (normalerweise/Users/yourname/.local/bin/slipbox-mcp).
Andere MCP-Clients: Registriere slipbox-mcp als Serverbefehl mit SLIPBOX_BASE_DIR in dessen Umgebung. Der Befehl und die Umgebung sind überall gleich.
Setze anstelle von SLIPBOX_BASE_DIR einzelne absolute Pfade. Das optionale SLIPBOX_LOG_LEVEL ist eines von DEBUG, INFO, WARNING, ERROR.
"env": {
"SLIPBOX_NOTES_DIR": "/Users/yourname/.local/share/mcp/slipbox/notes",
"SLIPBOX_DATABASE_PATH": "/Users/yourname/.local/share/mcp/slipbox/data/db/zettelkasten.db",
"SLIPBOX_LOG_LEVEL": "INFO"
}4. Neustarten und überprüfen
Starte deinen Client neu (Claude Code lädt beim nächsten Start neu; beende Claude Desktop und öffne es erneut).
Frage deinen Agenten:
„Erstelle eine Testnotiz über etwas“
„Durchsuche meine slipbox nach test“
„Finde verwaiste Notizen“
In Aktion
Das obige Bild ist die Kernschleife. Hier ist der Rest, was der Agent tut.
Proaktive Wartung
Der Agent liest die Ressource slipbox://maintenance-status zu Sitzungsbeginn und zeigt Cluster an, die organisiert werden müssen.

Volltextsuche
BM25-bewertete Suche über Notizen via slipbox_search_notes.

Wissensgraph: Zentrale Notizen
slipbox_find_central_notes zeigt die strukturellen Anker des Graphen – die Notizen, um die alles andere kreist.

Notizen-Analyse
Der Prompt analyze_note bewertet Atomarität, findet echte Verbindungen im vorhandenen Graphen, schlägt Tags vor und schreibt für Klarheit um.

Quellen-Zerlegung
Der Prompt knowledge_creation zerlegt einen Artikel in atomare Literaturnotizen mit korrekten Zitaten und Verknüpfungen.

Cluster-Erkennung
slipbox_get_cluster_report findet Gruppen gemeinsam auftretender Tags, denen eine Strukturnotiz fehlt. Bewertet nach Größe, Verwaisten-Anteil, Verknüpfungsdichte und Aktualität.

Strukturnotiz-Erstellung
slipbox_create_structure_from_cluster erstellt eine Strukturnotiz, verknüpft alle Mitgliedsnotizen und verwirft den Cluster.

Verwaiste Notizen
slipbox_find_orphaned_notes zeigt nicht integriertes Wissen – Kandidaten zum Verknüpfen oder Löschen.

Ähnliche Notizen
slipbox_find_similar_notes berechnet Ähnlichkeit aus gemeinsamen Tags, gemeinsamen Verknüpfungen und Inhaltsüberschneidungen.

Graph-Traversierung
slipbox_get_linked_notes zeigt typisierte Verknüpfungen von einer Hub-Notiz aus, gruppiert nach Verknüpfungstyp.

Wissenssynthese
Der Prompt knowledge_synthesis findet Brücken zwischen nicht verbundenen Bereichen und schlägt Synthesenotizen aus deinem vorhandenen Wissen vor.

Kein Lock-in: Einfache Dateien in Obsidian
Notizen sind einfaches Markdown. Öffne den Wissensspeicher in Obsidian und alles funktioniert – gerenderte Inhalte, Backlinks und der Wissensgraph.
Für einen Graphen, der die typisierten Verknüpfungen in Farbe darstellt (supports, extends, refines, ...) statt Obsidians untypisiertem integrierten Graphen, installiere das Begleit-Plugin Slipbox Semantic Graph – eine kraftbasierte Ansicht mit lesbaren Titeln und farbcodierten semantischen Verknüpfungstypen. Installiere es manuell aus der 0.1.0-Version: Kopiere main.js, manifest.json und styles.css in <vault>/.obsidian/plugins/slipbox-graph/ und aktiviere es dann unter Einstellungen → Community-Plugins. (Sobald es in das offizielle Verzeichnis aufgenommen wurde, kannst du es auch über Einstellungen → Community-Plugins → Durchsuchen → Suche nach "Slipbox Semantic Graph" installieren.) Es liest dieselben Frontmatter-id- und ## Links-Abschnitte, die der Server schreibt, daher ist keine zusätzliche Konfiguration erforderlich. Öffne die Ansicht mit dem Befehl Open semantic graph (Befehlspalette) oder dem git-fork-Symbol im Menüband.

Die Legende oben ordnet jeder Farbe einen Verknüpfungstyp zu (extends, refines, supports, contradicts, questions, related). Fokussiere eine Strukturnotiz und ihre Konstellation erscheint. Hier ist Contract Testing Knowledge Map mit den umkreisenden Mitgliedsnotizen:

Optional: Automatische Cluster-Erkennung
Die Cluster-Analyse scannt alle Notizen und berechnet Ähnlichkeitswerte. Wenn du sie täglich (6 Uhr) ausführst, werden Ergebnisse vorab berechnet, sodass slipbox_get_cluster_report() sofort zurückkehrt. Ohne Zeitplanung läuft die Cluster-Erkennung bei Bedarf, was bei großen Sammlungen langsamer ist.
Führe sie manuell nach Massenimporten, größeren Umstrukturierungen oder wenn du sofortige Ergebnisse möchtest, aus.
Cluster-Erkennung installieren (macOS)
chmod +x scripts/install-cluster-detection.sh
./scripts/install-cluster-detection.shDer Installer erkennt deinen Python-/venv-Pfad, erzeugt die LaunchAgent-Plist und lädt sie.
Manueller Test (Dateiüberwacher)
source .venv/bin/activate
python scripts/detect_clusters.pyAusgabe gespeichert unter ~/.local/share/mcp/slipbox/cluster-analysis.json.
Cluster-Erkennung deinstallieren
./scripts/install-cluster-detection.sh --uninstallOptional: macOS-Dateiüberwacher für automatische Indexierung
Der MCP-Server unterhält einen Datenbankindex für schnelles Suchen. Wenn du Notizen in Obsidian (oder einem anderen Editor) bearbeitest, wird die Datenbank veraltet, bis du slipbox_rebuild_index ausführst.
Der Dateiüberwacher läuft als Hintergrund-Daemon, überwacht dein Notizverzeichnis und baut den Index automatisch neu auf, wenn sich .md-Dateien ändern.
Verwende ihn, wenn du häufig Notizen in Obsidian bearbeitest und gleichzeitig Claude nutzt.
Dateiüberwacher installieren (macOS)
chmod +x scripts/install-file-watcher.sh
./scripts/install-file-watcher.shDer Installer erkennt deinen Python-/venv-Pfad, installiert bei Bedarf watchdog und lädt den LaunchAgent. Er startet bei der Anmeldung und wird bei Absturz neu gestartet.
Manueller Test
source .venv/bin/activate
python scripts/watch_notes.pyBearbeite eine Notizdatei. Du solltest "rebuilding index..." in der Ausgabe des Überwachers sehen.
Status prüfen
launchctl list | grep slipbox.watcher
# View logs
tail -f ~/.local/share/mcp/slipbox/watcher.logDateiüberwacher deinstallieren
./scripts/install-file-watcher.sh --uninstallEmpfohlener System-Prompt
Slipbox bringt automatisch eine Grundkonfiguration mit: Jeder Client erhält bei der Verbindung die Server-Anweisungen, die abdecken, wie man die Werkzeuge richtig nutzt – Notiztypen, Verknüpfungssemantik, Qualitätsstandards und Kern-Workflows wie die Suche vor dem Erstellen. Diese fügst du nicht selbst hinzu.
docs/SYSTEM_PROMPT.md ist die Opt-in-Ebene darüber: die Autonomie- und Initiativ-Richtlinien, die ein Server nicht von sich aus beanspruchen sollte. Füge sie den Einstellungen deines Agenten oder dem System-Prompt hinzu, um Folgendes zu aktivieren:
Automatische Wissenserfassung während Gesprächen
Erkennung aufkommender Cluster beim Gesprächsstart
Werkzeug-Referenz
Kern-Notizoperationen
Tool | Beschreibung |
| Atomare Notizen erstellen (flüchtig/Literatur/permanent/Struktur/Hub) |
| Notiz nach ID oder Titel abrufen |
| Vorhandene Notizen aktualisieren |
| Notizen löschen |
Verknüpfen
Tool | Beschreibung |
| Semantische Verknüpfungen zwischen Notizen erstellen |
| Verknüpfungen entfernen |
| Eine bestimmte Verknüpfung löschen (Fehler, wenn die Verknüpfung nicht existiert) |
| Notizen abrufen, die mit einer Notiz verknüpft sind (hin oder zurück) |
Suche & Entdeckung
Tool | Beschreibung |
| Suche nach Text (BM25-gerankt), Tags oder Typ |
| Finde Notizen, die einer bestimmten Notiz ähneln |
| Finde die am stärksten vernetzten Notizen |
| Finde unverbundene Notizen |
| Liste Notizen nach Datumsbereich auf |
| Liste alle Tags auf |
Cluster-Analyse
Tool | Beschreibung |
| Zeige ausstehende Cluster, die Strukturnotizen benötigen |
| Erstelle Strukturnotiz aus Cluster |
| Cluster-Analyse neu generieren |
| Cluster dauerhaft aus den Vorschlägen entfernen |
Wartung
Tool | Beschreibung |
| Datenbankindex aus Dateien neu aufbauen |
Referenz der Prompts
MCP-Prompts sind wiederverwendbare Workflow-Vorlagen, die die Zettelkasten-Methode kodieren, damit du sie nicht in jeder Sitzung neu erklären musst.
Prompt | Beschreibung | Verwendung |
| Verarbeite Informationen zu 3-5 atomaren Notizen | Beim Hinzufügen von Artikeln, Ideen oder Notizen |
| Verarbeite größere Mengen zu 5-10 Notizen | Beim Verarbeiten von Büchern oder Langtexten |
| Verbindungen zu vorhandenem Wissen aufzeigen | Beim Erkunden, wie Themen zusammenhängen |
| Übergeordnete Erkenntnisse erstellen | Beim Finden von Brücken zwischen Ideen |
| Eignung einer Notiz für den Zettelkasten bewerten | Beim Überprüfen einer neuen oder vorhandenen Notiz |
| Ausstehende Hausarbeiten anzeigen | Zu Beginn einer Arbeitssitzung |
So rufst du sie auf: Slash-Befehle und Skills
Jeder Workflow wird auf zwei Arten ausgeliefert:
MCP-Prompts: werden vom laufenden Server bereitgestellt.
Skills: eigenständige Bündel (
skills/<name>/), die denselben Workflow ausführen und eine Auslösung über natürliche Sprache ermöglichen.
Fünf der sechs Skills werden aus denselben PROMPT_*-Vorlagen generiert, die auch der Server verwendet (src/slipbox_mcp/server/descriptions.py), und CI schlägt fehl, wenn die eingecheckten skills/ von diesen Vorlagen abweichen. Der sechste, cluster-maintenance, wird direkt in scripts/build_skills.py verfasst, weil sein MCP-Prompt eine zur Laufzeit gerenderte Statusmeldung und kein wiederverwendbarer Workflow ist.
Slash-Befehle sind der zuverlässige Weg. Claude Code zeigt MCP-Prompts als /mcp__<server>__<prompt> an; tippe /mcp__slipbox-mcp__ für die Auswahl:
/mcp__slipbox-mcp__knowledge_creation
/mcp__slipbox-mcp__knowledge_exploration
/mcp__slipbox-mcp__knowledge_synthesis
/mcp__slipbox-mcp__knowledge_creation_batch
/mcp__slipbox-mcp__analyze_note
/mcp__slipbox-mcp__cluster_maintenance(Installierte Skills stellen außerdem eigene Slash-Befehle über ihren Verzeichnisnamen bereit, z. B. /slipbox-analyze-note.)
Natürliche Sprache funktioniert, sobald der passende Skill installiert ist. Beschreibe einfach, was du möchtest:
Analyze this note for my slipbox: [paste note]
Add this to my slipbox: [paste article]
Synthesize my notes on attention and memory.Die Auslösung über Prosa hängt davon ab, dass der Skill installiert ist und deine Formulierung zu seiner Beschreibung passt; falls es nicht funktioniert, nutze den Slash-Befehl. Die Aufforderung an das Modell, den „analyze_note“-Prompt namentlich zu verwenden, funktioniert nicht. Das Modell kann einen MCP-Prompt nicht namentlich aufrufen. Verwende einen Slash-Befehl oder lass einen Skill über natürliche Sprache auslösen.
Skills installieren
Claude Code findet Skills in .claude/skills/ (pro Projekt) oder ~/.claude/skills/ (global), nicht in einem einfachen skills/-Verzeichnis auf oberster Ebene. Verlinke oder kopiere die gewünschten Skills in einen Erkennungspfad (z. B. für dieses Projekt):
mkdir -p .claude/skills
ln -s ../../skills/slipbox-analyze-note .claude/skills/slipbox-analyze-note
# ...or copy the directories, or symlink all sixClaude Desktop benötigt jeden Skill als .skill-Bündel. Erstelle sie, dann lade sie hoch:
python scripts/build_skills.py # writes dist/*.skillGehe zu Einstellungen → Skills → Skill hochladen und wähle die Bündel aus dist/ aus, die du möchtest. Jeder wird sowohl als Slash-Befehl als auch als Auslöser für natürliche Sprache installiert.
Nachdem du eine Prompt-Vorlage in descriptions.py bearbeitet hast, führe den Build erneut aus, um die Skills neu zu generieren.
Verknüpfungstypen
Typ | Verwendung | Umkehrung |
| Allgemeine „Siehe auch“-Verbindung | reference |
| Aufbauend auf einer anderen Idee | extended_by |
| Klärung oder Verbesserung | refined_by |
| Gegenläufige Ansicht | contradicted_by |
| Fragen aufwerfen zu | questioned_by |
| Belege liefern für | supported_by |
| Lose thematische Verbindung | related |
Notiztypen
Typ | Zweck |
| Schnelle Erfassungen, unverarbeitete Gedanken |
| Ideen aus Quellen mit Zitat |
| Ausgearbeitete Ideen in eigenen Worten |
| Karten, die 7-15 verwandte Notizen zu einem bestimmten Thema organisieren |
| Domänenübersicht, die auf Strukturnotizen verlinkt; Einstiegspunkt zur Navigation in einem breiten Wissensgebiet |
Struktur- vs. Hub-Notiz: Eine Strukturnotiz organisiert einen Cluster von permanenten Notizen zu einem einzelnen Thema. Sie ist eine kuratierte Karte eine Ebene über den Notizen selbst. Eine Hub-Notiz arbeitet noch eine Ebene höher: Sie verlinkt auf Strukturnotizen (und gelegentlich auf wichtige permanente Notizen) über eine gesamte Wissensdomäne. Während eine Strukturnotiz die Frage „Was weiß ich über X?“ beantwortet, beantwortet eine Hub-Notiz die Frage „Wie ist mein Wissen über diese gesamte Domäne organisiert?“ Die meisten Zettelkästen benötigen nur eine Handvoll Hub-Notizen.
Dateiformat
Notizen werden als Markdown-Dateien mit YAML-Frontmatter gespeichert:
---
id: "20251217T172432480464000"
title: "Poetry Revision Principles"
type: structure
tags:
- poetry
- revision
- craft
created: "2025-12-17T17:24:32"
updated: "2025-12-17T17:24:32"
---
# Poetry Revision Principles
Content here...
## Links
- reference [[20250728T125429845760000]] Member of structureDu kannst diese Dateien direkt in einem beliebigen Texteditor oder in Obsidian bearbeiten. Führe slipbox_rebuild_index nach externen Bearbeitungen aus.
Aktualisierung
Nach dem Ziehen neuer Versionen starte Claude Desktop neu. Wenn die Versionshinweise Datenbankänderungen erwähnen, führe slipbox_rebuild_index einmal aus, um deine vorhandene Datenbank auf den neuesten Stand zu bringen.
Aktualisierung auf FTS5-Suche (jede Version nach dem FTS5-Release): Der Volltextsuchindex wird automatisch erstellt, wenn der Server mit einer neuen Datenbank startet. Bei vorhandenen Datenbanken wird die FTS5-Tabelle beim ersten Start erstellt, bleibt aber leer, bis du Folgendes ausführst:
slipbox_rebuild_indexDies befüllt den BM25-Index aus deinen vorhandenen Notizen. Suchergebnisse werden erst nach diesem Schritt nach Relevanz sortiert.
Fehlerbehebung
Server wird in Claude Desktop nicht geladen
Bestätige, dass der Launcher auflösbar ist:
which slipbox-mcpsollte einen Pfad ausgeben (normalerweise~/.local/bin/slipbox-mcp).Wenn es in deinem Terminal auflösbar ist, Desktop es aber trotzdem nicht starten kann, sieht die GUI-App
~/.local/binnicht in ihrem PATH. Ersetze"command": "slipbox-mcp"durch den absoluten Pfad aus Schritt 1.Prüfe die Claude-Desktop-Protokolle auf Fehler.
slipbox-mcp: command not found
Das Konsolenskript wurde nicht installiert oder ist nicht im PATH. Installiere es neu mit pipx install --editable . --force und überprüfe es dann mit which slipbox-mcp. Wenn das bin-Verzeichnis von pipx im PATH fehlt, führe pipx ensurepath aus und starte deine Shell neu.
Notizverzeichnis zeigt wörtlich auf ~/...
Wenn dein Notizverzeichnis relativ zum CWD bei ./~/... landet, hast du ~ in der JSON-Konfiguration verwendet. Claude Desktop expandiert ~ nicht. Ersetze es durch den vollständigen absoluten Pfad.
Suche liefert keine Ergebnisse
Der FTS5-Index ist möglicherweise nicht befüllt. Führe
slipbox_rebuild_indexeinmal aus, um vorhandene Notizen zu indizieren.Wenn du Notizen kürzlich außerhalb von Claude bearbeitet hast, ist der Index möglicherweise veraltet. Führe
slipbox_rebuild_indexaus.
slipbox_list_notes_by_date liefert leere Ergebnisse
Wenn start_date später als end_date liegt, werden keine Notizen gefunden und ein leeres Ergebnis zurückgegeben. Das ist erwartetes Verhalten, kein Fehler.
Datenbank nicht synchron
Wenn Notizen außerhalb des MCP-Servers bearbeitet wurden:
slipbox_rebuild_indexCluster-Erkennung läuft nicht
launchctl list | grep slipbox.cluster-detection
# Should show: - 0 com.slipbox.cluster-detection
# Check logs
cat /tmp/slipbox-clusters.log
# Reinstall if needed
./scripts/install-cluster-detection.sh --uninstall
./scripts/install-cluster-detection.shDateiüberwachung läuft nicht
launchctl list | grep slipbox.watcher
# Should show: - 0 com.slipbox.watcher
# Check logs
cat ~/.local/share/mcp/slipbox/watcher.log
# Reinstall if needed
./scripts/install-file-watcher.sh --uninstall
./scripts/install-file-watcher.shAktualisierung von ZETTELKASTEN_*-Umgebungsvariablen
Wenn du zuvor ZETTELKASTEN_NOTES_DIR, ZETTELKASTEN_DATABASE_PATH oder andere ZETTELKASTEN_*-Variablen verwendet hast, werden diese nicht mehr gelesen. Benenne sie in ihre SLIPBOX_*-Entsprechungen um:
Alt | Neu |
|
|
|
|
|
|
|
|
|
|
Der Server protokolliert eine Warnung, wenn alte Namen erkannt werden, migriert sie aber nicht automatisch.
Pfad des Cluster-Berichts ist nicht konfigurierbar
Der Cluster-Analysebericht wird unabhängig von SLIPBOX_BASE_DIR oder SLIPBOX_NOTES_DIR immer nach ~/.local/share/mcp/slipbox/cluster-analysis.json geschrieben. Wenn du nicht standardmäßige Pfade verwendest, liegt der Cluster-Bericht trotzdem am Standardort.
Installationsskripte sind nur für macOS
Die Skripte scripts/install-cluster-detection.sh und scripts/install-file-watcher.sh verwenden launchctl und ~/Library/LaunchAgents/, die es nur unter macOS gibt. Unter Linux musst du entsprechende systemd-Units oder Cron-Jobs manuell erstellen. Siehe die manuellen Testbefehle in den jeweiligen README-Abschnitten, um zu überprüfen, ob die zugrunde liegenden Python-Skripte auf deiner Plattform funktionieren.
Standardpfade sind relativ zum Arbeitsverzeichnis
Wenn SLIPBOX_NOTES_DIR und SLIPBOX_DATABASE_PATH nicht gesetzt sind, verwendet der Server standardmäßig data/notes und data/db/zettelkasten.db relativ zum aktuellen Arbeitsverzeichnis. Bei der Ausführung über Claude Desktop entspricht das CWD möglicherweise nicht deiner Erwartung. Setze in claude_desktop_config.json immer absolute Pfade, um dies zu vermeiden.
Entwicklung
Einrichtung
git clone https://github.com/jamesfishwick/slipbox-mcp.git
cd slipbox-mcp
uv venv && uv pip install -e ".[dev]"Testen
Das Projekt hat drei Teststufen:
Stufe | Anzahl | Geschwindigkeit | Kosten | Befehl |
Unit + Integration | 219 | ~2s | Kostenlos |
|
Tool-Vertragstests | 22 | ~0.5s | Kostenlos |
|
LLM-Evaluierungen | 28 | ~10min | ~$3-5 |
|
# Default: runs unit + contract tests (CI runs this)
pytest
# Run everything except LLM evals
pytest tests/ evals/tool_contracts/
# Run LLM evals (requires claude CLI authenticated)
pytest evals/llm/ -v
# Run LLM evals with a specific model
EVAL_MODEL=sonnet pytest evals/llm/ -v
# Lint
ruff check src/ evals/Unit-Tests decken die interne Logik ab – Dienste, Repository, Modelle, Parsing.
Tool-Vertragstests überprüfen das Ausgabeformat der MCP-Tools, das die LLM sieht – parsebare Struktur, Verkettung (create -> search -> get) und hilfreiche Fehlermeldungen. Sie sind deterministisch und rufen keine LLM auf.
LLM-Evaluierungen senden Prompts über die claude-CLI an eine LLM, wobei der MCP-Server verbunden ist, und bewerten dann die Ergebnisse, indem sie den Datenbankzustand prüfen (erstellte Notizen, gesetzte Verknüpfungen, angewendete Tags). Sie testen, ob die LLM die Tools angesichts der Tool-Beschreibungen tatsächlich korrekt verwendet.
CI/CD
Branch-Schutz: Direkte Pushes auf main sind blockiert. Alle Änderungen laufen über PRs.
Workflow | Auslöser | Runner | Was |
| Jeder PR + Push auf main | GitHub-gehostet | Unit- und Vertragstests, ruff lint + format |
| Opt-in (Label oder manuell) | Selbstgehostet | 28 LLM-Evals über claude CLI |
| Push auf | GitHub-gehostet | release-please-PR; bei dessen Merge Build + Veröffentlichung auf PyPI |
Die LLM-Eval-Suite ist teuer (~$3-5, ~10 Min.) und selbstgehostet, läuft also nie automatisch. Ein pfadbasierter Auslöser kann eine echte Prompt-Änderung nicht von einer kosmetischen Neuformatierung unterscheiden. Führen Sie sie bewusst aus, wenn Sie die Semantik von Prompts oder Tool-Beschreibungen ändern:
Fügen Sie das
run-llm-evals-Label zum PR hinzu. Sie läuft und läuft bei jedem Push erneut, solange das Label vorhanden ist.Oder lösen Sie sie manuell über den Tab „Actions“ aus (
workflow_dispatch).Oder führen Sie sie lokal ohne den Runner aus:
pytest evals/llm/ -v.
Ohne Label oder manuelle Auslösung wird der Job übersprungen (kein Runner wird zugewiesen, keine Kosten).
Anpassen des Eval-Setups
Wenn Sie keinen selbstgehosteten Runner möchten: Entfernen Sie .github/workflows/llm-evals.yml und führen Sie pytest evals/llm/ -v lokal aus, bevor Sie Prompt-Änderungen mergen.
Wenn Sie LLM-Evals bei jedem PR automatisch möchten: Fügen Sie einen pull_request-Auslöser mit dem entsprechenden paths:-Filter hinzu und entfernen Sie das Label-Gate im if: des Jobs. Rechnen Sie aber mit unbeabsichtigten Auslösungen durch reine Formatierungsänderungen.
So ändern Sie das Standard-Eval-Modell: Setzen Sie EVAL_MODEL in Ihrer Umgebung oder in der Workflow-Datei. Standard ist haiku aus Geschwindigkeits-/Kostengründen.
So richten Sie einen selbstgehosteten Runner ein:
# Get a registration token
gh api repos/OWNER/REPO/actions/runners/registration-token -X POST -q '.token'
# Download and configure
mkdir -p ~/.github-runners/slipbox-mcp && cd ~/.github-runners/slipbox-mcp
curl -sL -o actions-runner.tar.gz https://github.com/actions/runner/releases/latest/download/actions-runner-osx-arm64-2.325.0.tar.gz
tar xzf actions-runner.tar.gz
./config.sh --url https://github.com/OWNER/REPO --token <TOKEN> --unattended
nohup ./run.sh &Veröffentlichung auf PyPI
Releases sind automatisiert. Der Release-Workflow (.github/workflows/release.yml) führt bei jedem Push auf main release-please aus und veröffentlicht über PyPI Trusted Publishing (OIDC, sodass kein API-Token in den Repo-Secrets gespeichert wird).
Der Ablauf (Sie bearbeiten niemals eine Version von Hand oder pushen einen Tag):
Landen Sie Änderungen auf
mainmit Conventional Commit-Nachrichten (feat:→ Minor-Bump,fix:→ Patch,feat!:/BREAKING CHANGE:→ Major). Die Commit-Hooks des Repos erzwingen diese Form bereits.release-please hält einen dauerhaften „Release-PR“ offen, der den nächsten Versionssprung (in
src/slipbox_mcp/__init__.py) und die aus diesen Commits abgeleitetenCHANGELOG.md-Einträge ansammelt.Wenn Sie bereit sind zu veröffentlichen, mergen Sie den Release-PR. Das taggt das Release (
v<version>) und baut im selben Workflow-Lauf das sdist + Wheel, führttwine checkaus und veröffentlicht auf PyPI.
Ein Release zu erstellen ist also ein Klick: Mergen Sie den PR des Bots. Sonst nichts.
Commit-Typen bestimmen die Version. Geben Sie sie also genau an. Der Versionssprung wird mechanisch aus den Conventional-Commit-Präfixen seit dem letzten Release berechnet, nicht aus der Größe der Änderung. Reservieren Sie feat:/fix: für Änderungen am ausgelieferten Paket; verwenden Sie für alles andere die nicht veröffentlichenden Typen:
Prefix | Auswirkung auf Version | Verwendung |
| minor (1.3.0 → 1.4.0) | neue Laufzeitfähigkeit im Paket |
| patch (1.3.0 → 1.3.1) | Fehlerbehebung im Paket |
| major (1.3.0 → 2.0.0) | abwärtsinkompatible Änderung |
| keine | Doku, Tooling, CI, Packaging, nur interne Änderungen |
Ein Stapel mit nur nicht veröffentlichenden Commits erzeugt überhaupt keinen Release-PR. Der Titel des Squash-Merges ist der Commit, den release-please liest, also zählt das Präfix des PR-Titels. Beschriften Sie ihn nach dem, was das Paket gewinnt, nicht nach dem aufgewendeten Aufwand.
Einmalige Einrichtung (für dieses Repo bereits erledigt, für Forks dokumentiert):
Registrieren Sie auf PyPI einen Pending Trusted Publisher für das Projekt
slipbox-mcp: Owner:jamesfishwick· Repository:slipbox-mcp· Workflow:release.yml· Environment:release. Alle vier müssen exakt übereinstimmen.Erstellen Sie in GitHub eine Umgebung namens
release(Settings → Environments). Wenn Sie ihre Deployment-Refs einschränken, fügen Sie eine Tag-Regelv*hinzu (eine Branch-Regel mit demselben Namen passt nicht auf den Tag).
Die Version ist genau einmal definiert, in
src/slipbox_mcp/__init__.py(release-please erhöht sie; der Marker# x-release-please-versionteilt mit, welche Zeile gemeint ist).pyproject.toml(dynamic = ["version"]) undserver_versiondes Servers lesen beide daraus, sodass nichts synchron gehalten werden muss; der Tag, den release-please erstellt, stimmt konstruktionsbedingt immer mit der Paketversion überein.
Um einen Build ohne Veröffentlichung zu proben, führen Sie ihn von Hand aus: python -m build && twine check dist/* (und twine upload --repository testpypi dist/* mit einem TestPyPI-Token, um den Upload als Trockenlauf auszuführen).
Gemeinsame Prompt-Konstanten
Alle Tool-Beschreibungen und Prompt-Vorlagen liegen in src/slipbox_mcp/server/descriptions.py. Sowohl der MCP-Server als auch die Eval-Tests importieren aus dieser einzigen maßgeblichen Quelle. Wenn Sie einen Prompt ändern, testen die Evals, ob das LLM mit der neuen Formulierung weiterhin korrekt funktioniert.
Debug-Logging
SLIPBOX_LOG_LEVEL=DEBUG python -c "from slipbox_mcp.main import main; main()"CLI-Tool
Der Befehl slipbox bietet Terminalzugriff für mechanische Vorgänge:
slipbox status # Overview of notes, tags, orphans, pending clusters
slipbox search <query> # Find notes by text
slipbox clusters # Show pending structure note candidates
slipbox orphans # List unconnected notes
slipbox rebuild # Rebuild index (add --clusters to refresh cluster analysis)
slipbox export <id> # Export note markdown to stdout
slipbox tags # List all tags with usage countsInstallation: pipx install --editable . (fügt slipbox zu Ihrem PATH hinzu)
Experimentell: Slipbox als Agenten-Gedächtnis
Eine ungetestete Hypothese, keine empfohlene Einrichtung. Alles oben Genannte hilft einem Agenten, Ihr Wissen zu verwalten. Das kehrt es um: Der Agent nutzt eine Slipbox als sein eigenes persistentes Gedächtnis über Sitzungen hinweg, anstelle von nativem Speicher oder einer Regeldatei.
Das Modell hat kein Gedächtnis zwischen Sitzungen, also ist die Slipbox der einzige Kanal, den eine Sitzung für die nächste hinterlässt. Es schreibt Briefings für einen kalten Nachfolger (einen Fehler und warum, eine wiederkehrende Einschränkung, eine Korrektur, eine mühsam errungene Tatsache), taggt sie mit agent-memory und durchsucht dieses Tag, bevor es handelt. Die Wette ist, dass ein vernetztes Gedächtnis eine flache Regeldatei schlägt, weil man es durch Traversal abruft.
Drei Dinge sollten Sie zuerst wissen: Die Namespace-Isolation ist eine Tag-Konvention, nicht erzwungen, also führen Sie es gegen eine separate Slipbox-Instanz aus; „memory“ ist eine irreführende Bezeichnung, da nichts außer den Notizen selbst bestehen bleibt; und die Wachstums-Disziplin ist der unbewiesene Teil, also rechnen Sie beim ersten Lauf mit Ausuferung. Vollständige Ausarbeitung und Einschränkungen: Slipbox as Agent Self-Memory.
Dokumentation
Dokument | Inhalt |
Notiz-ID-Format, die fünf Notiztypen und ein einseitiger Spickzettel für die Methode. | |
Denselben Workflow manuell in Obsidian ausführen, ohne Agent. | |
Wie Slipbox-Links auf | |
Welche anderen Tools denselben Vault lesen und schreiben können. | |
Die Opt-in-Autonomieschicht: Auto-Capture, Cluster-Erkennung und das Agenten-Gedächtnis-Experiment. | |
Eine durchgearbeitete Sitzung, die die verwendeten Tools zeigt. |
Mitwirken
Siehe CONTRIBUTING.md für Einrichtungsanweisungen, Codestandards und wie Sie Änderungen einreichen.
Roadmap
Siehe ROADMAP.md für geplante Funktionen und die zukünftige Ausrichtung.
Sponsor
Wenn Ihnen slipbox-mcp nützlich ist, erwägen Sie, das Projekt zu sponsern.
Lizenz
MIT
Available Tools
19 toolsslipbox_create_linkA
Create a semantic link between two notes.
Links are directional: source -> target. Use bidirectional=true for important relationships (automatically creates inverse link type).
Link Types:
reference: Generic "see also" connection
extends: Source builds upon target (inverse: extended_by)
refines: Source clarifies or improves target (inverse: refined_by)
contradicts: Source presents opposing view (inverse: contradicted_by)
questions: Source raises questions about target (inverse: questioned_by)
supports: Source provides evidence for target (inverse: supported_by)
related: Loose thematic connection (symmetric)
Best Practices:
Always add description explaining WHY notes are linked
Use bidirectional=true for substantive relationships
Create links immediately after creating notes
Args: source_id: ID of the source note (the note doing the linking) target_id: ID of the target note (the note being linked to) link_type: One of reference/extends/refines/contradicts/questions/supports/related description: Brief explanation of the relationship bidirectional: If true, creates inverse link from target to source
| Name | Required | Description | Default |
|---|---|---|---|
| link_type | No | reference | |
| source_id | Yes | ||
| target_id | Yes | ||
| description | No | ||
| bidirectional | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It explains directionality (source -> target), the automatic inverse link when bidirectional=true, and enumerates all link types with their inverses. This covers core behavior well, though it omits details about error handling or note existence validation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections for purpose, link types, best practices, and args. It is fairly long but every sentence is informative and avoids redundancy, making it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
It covers all essential details for correct invocation: direction, link types, bidirectional behavior, parameter meanings, and best practices. The existence of an output schema means return values need not be explained. It lacks edge-case details (e.g., duplicate links), but that is not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (schema only gives types and defaults), but the description fully compensates by explaining each parameter, including the valid values for link_type and the meaning of bidirectional. This adds significant semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: creating a semantic link between two notes. It distinguishes itself from sibling tools like slipbox_delete_link and slipbox_get_linked_notes by focusing on the create operation, and it adds nuance with directionality and link type semantics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides best practices (e.g., 'Create links immediately after creating notes') and explains when to use bidirectional=true, giving clear contextual guidance. However, it does not explicitly compare to alternatives like slipbox_remove_link or slipbox_get_linked_notes, which is a minor gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slipbox_create_noteA
Create a new atomic Zettelkasten note.
Each note should contain exactly one idea. After creating, immediately
link to related notes using slipbox_create_link.
Note Types:
- fleeting: Quick captures, unprocessed thoughts (process within 24-48 hours)
- literature: Ideas extracted from sources. REQUIRES at least one entry
in references (citation or URL). If you don't yet have the citation,
use 'fleeting' as a staging type and promote to 'literature' once
the source is attached.
- permanent: Refined ideas in the user's own words (the core of your Zettelkasten)
- structure: Maps organizing 7-15 related notes on a topic
- hub: Entry points into major knowledge domains
Authoring:
- Store `content` exactly as the user provided it. Do NOT rewrite,
expand, or restructure their words. Compose or refine content only
when explicitly asked (e.g. "draft", "refine", "make it standalone").
Best Practices:
- Title should express the idea in brief (understandable without reading content)
- A refined permanent note typically runs 3-7 paragraphs and stands
alone; match the length of what the user gave you, though — a
one-line capture stays one line.
- Use 2-5 specific tags; prefer existing tags when they fit
- Search first (slipbox_search_notes) to avoid duplicating existing notes
Args:
title: Concise title expressing the core idea
content: Full note content in markdown
note_type: One of fleeting/literature/permanent/structure/hub (default: permanent)
tags: Comma-separated tags, e.g. "poetry,revision,craft"
references: Newline-separated citations to external sources (e.g. "Ahrens, S. (2017). How to Take Smart Notes.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| title | Yes | ||
| content | Yes | ||
| note_type | No | permanent | |
| references | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden and excels: it mandates exact content preservation ('Store content exactly as the user provided it'), explains note type behavior, requires references for literature notes, and warns against rewriting unless explicitly asked. This goes far beyond what the schema alone conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but appropriately structured into labeled sections (Note Types, Authoring, Best Practices, Args), with every section adding practical guidance. The core purpose is front-loaded in the first sentence, and the Args section maps cleanly to the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex creation tool with no annotations, the description covers note type semantics, staging workflow, content fidelity, tagging, duplicate avoidance, linking, and parameter formats. An agent has enough context to invoke it correctly without needing return-value details, especially since an output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description is the only source of parameter meaning. It defines title, content, note_type, tags, and references with formats, examples, defaults, and type-specific constraints, fully compensating for the empty schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Create a new atomic Zettelkasten note,' a specific verb, resource, and core constraint. It clearly differentiates itself from siblings like slipbox_create_link and slipbox_update_note by focusing on note creation and atomicity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance: search first with slipbox_search_notes to avoid duplicates, create links immediately after with slipbox_create_link, and use 'fleeting' as a staging type when citations are missing. These are concrete when/when-not and alternative-tool instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slipbox_create_structure_from_clusterA
Create a structure note from a detected cluster.
Generates a structure note organizing all notes in the cluster, with bidirectional links to each member note.
Run slipbox_get_cluster_report first to see available clusters and their IDs.
Args: cluster_id: ID from cluster report (e.g. "jackson-mac-low-chance-operations") title: Override the suggested title (optional) create_links: Create bidirectional links to member notes (default: true)
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| cluster_id | Yes | ||
| create_links | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the behavioral burden. It discloses that the tool generates a structure note, organizes all member notes, and creates bidirectional links, and it notes the default create_links behavior in Args. It does not discuss failure modes or side effects on the cluster state, but for a creation operation the core behavior is transparent enough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded, the prerequisite is in a short sentence, and the Args section is scannable. There is minor redundancy between the opening sentence and 'Generates a structure note...', but the added detail about bidirectional links earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the agent does not need the description to explain return values. The description covers the prerequisite, the behavior, and all parameters, which is sufficient for a 3-parameter creation tool with no nested objects. It does not address potential errors like invalid cluster IDs, but that is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must explain all parameters. It does: cluster_id is defined as an ID from the cluster report with a concrete example, title is an optional override of the suggested title, and create_links is explained with its default true. This fully compensates for the empty schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Create a structure note from a detected cluster.' It further clarifies that it organizes all notes in the cluster and creates bidirectional links, which distinguishes it from generic slipbox_create_note and from cluster-management siblings like slipbox_dismiss_cluster.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete prerequisite: 'Run slipbox_get_cluster_report first to see available clusters and their IDs.' This tells an agent when in the workflow to call the tool. It does not explicitly state when not to use it or name alternatives, so it falls short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slipbox_delete_linkA
Delete a specific link from one note to another.
Unlike slipbox_remove_link, this tool returns an error if no link exists between the two notes.
Args: source_id: ID of the source note (the note containing the link) target_id: ID of the target note (the note being linked to)
| Name | Required | Description | Default |
|---|---|---|---|
| source_id | Yes | ||
| target_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of disclosing behavior. It clearly conveys deletion and adds a meaningful edge-case behavior: it errors when no link exists. It does not discuss side effects, permissions, or reversibility, but for a targeted link deletion this is reasonably transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, with the primary action first, the differentiating behavior second, and parameter explanations last. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool, the description covers the action, the key error condition, both parameter roles, and the distinction from the closest sibling. An output schema exists, so return-value details do not need to be spelled out here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description fully compensates by explaining both parameters: source_id is the note containing the link, and target_id is the note being linked to. This adds real meaning beyond the bare schema property names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Delete a specific link from one note to another.' It also distinguishes itself from the sibling slipbox_remove_link by noting its error behavior, so an agent can tell the two apart without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names the sibling slipbox_remove_link and explains the key difference: this tool returns an error if no link exists. This makes the choice between the two tools clear, though it stops short of stating an explicit 'use this when you need...' rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slipbox_delete_noteA
Delete a note permanently.
Warning: This also removes all links to and from this note. Consider updating note_type to "fleeting" instead if uncertain.
Args: note_id: The ID of the note to delete
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It warns that the deletion is permanent and that 'This also removes all links to and from this note', which are the critical side effects an agent must know before invoking the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the purpose and the destructive warning appear immediately, and the Args section is minimal without unnecessary padding. Every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no annotations, the description covers the essential facts: irreversible deletion, link side effects, and a safer alternative. An output schema exists, so return-value documentation is not required, and nothing necessary for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the single parameter. However, it only restates 'The ID of the note to delete', which adds little beyond the parameter name 'note_id'. It omits any guidance on the ID format, where to obtain it, or whether any validation constraints apply.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Delete a note permanently' – a specific verb, resource, and degree of effect. It distinguishes this from slipbox_delete_link and slipbox_update_note, and the context makes the destructive scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly advises 'Consider updating note_type to "fleeting" instead if uncertain', naming a concrete alternative for the uncertain case. This gives clear when-to-use and when-not-to-use guidance, with no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slipbox_dismiss_clusterA
Permanently dismiss a cluster from maintenance suggestions.
Use this when a cluster has been reviewed and determined not to need a structure note, or when the user doesn't want to be reminded about it.
Args: cluster_id: The cluster ID to dismiss (e.g. "poetry-craft-revision")
| Name | Required | Description | Default |
|---|---|---|---|
| cluster_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of disclosing safety and effects. It clearly states the action is 'permanently' applied and scoped to maintenance suggestions, which indicates irreversibility. It could go further by clarifying that no notes are deleted, but the permanence and scope are sufficiently conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it states the core purpose in the first sentence, gives a short usage rationale, and includes a minimal Args section with an example. No sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one required parameter and an output schema present, so return-value details are unnecessary. The description covers purpose, usage timing, permanence, and parameter example. A small gap is that it does not tell the user how to discover cluster IDs, but that is likely covered by sibling tools like get_cluster_report.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for cluster_id, so the description must compensate. It adds a concrete example ('poetry-craft-revision') and identifies the parameter as a cluster ID, but beyond that it mostly restates the parameter name. For a single simple string parameter, this is adequate but not enriching.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('dismiss') with a clear resource ('cluster') and scope ('from maintenance suggestions'). It clearly distinguishes this from sibling tools like create_structure_from_cluster by positioning it as the 'don't remind me' action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: after a cluster has been reviewed and determined not to need a structure note, or when the user doesn't want reminders. It provides clear context but does not name or exclude specific alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slipbox_find_central_notesA
Find the most connected notes in the Zettelkasten.
Central notes have the most incoming and outgoing links, making them key hubs in your knowledge network. Good candidates for hub notes.
Args: limit: Maximum results (default: 10)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It conveys a non-mutating query ('Find') and explains the central-note concept via incoming/outgoing links, but it does not state how results are ordered, how ties are handled, or whether 'limit' truncates a fully computed ranking. These are moderate gaps for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and keeps explanatory text to two useful sentences before the Args block. It is compact and readable, though the Args section mostly duplicates the schema's default value rather than adding new information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-optional-parameter tool with an output schema and no annotations, the description covers the essential purpose, the definition of central notes, and the limit parameter. It does not detail sorting or algorithm internals, but those are unlikely to be required for correct invocation; the main missing piece is explicit sibling-tool routing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has only one parameter with 0% description coverage, and the description adds 'Maximum results (default: 10)', which clarifies that limit means result count and matches the schema default. It provides no guidance on allowed ranges, zero/negative values, or truncation behavior, but the parameter is simple enough that this is only a minor gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Find the most connected notes in the Zettelkasten', a specific verb+resource statement, then defines central notes as hubs with the most incoming and outgoing links. This clearly distinguishes the tool from siblings like find_orphaned_notes or find_similar_notes by focusing on graph centrality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Good candidates for hub notes' implies the intended use case of identifying key knowledge hubs. However, it never explicitly tells an agent when to prefer this tool over the many sibling search/find tools, nor when not to use it, so the guidance is implied rather than fully actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slipbox_find_orphaned_notesA
Find notes with no connections to other notes.
Orphaned notes represent unintegrated knowledge. Review these periodically to either link them to existing notes or identify candidates for deletion.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of disclosing behavior. It correctly implies a read-only operation via the verb 'Find' and adds the interpretive context that orphaned notes represent unintegrated knowledge. However, it does not explicitly state side-effect freedom, output behavior, or other operational traits beyond the core result.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loads the primary function in the first sentence, and each subsequent sentence adds meaningful context about why orphaned notes matter and what to do with the results. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only discovery tool with an output schema available, the description covers what the tool returns, why it matters, and how to act on the results. Nothing essential for invoking it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema coverage is 100%, so parameter documentation is unnecessary. Baseline for 0 params is 4; the description adds no parameter details but none are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Find notes with no connections to other notes.' This clearly distinguishes the tool from siblings like slipbox_find_similar_notes and slipbox_find_central_notes, because it targets a unique criterion: absence of connections.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: 'Review these periodically to either link them to existing notes or identify candidates for deletion.' It does not explicitly name alternative tools or state when not to use it, but the periodic-review purpose is useful and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slipbox_find_similar_notesA
Find notes similar to a given note.
Similarity is based on shared tags, common links, and content overlap. Useful for discovering connections you might have missed.
Args: note_id: ID of the reference note threshold: Minimum similarity score 0.0-1.0 (default: 0.3) limit: Maximum results (default: 5)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| note_id | Yes | ||
| threshold | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a read-only operation through 'Find', but it does not explicitly state that it does not modify notes or that it is non-destructive. It does explain the similarity basis, which adds useful behavioral context, but it omits details about error behavior (e.g., missing note_id) or any side effects. The read-only nature is implied, not confirmed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured. The primary purpose is front-loaded in the first sentence, followed by a brief explanation of similarity logic and then a clear Args list. No redundant or filler content; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only query tool with an output schema, the description covers the core purpose, similarity logic, and parameters. It does not mention result ordering, behavior on nonexistent note_id, or any limitations, but these are minor given the output schema exists and the tool is straightforward. The description is nearly complete; a small gap is the lack of explicit note that the note must exist or that results are returned in any particular order.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameters. It does so thoroughly in the Args section: note_id as 'ID of the reference note', threshold as 'Minimum similarity score 0.0-1.0 (default: 0.3)', and limit as 'Maximum results (default: 5)'. This adds meaning beyond the bare schema, including ranges and defaults, fully enabling correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Find notes similar to a given note' with a specific verb (Find) and resource (notes similar to a reference). It further distinguishes itself from sibling tools by specifying similarity criteria (shared tags, common links, content overlap), making it distinct from search, central, or orphaned note tools. No ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a usage hint: 'Useful for discovering connections you might have missed.' This implies when to use it, but it does not explicitly contrast it with alternatives like slipbox_search_notes or slipbox_get_linked_notes. There is no explicit statement of when not to use this tool or what conditions select it over siblings. The guidance is implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slipbox_get_all_tagsA
Get all tags in the Zettelkasten.
Returns alphabetically sorted list of all tags. Use this to find existing tags before creating new notes to maintain tag consistency across your knowledge base.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the burden of behavioral disclosure. It transparently states the read-only nature through the verb 'Get', discloses the alphabetical sorting behavior, and implies no side effects, which is sufficient for this simple tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tight and front-loaded: purpose sentence, output behavior sentence, and usage guidance sentence. Every sentence contributes essential information with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool with an output schema, the description is fully sufficient. It explains what is returned, the ordering, and when to use it, leaving no operational ambiguity for an agent deciding to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters)Skip, so there is no parameter semantics to explain. The schema coverage is effectively complete for an empty properties object, and the description adds value by describing the result rather than needing to describe inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair ('Get all tags in the Zettelkasten') and defines the output as an alphabetically sorted list. This clearly distinguishes it from sibling tools that operate on notes or links rather than tags.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises using this tool before creating new notes to ensure tag consistency, giving a concrete when-to-use scenario. It does not explicitly name alternatives or state when not to use it, but the context is clear for a simple zero-parameter getter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slipbox_get_cluster_reportA
Get pending cluster analysis for structure note creation.
Clusters are groups of notes sharing tags but lacking a structure note. High-scoring clusters are good candidates for new structure notes.
Uses cached analysis by default. Set refresh=true to regenerate. Cluster analysis runs automatically via cron if configured.
Scoring factors:
Note count (7-15 is ideal, >15 is overdue)
Orphan ratio (more orphans = more urgent)
Internal link density (fewer links = needs structure)
Recency (recent activity = active domain)
Args: min_score: Minimum cluster score 0.0-1.0 (default: 0.5) limit: Maximum clusters to return (default: 5) include_notes: Include full note list per cluster (default: false) refresh: Force regeneration of cluster analysis (default: false)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| refresh | No | ||
| min_score | No | ||
| include_notes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses caching (default) and refresh behavior, automatic cron execution, and the scoring factors that influence results. It does not explicitly state that the operation is read-only (aside from the word 'get'), nor does it mention any auth or rate-limit requirements. Still, the disclosure of caching, refresh side effects, and scoring logic goes well beyond the schema, so a 4 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a one-sentence purpose, a brief explanation, a bulleted list of scoring factors, and a clear Args block. It is not bloated, but the scoring factors could arguably be moved to a separate section without harming clarity. It is front-loaded with the core purpose, so it earns a 4.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (which covers return values) and the fact that all four parameters are fully explained in the description, the tool is complete. The description covers purpose, behavior, scoring, and parameter semantics. No critical missing pieces like error handling or timeouts are necessary because the output schema and the tool's simple nature make them non-essential.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully compensate. It does: the 'Args' section explains each parameter with meaning and range (min_score 0.0-1.0), behavior (limit max clusters), and implications (include_notes, refresh). This adds significant value beyond the bare schema types and defaults, making it clear how each parameter affects the result.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear, specific statement: 'Get pending cluster analysis for structure note creation.' It then explains what clusters are and how they relate to structure notes, distinguishing this tool from siblings like slipbox_refresh_clusters and slipbox_create_structure_from_cluster. The verb 'get' and the resource 'cluster analysis' are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides strong contextual guidance: it explains that high-scoring clusters are candidates for structure notes, and mentions the caching behavior and automatic cron runs. However, it does not explicitly compare this tool to siblings like slipbox_refresh_clusters or slipbox_dismiss_cluster, nor does it state when to use an alternative. The guidance is implied rather than explicit, so it earns a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slipbox_get_linked_notesA
Get notes linked to or from a specific note.
Use this to explore the knowledge graph around a note.
Directions:
outgoing: Notes this note links TO
incoming: Notes that link TO this note
both: All connected notes in either direction
Args: note_id: ID of the note to explore from direction: One of outgoing/incoming/both (default: both)
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | ||
| direction | No | both |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the behavioral disclosure burden. It explains what the tool returns (linked notes), how direction affects the result set, and the default 'both' behavior. The imperative 'Get' implies a read-only operation, and no conflicting destructive behavior is suggested.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, followed by a usage hint, a compact direction list, and an Args block. Every sentence adds useful information; there is no filler or over-elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema available and only two parameters, the description covers the behavioral purpose, parameter semantics, directions, and default value. The only minor gap is the absence of explicit guidance on when to prefer sibling graph-analysis tools, but this does not block correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so parameter documentation falls entirely on the description. It explains note_id as the starting point and direction with its allowed values and default. It could add more constraints for note_id, but the provided semantics are sufficient for a two-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a precise verb-resource pair: 'Get notes linked to or from a specific note.' It defines outgoing/incoming/both directions and frames the tool as knowledge-graph exploration, clearly distinguishing it from single-note retrieval or search tools like slipbox_get_note or slipbox_search_notes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this to explore the knowledge graph around a note' gives a clear context for when to call it, and the direction definitions clarify the kind of traversal intended. It does not explicitly say when not to use it or name a sibling alternative, but the intended use is evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slipbox_get_noteA
Retrieve a note by ID or title.
Returns full note content including metadata, tags, and links. Use this to read note contents before creating links or updates.
Args: identifier: Either the note ID (e.g. "20251217T172432480464000") or exact title
| Name | Required | Description | Default |
|---|---|---|---|
| identifier | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It effectively communicates read-only behavior and details what the response contains ('full note content including metadata, tags, and links'), which goes beyond the schema. It does not cover failure modes such as missing identifiers, but this is a minor gap for a simple retrieval tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded, and every line earns its place: purpose, return contents, usage guidance, and parameter meaning. No filler or irrelevant detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with an output schema present, the description covers the essential aspects: what the tool does, how to identify the note, and when to use it. It lacks explicit not-found or error behavior, but that is not critical for normal invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the bare 'identifier' parameter. It does so by explaining that the identifier can be a note ID or exact title and gives a concrete ID format example. Ambiguity handling between the two forms is not addressed, but the compensation is strong for a single parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action ('Retrieve a note') with resource and lookup method ('by ID or title'), and clarifies the result includes full content, metadata, tags, and links. This clearly differentiates it from sibling read tools like search_notes or get_linked_notes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use this tool 'to read note contents before creating links or updates,' which is a clear usage context tied to relevant siblings. It does not mention when NOT to use it or name alternatives, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slipbox_list_notes_by_dateA
List notes by creation or update date.
Useful for reviewing recent work or finding notes from a specific period.
Args: start_date: Start date in ISO format YYYY-MM-DD (optional) end_date: End date in ISO format YYYY-MM-DD (optional) use_updated: If true, filter by updated_at instead of created_at (default: false) limit: Maximum results (default: 10)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| end_date | No | ||
| start_date | No | ||
| use_updated | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It explains filtering by created_at or updated_at, optional date bounds, and the default limit. However, it does not disclose result ordering, how date boundaries are handled, or pagination behavior, leaving some uncertainty about exact behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the primary action, and organized with a clear Args block. It is slightly redundant with the schema's property definitions, but since the schema lacks descriptions, the explicit parameter documentation is justified and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool with an output schema, the description covers the essential invocation details and parameter semantics. It does not discuss ordering or edge cases, but the output schema and the simplicity of the operation make the definition sufficiently complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully compensate. It explains every parameter beyond the raw schema: ISO date format for start_date/end_date, the true/false semantics of use_updated, and the default limit. This is exactly the kind of parameter-level guidance an agent needs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List notes by creation or update date.' This makes the tool's purpose immediately clear and distinguishes it from content-based or similarity-based sibling tools. It also gives practical use cases, reinforcing what the tool is for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states when the tool is appropriate: 'Useful for reviewing recent work or finding notes from a specific period.' It provides clear context, though it does not explicitly point to alternatives such as slipbox_search_notes for content-based lookup or when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slipbox_rebuild_indexA
Rebuild the database index from markdown files.
Use this if notes were edited outside the MCP server or if the database seems out of sync with the filesystem.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden of behavioral disclosure. It states what the tool does (rebuild index) but does not reveal any side effects, such as whether it overwrites the existing index, if it destroys data, if it requires exclusive access, or if it is safe to run concurrently. For a maintenance operation that modifies state, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero wasted words. The action is front-loaded, and the usage context is delivered in the second sentence. It is appropriately concise for a zero-parameter maintenance tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no parameters and an output schema present, the description provides the essential trigger conditions. However, it omits behavioral details like whether the operation is destructive, if it locks the database, or if it can be run while other operations are in progress. Given no annotations, the description should disclose more about the operation's impact, so a 3 is appropriate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so according to the scoring rule the baseline is 4. The description adds no parameter-specific information, but none is needed; the schema already confirms an empty parameter set. The description's clarity about the action suffices.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('rebuild'), resource ('database index'), and source ('from markdown files'), which clearly distinguishes it from sibling tools that handle notes, links, clusters, or searches. There is no other rebuild-oriented sibling, so the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: when notes were edited outside the MCP server or the database seems out of sync with the filesystem. It provides clear context for invocation but does not mention alternatives or exclusions, which is acceptable since this is a unique maintenance operation with no direct sibling alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slipbox_refresh_clustersA
Regenerate cluster analysis and save report.
Analyzes all notes for emergent clusters based on:
Tag co-occurrence (tags that frequently appear together)
Connection patterns (notes that link to each other)
Structure note coverage (which clusters already have structure notes)
Results saved to cluster-analysis.json next to the vault's SQLite index (or SLIPBOX_CLUSTER_REPORT_PATH when set)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It clearly states the tool scans all notes, uses three clustering signals, and writes results to cluster-analysis.json or SLIPBOX_CLUSTER_REPORT_PATH. It does not explicitly say whether the existing report is overwritten or whether the SQLite index must exist, but the 'regenerate' and 'saved to' language covers the primary side effect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence is a crisp summary, followed by a scannable bulleted list of analysis criteria and a clear statement of the output location. Every sentence adds necessary information with no repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter command with an output schema available, the description provides the essential execution facts: what is analyzed, how clusters are formed, and where the report is written. It would be slightly stronger with an explicit pointer to slipbox_get_cluster_report for reading the saved report, but that gap does not block correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the empty schema is fully self-documenting, so the baseline of 4 applies. The description enhances understanding by explaining what the analysis is based on, even though there are no parameter meanings to clarify.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a specific operation ('Regenerate cluster analysis and save report'), and the bulleted list defines the analysis scope. This distinguishes it from siblings like slipbox_get_cluster_report and slipbox_dismiss_cluster by focusing on regeneration and report writing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this should be used when refreshed cluster analysis is needed, and it states the analysis dimensions. However, it does not explicitly contrast it with slipbox_get_cluster_report for reading existing reports or mention any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slipbox_remove_linkB
Remove a link between two notes.
Args: source_id: ID of the source note target_id: ID of the target note bidirectional: If true, removes links in both directions
| Name | Required | Description | Default |
|---|---|---|---|
| source_id | Yes | ||
| target_id | Yes | ||
| bidirectional | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It states the removal operation and the bidirectional option, but does not disclose idempotency, behavior when the link does not exist, side effects, or whether the operation is reversible—important gaps for a destructive action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: one clear purpose sentence followed by a scannable argument list. There is no filler or repetition beyond the necessary parameter explanations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter scalar tool with an output schema, the core invocation is understandable. However, the lack of sibling differentiation and the absence of behavioral guidance around a destructive operation make the description incomplete for a fully informed tool selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description adds definitions for source_id, target_id, and bidirectional, which is helpful. However, the definitions are minimal and mostly restate the parameter names; they do not specify ID formats, lookup semantics, or additional constraints beyond what the schema already shows.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action and resource: 'Remove a link between two notes.' However, it does not differentiate this tool from the sibling slipbox_delete_link, which appears to have an overlapping purpose, so it stops short of full sibling-level clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to use this tool instead of slipbox_delete_link or any other alternative. It only explains parameters, leaving the agent to infer the intended context from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slipbox_search_notesA
Search for notes by text, tags, or type.
Searches across titles and content. Combine parameters for precise filtering.
Examples:
Search by topic: query="poetry revision"
Filter by tag: tags="craft,poetry"
Find structure notes: note_type="structure"
Combined: query="metaphor" tags="poetry" limit=5
Args: query: Text to search in titles and content (optional) tags: Comma-separated tags to filter by, e.g. "poetry,craft" (optional) note_type: Filter by type: fleeting/literature/permanent/structure/hub (optional) limit: Maximum results to return (default: 10)
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| limit | No | ||
| query | No | ||
| note_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not mention any side effects, permissions, ordering, pagination, or behavior when no query is supplied (e.g., returns all notes). It only states the action, not the consequences or edge cases. This is a significant gap for a search tool that could return unexpected results if called with empty parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening sentence, followed by explanatory text and a formatted Args section. It uses examples to illustrate usage without being verbose. It could be slightly more concise in the intro, but the structure is logical and front-loaded with the core purpose. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 optional parameters and no required ones, the description covers each parameter's semantics well. However, it omits edge-case behavior such as what happens with no parameters (does it return all notes?) or how results are ordered. Since an output schema exists, return format is covered, but behavioral edge cases are not. It's adequate for basic usage but leaves some ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameters. It does this thoroughly: query searches titles and content, tags are comma-separated, note_type lists allowed values (fleeting/literature/permanent/structure/hub), and limit has a default of 10. Examples illustrate parameter combinations. This adds substantial meaning beyond the schema's minimal type/default information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Search for notes by text, tags, or type' and elaborates that it searches across titles and content. This is specific and distinct from sibling tools like slipbox_get_note (retrieves a single note) or slipbox_list_notes_by_date (lists by date). The verb 'search' and resource 'notes' are explicit, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides concrete examples for each parameter combination, demonstrating when to use query, tags, note_type, and limit. It implies usage scenarios clearly. While it doesn't explicitly mention alternatives or when not to use this tool, the sibling tools have distinct purposes, so an agent can infer appropriate usage. It's strong but lacks explicit exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slipbox_update_noteA
Update an existing note.
Only provided fields are updated; omitted fields remain unchanged. Pass empty string for tags to clear all tags. Pass empty string for references to clear all references.
Constraint: notes with note_type='literature' must have at least one reference. If you are promoting a note to 'literature', pass the citation in references in the same call.
Args: note_id: The ID of the note to update title: New title (optional) content: New content (optional) note_type: New type: fleeting/literature/permanent/structure/hub (optional) tags: New comma-separated tags, or empty string to clear (optional) references: New newline-separated citations, or empty string to clear (optional)
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| title | No | ||
| content | No | ||
| note_id | Yes | ||
| note_type | No | ||
| references | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that omitted fields remain unchanged, that empty strings clear tags/references, and that literature notes require at least one reference. It does not cover error behavior for missing note_ids or response details, but the key behavioral traits are surfaced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well organized: behavioral notes come first, followed by a compact Args list. There is minor redundancy between the prose and the Args section regarding empty-string clearing, but no wasted sentences overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no schema descriptions, the description covers all six parameters plus the critical literature-reference constraint. An output schema exists, so return-value documentation is not required. It could add behavior for nonexistent notes, but the description is substantially complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the Args section fully compensates by explaining every parameter's meaning, allowed note_type values, comma-separated tags, newline-separated references, and empty-string clearing behavior. This is exactly the kind of parameter-level detail an agent needs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Update' and the resource 'existing note', so it is unambiguous that this tool mutates an existing slipbox note. It does not explicitly differentiate from siblings like slipbox_create_note or slipbox_delete_note, but the verb+resource combination leaves little room for confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys when to use the tool by explaining partial-update semantics and the promotion constraint to literature notes. It does not explicitly say 'use this instead of create/delete' or provide when-not-to-use guidance, but the context is clear enough that an agent can route appropriately.
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.
19 tool updates
v1.5.4- Changed
slipbox_create_link1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "title": "Result", + "type": "string" + } + }, + "required": [ + "result" + ], + "title": "slipbox_create_linkOutput", + "type": "object" +}
- Changed
slipbox_create_note1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "title": "Result", + "type": "string" + } + }, + "required": [ + "result" + ], + "title": "slipbox_create_noteOutput", + "type": "object" +}
- Changed
slipbox_create_structure_from_cluster1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "title": "Result", + "type": "string" + } + }, + "required": [ + "result" + ], + "title": "slipbox_create_structure_from_clusterOutput", + "type": "object" +}
- Changed
slipbox_delete_link1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "title": "Result", + "type": "string" + } + }, + "required": [ + "result" + ], + "title": "slipbox_delete_linkOutput", + "type": "object" +}
- Changed
slipbox_delete_note1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "title": "Result", + "type": "string" + } + }, + "required": [ + "result" + ], + "title": "slipbox_delete_noteOutput", + "type": "object" +}
- Changed
slipbox_dismiss_cluster1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "title": "Result", + "type": "string" + } + }, + "required": [ + "result" + ], + "title": "slipbox_dismiss_clusterOutput", + "type": "object" +}
- Changed
slipbox_find_central_notes1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "title": "Result", + "type": "string" + } + }, + "required": [ + "result" + ], + "title": "slipbox_find_central_notesOutput", + "type": "object" +}
- Changed
slipbox_find_orphaned_notes1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "title": "Result", + "type": "string" + } + }, + "required": [ + "result" + ], + "title": "slipbox_find_orphaned_notesOutput", + "type": "object" +}
- Changed
slipbox_find_similar_notes1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "title": "Result", + "type": "string" + } + }, + "required": [ + "result" + ], + "title": "slipbox_find_similar_notesOutput", + "type": "object" +}
- Changed
slipbox_get_all_tags1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "title": "Result", + "type": "string" + } + }, + "required": [ + "result" + ], + "title": "slipbox_get_all_tagsOutput", + "type": "object" +}
- Changed
slipbox_get_cluster_report1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "title": "Result", + "type": "string" + } + }, + "required": [ + "result" + ], + "title": "slipbox_get_cluster_reportOutput", + "type": "object" +}
- Changed
slipbox_get_linked_notes1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "title": "Result", + "type": "string" + } + }, + "required": [ + "result" + ], + "title": "slipbox_get_linked_notesOutput", + "type": "object" +}
- Changed
slipbox_get_note1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "title": "Result", + "type": "string" + } + }, + "required": [ + "result" + ], + "title": "slipbox_get_noteOutput", + "type": "object" +}
- Changed
slipbox_list_notes_by_date1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "title": "Result", + "type": "string" + } + }, + "required": [ + "result" + ], + "title": "slipbox_list_notes_by_dateOutput", + "type": "object" +}
- Changed
slipbox_rebuild_index1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "title": "Result", + "type": "string" + } + }, + "required": [ + "result" + ], + "title": "slipbox_rebuild_indexOutput", + "type": "object" +}
- Changed
slipbox_refresh_clusters1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "title": "Result", + "type": "string" + } + }, + "required": [ + "result" + ], + "title": "slipbox_refresh_clustersOutput", + "type": "object" +}
- Changed
slipbox_remove_link1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "title": "Result", + "type": "string" + } + }, + "required": [ + "result" + ], + "title": "slipbox_remove_linkOutput", + "type": "object" +}
- Changed
slipbox_search_notes1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "title": "Result", + "type": "string" + } + }, + "required": [ + "result" + ], + "title": "slipbox_search_notesOutput", + "type": "object" +}
- Changed
slipbox_update_note1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "title": "Result", + "type": "string" + } + }, + "required": [ + "result" + ], + "title": "slipbox_update_noteOutput", + "type": "object" +}
19 tool updates
v0.1.0- First observed
slipbox_create_link - First observed
slipbox_create_note - First observed
slipbox_create_structure_from_cluster - First observed
slipbox_delete_link - First observed
slipbox_delete_note - First observed
slipbox_dismiss_cluster - First observed
slipbox_find_central_notes - First observed
slipbox_find_orphaned_notes - First observed
slipbox_find_similar_notes - First observed
slipbox_get_all_tags - First observed
slipbox_get_cluster_report - First observed
slipbox_get_linked_notes - First observed
slipbox_get_note - First observed
slipbox_list_notes_by_date - First observed
slipbox_rebuild_index - First observed
slipbox_refresh_clusters - First observed
slipbox_remove_link - First observed
slipbox_search_notes - First observed
slipbox_update_note
TDQS
Scored across 19 tools
Most tools target a distinct resource/action, but slipbox_delete_link and slipbox_remove_link are near-duplicates that differ only in error behavior, and get_cluster_report with refresh=true overlaps with refresh_clusters. The descriptions clarify the differences, but an agent could still easily select the wrong tool.
Names consistently follow a slipbox_verb_noun pattern with clear domain vocabulary. Minor inconsistencies remain: delete_link vs remove_link use different verbs for the same logical operation, and search_notes sits alongside find_similar_notes, find_central_notes, and find_orphaned_notes.
At 19 tools, this is above the typical well-scoped range, but the extra surface is justified by distinct note CRUD, link management, graph analytics, and cluster maintenance features. It feels slightly heavy rather than bloated.
The server covers note and link lifecycles, search and tag discovery, graph analysis, and cluster-driven structure creation, so core Zettelkasten workflows are supported. Minor gaps exist, such as no dedicated list-all-notes tool and link edits requiring delete/recreate, but agents can work around them.
Maintenance
Related MCP Connectors
Markdown-based note-taking with a hosted MCP server. Your notes serve you and your AI.
Google Keep-style notes app with an MCP server for AI agents to read/write notes.
One memory, every AI. A shared, user-owned markdown memory your AI clients read and write over MCP.
Serve a folder of Markdown notes as an MCP server: hybrid search, reading, and sourced answers.
Related MCP Servers
- AlicenseCqualityFmaintenanceAn MCP server that integrates the zk note-taking system with LLMs, enabling users to search, read, create, and manage notes. It provides tools for link analysis, tag management, and complex note queries to interact with local knowledge bases.51MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that treats Obsidian vaults as knowledge graphs, enabling AI agents to traverse wikilinks, assemble token-budgeted context, and search with backlink awareness.3 npm1MIT
- AlicenseNot gradedqualityCmaintenanceA local-first MCP server that gives AI assistants long-term memory by storing, searching, and recalling notes as Markdown files on your machine.8 npmMIT
- AlicenseNot gradedqualityDmaintenanceA lightweight MCP server that enables AI assistants to securely read, create, and modify notes in an Obsidian vault, with support for semantic search and web scraping.3,967 npmMIT