Skip to main content
Glama
jamesfishwick

Slipbox MCP Server

Slipbox MCP Server

Slipbox

Дайте вашему ИИ-ассистенту активную роль в управлении вашими знаниями. Slipbox — это MCP-сервер, который превращает любого MCP-совместимого агента в партнера по методу Цеттелькастен: создание атомарных заметок, формирование семантических связей, обнаружение возникающих кластеров и синтез идей из ваших существующих знаний.

Ваши идеи на входе, структурированные знания на выходе. Агент берет на себя форматирование, связывание и интеграцию.

Новичок в методе? Начните с Введения в метод Цеттелькастен — там объясняется, зачем нужны атомарные заметки и связанное мышление. Чтобы узнать, как Slipbox знакомит вашего агента с этим методом, прочитайте инструкции сервера, которые автоматически отправляются при подключении.

Создано и протестировано с Claude. Работает с любым MCP-клиентом (Claude Desktop, Claude Code, OpenCode, Copilot или что-либо, говорящее на MCP).

Простые файлы, нулевая привязка. Заметки — это Markdown с YAML-frontmatter: их можно читать в Obsidian, Foam, Logseq или любом редакторе. База данных SQLite — это индекс, а не источник истины. Удалите её и перестройте из файлов в любой момент.

  • 19 MCP-инструментов для заметок, связей, поиска, анализа графа и управления кластерами

  • 6 рабочих промптов (плюс соответствующие навыки), кодирующих метод Цеттелькастен, чтобы вам не приходилось переучивать его каждый раз

  • Полнотекстовый поиск BM25 по заголовкам и содержимому через SQLite FTS5

  • Обнаружение кластеров находит возникающие тематические группы и создает структурные заметки

  • Семь типизированных связей (ссылка, расширяет, уточняет, противоречит, задает вопрос, поддерживает, связана)

Python 3.10+ | macOS или Linux

Прямой захват идеи: ваши сырые мысли на входе, отформатированная атомарная заметка с тегами и связями на выходе

Видеообзор

Смотреть обзор Slipbox

Related MCP server: vault-master-mcp

Быстрый старт

1. Установка

pipx install slipbox-mcp
# or, with uv:
uv tool install slipbox-mcp

Эта команда помещает лаунчер slipbox-mcp в ваш PATH (в ~/.local/bin). Одна команда — это весь MCP-сервер: никакого клонирования, никакого PYTHONPATH, никакого жестко заданного пути к Python в виртуальном окружении. Всё ниже использует её. Чтобы попробовать без установки, uvx slipbox-mcp запускает сервер в одноразовом окружении.

(Работаете над самим Slipbox? Смотрите Разработка для настройки клона и редактируемой установки.)

2. Выберите каталог данных

Одна переменная, SLIPBOX_BASE_DIR, настраивает всё: заметки сохраняются в <base>/data/notes, а индекс SQLite — в <base>/data/db/zettelkasten.db. Сервер создает их при первом запуске с правами только для владельца (0700).

Укажите SLIPBOX_BASE_DIR (или отдельные пути SLIPBOX_NOTES_DIR / SLIPBOX_DATABASE_PATH ниже) на выделенный каталог данных под вашим контролем, а не на общий или системный каталог. Эти пути используются как есть: сервер управляет деревом заметок и индексом внутри них и считает каталог заметок источником истины при перестроении индекса.

# Example: use any absolute path you like
/Users/yourname/.local/share/mcp/slipbox

Используйте полный абсолютный путь. Начальный ~ не раскрывается в конфигурационных файлах MCP-клиента и создаст буквальный каталог ~.

3. Подключение к вашему MCP-клиенту

Claude Code (одна команда, без редактирования файлов):

claude mcp add slipbox \
  --env SLIPBOX_BASE_DIR=/Users/yourname/.local/share/mcp/slipbox \
  -- slipbox-mcp

Claude Desktop (отредактируйте конфигурационный файл):

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Linux: ~/.config/claude/claude_desktop_config.json

{
  "mcpServers": {
    "slipbox": {
      "command": "slipbox-mcp",
      "env": {
        "SLIPBOX_BASE_DIR": "/Users/yourname/.local/share/mcp/slipbox"
      }
    }
  }
}

Предостережение о PATH для Desktop: настольное приложение macOS не всегда наследует ~/.local/bin из своего PATH, поэтому простая команда "slipbox-mcp" может не сработать. Если сервер не запускается, замените "command": "slipbox-mcp" на абсолютный путь, который выводит which slipbox-mcp (обычно /Users/yourname/.local/bin/slipbox-mcp).

