
Joplin Mcp Server
io.github.jordanburkePublished by GitHub account jordanburkev2.3.3Updated Oct 24, 2026
Search, read, create, edit and sync Joplin notes and notebooks via a headless Joplin sidecar.
Overview
Lets an assistant search, read, create, edit, delete and sync Joplin notes and notebooks through a bundled headless Joplin sidecar.
- What you can do
- Runs a self-contained Joplin Terminal instance (sidecar mode) and exposes it over MCP, so no Joplin desktop app is required. Tools cover listing notebooks, searching notes, reading one or several notes, creating and editing notes and notebooks, deleting notes or notebooks with confirmation, and triggering sync. It can also connect to an existing Joplin instance in external mode, and it negotiates a free port when Joplin Desktop is already running.
- When to use it
- Useful when you keep notes in Joplin and want an assistant to search, read, draft, update or organize them without opening the desktop app. Also fits setups where a headless instance syncs to the same backend as Joplin Desktop, including WSL and OneDrive filesystem sync.
- Requirements
- Local Node.js runtime; installed via npm package joplin-mcp-server over stdio. Needs a Joplin API token (JOPLIN_TOKEN) for external mode; sidecar mode manages its own token. Optional sync configuration uses JOPLIN_SYNC_TARGET plus target-specific values such as JOPLIN_SYNC_PATH, JOPLIN_SYNC_USERNAME and JOPLIN_SYNC_PASSWORD, and for S3 JOPLIN_SYNC_REGION, JOPLIN_SYNC_ENDPOINT and JOPLIN_SYNC_FORCE_PATH_STYLE. Data is stored under JOPLIN_PROFILE by default.
Installation
In SourceWeft
- Open Joplin Mcp Server in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
Joplin MCP Server
[npm version] [CI] [License: MIT]
A self-contained MCP (Model Context Protocol) server for Joplin. Bundles the Joplin Terminal CLI as a dependency — no desktop app, no global installs, no external processes to manage. Coexists with Joplin Desktop via automatic port negotiation.
Quick Start
That's it. The server spawns its own Joplin Terminal instance (sidecar mode), syncs to your configured backend, and exposes your notes via MCP.
Architecture
Sidecar Mode (Default)
The server bundles joplin as an npm dependency and manages its own Joplin Terminal process. No Joplin desktop app needed — the sidecar handles everything: data storage, sync, and the REST API.
If Joplin Desktop is already running, the sidecar automatically finds a free port (scanning 41184-41193) and runs alongside it. Both instances stay in sync if configured with the same sync target.
The Joplin CLI is resolved in this order: JOPLIN_CLI env var > node_modules/.bin/joplin (bundled) > global install > npx fallback.
Data is stored in ~/.config/joplin-mcp by default (separate from any desktop Joplin install).
External Mode
Connects to an existing Joplin instance instead of spawning a sidecar. Activated by setting JOPLIN_HOST or JOPLIN_PORT.
Configuration
Environment Variables
Command Line Options
Path Expansion
The --profile option and the --sync-path of a filesystem sync target support ~ and environment variable expansion for cross-platform compatibility. Other targets take a URL or bucket name in --sync-path, so it is passed through untouched:
This works in MCP client configs (.mcp.json, Claude Desktop) where shell expansion isn't available.
WSL auto-detection: On WSL, if a ~/ path is empty or missing, the server automatically checks the corresponding Windows path at /mnt/c/Users/<user>/.... This means --sync-path ~/OneDrive/Apps/Joplin just works on WSL without needing the full /mnt/c/... path.
Sync Targets
S3-compatible providers
The s3 target defaults to AWS (https://s3.amazonaws.com/, region us-east-1). Point it at any
S3-compatible provider with --sync-region and --sync-endpoint:
Cloudflare R2 and Wasabi work the same way — set --sync-endpoint to the provider's S3 endpoint.
MCP Client Configuration
Claude Code
The repository includes a .mcp.json that works with Claude Code's env var expansion:
Set JOPLIN_TOKEN in your shell (add to ~/.bashrc or ~/.zshrc):
Claude Desktop
Claude Desktop does not support ${VAR} expansion. Provide values directly:
With Sync (Claude Desktop)
External Mode
Docker
WSL Setup
Running in WSL? The sidecar architecture makes this straightforward — no Windows port forwarding needed. The server auto-detects WSL and handles path resolution between Linux and Windows filesystems.
Filesystem Sync via OneDrive (Recommended)
Both your Windows Joplin desktop and the WSL sidecar sync to the same OneDrive folder. They see the same notes without needing to talk to each other directly.
In your Joplin desktop app, configure sync to the same OneDrive folder: Tools > Options > Synchronisation > File system > /Users/YourName/OneDrive/Apps/Joplin
Joplin Desktop coexistence: If Desktop is running on port 41184, the sidecar automatically uses the next available port. A warning is logged at startup reminding you that both instances use separate databases and need the same sync target to stay in sync.
Cloud Sync
Alternatively, both instances can sync to Joplin Cloud or any other cloud backend:
External Mode (Port Forwarding)
If you prefer to connect directly to Windows Joplin instead of running a sidecar:
On Windows (PowerShell as Administrator):
In WSL:
Find your Windows IP with ipconfig on Windows or cat /etc/resolv.conf | grep nameserver from WSL.
Available Tools
Development
License
MIT
Source: README.md at commit b3f3d82
Tools
0Version history
1- v2.3.3LatestSep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts