Install
openclaw skills install inkdropClawHub Security found sensitive or high-impact capabilities. Review the scan results before using.
Read, create, update, search, and delete notes in Inkdrop via its local HTTP server API. Use when the user asks to take notes, save ideas, manage project notes, read notes, search notes, or interact with Inkdrop in any way. Also use when organizing thoughts, project backlogs, or task lists that should persist in Inkdrop.
openclaw skills install inkdropInteract with Inkdrop's local HTTP server to manage notes, notebooks, and tags.
Set environment variables:
export INKDROP_URL="http://localhost:19840" # default port
export INKDROP_AUTH="username:password" # from Inkdrop preferences
For OpenClaw, store credentials in a secrets file (e.g., workspace secrets.md) and source them at runtime. Avoid persisting plaintext credentials in shell profiles.
Base URL: http://localhost:19840 (or INKDROP_URL env var)
Auth: Basic auth via INKDROP_AUTH env var (user:password)
Verify connection:
curl -s -u "$INKDROP_AUTH" "${INKDROP_URL:-http://localhost:19840}/"
# Returns: {"version":"5.x.x","ok":true}
All endpoints use Basic auth. Replace USER:PASS with your $INKDROP_AUTH value.
curl -s -u $INKDROP_AUTH http://localhost:19840/notes
Query params:
keyword — search text (same qualifiers as Inkdrop search)limit — max results (default: all)skip — offset for paginationsort — updatedAt, createdAt, or titledescending — reverse order (boolean)curl -s -u $INKDROP_AUTH "http://localhost:19840/<docid>"
The docid is the full _id (e.g., note:abc123, book:xyz). Works for notes, books, tags, files.
Optional params:
rev — fetch specific revisionattachments — include attachment data (boolean, use for file documents)curl -s -u $INKDROP_AUTH -X POST http://localhost:19840/notes \
-H "Content-Type: application/json" \
-d '{
"doctype": "markdown",
"title": "Note Title",
"body": "Markdown content here",
"bookId": "book:inbox",
"status": "none",
"tags": []
}'
_id is auto-generated. bookId is required — use book:inbox as default or look up notebooks first.
POST with _id and _rev (required to avoid conflicts):
# 1. Get current _rev
REV=$(curl -s -u $INKDROP_AUTH "http://localhost:19840/note:abc123" | python3 -c "import sys,json; print(json.load(sys.stdin)['_rev'])")
# 2. Update with _rev
curl -s -u $INKDROP_AUTH -X POST http://localhost:19840/notes \
-H "Content-Type: application/json" \
-d '{
"_id": "note:abc123",
"_rev": "'"$REV"'",
"doctype": "markdown",
"title": "Updated Title",
"body": "Updated content",
"bookId": "book:inbox",
"status": "none"
}'
curl -s -u $INKDROP_AUTH -X DELETE "http://localhost:19840/<docid>"
curl -s -u $INKDROP_AUTH http://localhost:19840/books
curl -s -u $INKDROP_AUTH -X POST http://localhost:19840/books \
-H "Content-Type: application/json" \
-d '{"name": "My Notebook"}'
curl -s -u $INKDROP_AUTH http://localhost:19840/tags
curl -s -u $INKDROP_AUTH -X POST http://localhost:19840/tags \
-H "Content-Type: application/json" \
-d '{"_id": "tag:mytag", "name": "mytag", "color": "blue"}'
curl -s -u $INKDROP_AUTH http://localhost:19840/files
Create with POST to /files. Files are primarily image attachments for notes.
curl -s -u $INKDROP_AUTH "http://localhost:19840/_changes?since=0&limit=50&include_docs=true"
Params: since (sequence number), limit, descending, include_docs, conflicts, attachments.
Returns changes in order they were made. Useful for syncing or watching for updates.
The included scripts/inkdrop.sh wraps common operations:
export INKDROP_AUTH="username:password"
# List all notes
./scripts/inkdrop.sh notes
# Search notes
./scripts/inkdrop.sh search "project ideas"
# Get a specific note
./scripts/inkdrop.sh get "note:abc123"
# Create a note (title, bookId, body)
./scripts/inkdrop.sh create "My Note" "book:inbox" "Note content here"
# List notebooks
./scripts/inkdrop.sh books
# List tags
./scripts/inkdrop.sh tags
# Delete a document
./scripts/inkdrop.sh delete "note:abc123"
| Field | Type | Description |
|---|---|---|
_id | string | note:<id> (auto-generated) |
_rev | string | Revision token (required for updates) |
title | string | Note title |
body | string | Markdown content |
doctype | string | Always "markdown" |
bookId | string | Notebook ID (e.g., book:inbox) |
tags | string[] | Array of tag IDs |
status | string | none, active, onHold, completed, dropped |
pinned | boolean | Pin to top |
share | string | private or public |
createdAt | number | Unix timestamp (ms) |
updatedAt | number | Unix timestamp (ms) |
none — Defaultactive — In progressonHold — Pausedcompleted — Donedropped — Abandonedbook:inboxGET /books)_rev before updating to avoid conflictstag:<name> format