Другие MCP-клиенты: зарегистрируйте slipbox-mcp как команду сервера с SLIPBOX_BASE_DIR в его окружении. Команда и окружение одинаковы везде.

Вместо SLIPBOX_BASE_DIR задайте абсолютные пути по отдельности. Необязательный SLIPBOX_LOG_LEVEL может быть одним из 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. Перезапуск и проверка

Перезапустите клиент (Claude Code перезагружается при следующем запуске; закройте и снова откройте Claude Desktop).

Спросите вашего агента:

  • "Создай тестовую заметку о чём-нибудь"

  • "Поищи в моём slipbox тест"

  • "Найди осиротевшие заметки"


В действии

Главная демонстрация выше — это основной цикл. Вот всё остальное, что делает агент.

Проактивное обслуживание

Агент читает ресурс slipbox://maintenance-status в начале сеанса и показывает кластеры, которые нужно организовать.

Проактивное обслуживание

Полнотекстовый поиск

Поиск с ранжированием BM25 по заметкам через slipbox_search_notes.

Поиск FTS5

Граф знаний: центральные заметки

slipbox_find_central_notes показывает структурные якоря графа — заметки, вокруг которых вращается всё остальное.

Центральные заметки

Анализ заметки

Промпт analyze_note оценивает атомарность, находит реальные связи в существующем графе, предлагает теги и переписывает для ясности.

Анализ заметки

Разложение источника

Промпт knowledge_creation разбивает статью на атомарные литературные заметки с правильными цитатами и связями.

Разложение источника

Обнаружение кластеров

slipbox_get_cluster_report находит группы совместно встречающихся тегов, для которых нет структурной заметки. Оценка по размеру, доле осиротевших, плотности связей и давности.

Отчёт о кластерах

Создание структурной заметки

slipbox_create_structure_from_cluster создает структурную заметку, связывает все заметки-участницы и закрывает кластер.

Структурная заметка

Осиротевшие заметки

slipbox_find_orphaned_notes показывает неинтегрированные знания — кандидатов на связывание или удаление.

Осиротевшие заметки

Похожие заметки

slipbox_find_similar_notes вычисляет сходство на основе общих тегов, общих связей и пересечения содержимого.

Похожие заметки

Обход графа

slipbox_get_linked_notes показывает типизированные связи от узловой заметки, сгруппированные по типу связи.

Связанные заметки

Синтез знаний

Промпт knowledge_synthesis находит мосты между несвязанными областями и предлагает синтез-заметки из ваших существующих знаний.

Синтез знаний

Нулевая привязка: простые файлы в Obsidian

Заметки — это обычный Markdown. Откройте хранилище в Obsidian, и всё работает: отображаемое содержимое, обратные ссылки и граф знаний.

Чтобы получить граф, который отображает типизированные связи в цвете (поддерживает, расширяет, уточняет, ...) вместо нетипизированного встроенного графа Obsidian, установите дополнительный плагин Slipbox Semantic Graph — представление с силовым направлением, человекочитаемыми заголовками и цветными семантическими типами связей. Установите его вручную из релиза 0.1.0: скопируйте main.js, manifest.json и styles.css в <vault>/.obsidian/plugins/slipbox-graph/, затем включите в Настройки → Сторонние плагины. (Когда он будет принят в официальный каталог, вы также сможете установить его через Настройки → Сторонние плагины → Обзор → поиск "Slipbox Semantic Graph".) Он читает тот же frontmatter id и раздел ## Links, которые записывает сервер, поэтому дополнительная настройка не требуется. Откройте представление с помощью команды Открыть семантический граф (Палитра команд) или значка-ленты git-fork.

Slipbox Semantic Graph: всё хранилище, типизированные связи окрашены по типу отношения

Легенда вверху сопоставляет каждый цвет с типом связи (расширяет, уточняет, поддерживает, противоречит, задаёт вопрос, связана). Сфокусируйтесь на структурной заметке, и её созвездие появится. Здесь Карта знаний контрактного тестирования с заметками-участницами, вращающимися вокруг неё:

Slipbox Semantic Graph: структурная заметка и созвездие её заметок-участниц


Дополнительно: автоматическое обнаружение кластеров

Анализ кластеров сканирует все заметки и вычисляет показатели сходства. Ежедневный запуск (в 6 утра) предвычисляет результаты, поэтому slipbox_get_cluster_report() возвращается мгновенно. Без расписания обнаружение кластеров выполняется по требованию, что медленнее для больших коллекций.

Запускайте вручную после массовых импортов, крупной реорганизации или когда нужны немедленные результаты.

Установка обнаружения кластеров (macOS)

chmod +x scripts/install-cluster-detection.sh
./scripts/install-cluster-detection.sh

Установщик определяет путь к Python/venv, генерирует plist для LaunchAgent и загружает его.

Ручной тест (файловый наблюдатель)

source .venv/bin/activate
python scripts/detect_clusters.py

Вывод сохраняется в ~/.local/share/mcp/slipbox/cluster-analysis.json.

Удаление обнаружения кластеров

./scripts/install-cluster-detection.sh --uninstall

Дополнительно: файловый наблюдатель macOS для автоиндексации

MCP-сервер поддерживает индекс базы данных для быстрого поиска. Редактирование заметок в Obsidian (или любом редакторе) делает базу данных устаревшей, пока вы не запустите slipbox_rebuild_index.

Файловый наблюдатель работает как фоновый демон, отслеживает ваш каталог заметок и автоматически перестраивает индекс при изменении .md-файлов.

Используйте его, если вы часто редактируете заметки в Obsidian, одновременно используя Claude.

Установка файлового наблюдателя (macOS)

chmod +x scripts/install-file-watcher.sh
./scripts/install-file-watcher.sh

Установщик определяет путь к Python/venv, устанавливает watchdog при необходимости и загружает LaunchAgent. Запускается при входе в систему и перезапускается при сбое.

Ручной тест

source .venv/bin/activate
python scripts/watch_notes.py

Отредактируйте файл заметки. Вы должны увидеть "перестройка индекса..." в выводе наблюдателя.

Проверка статуса

launchctl list | grep slipbox.watcher

# View logs

tail -f ~/.local/share/mcp/slipbox/watcher.log

Удаление файлового наблюдателя

./scripts/install-file-watcher.sh --uninstall

Рекомендуемый системный промпт

Slipbox автоматически предоставляет базовый набор: каждый клиент получает инструкции сервера при подключении, описывающие, как правильно использовать инструменты — типы заметок, семантику связей, стандарты качества и основные рабочие процессы, такие как поиск перед созданием. Вам не нужно добавлять их самостоятельно.

docs/SYSTEM_PROMPT.md — это дополнительный уровень поверх: директивы автономии и инициативы, которые сервер не должен устанавливать самостоятельно. Добавьте его в предпочтения вашего агента или системный промпт, чтобы включить:

  • Автоматический захват знаний во время разговоров

  • Обнаружение возникновения кластеров в начале разговора


Справочник инструментов

Основные операции с заметками

Инструмент

Описание

slipbox_create_note

Создание атомарных заметок (мимолётная/литературная/постоянная/структурная/хаб)

slipbox_get_note

Получение заметки по ID или заголовку

slipbox_update_note

Обновление существующих заметок

slipbox_delete_note

Удаление заметок

Связывание

Инструмент

Описание

slipbox_create_link

Создание семантических связей между заметками

slipbox_remove_link

Удаление связей

slipbox_delete_link

Удаление конкретной связи (ошибка, если связи нет)

slipbox_get_linked_notes

Получение заметок, связанных с/из заметки

Поиск и обнаружение

Инструмент

Описание

slipbox_search_notes

Поиск по тексту (ранжирование BM25), тегам или типу

slipbox_find_similar_notes

Поиск заметок, похожих на указанную

slipbox_find_central_notes

Поиск наиболее связанных заметок

slipbox_find_orphaned_notes

Поиск несвязанных заметок

slipbox_list_notes_by_date

Список заметок по диапазону дат

slipbox_get_all_tags

Список всех тегов

Анализ кластеров

Инструмент

Описание

slipbox_get_cluster_report

Получить ожидающие кластеры, требующие структурных заметок

slipbox_create_structure_from_cluster

Создать структурную заметку из кластера

slipbox_refresh_clusters

Перегенерировать анализ кластеров

slipbox_dismiss_cluster

Окончательно скрыть кластер из предложений

Обслуживание

Инструмент

Описание

slipbox_rebuild_index

Пересобрать индекс базы данных из файлов


Справочник промптов

MCP-промпты — это переиспользуемые шаблоны рабочих процессов, в которых закодирован метод Zettelkasten, чтобы вам не приходилось объяснять его заново в каждой сессии.

Промпт

Описание

Когда использовать

knowledge_creation

Преобразовать информацию в 3–5 атомарных заметок

При добавлении статей, идей или заметок

knowledge_creation_batch

Обработать большие объёмы в 5–10 заметок

При обработке книг или длинных материалов

knowledge_exploration

Сопоставить связи с существующим знанием

