Skip to main content
Glama
jamesfishwick

Slipbox MCP Server

Slipbox MCP 服务器

Slipbox

让你的 AI 助手在知识管理中扮演主动角色。Slipbox 是一个 MCP 服务器,能将任何兼容 MCP 的代理变成你的 Zettelkasten 伙伴——创建原子笔记、形成语义链接、发现涌现的聚类,并从你现有的知识中综合出洞见。

你的想法输入,结构化知识输出。代理负责格式化、链接和整合。

不熟悉这种方法?从 Zettelkasten 方法简介 开始,了解原子笔记和链接式思考背后的原理。想了解 Slipbox 如何用这种方法武装你的代理,请阅读它在连接时自动附带的服务器指令。

使用 Claude 构建和测试。适用于任何 MCP 客户端(Claude Desktop、Claude Code、OpenCode、Copilot,或任何支持 MCP 的工具)。

纯文件,零锁定。 笔记是带 YAML frontmatter 的 markdown——可在 Obsidian、Foam、Logseq 或任何编辑器中阅读。SQLite 数据库只是一个索引,不是事实来源。随时删除它并从文件重建。

  • 19 个 MCP 工具,用于笔记、链接、搜索、图分析和聚类管理

  • 6 个工作流提示(以及配套技能),编码了 Zettelkasten 方法,让你不必每次会话都重新学习

  • 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、无需硬编码的 venv 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"
      }
    }
  }
}

Desktop PATH 注意事项: 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 中搜索 test"

  • "查找孤立笔记"


实际效果

上面的主图是核心循环。以下是代理还能做的其他事情。

主动维护

代理在会话开始时读取 slipbox://maintenance-status 资源,并呈现需要整理的聚类。

主动维护

全文搜索

通过 slipbox_search_notes 对笔记进行 BM25 排序搜索。

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 中打开 vault,一切都能正常工作——渲染内容、反向链接和知识图谱。

如果想要一个以彩色渲染类型化链接(支持、扩展、细化……)而非 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:整个 vault,类型化链接按关系进行颜色编码

顶部的图例将每种颜色映射到一种链接类型(扩展、细化、支持、反驳、质疑、相关)。聚焦一个结构笔记,它的星座图就会呈现出来。这里是 Contract Testing Knowledge Map 及其环绕的成员笔记:

Slipbox Semantic Graph:一个结构笔记及其成员笔记星座图


可选:自动聚类检测

聚类分析扫描所有笔记并计算相似度分数。每天运行(早上 6 点)会预计算结果,使 slipbox_get_cluster_report() 即时返回。如果不安排计划,聚类检测按需运行,对于大型集合来说会较慢。

在批量导入、重大重组之后,或当你想要立即获得结果时,手动运行。

安装聚类检测(macOS)

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

安装程序会检测你的 Python/venv 路径,生成 LaunchAgent plist,并加载它。

手动测试(文件监视器)

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

编辑一个笔记文件。你应该会在监视器输出中看到 "rebuilding index..."。

检查状态

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

创建原子笔记(fleeting/literature/permanent/structure/hub)

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),如果提交的 skills/ 与这些模板发生偏差,CI 会失败。第六个 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

转到 设置 → 技能 → 上传技能,然后选择你想要的 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 只需要少量枢纽笔记。


文件格式

笔记以带 YAML frontmatter 的 Markdown 文件存储:

---
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. 确认启动器可解析:which slipbox-mcp 应打印一个路径(通常是 ~/.local/bin/slipbox-mcp)。

  2. 如果它在你的终端中可解析,但 Desktop 仍然无法启动它,说明 GUI 应用在其 PATH 中看不到 ~/.local/bin。将 "command": "slipbox-mcp" 替换为步骤 1 中的绝对路径。

  3. 检查 Claude Desktop 日志中的错误。

slipbox-mcp: command not found

控制台脚本未安装或不在 PATH 中。使用 pipx install --editable . --force 重新安装,然后用 which slipbox-mcp 验证。如果 pipx 的 bin 目录不在 PATH 中,运行 pipx ensurepath 并重启你的 shell。

笔记目录指向字面上的 ~/...

如果你的笔记目录最终位于相对于 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

~10分钟

~$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/

单元测试覆盖内部逻辑——服务、仓库、模型、解析。

