Skip to main content
Glama
jamesfishwick

Slipbox MCP Server

Slipbox MCP Server

Slipbox

AI 어시스턴트에게 지식 관리의 능동적인 역할을 부여하세요. Slipbox는 MCP 서버로, 모든 MCP 호환 에이전트를 Zettelkasten 파트너로 만들어 줍니다. 원자적 노트 생성, 의미적 링크 형성, 떠오르는 클러스터 감지, 기존 지식에서 인사이트 종합까지 처리합니다.

아이디어가 들어가면 구조화된 지식이 나옵니다. 에이전트가 형식 지정, 링크, 통합을 처리합니다.

이 방법이 처음이신가요? Zettelkasten 방법 소개에서 원자적 노트와 연결형 사고의 이유를 확인하세요. Slipbox가 에이전트에 이 방법을 어떻게 주입하는지 보려면, 연결 시 자동으로 제공되는 서버 지침을 읽어보세요.

Claude로 구축 및 테스트되었습니다. 모든 MCP 클라이언트(Claude Desktop, Claude Code, OpenCode, Copilot 또는 MCP를 지원하는 모든 도구)에서 작동합니다.

일반 파일, 제로 락인. 노트는 YAML frontmatter가 있는 마크다운입니다. Obsidian, Foam, Logseq 또는 모든 편집기에서 읽을 수 있습니다. SQLite 데이터베이스는 인덱스일 뿐, 진실의 원천이 아닙니다. 언제든 삭제하고 파일에서 다시 구축할 수 있습니다.

  • 19개의 MCP 도구 — 노트, 링크, 검색, 그래프 분석, 클러스터 관리용

  • 6개의 워크플로 프롬프트(및 매칭 스킬) — Zettelkasten 방법을 인코딩하여 매 세션마다 다시 배울 필요가 없습니다

  • BM25 전문 검색 — SQLite FTS5를 통한 제목 및 내용 검색

  • 클러스터 감지 — 떠오르는 주제 그룹을 찾고 구조 노트를 스캐폴딩합니다

  • 7가지 유형화된 링크 (reference, extends, refines, contradicts, questions, supports, related)

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 Desktop 앱은 PATH에 ~/.local/bin을 항상 상속하지 않으므로, 단순한 "slipbox-mcp"가 해석되지 않을 수 있습니다. 서버 시작에 실패하면 "command": "slipbox-mcp"를 which slipbox-mcp가 출력하는 절대 경로(일반적으로 /Users/yourname/.local/bin/slipbox-mcp)로 바꾸세요.

기타 MCP 클라이언트: 환경에 SLIPBOX_BASE_DIR을 설정하고 slipbox-mcp를 서버 명령으로 등록하세요. 명령과 환경은 모든 곳에서 동일합니다.

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은 종료 후 다시 열면 됩니다).

에이전트에게 물어보세요:

  • "무언가에 대한 테스트 노트를 만들어 줘"

  • "슬립박스에서 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의 일반 파일

노트는 일반 마크다운입니다. Obsidian에서 볼트를 열면 모든 것이 작동합니다 — 렌더링된 내용, 역링크, 지식 그래프.

Obsidian의 유형 없는 기본 그래프 대신 유형화된 링크를 색상으로 렌더링하는 그래프를 원한다면, 동반 플러그인 Slipbox Semantic Graph 를 설치하세요. 사람이 읽을 수 있는 제목과 색상으로 구분된 의미적 링크 유형을 갖춘 힘-방향 뷰입니다. 0.1.0 릴리스에서 수동으로 설치하세요: main.js, manifest.json, styles.css를 <vault>/.obsidian/plugins/slipbox-graph/에 복사한 다음 설정 → 커뮤니티 플러그인에서 활성화하세요. (공식 디렉터리에 승인되면 설정 → 커뮤니티 플러그인 → 찾아보기 → "Slipbox Semantic Graph" 검색으로도 설치할 수 있습니다.) 서버가 작성하는 것과 동일한 frontmatter id와 ## Links 섹션을 읽으므로 추가 구성이 필요 없습니다. Open semantic graph 명령(명령 팔레트) 또는 git-fork 리본 아이콘으로 뷰를 여세요.

Slipbox Semantic Graph: 관계별로 색상이 구분된 유형화된 링크가 있는 전체 볼트

상단의 범례는 각 색상을 링크 유형(extends, refines, supports, contradicts, questions, related)에 매핑합니다. 구조 노트에 초점을 맞추면 그 별자리가 나타납니다. 여기서는 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

대기 중인 유지보수 작업 표시

작업 세션을 시작할 때

호출 방법: 슬래시 명령 및 Skills