При изучении того, как связаны темы

knowledge_synthesis

Создавать инсайты более высокого уровня

При поиске мостов между идеями

analyze_note

Оценить пригодность заметки для slipbox

При проверке новой или существующей заметки

cluster_maintenance

Выявлять ожидающие задачи по обслуживанию

В начале рабочей сессии

Как вызывать: слеш-команды и скиллы

Каждый рабочий процесс доступен двумя способами:

  • MCP-промпты: предоставляются запущенным сервером.

  • Скиллы: автономные наборы (skills/<name>/), которые запускают тот же рабочий процесс и добавляют активацию по естественному языку.

Пять из шести скиллов генерируются из тех же шаблонов PROMPT_*, которые использует сервер (src/slipbox_mcp/server/descriptions.py), и CI завершается ошибкой, если закоммиченные skills/ расходятся с этими шаблонами. Шестой, cluster-maintenance, написан непосредственно в scripts/build_skills.py, поскольку его MCP-промпт — это сообщение о состоянии, формируемое во время выполнения, а не переиспользуемый рабочий процесс.

Слеш-команды — надёжный способ. Claude Code показывает MCP-промпты как /mcp__<server>__<prompt>; введите /mcp__slipbox-mcp__, чтобы открыть выбор:

/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

(Установленные скиллы также предоставляют собственные слеш-команды по имени директории, например /slipbox-analyze-note.)

Естественный язык работает после установки соответствующего скилла. Просто опишите, что вам нужно:

Analyze this note for my slipbox: [paste note]

Add this to my slipbox: [paste article]

Synthesize my notes on attention and memory.

Активация по прозе зависит от того, установлен ли скилл и совпадает ли ваша формулировка с его описанием; если она не срабатывает, используйте слеш-команду. Просьба к модели «используй промпт analyze_note» по имени не работает. Модель не может вызвать MCP-промпт по имени. Используйте слеш-команду или позвольте скиллу активироваться по естественному языку.

Установка скиллов

Claude Code обнаруживает скиллы в .claude/skills/ (для проекта) или ~/.claude/skills/ (глобально), а не в просто верхнеуровневой папке skills/. Создайте симлинки или скопируйте нужные скиллы в один из путей обнаружения (например, для этого проекта):

mkdir -p .claude/skills
ln -s ../../skills/slipbox-analyze-note .claude/skills/slipbox-analyze-note
# ...or copy the directories, or symlink all six

Claude Desktop требует каждый скилл в виде пакета .skill. Соберите их, затем загрузите:

python scripts/build_skills.py     # writes dist/*.skill

Перейдите в Settings → Skills → Upload skill и выберите нужные пакеты из dist/. Каждый устанавливается и как слеш-команда, и как триггер по естественному языку.

После изменения шаблона промпта в descriptions.py снова запустите сборку, чтобы перегенерировать скиллы.


Типы связей

Тип

Когда использовать

Обратная связь

reference

Обычная связь «см. также»

reference

extends

Развитие другой идеи

extended_by

refines

Уточнение или улучшение

refined_by

contradicts

Противоположная точка зрения

contradicted_by

questions

Поднимает вопросы о

questioned_by

supports

Предоставляет доказательства для

supported_by

related

Слабая тематическая связь

related


Типы заметок

Тип

Назначение

fleeting

Быстрые заметки, необработанные мысли

literature

Идеи из источников с цитированием

permanent

Оформленные идеи своими словами

structure

Карты, организующие 7–15 связанных заметок по конкретной теме

hub

Обзор области, связывающий структурные заметки; точка входа для навигации по широкой области знаний

Структурная заметка против хаба: Структурная заметка организует кластер постоянных заметок вокруг одной темы. Это курируемая карта, находящаяся на один уровень выше самих заметок. Хаб-заметка работает ещё на один уровень выше: она связывает структурные заметки (а иногда и ключевые постоянные заметки) в рамках целой области знаний. Если структурная заметка отвечает на вопрос «что я знаю об X?», то хаб-заметка отвечает на вопрос «как организованы мои знания об этой области в целом?» Большинству Zettelkasten достаточно всего нескольких хаб-заметок.


Формат файлов

Заметки хранятся в виде Markdown-файлов с YAML-frontmatter:

---
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 structure

Вы можете редактировать эти файлы напрямую в любом текстовом редакторе или Obsidian. Выполните slipbox_rebuild_index после внешних правок.


Обновление

После установки новых версий перезапустите Claude Desktop. Если в примечаниях к выпуску упоминаются изменения базы данных, один раз выполните slipbox_rebuild_index, чтобы привести существующую базу данных в актуальное состояние.