工具契约测试验证 LLM 所看到的 MCP 工具输出格式——可解析的结构、链式调用(创建 -> 搜索 -> 获取)以及有用的错误消息。这些测试是确定性的,不调用任何 LLM。

LLM 评估通过 claude CLI 在连接 MCP 服务器的情况下向 LLM 发送提示词,然后通过检查数据库状态(创建的笔记、建立的链接、应用的标签)来评分结果。它们测试 LLM 在给定工具描述的情况下是否实际正确使用工具。

CI/CD

分支保护: 直接推送到 main 被阻止。所有更改都通过 PR 进行。

工作流

触发器

运行器

说明

CI

每个 PR + 推送到 main

GitHub 托管

单元测试 + 契约测试,ruff 检查 + 格式化

LLM Evals

选择加入(标签或手动)

自托管

通过 claude CLI 运行 28 个 LLM 评估

Release

推送到 main

GitHub 托管

release-please PR;合并后构建并发布到 PyPI

LLM 评估套件成本较高(约 3-5 美元,约 10 分钟)且为自托管,因此它绝不会自动运行。基于路径的触发器无法区分真正的提示词变更与表面性的重新格式化。当你更改提示词或工具描述语义时,请刻意运行它:

  • 为 PR 添加 run-llm-evals 标签。它会运行,并且在标签存在期间每次推送都会重新运行。

  • 或者从 Actions 标签页手动触发(workflow_dispatch)。

  • 或者在没有 runner 的情况下本地运行:pytest evals/llm/ -v。

没有标签或手动触发时,该任务会被跳过(不分配 runner,不产生成本)。

自定义评估设置

如果你不想要自托管 runner: 删除 .github/workflows/llm-evals.yml,并在合并提示词更改前在本地运行 pytest evals/llm/ -v。

如果你希望每个 PR 都自动运行 LLM 评估: 添加带有相关 paths: 过滤器的 pull_request 触发器,并移除任务 if: 中的标签门控。但要注意仅格式化编辑也会意外触发。

要更改默认评估模型: 在你的环境或工作流文件中设置 EVAL_MODEL。默认为 haiku,以兼顾速度/成本。

要设置自托管 runner:

# 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)在每次推送到 main 时运行 release-please,并通过 PyPI 可信发布(OIDC,因此仓库机密中不存储 API 令牌)进行发布。

流程(你永远不需要手动编辑版本号或推送标签):

  1. 使用 Conventional Commit 消息将更改合入 main(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:

次版本(1.3.0 → 1.4.0)

包中的新运行时能力

fix:

补丁(1.3.0 → 1.3.1)

包中的错误修复

feat!: / BREAKING CHANGE:

主版本(1.3.0 → 2.0.0)

不向后兼容的更改

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

无

文档、工具、CI、打包、仅内部更改

一批仅包含非发布提交的更改根本不会产生 release PR。squash-merge 的标题就是 release-please 读取的提交,因此 PR 标题的前缀才是关键。请根据包获得了什么来标注,而不是根据投入的工作量。

一次性设置(此仓库已完成,为 fork 记录):

  1. 在 PyPI 上,为项目 slipbox-mcp 注册一个待定可信发布者:Owner: jamesfishwick · Repository: slipbox-mcp · Workflow: release.yml · Environment: release。四项必须完全匹配。

  2. 在 GitHub 中,创建一个名为 release 的环境(Settings → Environments)。如果你限制其部署引用,请添加一个标签规则 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/*(并使用 TestPyPI 令牌运行 twine upload --repository testpypi dist/* 来试运行上传)。

共享提示词常量

所有工具描述和提示词模板都位于 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 实例运行;"memory" 是一个误称,因为除了笔记本身之外没有什么是持久的;增长纪律是未经证实的部分,因此第一次运行时预计会出现蔓延。完整说明和注意事项:Slipbox as Agent Self-Memory。

文档

文档

内容

Quick Reference

笔记 ID 格式、五种笔记类型,以及该方法的一页速查表。

Manual Zettelkasten Guide

在 Obsidian 中手动运行相同的工作流,不涉及代理。

Link Format

Slipbox 的链接如何映射到 [[wikilinks]] 和其他编辑器的格式。

Ecosystem Compatibility

哪些其他工具可以读写同一个 vault。

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