MCP server bridging Notesnook with OpenClaw. Syncs notes hourly via the filesystem and exposes bidirectional note operations over HTTP/SSE.
- Node.js >= 22
- Notesnook desktop app (Linux)
./install.shThe installer will:
- Check Node.js version
- Run
npm installandnpm run build - Prompt for your sync folder path
- Create
export/andimport/subdirectories - Install and enable the systemd user service
- Run the first-run wizard to configure notebook access
Notesnook App (GUI)
│
│ Export all notes → Markdown → save zip to {SYNC_ROOT}/export/
│
▼
{SYNC_ROOT}/
├── export/ ← Notesnook drops .zip exports here
│ └── extracted/ ← MCP server extracts zips here (auto-managed)
├── import/ ← MCP server writes new/updated .md files here
│ └── {notebook}/ ← One subfolder per notebook
└── notesnook.db ← SQLite index maintained by MCP server
notesnook-mcp-server (HTTP/SSE daemon on :3457)
├── Sync Engine (hourly cron + chokidar watcher)
│ ├── Unzips latest export → parses Markdown
│ ├── Derives notebook from folder structure
│ ├── Diffs against SQLite index (last-write-wins)
│ └── Writes agent notes to import/{notebook}/*.md
│
└── MCP HTTP/SSE server
└── 9 tools (search, get, create, update, notebooks, todo, sync)
- Open Notesnook desktop
- Go to Settings → Backup & Export
- Choose Export all notes → Markdown
- Save the
.zipfile to{SYNC_ROOT}/export/
The server will detect the new zip within seconds (chokidar watcher) or at the next hourly cron tick.
Notes created or updated by OpenClaw are written to {SYNC_ROOT}/import/{notebook}/. Notesnook will pick them up on the next app open.
| Variable | Required | Default | Description |
|---|---|---|---|
NOTESNOOK_SYNC_ROOT |
Yes | — | Path to your sync folder |
PORT |
No | 3457 |
HTTP server port |
Stored at {SYNC_ROOT}/config.json. Edited via the first-run wizard or notesnook_configure_notebook_access tool.
{
"syncRoot": "/path/to/sync",
"enabledNotebooks": ["daily survival", "art stuff"],
"firstRunComplete": true,
"lastSyncAt": "2025-01-01T12:00:00.000Z"
}Add to your openclaw.json:
{
"agents": {
"list": [{
"id": "main",
"mcp": {
"servers": [{
"name": "notesnook",
"type": "sse",
"url": "http://localhost:3457/sse"
}]
}
}]
}
}The server must be running (started automatically by systemd after installation).
| Tool | Description |
|---|---|
notesnook_search_notes |
Search notes by keyword, notebook, or tag |
notesnook_get_note |
Retrieve full content of a note by ID |
notesnook_create_note |
Create a new note |
notesnook_update_note |
Update a note's content, title, or tags |
notesnook_list_notebooks |
List notebooks and their access status |
notesnook_configure_notebook_access |
Enable or disable notebook access |
notesnook_get_todo |
Get the daily to-do list |
notesnook_update_todo |
Add, complete, or remove to-do items |
notesnook_trigger_sync |
Force an immediate sync |
Notes are plain Markdown with no YAML front matter:
# Note Title
Note body content here...
- [ ] Incomplete item
- [x] Completed itemNotebooks are represented by folder names in the export zip.
MIT + Commons Clause — non-commercial use only. See LICENSE.