Обновление до полнотекстового поиска FTS5 (любая версия после релиза FTS5): Индекс полнотекстового поиска создаётся автоматически при запуске сервера с новой базой данных. Для существующих баз данных таблица FTS5 будет создана при первом запуске, но останется пустой, пока вы не выполните:

slipbox_rebuild_index

Это заполняет индекс BM25 из ваших существующих заметок. До этого момента результаты поиска не будут ранжироваться по релевантности.


Устранение неполадок

Сервер не загружается в Claude Desktop

  1. Убедитесь, что лаунчер находится в PATH: which slipbox-mcp должен вывести путь (обычно ~/.local/bin/slipbox-mcp).

  2. Если в терминале команда находится, но Desktop всё равно не может её запустить, значит, GUI-приложение не видит ~/.local/bin в своём PATH. Замените "command": "slipbox-mcp" на абсолютный путь из шага 1.

  3. Проверьте журналы Claude Desktop на наличие ошибок.

slipbox-mcp: command not found

Консольный скрипт не был установлен или его нет в PATH. Переустановите с помощью pipx install --editable . --force, затем проверьте командой which slipbox-mcp. Если каталог bin от pipx отсутствует в PATH, выполните pipx ensurepath и перезапустите оболочку.

Каталог заметок указывает на ~/... буквально

Если ваш каталог заметок оказывается в ./~/... относительно CWD, значит, вы использовали ~ в JSON-конфиге. Claude Desktop не раскрывает ~. Замените его на полный абсолютный путь.

Поиск не возвращает результатов

  1. Индекс FTS5 может быть не заполнен. Выполните slipbox_rebuild_index один раз, чтобы проиндексировать существующие заметки.

  2. Если вы недавно редактировали заметки вне Claude, индекс может быть устаревшим. Выполните slipbox_rebuild_index.

slipbox_list_notes_by_date возвращает пустые результаты

Если start_date позже, чем end_date, ни одна заметка не соответствует условиям, и возвращается пустой результат. Это ожидаемое поведение, а не ошибка.

База данных рассинхронизирована

Если заметки редактировались вне MCP-сервера:

slipbox_rebuild_index

Обнаружение кластеров не запущено

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.sh

Файловый наблюдатель не запущен

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.sh

Переход с переменных окружения ZETTELKASTEN_*

Если вы раньше использовали переменные ZETTELKASTEN_NOTES_DIR, ZETTELKASTEN_DATABASE_PATH или другие ZETTELKASTEN_*, они больше не читаются. Переименуйте их в соответствующие SLIPBOX_*:

Старая переменная

Новая переменная

ZETTELKASTEN_NOTES_DIR

SLIPBOX_NOTES_DIR

ZETTELKASTEN_DATABASE_PATH

SLIPBOX_DATABASE_PATH

ZETTELKASTEN_LOG_LEVEL

SLIPBOX_LOG_LEVEL

ZETTELKASTEN_BASE_DIR

SLIPBOX_BASE_DIR

ZETTELKASTEN_SERVER_NAME

SLIPBOX_SERVER_NAME

Сервер записывает предупреждение, если обнаруживает старые имена, но не переносит их автоматически.

Путь к отчёту о кластерах не настраивается

Отчёт об анализе кластеров всегда записывается в ~/.local/share/mcp/slipbox/cluster-analysis.json независимо от SLIPBOX_BASE_DIR или SLIPBOX_NOTES_DIR. Если вы используете нестандартные пути, отчёт о кластерах всё равно будет находиться в расположении по умолчанию.

Скрипты установки предназначены только для macOS

Скрипты scripts/install-cluster-detection.sh и scripts/install-file-watcher.sh используют launchctl и ~/Library/LaunchAgents/, которые существуют только в macOS. В Linux вам придётся вручную создать аналогичные модули systemd или задания cron. Смотрите команды ручного тестирования в соответствующих разделах README, чтобы убедиться, что базовые Python-скрипты работают на вашей платформе.

Пути по умолчанию относительны к рабочей директории

Если SLIPBOX_NOTES_DIR и SLIPBOX_DATABASE_PATH не заданы, сервер по умолчанию использует data/notes и data/db/zettelkasten.db относительно текущей рабочей директории. При запуске через Claude Desktop CWD может оказаться не тем, что вы ожидаете. Чтобы избежать этого, всегда указывайте абсолютные пути в claude_desktop_config.json.


Разработка

Настройка

git clone https://github.com/jamesfishwick/slipbox-mcp.git
cd slipbox-mcp
uv venv && uv pip install -e ".[dev]"