각 워크플로는 두 가지 방식으로 제공됩니다:

  • MCP 프롬프트: 실행 중인 서버가 제공합니다.

  • Skills: 동일한 워크플로를 실행하고 자연어 트리거를 추가하는 독립 번들(skills/<name>/)입니다.

여섯 개의 스킬 중 다섯 개는 서버가 사용하는 것과 동일한 PROMPT_* 템플릿(src/slipbox_mcp/server/descriptions.py)에서 생성되며, 커밋된 skills/가 해당 템플릿에서 벗어나면 CI가 실패합니다. 여섯 번째인 cluster-maintenance은 MCP 프롬프트가 재사용 가능한 워크플로가 아닌 런타임에 렌더링되는 상태 메시지이므로 scripts/build_skills.py에서 직접 작성됩니다.

슬래시 명령이 가장 확실한 경로입니다. 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

(설치된 Skills는 디렉터리 이름으로 자체 슬래시 명령도 제공합니다(예: /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 프롬프트를 호출할 수 없습니다. 슬래시 명령을 사용하거나 스킬이 자연어로 트리거되도록 하세요.

Skills 설치

Claude Code는 스킬을 최상위 skills/에서가 아니라 .claude/skills/(프로젝트별) 또는 ~/.claude/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

설정 → Skills → 스킬 업로드로 이동하여 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

구조 노트로 연결되는 도메인 개요; 광범위한 지식 영역을 탐색하기 위한 진입점

구조(Structure) vs. 허브(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를 실행하고 셸을 다시 시작하세요.

노트 디렉터리가 ~/...를 문자 그대로 가리키는 경우

노트 디렉터리가 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

서버는 이전 이름이 감지되면 경고를 기록하지만 자동으로 마이그레이션하지는 않습니다.

클러스터 보고서 경로는 구성할 수 없음

클러스터 분석 보고서는 SLIPBOX_BASE_DIR 또는 SLIPBOX_NOTES_DIR와 관계없이 항상 ~/.local/share/mcp/slipbox/cluster-analysis.json에 기록됩니다. 기본값이 아닌 경로를 사용하더라도 클러스터 보고서는 여전히 기본 위치에 저장됩니다.

설치 스크립트는 macOS 전용

scripts/install-cluster-detection.sh 및 scripts/install-file-watcher.sh 스크립트는 macOS에만 있는 launchctl과 ~/Library/LaunchAgents/를 사용합니다. Linux에서는 이에 상응하는 systemd 유닛이나 cron 작업을 수동으로 만들어야 합니다. 관련 README 섹션의 수동 테스트 명령을 참조하여 기본 Python 스크립트가 해당 플랫폼에서 작동하는지 확인하세요.

기본 경로는 작업 디렉터리를 기준으로 함

SLIPBOX_NOTES_DIR와 SLIPBOX_DATABASE_PATH가 설정되지 않으면 서버는 현재 작업 디렉터리(CWD)를 기준으로 data/notes와 data/db/zettelkasten.db를 기본값으로 사용합니다. Claude Desktop을 통해 실행할 때 CWD는 예상과 다를 수 있습니다. 이를 방지하려면 claude_desktop_config.json에 항상 절대 경로를 설정하세요.


개발

설정

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

테스트

프로젝트에는 세 가지 계층의 테스트가 있습니다:

계층

개수

속도

비용

명령

단위 + 통합

219

~2s

무료

pytest tests/

도구 계약 테스트

22

~0.5s

무료

pytest evals/tool_contracts/

LLM 평가

28

~10min

~$3-5

pytest evals/llm/

# Default: runs unit + contract tests (CI runs this)

pytest

# Run everything except LLM evals

pytest tests/ evals/tool_contracts/

# Run LLM evals (requires claude CLI authenticated)

pytest evals/llm/ -v

# Run LLM evals with a specific model

EVAL_MODEL=sonnet pytest evals/llm/ -v

# Lint

ruff check src/ evals/

단위 테스트는 내부 로직(서비스, 리포지토리, 모델, 파싱)을 다룹니다.

도구 계약 테스트는 LLM이 보게 되는 MCP 도구 출력 형식(파싱 가능한 구조, 체이닝(create -> search -> get), 유용한 오류 메시지)을 검증합니다. 이 테스트는 결정적이며 LLM을 호출하지 않습니다.

LLM 평가는 MCP 서버가 연결된 상태에서 claude CLI를 통해 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).

  • 또는 러너 없이 로컬에서 실행하세요: pytest evals/llm/ -v.

라벨이나 수동 디스패치가 없으면 작업은 건너뛰어집니다 (러너가 할당되지 않으므로 비용이 들지 않습니다).

평가 설정 사용자 지정

자체 호스팅 러너를 원하지 않으면: .github/workflows/llm-evals.yml을 제거하고 프롬프트 변경을 병합하기 전에 로컬에서 pytest evals/llm/ -v를 실행하세요.

모든 PR에서 LLM 평가를 자동으로 실행하려면: 관련 paths: 필터를 사용해 pull_request 트리거를 추가하고 작업의 if:에서 라벨 조건을 제거하세요. 단, 포맷팅만 변경한 편집에서도 부수적 트리거가 발생할 수 있습니다.

기본 평가 모델을 변경하려면: 환경 또는 워크플로 파일에서 EVAL_MODEL을 설정하세요. 기본값은 속도/비용을 위해 haiku입니다.

자체 호스팅 러너를 설정하려면:

# 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 Trusted Publishing을 통해 게시합니다 (OIDC를 사용하므로 저장소 시크릿에 API 토큰이 저장되지 않습니다).

흐름 (버전을 직접 수정하거나 태그를 푸시할 필요가 없습니다):

  1. Conventional Commit 메시지로 main에 변경 사항을 반영하세요 (feat: → minor 버전 상승, fix: → patch, feat!:/BREAKING CHANGE: → major). 저장소의 커밋 훅이 이미 이 형식을 강제합니다.

  2. release-please는 다음 버전 상승분(src/slipbox_mcp/__init__.py)과 해당 커밋들에서 파생된 CHANGELOG.md 항목을 축적하며 **"release PR"**을 계속 열어 둡니다.

  3. 배포할 준비가 되면 release PR을 병합하세요. 그러면 릴리스 태그(v<version>)가 생성되고, 같은 워크플로 실행에서 sdist + wheel을 빌드하고 twine check를 실행한 다음 PyPI에 게시합니다.

따라서 릴리스 배포는 한 번의 클릭입니다: 봇의 PR을 병합하면 됩니다. 다른 것은 없습니다.

커밋 유형이 버전을 결정합니다. 그러니 정확하게 입력하세요. 버전 상승은 마지막 릴리스 이후의 Conventional Commit 접두사에서 기계적으로 계산되며, 변경 규모에 따라 결정되지 않습니다. feat:/fix:는 배포되는 패키지의 변경에만 사용하고, 그 외 모든 것에는 릴리스가 없는 유형을 사용하세요:

접두사

버전 영향

용도

feat:

minor (1.3.0 → 1.4.0)

패키지의 새로운 런타임 기능

fix:

patch (1.3.0 → 1.3.1)

패키지의 버그 수정

feat!: / BREAKING CHANGE:

major (1.3.0 → 2.0.0)

하위 호환되지 않는 변경

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

없음

문서, 도구, CI, 패키징, 내부 전용 변경

릴리스가 없는 커밋만 모인 배치는 release PR을 전혀 만들지 않습니다. squash-merge 제목이 release-please가 읽는 커밋이므로, PR 제목의 접두사가 중요합니다. 라벨은 들인 노력이 아니라 패키지가 얻는 것에 맞춰 붙이세요.

일회성 설정 (이 저장소에는 이미 완료되어 있으며, 포크를 위해 문서화되어 있습니다):

  1. PyPI에서 slipbox-mcp 프로젝트에 대해 pending trusted publisher를 등록하세요: Owner: jamesfishwick · Repository: slipbox-mcp · Workflow: release.yml · Environment: release. 네 가지가 모두 정확히 일치해야 합니다.

  2. GitHub에서 release라는 이름의 환경을 만드세요 (Settings → Environments). 배포 ref를 제한하는 경우 tag 규칙 v*를 추가하세요 (같은 이름의 branch 규칙은 태그와 일치하지 않습니다).

버전은 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 인스턴스에서 실행하세요; "메모리"라는 표현은 부적절한데, 노트 자체 외에는 아무것도 지속되지 않기 때문입니다; 그리고 성장 규율이 검증되지 않은 부분이므로 첫 실행에서는 무분별하게 늘어날 것으로 예상하세요. 전체 설명과 주의사항: 에이전트 자기 메모리로서의 Slipbox.

문서

문서

내용

빠른 참조

노트 ID 형식, 다섯 가지 노트 유형, 그리고 이 방법에 대한 한 페이지 치트 시트.

수동 Zettelkasten 가이드

에이전트 없이 Obsidian에서 동일한 워크플로를 수동으로 실행하는 방법.

링크 형식

Slipbox 링크가 [[wikilinks]] 및 다른 편집기 형식에 어떻게 매핑되는지.

생태계 호환성

같은 볼트를 읽고 쓸 수 있는 다른 도구.

시스템 프롬프트

옵트인 자율 계층: 자동 캡처, 클러스터 감지, 에이전트 메모리 실험.

데모

도구 사용을 보여주는 작업 세션.

기여

설정 지침, 코딩 표준, 변경 사항 제출 방법은 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