Slipbox MCP Server
Slipbox MCP Server gives your AI assistant a full Zettelkasten knowledge-management role: it creates atomic notes, links them semantically, searches and analyzes the graph, and synthesizes insights, all stored as plain Markdown with zero lock-in.
Note operations: create, read, update, delete notes (types: fleeting, literature, permanent, structure, hub)
Semantic linking: create/remove/delete directional typed links (reference, extends, refines, contradicts, questions, supports, related) with optional bidirectional links
Search & discovery: BM25 full-text search, filter by tags/type, find similar, central, or orphaned notes, list by date, get all tags
Knowledge graph exploration: retrieve linked notes in either direction (outgoing/incoming/both)
Cluster detection & structure notes: get cluster reports scored by note count, orphan ratio, link density, and recency; create structure notes from clusters; refresh or dismiss clusters
Maintenance: rebuild the index from files when external edits occur
Workflow prompts & skills: six MCP prompts (knowledge creation, batch creation, exploration, synthesis, note analysis, cluster maintenance) and matching skills for guided Zettelkasten workflows
Plain files, zero lock-in: notes are Markdown with YAML frontmatter, readable in Obsidian, Logseq, etc.; SQLite is only an index
Optional tooling: cluster detection cron, macOS file watcher for auto-indexing, and a CLI (
slipbox) for status, search, clusters, orphans, rebuild, export, and tags
Allows notes to be managed as plain markdown files viewable in Obsidian, and provides a companion plugin for visualizing typed links in a color-coded semantic graph within Obsidian.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Slipbox MCP Serversearch for notes on complex adaptive systems"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Slipbox MCP Server

Give your AI assistant an active role in managing your knowledge. Slipbox is an MCP server that turns any MCP-compatible agent into a Zettelkasten partner -- creating atomic notes, forming semantic links, detecting emergent clusters, and synthesizing insights from your existing knowledge.
Your ideas in, structured knowledge out. The agent handles the formatting, linking, and integration.
New to the method? Start with Introduction to the Zettelkasten Method for the why behind atomic notes and linked thinking. To see how Slipbox primes your agent with that method, read the server instructions it ships automatically on connect.
Built and tested with Claude. Works with any MCP client (Claude Desktop, Claude Code, OpenCode, Copilot, or anything that speaks MCP).
Plain files, zero lock-in. Notes are markdown with YAML frontmatter -- readable in Obsidian, Foam, Logseq, or any editor. The SQLite database is an index, not the source of truth. Delete it and rebuild from files anytime.
19 MCP tools for notes, links, search, graph analysis, and cluster management
6 workflow prompts (plus matching skills) encoding the Zettelkasten method so you don't re-learn it every session
BM25 full-text search across titles and content via SQLite FTS5
Cluster detection finds emergent topic groups and scaffolds structure notes
Seven typed links (reference, extends, refines, contradicts, questions, supports, related)
Python 3.10+ | macOS or Linux

Walkthrough
![]()
Related MCP server: vault-master-mcp
Quick Start
1. Install
pipx install slipbox-mcp
# or, with uv:
uv tool install slipbox-mcpThis puts a slipbox-mcp launcher on your PATH (in ~/.local/bin). That single command is the whole MCP server: no clone, no PYTHONPATH, no hardcoded venv Python path. Everything below uses it. To try it without installing at all, uvx slipbox-mcp runs the server in a throwaway environment.
(Working on Slipbox itself? See Development for the clone + editable-install setup.)
2. Pick a Data Directory
One variable, SLIPBOX_BASE_DIR, configures everything: notes land in <base>/data/notes and the SQLite index in <base>/data/db/zettelkasten.db. The server creates these on first run with owner-only (0700) permissions.
Point SLIPBOX_BASE_DIR (or the individual SLIPBOX_NOTES_DIR / SLIPBOX_DATABASE_PATH paths below) at a dedicated data directory you control, not a shared or system location. These paths are used as-is: the server manages the notes tree and index under them, and it treats the notes directory as the source of truth when it rebuilds the index.
# Example: use any absolute path you like
/Users/yourname/.local/share/mcp/slipboxUse a full absolute path. A leading
~is not expanded inside MCP client config files and would create a literal~directory.
3. Connect to Your MCP Client
Claude Code (one command, no file editing):
claude mcp add slipbox \
--env SLIPBOX_BASE_DIR=/Users/yourname/.local/share/mcp/slipbox \
-- slipbox-mcpClaude Desktop (edit the config file):
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonLinux:
~/.config/claude/claude_desktop_config.json
{
"mcpServers": {
"slipbox": {
"command": "slipbox-mcp",
"env": {
"SLIPBOX_BASE_DIR": "/Users/yourname/.local/share/mcp/slipbox"
}
}
}
}Desktop PATH caveat: the macOS Desktop app doesn't always inherit
~/.local/binon its PATH, so the bare"slipbox-mcp"may not resolve. If the server fails to start, replace"command": "slipbox-mcp"with the absolute path printed bywhich slipbox-mcp(typically/Users/yourname/.local/bin/slipbox-mcp).
Other MCP clients: register slipbox-mcp as the server command with SLIPBOX_BASE_DIR in its environment. The command and env are the same everywhere.
Instead of SLIPBOX_BASE_DIR, set absolute paths individually. Optional SLIPBOX_LOG_LEVEL is one of 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. Restart and Verify
Restart your client (Claude Code reloads on next launch; quit and reopen Claude Desktop).
Ask your agent:
"Create a test note about something"
"Search my slipbox for test"
"Find orphaned notes"
In Action
The hero above is the core loop. Here's the rest of what the agent does.
Proactive Maintenance
The agent reads the slipbox://maintenance-status resource at session start and surfaces clusters that need organizing.

Full-Text Search
BM25-ranked search across notes via slipbox_search_notes.

Knowledge Graph: Central Notes
slipbox_find_central_notes surfaces the structural anchors of the graph -- the notes everything else orbits.

Note Analysis
The analyze_note prompt evaluates atomicity, finds real connections in the existing graph, suggests tags, and rewrites for clarity.

Source Decomposition
The knowledge_creation prompt splits an article into atomic literature notes with proper citation and links.

Cluster Detection
slipbox_get_cluster_report finds groups of co-occurring tags that lack a structure note. Scored by size, orphan ratio, link density, and recency.

Structure Note Creation
slipbox_create_structure_from_cluster scaffolds a structure note, links all member notes, and dismisses the cluster.

Orphaned Notes
slipbox_find_orphaned_notes surfaces unintegrated knowledge -- candidates for connection or deletion.

Similar Notes
slipbox_find_similar_notes computes similarity from shared tags, common links, and content overlap.

Graph Traversal
slipbox_get_linked_notes shows typed links from a hub note, grouped by link type.

Knowledge Synthesis
The knowledge_synthesis prompt finds bridges between unconnected areas and proposes synthesis notes from your existing knowledge.