Тестирование

В проекте три уровня тестов:

Уровень

Количество

Скорость

Стоимость

Команда

Модульные + интеграционные

219

~2s

Бесплатно

pytest tests/

Контрактные тесты инструментов

22

~0.5s

Бесплатно

pytest evals/tool_contracts/

LLM-оценки

28

~10min

~$3-5

pytest evals/llm/

# 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/

Модульные тесты покрывают внутреннюю логику — сервисы, репозиторий, модели, парсинг.

Контрактные тесты инструментов проверяют формат вывода MCP-инструментов, который видит LLM: разбираемую структуру, цепочки (create -> search -> get) и понятные сообщения об ошибках. Эти тесты детерминированы и не вызывают LLM.

LLM-оценки отправляют промпты LLM через CLI claude с подключённым MCP-сервером, затем оценивают результаты, проверяя состояние базы данных (созданные заметки, применённые теги). Они проверяют, действительно ли LLM правильно использует инструменты с учётом их описаний.

CI/CD

Защита веток: Прямые пуши в main заблокированы. Все изменения проходят через PR.

Workflow

Триггер

Раннер

Что

CI

Каждый PR + пуш в main

GitHub-hosted

Модульные и контрактные тесты, ruff lint + format

LLM Evals

Опционально (метка или вручную)

Self-hosted

28 LLM-эвалов через claude CLI

Release

Пуш в main

GitHub-hosted

release-please PR; после его слияния — сборка + публикация в PyPI

Набор LLM-эвалов дорогой (~$3-5, ~10 мин) и работает на self-hosted раннере, поэтому никогда не запускается автоматически. Триггер по путям не может отличить настоящее изменение промпта от косметического переформатирования. Запускайте его намеренно, когда меняете смысл промпта или описаний инструментов:

  • Добавьте метку run-llm-evals к PR. Он запустится и будет перезапускаться при каждом пуше, пока метка присутствует.

  • Или запустите его вручную со вкладки Actions (workflow_dispatch).

  • Или запустите локально без раннера: pytest evals/llm/ -v.

Без метки или ручного запуска задача пропускается (раннер не выделяется, расходов нет).

Настройка эвалов

Если вам не нужен self-hosted раннер: удалите .github/workflows/llm-evals.yml и запускайте pytest evals/llm/ -v локально перед слиянием изменений промптов.

Если вы хотите, чтобы LLM-эвалы запускались на каждом PR автоматически: добавьте триггер pull_request с соответствующим фильтром paths: и уберите проверку метки в if: джобы. Но рассчитывайте на случайные запуски из-за правок только форматирования.

Чтобы сменить модель эвалов по умолчанию: задайте EVAL_MODEL в окружении или в файле воркфлоу. По умолчанию — haiku для скорости и стоимости.

Чтобы настроить self-hosted раннер:

# 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 &

Публикация в PyPI

Релизы автоматизированы. Воркфлоу Release (.github/workflows/release.yml) запускает release-please при каждом пуше в main и публикует через Trusted Publishing PyPI (OIDC, поэтому в секретах репозитория не хранится ни один API-токен).

Процесс (вы никогда не правите версию вручную и не пушите тег):

  1. Вносите изменения в main с сообщениями в стиле Conventional Commit (feat: → минорная версия, fix: → патч, feat!:/BREAKING CHANGE: → мажорная версия). Коммит-хуки репозитория уже следят за этим форматом.

  2. release-please держит открытым постоянный «release PR», накапливая следующее изменение версии (в src/slipbox_mcp/__init__.py) и записи CHANGELOG.md, полученные из этих коммитов.

  3. Когда будете готовы выпустить релиз, смёржите release PR. Это создаст тег релиза (v<version>) и в том же запуске воркфлоу соберёт sdist + wheel, выполнит twine check и опубликует в PyPI.

То есть выпуск релиза — один клик: смёржите PR от бота. Больше ничего.

Типы коммитов определяют версию. Поэтому выбирайте их точно. Изменение версии вычисляется механически по префиксам Conventional Commit с момента последнего релиза, а не по размеру изменения. Приберегите feat:/fix: для изменений в публикуемом пакете; для всего остального используйте типы без выпуска релиза:

Префикс

Влияние на версию

Для чего

feat:

minor (1.3.0 → 1.4.0)

новая возможность пакета в рантайме

fix:

patch (1.3.0 → 1.3.1)

исправление ошибки в пакете

feat!: / BREAKING CHANGE:

major (1.3.0 → 2.0.0)

обратно несовместимое изменение

