Review every edit
Pull notes into ordinary Markdown, let an agent make a focused change, inspect a true three-way diff, then dry-run the exact push plan.
Use the file workflow →Open source Local first Agent ready
Give agents useful access to your notes without giving up control of them. Bridge self-hosted Joplin to reviewable Markdown, MCP clients, and ChatGPT Actions through one safety-focused tool.
MIT licensed Windows and Linux Zero runtime dependencies
$ joplin-md-sync push --root ./notes --dry-run --json
{"code":"PENDING_ACTIONS","exit_code":1,"planned_operations":1}
One knowledge base, two ways to work
Joplin remains the place where you capture, organize, encrypt, and sync knowledge. The bridge adds controlled interfaces for the work agents do best.
Pull notes into ordinary Markdown, let an agent make a focused change, inspect a true three-way diff, then dry-run the exact push plan.
Use the file workflow →Search, read, create, tag, move, and trash notes through typed MCP tools when an immediate structured operation is the better fit.
Explore the MCP API →Run Joplin Terminal and the authenticated bridge on your own Linux host, while keeping the upstream Data API private on loopback.
Plan a self-hosted setup →Built for real note workflows
Use the interface that matches the task. Reviewed file transformations and immediate API operations are intentionally separate.
Let a coding agent update commands, rollback steps, and incident notes from the project it is already working in.
Find related notes, summarize a topic, and organize results without exporting your whole notebook archive to another note platform.
Keep a reviewable history of selected Joplin notebooks as Markdown while local state, credentials, backups, and conflicts stay out of Git.
Expose notes, notebooks, tags, search, and attachments over Streamable HTTP with explicit schemas and bounded payloads.
Connect a private Custom GPT through authenticated Actions, generated OpenAPI, isolated credentials, and a tested HTTPS endpoint.
Pair Joplin Terminal with systemd services and your chosen sync target, without exposing Joplin's own Data API to the internet.
Control is the feature
Your notes can stay in Joplin, on infrastructure and sync targets you choose. joplin-md-sync works through the documented Data API, never the Joplin database or profile internals.
Read the security model →A boringly explicit write path
The file workflow gives autonomous agents the same guardrails a careful operator would use by hand.
$ joplin-md-sync pull --root ./notes --json
OK remote and base refreshed
$ joplin-md-sync diff --root ./notes \
--three-way --unified
1 note body changed locally
$ joplin-md-sync push --root ./notes \
--dry-run --json
PENDING_ACTIONS push_update_remote
$ joplin-md-sync push --root ./notes --json
OK applied 1, failed 0
Failure is a first-class state
Automation is only useful when its boundaries are predictable. The CLI never hides a divergent edit behind a successful-looking message.
diff is guaranteed to inspect state without changing it.Keep Joplin. Add a safer interface.