Zero Lock-In: Plain Files in Obsidian
Notes are plain markdown. Open the vault in Obsidian and everything works -- rendered content, backlinks, and the knowledge graph.
For a graph that renders the typed links in color (supports, extends, refines, ...) rather than Obsidian's untyped built-in graph, install the companion plugin Slipbox Semantic Graph -- a force-directed view with human-readable titles and color-coded semantic link types. Install it manually from the 0.1.0 release: copy main.js, manifest.json, and styles.css into <vault>/.obsidian/plugins/slipbox-graph/, then enable it in Settings → Community plugins. (Once it's accepted into the official directory, you'll also be able to install it via Settings → Community plugins → Browse → search "Slipbox Semantic Graph".) It reads the same frontmatter id and ## Links section the server writes, so no extra configuration is needed. Open the view with the Open semantic graph command (Command Palette) or the git-fork ribbon icon.

The legend across the top maps each color to a link type (extends, refines, supports, contradicts, questions, related). Focus a structure note and its constellation comes into view. Here, Contract Testing Knowledge Map with its member notes orbiting it:

Optional: Automatic Cluster Detection
Cluster analysis scans all notes and computes similarity scores. Running it daily (6am) pre-computes results so slipbox_get_cluster_report() returns instantly. Without scheduling, cluster detection runs on-demand, which is slower for large collections.
Run manually after bulk imports, major reorganization, or when you want immediate results.
Install Cluster Detection (macOS)
chmod +x scripts/install-cluster-detection.sh
./scripts/install-cluster-detection.shThe installer detects your Python/venv path, generates the LaunchAgent plist, and loads it.
Manual Test (File Watcher)
source .venv/bin/activate
python scripts/detect_clusters.pyOutput saved to ~/.local/share/mcp/slipbox/cluster-analysis.json.
Uninstall Cluster Detection
./scripts/install-cluster-detection.sh --uninstallOptional: macOS File Watcher for Auto-Indexing
The MCP server maintains a database index for fast searching. Editing notes in Obsidian (or any editor) makes the database stale until you run slipbox_rebuild_index.
The file watcher runs as a background daemon, monitoring your notes directory and automatically rebuilding the index when .md files change.
Use it if you frequently edit notes in Obsidian while also using Claude.
Install File Watcher (macOS)
chmod +x scripts/install-file-watcher.sh
./scripts/install-file-watcher.shThe installer detects your Python/venv path, installs watchdog if needed, and loads the LaunchAgent. Starts on login and restarts if it crashes.
Manual Test
source .venv/bin/activate
python scripts/watch_notes.pyEdit a note file. You should see "rebuilding index..." in the watcher output.
Check Status
launchctl list | grep slipbox.watcher
# View logs
tail -f ~/.local/share/mcp/slipbox/watcher.logUninstall File Watcher
./scripts/install-file-watcher.sh --uninstallRecommended System Prompt
Slipbox ships a baseline automatically: every client receives the server instructions on connect, covering how to use the tools well -- note types, link semantics, quality standards, and core workflows like search-before-create. You don't add those yourself.
docs/SYSTEM_PROMPT.md is the opt-in layer on top: the autonomy and initiative directives a server shouldn't assert on its own. Add it to your agent's preferences or system prompt to enable:
Automatic knowledge capture during conversations
Cluster emergence detection at conversation start
Tools Reference
Core Note Operations
Tool | Description |
| Create atomic notes (fleeting/literature/permanent/structure/hub) |
| Retrieve note by ID or title |
| Update existing notes |
| Delete notes |
Linking
Tool | Description |
| Create semantic links between notes |
| Remove links |
| Delete a specific link (errors if link does not exist) |
| Get notes linked to/from a note |
Search & Discovery
Tool | Description |
| Search by text (BM25-ranked), tags, or type |
| Find notes similar to a given note |
| Find most connected notes |
| Find unconnected notes |
| List notes by date range |
| List all tags |
Cluster Analysis
Tool | Description |
| Get pending clusters needing structure notes |
| Create structure note from cluster |
| Regenerate cluster analysis |
| Permanently dismiss cluster from suggestions |
Maintenance
Tool | Description |
| Rebuild database index from files |
Prompts Reference
MCP prompts are reusable workflow templates that encode the Zettelkasten method so you don't re-explain it every session.
Prompt | Description | Use When |
| Process information into 3-5 atomic notes | Adding articles, ideas, or notes |
| Process larger volumes into 5-10 notes | Processing books or long-form content |
| Map connections to existing knowledge | Exploring how topics relate |
| Create higher-order insights | Finding bridges between ideas |
| Evaluate a note's fitness for the slipbox | Reviewing a new or existing note |
| Surface pending housekeeping | Start of a working session |
How to Invoke: Slash Commands and Skills
Each workflow ships two ways:
MCP prompts: served by the running server.
Skills: standalone bundles (
skills/<name>/) that run the same workflow and add natural-language triggering.
Five of the six skills are generated from the same PROMPT_* templates the server uses (src/slipbox_mcp/server/descriptions.py), and CI fails if the committed skills/ drift from those templates. The sixth, cluster-maintenance, is authored directly in scripts/build_skills.py because its MCP prompt is a runtime-rendered status message rather than a reusable workflow.
Slash commands are the reliable path. Claude Code surfaces MCP prompts as /mcp__<server>__<prompt>; type /mcp__slipbox-mcp__ for the picker:
/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(Installed skills also expose their own slash commands by directory name, e.g. /slipbox-analyze-note.)
Natural language works once the matching skill is installed. Just describe what you want:
Analyze this note for my slipbox: [paste note]
Add this to my slipbox: [paste article]
Synthesize my notes on attention and memory.Prose triggering depends on the skill being installed and your phrasing matching its description; fall back to the slash command if it doesn't fire. Asking the model to "use the analyze_note prompt" by name does not work. The model can't invoke an MCP prompt by name. Use a slash command, or let a skill trigger from natural language.
Installing Skills
Claude Code discovers skills from .claude/skills/ (per project) or ~/.claude/skills/ (global), not from a bare top-level skills/. Symlink or copy the ones you want into a discovery path (e.g. for this project):
mkdir -p .claude/skills
ln -s ../../skills/slipbox-analyze-note .claude/skills/slipbox-analyze-note
# ...or copy the directories, or symlink all sixClaude Desktop needs each skill as a .skill bundle. Build them, then upload:
python scripts/build_skills.py # writes dist/*.skillGo to Settings → Skills → Upload skill and select the bundles from dist/ you want. Each installs as both a slash command and a natural-language trigger.
After editing a prompt template in descriptions.py, re-run the build to regenerate the skills.
Link Types
Type | Use When | Inverse |
| Generic "see also" connection | reference |
| Building on another idea | extended_by |
| Clarifying or improving | refined_by |
| Opposing view | contradicted_by |
| Raising questions about | questioned_by |
| Providing evidence for | supported_by |
| Loose thematic connection | related |
Note Types
Type | Purpose |
| Quick captures, unprocessed thoughts |
| Ideas from sources with citation |
| Refined ideas in your own words |
| Maps organizing 7-15 related notes on a specific topic |
| Domain overview linking to structure notes; entry point for navigating a broad area of knowledge |
Structure vs. Hub: A structure note organizes a cluster of permanent notes around a single topic. It is a curated map one level above the notes themselves. A hub note operates one level higher still: it links to structure notes (and occasionally key permanent notes) across an entire knowledge domain. Where a structure note answers "what do I know about X?", a hub note answers "how is my knowledge of this whole domain organized?" Most Zettelkastens need only a handful of hub notes.
File Format
Notes are stored as Markdown files with YAML frontmatter:
---
id: "20251217T172432480464000"
title: "Poetry Revision Principles"
type: structure
tags:
- poetry
- revision
- craft
created: "2025-12-17T17:24:32"
updated: "2025-12-17T17:24:32"
---
# Poetry Revision Principles
Content here...
## Links
- reference [[20250728T125429845760000]] Member of structureYou can edit these files directly in any text editor or Obsidian. Run slipbox_rebuild_index after external edits.
Upgrading
After pulling new versions, restart Claude Desktop. If the release notes mention database changes, run slipbox_rebuild_index once to bring your existing database up to date.
Upgrading to FTS5 search (any version after the FTS5 release): The full-text search index is created automatically when the server starts against a new database. For existing databases, the FTS5 table will be created on first startup but will be empty until you run:
slipbox_rebuild_indexThis populates the BM25 index from your existing notes. Search results will not be relevance-ranked until this is done.
Troubleshooting
Server not loading in Claude Desktop
Confirm the launcher resolves:
which slipbox-mcpshould print a path (typically~/.local/bin/slipbox-mcp).If it resolves in your terminal but Desktop still can't start it, the GUI app isn't seeing
~/.local/binon its PATH. Replace"command": "slipbox-mcp"with the absolute path from step 1.Check Claude Desktop logs for errors.
slipbox-mcp: command not found
The console script wasn't installed or isn't on PATH. Reinstall with pipx install --editable . --force, then verify with which slipbox-mcp. If pipx's bin directory is missing from PATH, run pipx ensurepath and restart your shell.
Notes directory points to ~/... literally
If your notes directory ends up at ./~/... relative to CWD, you used ~ in the JSON config. Claude Desktop does not expand ~. Replace it with the full absolute path.
Search returns no results
The FTS5 index may not be populated. Run
slipbox_rebuild_indexonce to index existing notes.If you recently edited notes outside Claude, the index may be stale. Run
slipbox_rebuild_index.
slipbox_list_notes_by_date returns empty results
If start_date is later than end_date, no notes match and an empty result is returned. This is expected behavior, not an error.
Database out of sync
If notes were edited outside the MCP server:
slipbox_rebuild_indexCluster detection not running
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.shFile watcher not running
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.shUpgrading from ZETTELKASTEN_* environment variables
If you previously used ZETTELKASTEN_NOTES_DIR, ZETTELKASTEN_DATABASE_PATH, or other ZETTELKASTEN_* variables, they are no longer read. Rename them to their SLIPBOX_* equivalents:
Old | New |
|
|
|
|
|
|
|
|
|
|
The server logs a warning if old names are detected, but does not migrate them automatically.
Cluster report path is not configurable
The cluster analysis report always writes to ~/.local/share/mcp/slipbox/cluster-analysis.json, regardless of SLIPBOX_BASE_DIR or SLIPBOX_NOTES_DIR. If you use non-default paths, the cluster report will still be in the default location.
Install scripts are macOS-only
The scripts/install-cluster-detection.sh and scripts/install-file-watcher.sh scripts use launchctl and ~/Library/LaunchAgents/, which only exist on macOS. On Linux, you'll need to create equivalent systemd units or cron jobs manually. See the manual test commands in the relevant README sections to verify the underlying Python scripts work on your platform.
Default paths are relative to the working directory
If SLIPBOX_NOTES_DIR and SLIPBOX_DATABASE_PATH are not set, the server defaults to data/notes and data/db/zettelkasten.db relative to the current working directory. When running via Claude Desktop, the CWD may not be what you expect. Always set absolute paths in claude_desktop_config.json to avoid this.
Development
Setup
git clone https://github.com/jamesfishwick/slipbox-mcp.git
cd slipbox-mcp
uv venv && uv pip install -e ".[dev]"Testing
The project has three tiers of tests:
Tier | Count | Speed | Cost | Command |
Unit + integration | 219 | ~2s | Free |
|
Tool contract tests | 22 | ~0.5s | Free |
|
LLM evals | 28 | ~10min | ~$3-5 |
|
# Default: runs unit + contract tests (CI runs this)
pytest
# Run everything except LLM evals
pytest tests/ evals/tool_contracts/
# Run LLM evals (requires claude CLI authenticated)
pytest evals/llm/ -v
# Run LLM evals with a specific model
EVAL_MODEL=sonnet pytest evals/llm/ -v
# Lint
ruff check src/ evals/Unit tests cover internal logic -- services, repository, models, parsing.
Tool contract tests verify the MCP tool output format that the LLM sees -- parseable structure, chaining (create -> search -> get), and helpful error messages. These are deterministic and don't call any LLM.
LLM evals send prompts to an LLM via the claude CLI with the MCP server connected, then grade results by inspecting the database state (notes created, links made, tags applied). They test whether the LLM actually uses the tools correctly given the tool descriptions.
CI/CD
Branch protection: Direct pushes to main are blocked. All changes go through PRs.
Workflow | Trigger | Runner | What |
| Every PR + push to main | GitHub-hosted | Unit + contract tests, ruff lint + format |
| Opt-in (label or manual) | Self-hosted | 28 LLM evals via claude CLI |
| Push to | GitHub-hosted | release-please PR; on its merge, build + publish to PyPI |
The LLM eval suite is expensive (~$3-5, ~10 min) and self-hosted, so it never runs automatically. A path-based trigger can't distinguish a real prompt change from a cosmetic reformat. Run it deliberately when you change prompt or tool-description semantics:
Add the
run-llm-evalslabel to the PR. It runs, and re-runs on each push while the label is present.Or trigger it manually from the Actions tab (
workflow_dispatch).Or run it locally without the runner:
pytest evals/llm/ -v.
Without a label or manual dispatch, the job is skipped (no runner allocated, no cost).
Customizing the eval setup
If you don't want a self-hosted runner: remove .github/workflows/llm-evals.yml and run pytest evals/llm/ -v locally before merging prompt changes.
If you want LLM evals on every PR automatically: add a pull_request trigger with the relevant paths: filter and drop the label gate in the job's if:. But expect incidental triggers from formatting-only edits.
To change the default eval model: Set EVAL_MODEL in your environment or in the workflow file. Default is haiku for speed/cost.
To set up a self-hosted runner:
# Get a registration token
gh api repos/OWNER/REPO/actions/runners/registration-token -X POST -q '.token'
# Download and configure
mkdir -p ~/.github-runners/slipbox-mcp && cd ~/.github-runners/slipbox-mcp
curl -sL -o actions-runner.tar.gz https://github.com/actions/runner/releases/latest/download/actions-runner-osx-arm64-2.325.0.tar.gz
tar xzf actions-runner.tar.gz
./config.sh --url https://github.com/OWNER/REPO --token <TOKEN> --unattended
nohup ./run.sh &Releasing to PyPI
Releases are automated. The Release workflow (.github/workflows/release.yml) runs release-please on every push to main and publishes via PyPI Trusted Publishing (OIDC, so no API token is stored in repo secrets).
The flow (you never hand-edit a version or push a tag):
Land changes on
mainwith Conventional Commit messages (feat:→ minor bump,fix:→ patch,feat!:/BREAKING CHANGE:→ major). The repo's commit hooks already enforce this shape.release-please keeps a standing "release PR" open, accumulating the next version bump (in
src/slipbox_mcp/__init__.py) and theCHANGELOG.mdentries derived from those commits.When you're ready to ship, merge the release PR. That tags the release (
v<version>) and, in the same workflow run, builds the sdist + wheel, runstwine check, and publishes to PyPI.
So cutting a release is one click: merge the bot's PR. Nothing else.
Commit types decide the version. So type accurately. The bump is computed mechanically from the Conventional Commit prefixes since the last release, not from the size of the change. Reserve feat:/fix: for changes to the shipped package; use the non-releasing types for everything else:
Prefix | Version effect | Use for |
| minor (1.3.0 → 1.4.0) | new runtime capability in the package |
| patch (1.3.0 → 1.3.1) | bug fix in the package |
| major (1.3.0 → 2.0.0) | backwards-incompatible change |
| none | docs, tooling, CI, packaging, internal-only changes |
A batch of only non-releasing commits produces no release PR at all. The squash-merge title is the commit release-please reads, so the PR title's prefix is what counts. Label it for what the package gains, not for the effort spent.
One-time setup (already done for this repo, documented for forks):
On PyPI, register a pending trusted publisher for project
slipbox-mcp: Owner:jamesfishwick· Repository:slipbox-mcp· Workflow:release.yml· Environment:release. All four must match exactly.In GitHub, create an environment named
release(Settings → Environments). If you restrict its deployment refs, add a tag rulev*(a branch rule of the same name will not match the tag).
The version is defined once, in
src/slipbox_mcp/__init__.py(release-please bumps it; the# x-release-please-versionmarker tells it which line).pyproject.toml(dynamic = ["version"]) and the server'sserver_versionboth read from it, so there is nothing to keep in sync; the tag release-please cuts always matches the package version by construction.
To rehearse a build without publishing, run it by hand: python -m build && twine check dist/* (and twine upload --repository testpypi dist/* with a TestPyPI token to dry-run the upload).
Shared prompt constants
All tool descriptions and prompt templates live in src/slipbox_mcp/server/descriptions.py. Both the MCP server and the eval tests import from this single source of truth. If you change a prompt, the evals test whether the LLM still behaves correctly with the new wording.
Debug logging
SLIPBOX_LOG_LEVEL=DEBUG python -c "from slipbox_mcp.main import main; main()"CLI Tool
The slipbox command provides terminal access for mechanical operations:
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 countsInstall: pipx install --editable . (adds slipbox to your PATH)
Experimental: Slipbox as agent memory
An untested hypothesis, not a recommended setup. Everything above helps an agent manage your knowledge. This inverts it: the agent uses a slipbox as its own persistent memory across sessions, in place of native memory or a rules file.
The model has no memory between sessions, so the slipbox is the only channel one session leaves for the next. It writes briefings for a cold successor (a failure and why, a recurring constraint, a correction, a hard-won fact), tags them agent-memory, and searches that tag before acting. The bet is that a connected memory beats a flat rules file, because you retrieve it by traversal.
Three things to know first: namespace isolation is a tag convention, not enforced, so run it against a separate slipbox instance; "memory" is a misnomer, since nothing persists but the notes themselves; and the growth discipline is the unproven part, so expect sprawl on the first run. Full write-up and caveats: Slipbox as Agent Self-Memory.
Documentation
Doc | What's in it |
Note ID format, the five note types, and a one-page cheat sheet for the method. | |
Running the same workflow by hand in Obsidian, no agent involved. | |
How Slipbox's links map to | |
Which other tools can read and write the same vault. | |
The opt-in autonomy layer: auto-capture, cluster detection, and the agent-memory experiment. | |
A worked session showing the tools in use. |
Contributing
See CONTRIBUTING.md for setup instructions, coding standards, and how to submit changes.
Roadmap
See ROADMAP.md for planned features and future direction.
Sponsor
If slipbox-mcp is useful to you, consider sponsoring the project.
License
MIT
Available Tools
19 toolsslipbox_create_linkA
Create a semantic link between two notes.
Links are directional: source -> target. Use bidirectional=true for important relationships (automatically creates inverse link type).
Link Types:
reference: Generic "see also" connection
extends: Source builds upon target (inverse: extended_by)
refines: Source clarifies or improves target (inverse: refined_by)
contradicts: Source presents opposing view (inverse: contradicted_by)
questions: Source raises questions about target (inverse: questioned_by)
supports: Source provides evidence for target (inverse: supported_by)
related: Loose thematic connection (symmetric)
Best Practices:
Always add description explaining WHY notes are linked
Use bidirectional=true for substantive relationships
Create links immediately after creating notes
Args: source_id: ID of the source note (the note doing the linking) target_id: ID of the target note (the note being linked to) link_type: One of reference/extends/refines/contradicts/questions/supports/related description: Brief explanation of the relationship bidirectional: If true, creates inverse link from target to source
| Name | Required | Description | Default |
|---|---|---|---|
| link_type | No | reference | |
| source_id | Yes | ||
| target_id | Yes | ||
| description | No | ||
| bidirectional | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It discloses directional behavior and inverse link creation via bidirectional, and details link type semantics. However, it omits preconditions (e.g., notes must exist), error behavior, and side effects on the notes, which is a notable gap for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized into clear sections: overview, link types, best practices, and args. Every sentence serves a purpose, and the link type enumeration is necessary for correct usage. No redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With five parameters, no annotations, and no output schema, the description covers the core aspects: purpose, parameter semantics, and usage guidance. However, it doesn't mention what the tool returns (e.g., created link ID) or state that source and target notes must already exist. These omissions slightly reduce completeness for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description is the sole explainer. The 'Args' section gives explicit meanings for all five parameters, and the 'Link Types' section elaborates each allowed value for link_type. This is far more informative than the schema's bare titles and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Create a semantic link between two notes,' clearly identifying the action and object. It distinguishes this tool from sibling tools like slipbox_remove_link and slipbox_get_linked_notes by focusing on creation. The directional semantics and link type list further clarify its specific purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Best Practices' section provides actionable guidance: always add a description, use bidirectional=true for substantive relationships, and create links immediately after notes. However, it doesn't explicitly state when not to use this tool or mention alternatives (e.g., other link-related tools), so it falls 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_create_noteA
Create a new atomic Zettelkasten note.
Each note should contain exactly one idea. After creating, immediately
link to related notes using slipbox_create_link.
Note Types:
- fleeting: Quick captures, unprocessed thoughts (process within 24-48 hours)
- literature: Ideas extracted from sources. REQUIRES at least one entry
in references (citation or URL). If you don't yet have the citation,
use 'fleeting' as a staging type and promote to 'literature' once
the source is attached.
- permanent: Refined ideas in the user's own words (the core of your Zettelkasten)
- structure: Maps organizing 7-15 related notes on a topic
- hub: Entry points into major knowledge domains
Authoring:
- Store `content` exactly as the user provided it. Do NOT rewrite,
expand, or restructure their words. Compose or refine content only
when explicitly asked (e.g. "draft", "refine", "make it standalone").
Best Practices:
- Title should express the idea in brief (understandable without reading content)
- A refined permanent note typically runs 3-7 paragraphs and stands
alone; match the length of what the user gave you, though — a
one-line capture stays one line.
- Use 2-5 specific tags; prefer existing tags when they fit
- Search first (slipbox_search_notes) to avoid duplicating existing notes
Args:
title: Concise title expressing the core idea
content: Full note content in markdown
note_type: One of fleeting/literature/permanent/structure/hub (default: permanent)
tags: Comma-separated tags, e.g. "poetry,revision,craft"
references: Newline-separated citations to external sources (e.g. "Ahrens, S. (2017). How to Take Smart Notes.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| title | Yes | ||
| content | Yes | ||
| note_type | No | permanent | |
| references | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so well. It discloses key traits: atomicity ('exactly one idea'), content preservation ('Store content exactly as the user provided it. Do NOT rewrite'), and note-type-specific requirements (literature requires references or use fleeting). It stops short of describing error/duplicate behavior, but the disclosed rules are substantial and useful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively long but well-organized with clear sections: intro, note types, authoring, best practices, and Args. Every section adds substantive value, and the front-loaded purpose makes the tool's role clear immediately. Slight verbosity exists (e.g., note type bullet details), but it is structured and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 params, multiple note types with special rules) and no output schema, the description covers all necessary usage aspects: note type definitions, references requirement, authoring constraints, best practices, and parameter documentation. It is sufficiently complete for an agent to invoke the tool correctly without additional external knowledge.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides no descriptions (0% coverage), but the description's 'Args:' section explains every parameter with meaning, defaults, and format examples (e.g., tags: 'poetry,revision,craft'). This fully compensates for schema gaps and adds rich detail that the raw schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Create a new atomic Zettelkasten note.' It clearly distinguishes creation from sibling tools by explicitly referencing slipbox_create_link and slipbox_search_notes and by outlining note-type semantics. This is unambiguous and action-oriented.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides strong when-to-use guidance: 'Search first (slipbox_search_notes) to avoid duplicating existing notes' and 'After creating, immediately link to related notes using slipbox_create_link.' It also explains conditional usage for note types (e.g., using 'fleeting' as a staging type when references are missing), which helps the agent choose the correct type of creation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slipbox_create_structure_from_clusterA
Create a structure note from a detected cluster.
Generates a structure note organizing all notes in the cluster, with bidirectional links to each member note.
Run slipbox_get_cluster_report first to see available clusters and their IDs.
Args: cluster_id: ID from cluster report (e.g. "jackson-mac-low-chance-operations") title: Override the suggested title (optional) create_links: Create bidirectional links to member notes (default: true)
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| cluster_id | Yes | ||
| create_links | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full transparency burden. It discloses the core behavior (creating a structure note, organizing cluster notes, and creating bidirectional links), which is valuable. However, it does not mention edge cases (e.g., what happens if the cluster ID is invalid), permissions, or whether the operation is reversible, leaving some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a clear one-line purpose, a brief expansion of what it does, a key prerequisite, and a compact Args list. All sentences contribute value, and it is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides the essential context: what the tool creates, how links work, and the prerequisite. With no output schema and no annotations, it could further describe the return value or error behavior, but for a creation tool it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero descriptions, so the description fully compensates by explaining each parameter: cluster_id with an example, title as an override, and create_links with its default behavior. This adds significant meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Create a structure note from a detected cluster.' It clarifies the tool's function (organizing cluster notes, creating bidirectional links) and is distinct from siblings like slipbox_create_note or slipbox_get_cluster_report.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs to run slipbox_get_cluster_report first to see available clusters and IDs, providing clear context on when to use this tool. While it does not enumerate alternatives or exclusions, the prerequisite guidance is strong, so it earns a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slipbox_delete_linkA
Delete a specific link from one note to another.
Unlike slipbox_remove_link, this tool returns an error if no link exists between the two notes.
Args: source_id: ID of the source note (the note containing the link) target_id: ID of the target note (the note being linked to)
| Name | Required | Description | Default |
|---|---|---|---|
| source_id | Yes | ||
| target_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of disclosure. It adds the behavior that an error is returned if no link exists, which is beyond the schema. However, it doesn't mention other behavioral aspects like reversibility or side effects on notes, so it's minimal but not inadequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences plus a minimal Args block, with no filler or redundant information. It front-loads the purpose and then gives the key differentiator.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (two params, no output schema), the description covers the purpose, parameter semantics, and key behavioral distinction. It is sufficient for a focused tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides only names and types, with 0% description coverage. The description's Args section explains that source_id is the note containing the link and target_id is the note being linked to, adding necessary semantic meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Delete a specific link from one note to another,' which clearly states the verb, resource, and scope. The 'Unlike slipbox_remove_link' sentence distinguishes it from the closest sibling, clarifying its specific behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly contrasts with slipbox_remove_link by noting the error-on-missing-link behavior, which guides the user on when to choose this tool over the alternative. This is a clear usage guideline, though it doesn't mention other tools or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slipbox_delete_noteA
Delete a note permanently.
Warning: This also removes all links to and from this note. Consider updating note_type to "fleeting" instead if uncertain.
Args: note_id: The ID of the note to delete
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that deletion is permanent and also removes all links to and from the note. This is critical behavioral information beyond the basic delete action, making the tool's effects transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: main action first, followed by a warning and alternative suggestion, then a simple args list. Every sentence provides useful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete operation with one parameter and no output schema, the description covers the core action, the permanent effect, cascading link removal, and an alternative. This is sufficiently complete for an agent to select and invoke the tool appropriately, given the sibling context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, so the description must compensate. However, the only parameter documentation is 'note_id: The ID of the note to delete', which merely restates the parameter name without adding meaningful semantic detail (e.g., format, how to obtain the ID, or constraints). This adds minimal value over the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Delete a note permanently' with a specific verb and resource. It also differentiates from the update alternative by suggesting 'updating note_type to fleeting' for uncertain cases, which distinguishes it from sibling tools like slipbox_update_note.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to avoid this tool: 'Consider updating note_type to fleeting instead if uncertain.' This clearly tells the agent when not to use deletion and points to an alternative action, serving as a usage guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slipbox_dismiss_clusterA
Permanently dismiss a cluster from maintenance suggestions.
Use this when a cluster has been reviewed and determined not to need a structure note, or when the user doesn't want to be reminded about it.
Args: cluster_id: The cluster ID to dismiss (e.g. "poetry-craft-revision")
| Name | Required | Description | Default |
|---|---|---|---|
| cluster_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It discloses the key behavioral trait: the action is 'Permanently' dismiss, implying irreversibility. It also specifies the effect on maintenance suggestions. It does not detail other side effects, but for a simple dismiss action this is sufficient and adds meaningful context beyond the name/schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the first sentence states the action, the second gives usage context, and the final part documents the parameter. Every sentence adds value without unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one parameter, no output schema), and the description covers purpose, usage, and parameter meaning. It is sufficiently complete for an agent to select and invoke the tool correctly without ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides only 'cluster_id' with a type and title, with 0% description coverage. The description compensates by explaining what the parameter is: 'The cluster ID to dismiss' and provides a concrete example ('poetry-craft-revision'). This gives the agent a clear understanding of the expected format and semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear, specific verb+resource: 'Permanently dismiss a cluster from maintenance suggestions.' This clearly distinguishes it from sibling tools like refresh_clusters or create_structure_from_cluster. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: '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.' This gives concrete scenarios and implicitly tells when not to use it (when a structure note IS needed), differentiating it from alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slipbox_find_central_notesA
Find the most connected notes in the Zettelkasten.
Central notes have the most incoming and outgoing links, making them key hubs in your knowledge network. Good candidates for hub notes.
Args: limit: Maximum results (default: 10)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It explains that centrality is based on incoming and outgoing links, but does not disclose whether the operation is strictly read-only, what the return format is, or any prerequisites (e.g., indexed notes). This is adequate for a simple query but leaves some behavioral aspects implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a one-sentence purpose, a brief definition of 'central', and an Args block. Every sentence adds value with no repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description explains what the tool does and what 'central' means, but it does not describe the output format (e.g., list of note IDs vs. notes with scores) or any dependencies like an index. While the main use case is clear, the return behavior is not specified, leaving a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explicitly documents the only parameter 'limit' as 'Maximum results (default: 10)', which fully clarifies its purpose and default value. Since the schema itself provides no description and has 0% coverage, the description compensates completely for this gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Find the most connected notes in the Zettelkasten.' It uses a specific verb ('find'), resource ('notes'), and scope ('most connected'), and distinguishes itself from sibling tools like find_similar_notes and find_orphaned_notes by focusing on connectivity/hub status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for use: 'Good candidates for hub notes' implies the tool is for identifying pivotal notes in the knowledge network. It does not explicitly name alternatives or exclusions, but the context is unambiguous and sufficient for basic selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slipbox_find_orphaned_notesA
Find notes with no connections to other notes.
Orphaned notes represent unintegrated knowledge. Review these periodically to either link them to existing notes or identify candidates for deletion.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of conveying behavioral traits. 'Find' implies a read-only operation, and the description adds context about why orphaned notes matter and what to do with them. However, it does not explicitly state safety (e.g., no modifications) or output format, leaving some ambiguity for a zero-parameter tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, tightly written with no fluff. The first sentence states the purpose, and the second adds valuable context and guidance. Every sentence earns its place, making it exceptionally concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool with no output schema, the description is complete. It states what it finds, why it matters, and when to use it. No further details are necessary for an agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema covers everything. According to the baseline rule for 0 params, a score of 4 is appropriate. The description adds no parameter info (correctly, as there are none).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb ('Find') and resource ('notes with no connections to other notes'). It distinguishes itself from sibling tools like find_similar_notes and find_central_notes by defining 'orphaned' explicitly, leaving no ambiguity about what it does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context ('Review these periodically') and suggests follow-up actions (link or delete). However, it does not mention alternatives or when-not-to-use, so it falls short of the highest bar which requires explicit exclusions or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slipbox_find_similar_notesA
Find notes similar to a given note.
Similarity is based on shared tags, common links, and content overlap. Useful for discovering connections you might have missed.
Args: note_id: ID of the reference note threshold: Minimum similarity score 0.0-1.0 (default: 0.3) limit: Maximum results (default: 5)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| note_id | Yes | ||
| threshold | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the transparency burden. It discloses the algorithm (shared tags, links, content overlap), the meaning of threshold (minimum similarity 0.0-1.0), and the limit parameter behavior. It does not describe return format or edge cases, but these are relatively minor for a read-only similarity finder.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then provides the similarity basis, a use-case sentence, and a compact Args list. Every sentence earns its place; there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple lookup tool with no output schema, the description covers purpose, algorithm, and all parameters. It does not state the return format or sorting order, but given the tool's low complexity and clear parameter explanations, the description is sufficiently complete for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully compensate. It does: note_id is 'ID of the reference note', threshold is 'Minimum similarity score 0.0-1.0 (default: 0.3)', and limit is 'Maximum results (default: 5)'. This adds crucial meaning absent from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Find notes similar to a given note', which uses a specific verb ('Find') and resource ('notes') and clearly distinguishes this from search, central, or orphaned note tools. The similarity basis (shared tags, common links, content overlap) further clarifies its exact role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The line 'Useful for discovering connections you might have missed' gives clear context for when to use this tool. It does not explicitly name alternatives or state when not to use it, but the context is strong enough to guide tool selection among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slipbox_get_all_tagsA
Get all tags in the Zettelkasten.
Returns alphabetically sorted list of all tags. Use this to find existing tags before creating new notes to maintain tag consistency across your knowledge base.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the behavior of returning an alphabetically sorted list, which is a useful behavioral trait. It does not explicitly state side effects, but for a getter tool, the absence of mutation is implied, and the description adds value beyond the bare 'Get all tags' statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each earning its place: the first states the purpose, the second describes the output, and the third gives usage context. It is front-loaded with the core action and contains no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple getter with no output schema, the description adequately explains what the tool returns (alphabetically sorted list) and why to use it. It covers the essential contextual information for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema is completely covered (100%). The description adds no parameter information because there are none to explain. Baseline for zero parameters is 4, which is appropriate here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'all tags in the Zettelkasten', with a specific detail that the list is alphabetically sorted. It distinguishes itself from sibling tools by focusing solely on tag retrieval, which none of the other siblings do directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit context: 'Use this to find existing tags before creating new notes to maintain tag consistency.' It gives a clear when-to-use scenario but does not mention when-not-to-use or name alternatives, as there are no direct sibling alternatives for this function.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slipbox_get_cluster_reportA
Get pending cluster analysis for structure note creation.
Clusters are groups of notes sharing tags but lacking a structure note. High-scoring clusters are good candidates for new structure notes.
Uses cached analysis by default. Set refresh=true to regenerate. Cluster analysis runs automatically via cron if configured.
Scoring factors:
Note count (7-15 is ideal, >15 is overdue)
Orphan ratio (more orphans = more urgent)
Internal link density (fewer links = needs structure)
Recency (recent activity = active domain)
Args: min_score: Minimum cluster score 0.0-1.0 (default: 0.5) limit: Maximum clusters to return (default: 5) include_notes: Include full note list per cluster (default: false) refresh: Force regeneration of cluster analysis (default: false)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| refresh | No | ||
| min_score | No | ||
| include_notes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses caching (uses cached analysis by default, refresh=true to regenerate), cron behavior, and scoring factors. This is strong, but it omits potential performance implications of refresh or any side effects, leaving a minor transparency gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized: a clear one-line purpose, a brief explanation of clusters, a bulleted list of scoring factors, and a concise Args block. Every sentence adds value and the structure makes scanning easy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description gives strong context (what clusters are, how scoring works, defaults, refresh semantics) and implies return structure via parameters like limit and include_notes. However, without an output schema, it doesn't fully describe the returned cluster objects, leaving some ambiguity about the exact fields returned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description fully compensates by defining each parameter with type, default, and purpose (min_score, limit, include_notes, refresh). This is exactly what an agent needs to invoke the tool correctly and goes beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Get pending cluster analysis for structure note creation.' It clearly distinguishes from siblings like slipbox_create_structure_from_cluster (which creates) and slipbox_refresh_clusters (which refreshes) by focusing on retrieval of pending analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the intended use case: high-scoring clusters are good candidates for new structure notes. It also provides context on cached vs refresh behavior and cron automation. However, it doesn't explicitly name alternatives or say when *not* to use this tool, so it falls 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_get_linked_notesA
Get notes linked to or from a specific note.
Use this to explore the knowledge graph around a note.
Directions:
outgoing: Notes this note links TO
incoming: Notes that link TO this note
both: All connected notes in either direction
Args: note_id: ID of the note to explore from direction: One of outgoing/incoming/both (default: both)
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | ||
| direction | No | both |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior. It explains the direction modes (outgoing, incoming, both) which is helpful, but it omits return format, pagination, error handling, or whether links are recursive. This is a moderate level of transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized, using bullets for directions and a clear Args block. Every sentence contributes useful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with two simple parameters and no output schema, the description covers purpose, usage context, direction semantics, and parameter meaning. It lacks details on the return structure or possible failures, but is reasonably complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameters. It does so in the 'Args' section, defining note_id as 'ID of the note to explore from' and direction as 'One of outgoing/incoming/both (default: both)'. This adds clear meaning beyond the bare schema fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Get notes linked to or from a specific note.' This specifies both the verb and the resource, and it distinguishes the tool from sibling tools like search_notes or find_similar_notes by focusing on graph links.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The line 'Use this to explore the knowledge graph around a note' provides clear use-case context. It doesn't explicitly mention alternatives or when not to use it, but the primary scenario is well communicated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slipbox_get_noteA
Retrieve a note by ID or title.
Returns full note content including metadata, tags, and links. Use this to read note contents before creating links or updates.
Args: identifier: Either the note ID (e.g. "20251217T172432480464000") or exact title
| Name | Required | Description | Default |
|---|---|---|---|
| identifier | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose return content ('full note content including metadata, tags, and links') and identifier semantics ('either the note ID ... or exact title'). However, it does not mention behavior on non-existent notes or potential ambiguity between ID and title formats, leaving some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded, starting with the primary purpose, then outlining return value and usage. The Args section is clear and every sentence serves a purpose with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (single parameter, no output schema), the description covers the core aspects: what it does, how to use the parameter, what to expect in return, and when to use it. Missing details about error handling are minor for a retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has no description for the parameter, so the description compensates by explaining that 'identifier' can be either a note ID (with example) or an exact title. This adds meaningful semantics beyond the raw schema field.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Retrieve a note by ID or title', which is a specific verb and resource. It distinguishes from sibling tools like search, update, and delete by specifying a read operation for a single note.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit guidance: 'Use this to read note contents before creating links or updates.' This gives a clear context for when to use the tool, though it does not mention alternatives or when not to use it, such as for searching by keywords.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slipbox_list_notes_by_dateA
List notes by creation or update date.
Useful for reviewing recent work or finding notes from a specific period.
Args: start_date: Start date in ISO format YYYY-MM-DD (optional) end_date: End date in ISO format YYYY-MM-DD (optional) use_updated: If true, filter by updated_at instead of created_at (default: false) limit: Maximum results (default: 10)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| end_date | No | ||
| start_date | No | ||
| use_updated | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the safety and behavior burden. It discloses the core behavior: filtering by created_at or updated_at via the use_updated flag, with defaults for limit. It also clarifies that dates are optional, implying unfiltered listing when omitted. No destructive side effects are implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: a one-line summary, a usage note, and a structured list of arguments. No redundant text or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool, the description covers the purpose, usage context, all parameters with defaults and format, and the alternative date field. It could mention ordering or behavior with no dates, but these are implicit. Overall it is sufficiently complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description fully compensates by explaining each parameter: start_date and end_date in ISO format, use_updated as a filter switch, and limit as maximum results with defaults. This is exactly what an agent needs to invoke the tool correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'List notes by creation or update date,' a specific verb and resource, clearly distinguishing from siblings like search_notes or get_note. It explicitly describes the date-based filtering functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes 'Useful for reviewing recent work or finding notes from a specific period,' providing clear use-case context. It does not explicitly name alternative tools or mention when not to use it, but the guidance is sufficient for a straightforward list tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slipbox_rebuild_indexA
Rebuild the database index from markdown files.
Use this if notes were edited outside the MCP server or if the database seems out of sync with the filesystem.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden for behavioral disclosure, but it only states the action and a trigger condition. It does not disclose whether the rebuild is destructive, what side effects it has, or what the outcome looks like (e.g., whether it overrides existing index state or updates in place).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences. The first states the action, and the second provides the when-to-use guidance. No filler or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no output schema), the description covers the essential context: what it does and when to use it. It could mention potential side effects or whether it is safe to run, but for a straightforward rebuild operation it is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline for parameter semantics is 4. The description adds no parameter-specific details, but none are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Rebuild the database index from markdown files') with a specific verb and resource, distinguishing it from sibling tools like refresh_clusters or get_note.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use the tool: if notes were edited outside the MCP server or if the database seems out of sync. It provides clear context but does not mention exclusions or alternative tools, 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_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 ~/.local/share/mcp/slipbox/cluster-analysis.json
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must carry the behavioral disclosure burden. It states that the tool regenerates analysis and saves to a file, implying a write operation. The specific output path is given, but it does not mention whether it overwrites the existing file, whether it is idempotent, or any potential side effects. There is no explicit statement about mutation or reversibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a one-sentence purpose followed by a bulleted list of analysis criteria. Every sentence earns its place, with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-argument tool with no output schema, the description covers the purpose, input data, analysis dimensions, and output file. It does not explicitly describe the report format or return value, but saving to a file is sufficiently clear. The sibling tools (get_cluster_report, create_structure_from_cluster) provide additional context for how the output is used.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description adds value by explaining the implicit inputs: all notes, tags, connections, and structure note coverage. This gives meaning beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Regenerate cluster analysis and save report', which is a specific verb+resource. It further details the analysis criteria (tag co-occurrence, connection patterns, structure note coverage), and the output path. This distinguishes it from sibling tools like get_cluster_report, which likely reads the existing report.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: it analyzes all notes and saves a report, implying it is used to refresh cluster data. However, it does not explicitly mention when to use it instead of alternatives like get_cluster_report or after specific changes. The when-not guidance is implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slipbox_remove_linkC
Remove a link between two notes.
Args: source_id: ID of the source note target_id: ID of the target note bidirectional: If true, removes links in both directions
| Name | Required | Description | Default |
|---|---|---|---|
| source_id | Yes | ||
| target_id | Yes | ||
| bidirectional | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description must disclose behavioral details. It explains the 'bidirectional' parameter but does not mention side effects such as error behavior when the link does not exist, whether the operation is reversible, or permission requirements. This is a notable gap for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured with an Args block that lists each parameter. It avoids unnecessary verbosity and is appropriately sized for a simple tool with three parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is relatively simple, and the description covers the basic functionality and the meaning of the bidirectional flag. However, it omits critical context such as how it differs from slipbox_delete_link, whether missing links cause errors, and any effects on the underlying notes. Given no output schema or annotations, the description is not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides brief explanations for each parameter ('ID of the source note', 'ID of the target note', 'If true, removes links in both directions'), which adds some meaning beyond the bare schema types and titles. However, the explanations are fairly obvious and do not deeply elaborate on formats or edge cases, so it does not fully compensate for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Remove a link between two notes' with a specific verb and resource, clearly indicating the action. However, it does not distinguish itself from sibling tool slipbox_delete_link, which likely performs a similar function, so it earns a 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus slipbox_delete_link or slipbox_create_link. The description lacks any context about prerequisites, alternatives, or conditions for appropriate use, so it provides minimal usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slipbox_search_notesA
Search for notes by text, tags, or type.
Searches across titles and content. Combine parameters for precise filtering.
Examples:
Search by topic: query="poetry revision"
Filter by tag: tags="craft,poetry"
Find structure notes: note_type="structure"
Combined: query="metaphor" tags="poetry" limit=5
Args: query: Text to search in titles and content (optional) tags: Comma-separated tags to filter by, e.g. "poetry,craft" (optional) note_type: Filter by type: fleeting/literature/permanent/structure/hub (optional) limit: Maximum results to return (default: 10)
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| limit | No | ||
| query | No | ||
| note_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses search scope (titles and content), tag format (comma-separated), note_type allowed values, and limit default. However, it does not describe result ordering, case sensitivity, or return format, which is a notable gap for a search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with an intro, behavior statement, bulleted examples, and a clean parameter list. Every sentence provides useful information with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
All parameters are documented with examples and defaults, which is sufficient for invocation. However, because there is no output schema, the description would be more complete if it briefly mentioned the return shape (e.g., list of matching notes). Overall it is solid but missing that piece.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The Args section fully explains all four parameters with clear descriptions, example values, and the allowed note_type list. Since schema coverage is 0%, this completely compensates and gives the agent everything needed to invoke the tool correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the specific verb 'Search' and resource 'notes' with three filter dimensions (text, tags, type), and adds scope detail ('Searches across titles and content'). This clearly distinguishes it from sibling tools like find_similar_notes or list_notes_by_date.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides concrete usage examples and explicitly says parameters can be combined for precise filtering. However, it does not mention when to prefer this over alternatives or explicitly state when not to use it, so it falls 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_update_noteA
Update an existing note.
Only provided fields are updated; omitted fields remain unchanged. Pass empty string for tags to clear all tags. Pass empty string for references to clear all references.
Constraint: notes with note_type='literature' must have at least one reference. If you are promoting a note to 'literature', pass the citation in references in the same call.
Args: note_id: The ID of the note to update title: New title (optional) content: New content (optional) note_type: New type: fleeting/literature/permanent/structure/hub (optional) tags: New comma-separated tags, or empty string to clear (optional) references: New newline-separated citations, or empty string to clear (optional)
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| title | No | ||
| content | No | ||
| note_id | Yes | ||
| note_type | No | ||
| references | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It explicitly states partial updates (only provided fields change), how to clear fields via empty strings, and the literature promotion constraint. This goes well beyond a vague 'update' and covers key behavioral traits, though it doesn't mention error handling or return values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a short introductory paragraph and a clear Args list. It's slightly long due to necessary parameter explanations, but every sentence earns its place. The front-loaded update semantics and clearing behavior are immediately clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description covers the essential aspects: update semantics, field clearing, and the literature constraint. It lacks mention of errors or return values, but the provided information is sufficient for safe and correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero description coverage, but the description includes an Args section that explains each parameter, including formats (comma-separated tags, newline-separated references) and optionality. This adds substantial meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool updates an existing note, using the specific verb 'Update' and the resource 'an existing note'. It distinguishes itself from siblings like create or delete by focusing on modification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for modifying existing notes, and provides a specific constraint for literature notes (must have at least one reference). It doesn't explicitly contrast with create/delete, but the context is clear and the constraint gives actionable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
19 tool updates
v0.1.0- First observed
slipbox_create_link - First observed
slipbox_create_note - First observed
slipbox_create_structure_from_cluster - First observed
slipbox_delete_link - First observed
slipbox_delete_note - First observed
slipbox_dismiss_cluster - First observed
slipbox_find_central_notes - First observed
slipbox_find_orphaned_notes - First observed
slipbox_find_similar_notes - First observed
slipbox_get_all_tags - First observed
slipbox_get_cluster_report - First observed
slipbox_get_linked_notes - First observed
slipbox_get_note - First observed
slipbox_list_notes_by_date - First observed
slipbox_rebuild_index - First observed
slipbox_refresh_clusters - First observed
slipbox_remove_link - First observed
slipbox_search_notes - First observed
slipbox_update_note
TDQS
Scored across 19 tools
Most tools have distinct purposes, but there is notable overlap between slipbox_remove_link and slipbox_delete_link, which differ only in error behavior. Additionally, slipbox_get_cluster_report with refresh=true and slipbox_refresh_clusters both regenerate cluster analysis, creating potential confusion.
All tools share the slipbox_ prefix and follow a consistent verb_noun pattern (create_note, get_note, update_note, delete_note, create_link, delete_link, refresh_clusters). Verbs are clear and naming is uniform throughout, making the API predictable.
19 tools is on the heavier side of the ideal range, but the count is justified by the comprehensive feature set: note CRUD, search, linking, tag management, cluster analysis, and maintenance. The slight excess is offset by each tool serving a clear purpose in the Zettelkasten workflow.
The tool set provides complete lifecycle coverage for notes (create, get, update, delete), robust search and exploration (search, similar, central, orphaned, by date, linked), rich linking capabilities (create, remove, delete, list links), and cluster management (report, create structure, refresh, dismiss). Also includes tag listing and index rebuild, leaving no obvious dead ends.
Maintenance
Related MCP Connectors
Markdown-based note-taking with a hosted MCP server. Your notes serve you and your AI.
Google Keep-style notes app with an MCP server for AI agents to read/write notes.
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
One memory, every AI. A shared, user-owned markdown memory your AI clients read and write over MCP.
Related MCP Servers
- AlicenseCqualityFmaintenanceAn MCP server that integrates the zk note-taking system with LLMs, enabling users to search, read, create, and manage notes. It provides tools for link analysis, tag management, and complex note queries to interact with local knowledge bases.51MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that treats Obsidian vaults as knowledge graphs, enabling AI agents to traverse wikilinks, assemble token-budgeted context, and search with backlink awareness.3 npm1MIT
- AlicenseNot gradedqualityCmaintenanceA local-first MCP server that gives AI assistants long-term memory by storing, searching, and recalling notes as Markdown files on your machine.7 npmMIT
- AlicenseNot gradedqualityDmaintenanceA lightweight MCP server that enables AI assistants to securely read, create, and modify notes in an Obsidian vault, with support for semantic search and web scraping.6,222 npmMIT