docs: ci: build: chore: test: refactor:

нет

документация, инструментарий, CI, упаковка, внутренние изменения

Набор только из нерелизных коммитов не создаёт вообще никакого release PR. Заголовок squash-merge — это коммит, который читает release-please, поэтому важен именно префикс заголовка PR. Называйте его по тому, что получает пакет, а не по затраченным усилиям.

Разовая настройка (для этого репозитория уже выполнена, описана для форков):

  1. На PyPI зарегистрируйте ожидающего доверенного издателя для проекта slipbox-mcp: Владелец: jamesfishwick · Репозиторий: slipbox-mcp · Workflow: release.yml · Окружение: release. Все четыре значения должны совпадать точно.

  2. В GitHub создайте окружение с именем release (Settings → Environments). Если вы ограничиваете допустимые refs для деплоя, добавьте правило для тегов v* (правило для веток с таким же именем не совпадёт с тегом).

Версия определяется один раз, в src/slipbox_mcp/__init__.py (release-please увеличивает её; маркер # x-release-please-version указывает, какую строку менять). pyproject.toml (dynamic = ["version"]) и server_version сервера оба читают из неё, так что синхронизировать ничего не нужно; тег, который создаёт release-please, всегда совпадает с версией пакета по построению.

Чтобы отрепетировать сборку без публикации, запустите её вручную: python -m build && twine check dist/* (а для пробной загрузки — twine upload --repository testpypi dist/* с токеном TestPyPI).

Общие константы промптов

Все описания инструментов и шаблоны промптов находятся в src/slipbox_mcp/server/descriptions.py. И MCP-сервер, и тесты эвалов импортируют из этого единого источника истины. Если вы меняете промпт, эвалы проверяют, по-прежнему ли LLM ведёт себя правильно с новой формулировкой.

Отладочное логирование

SLIPBOX_LOG_LEVEL=DEBUG python -c "from slipbox_mcp.main import main; main()"

CLI-инструмент

Команда slipbox предоставляет доступ из терминала для механических операций:

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 counts

Установка: pipx install --editable . (добавляет slipbox в ваш PATH)


Экспериментально: Slipbox как память агента

Непроверенная гипотеза, а не рекомендованная настройка. Всё вышеописанное помогает агенту управлять вашим знанием. Здесь всё наоборот: агент использует slipbox как свою собственную постоянную память между сессиями, вместо встроенной памяти или файла с правилами.

У модели нет памяти между сессиями, поэтому slipbox — единственный канал, который одна сессия оставляет следующей. Она пишет брифинги для холодного преемника (сбой и его причина, повторяющееся ограничение, исправление, добытое с трудом знание), помечает их тегом agent-memory и ищет этот тег перед действием. Ставка в том, что связанная память лучше плоского файла правил, потому что она извлекается обходом по связям.

Сначала нужно знать три вещи: изоляция пространства имён — это соглашение по тегам, а не принудительное правило, поэтому используйте отдельный экземпляр slipbox; «память» — неверный термин, поскольку ничто, кроме самих заметок, не сохраняется; а дисциплина роста — как раз непроверенная часть, так что ожидайте разрастания при первом запуске. Полное описание и предостережения: Slipbox as Agent Self-Memory.

Документация

Doc

Что внутри

Quick Reference

Формат ID заметок, пять типов заметок и одностраничная шпаргалка по методу.

Manual Zettelkasten Guide

Выполнение того же рабочего процесса вручную в Obsidian, без участия агента.

Link Format

Как ссылки Slipbox соотносятся с [[wikilinks]] и форматами других редакторов.

Ecosystem Compatibility

Какие другие инструменты могут читать и писать в то же хранилище.

System Prompt

Опциональный слой автономии: автозахват, обнаружение кластеров и эксперимент с памятью агента.

Demo

Разобранная сессия, показывающая инструменты в действии.

Участие в разработке

См. CONTRIBUTING.md — инструкции по настройке, стандарты кода и порядок отправки изменений.

Дорожная карта

См. ROADMAP.md — запланированные функции и будущее направление.

Поддержка

Если slipbox-mcp вам полезен, рассмотрите возможность спонсировать проект.

Лицензия

MIT

Available Tools

19 tools
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.

https://zettelkasten.de")

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
titleYes
contentYes
note_typeNopermanent
referencesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNo
cluster_idYes
create_linksNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_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

ParametersJSON Schema
NameRequiredDescriptionDefault
note_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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")

ParametersJSON Schema
NameRequiredDescriptionDefault
cluster_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
note_idYes
thresholdNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
refreshNo
min_scoreNo
include_notesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
note_idYes
directionNoboth

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
end_dateNo
start_dateNo
use_updatedNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_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)

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
limitNo
queryNo
note_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
titleNo
contentNo
note_idYes
note_typeNo
referencesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

  1. 19 tool updatesv1.5.4
    • Changedslipbox_create_link1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "result": {
        +      "title": "Result",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "slipbox_create_linkOutput",
        +  "type": "object"
        +}
    • Changedslipbox_create_note1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "result": {
        +      "title": "Result",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "slipbox_create_noteOutput",
        +  "type": "object"
        +}
    • Changedslipbox_create_structure_from_cluster1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "result": {
        +      "title": "Result",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "slipbox_create_structure_from_clusterOutput",
        +  "type": "object"
        +}
    • Changedslipbox_delete_link1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "result": {
        +      "title": "Result",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "slipbox_delete_linkOutput",
        +  "type": "object"
        +}
    • Changedslipbox_delete_note1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "result": {
        +      "title": "Result",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "slipbox_delete_noteOutput",
        +  "type": "object"
        +}
    • Changedslipbox_dismiss_cluster1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "result": {
        +      "title": "Result",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "slipbox_dismiss_clusterOutput",
        +  "type": "object"
        +}
    • Changedslipbox_find_central_notes1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "result": {
        +      "title": "Result",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "slipbox_find_central_notesOutput",
        +  "type": "object"
        +}
    • Changedslipbox_find_orphaned_notes1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "result": {
        +      "title": "Result",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "slipbox_find_orphaned_notesOutput",
        +  "type": "object"
        +}
    • Changedslipbox_find_similar_notes1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "result": {
        +      "title": "Result",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "slipbox_find_similar_notesOutput",
        +  "type": "object"
        +}
    • Changedslipbox_get_all_tags1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "result": {
        +      "title": "Result",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "slipbox_get_all_tagsOutput",
        +  "type": "object"
        +}
    • Changedslipbox_get_cluster_report1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "result": {
        +      "title": "Result",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "slipbox_get_cluster_reportOutput",
        +  "type": "object"
        +}
    • Changedslipbox_get_linked_notes1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "result": {
        +      "title": "Result",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "slipbox_get_linked_notesOutput",
        +  "type": "object"
        +}
    • Changedslipbox_get_note1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "result": {
        +      "title": "Result",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "slipbox_get_noteOutput",
        +  "type": "object"
        +}
    • Changedslipbox_list_notes_by_date1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "result": {
        +      "title": "Result",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "slipbox_list_notes_by_dateOutput",
        +  "type": "object"
        +}
    • Changedslipbox_rebuild_index1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "result": {
        +      "title": "Result",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "slipbox_rebuild_indexOutput",
        +  "type": "object"
        +}
    • Changedslipbox_refresh_clusters1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "result": {
        +      "title": "Result",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "slipbox_refresh_clustersOutput",
        +  "type": "object"
        +}
    • Changedslipbox_remove_link1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "result": {
        +      "title": "Result",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "slipbox_remove_linkOutput",
        +  "type": "object"
        +}
    • Changedslipbox_search_notes1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "result": {
        +      "title": "Result",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "slipbox_search_notesOutput",
        +  "type": "object"
        +}
    • Changedslipbox_update_note1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "result": {
        +      "title": "Result",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "slipbox_update_noteOutput",
        +  "type": "object"
        +}
  2. 19 tool updatesv0.1.0
    • First observedslipbox_create_link
    • First observedslipbox_create_note
    • First observedslipbox_create_structure_from_cluster
    • First observedslipbox_delete_link
    • First observedslipbox_delete_note
    • First observedslipbox_dismiss_cluster
    • First observedslipbox_find_central_notes
    • First observedslipbox_find_orphaned_notes
    • First observedslipbox_find_similar_notes
    • First observedslipbox_get_all_tags
    • First observedslipbox_get_cluster_report
    • First observedslipbox_get_linked_notes
    • First observedslipbox_get_note
    • First observedslipbox_list_notes_by_date
    • First observedslipbox_rebuild_index
    • First observedslipbox_refresh_clusters
    • First observedslipbox_remove_link
    • First observedslipbox_search_notes
    • First observedslipbox_update_note

TDQS

A3.8/5.0

Scored across 19 tools

Disambiguation3/5

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.

Naming Consistency4/5

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.

Tool Count4/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    F
    maintenance
    An 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.
    5
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An 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 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    A local-first MCP server that gives AI assistants long-term memory by storing, searching, and recalling notes as Markdown files on your machine.
    8 npm
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A 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 npm
    MIT