Joplin Mcp Server

io.github.jordanburke由 GitHub 帳號 jordanburke 發布v2.3.3更新於 Oct 24, 2026

Search, read, create, edit and sync Joplin notes and notebooks via a headless Joplin sidecar.

概覽

AI 產生的概覽

讓助理透過內建的無介面 Joplin 側車搜尋、讀取、建立、編輯、刪除並同步 Joplin 筆記與筆記本。

可以做什麼
以側車模式執行一個自帶的 Joplin 終端機實例,並透過 MCP 提供使用,因此不需要 Joplin 桌面應用程式。工具涵蓋列出筆記本、搜尋筆記、讀取單一或多則筆記、建立與編輯筆記和筆記本、經確認後刪除筆記或筆記本,以及觸發同步。它也能在外部模式下連接既有的 Joplin 實例,並在 Joplin 桌面版已在執行時自動協調出可用的連接埠。
適用情境
適合以 Joplin 記錄筆記、並希望助理在不開啟桌面應用程式的情況下搜尋、閱讀、草擬、更新或整理筆記的情境。也適合無介面實例與 Joplin 桌面版同步到同一後端的部署,包括 WSL 與 OneDrive 檔案系統同步。
執行需求
需要本機 Node.js 執行環境;透過 npm 套件 joplin-mcp-server 以 stdio 方式安裝。外部模式需要 Joplin API 權杖(JOPLIN_TOKEN);側車模式自行管理權杖。選用的同步設定使用 JOPLIN_SYNC_TARGET 及目標相關值,例如 JOPLIN_SYNC_PATH、JOPLIN_SYNC_USERNAME、JOPLIN_SYNC_PASSWORD,S3 另需 JOPLIN_SYNC_REGION、JOPLIN_SYNC_ENDPOINT、JOPLIN_SYNC_FORCE_PATH_STYLE。資料預設存放在 JOPLIN_PROFILE 下。
安裝前請注意
此伺服器可以建立、編輯與刪除筆記和筆記本,刪除操作據說明需要確認。它會處理機密資訊:JOPLIN_TOKEN、JOPLIN_SYNC_PASSWORD 以及 S3 存取金鑰等同步憑證,可能透過命令列或環境變數傳入。同步會把筆記資料傳送到所設定的後端(檔案系統、WebDAV、Nextcloud、Joplin Cloud、S3、Dropbox 或 OneDrive)。側車實例與桌面實例使用各自獨立的資料庫,只有設定相同的同步目標才能保持同步。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Joplin Mcp Server,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

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

bash
npx joplin-mcp-server --token your_joplin_token

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.

bash
# Basic usage — sidecar starts automaticallynpx joplin-mcp-server --token your_token
# With cloud syncnpx joplin-mcp-server --token your_token \  --sync-target joplin-cloud \  --sync-username [email protected] --sync-password pass
# With filesystem sync (e.g. OneDrive folder)npx joplin-mcp-server --token your_token \  --sync-target filesystem \  --sync-path /mnt/c/Users/you/OneDrive/Joplin

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.

bash
# Connect to Joplin desktop on another machine or Windows hostJOPLIN_HOST=192.168.0.40 JOPLIN_PORT=41184 npx joplin-mcp-server --token your_token

Configuration

Environment Variables

VariableDescriptionDefault
JOPLIN_TOKENAPI token (required)--
JOPLIN_HOSTConnect to existing Joplin at this host (skips sidecar)--
JOPLIN_PORTConnect to existing Joplin on this port (skips sidecar)--
JOPLIN_CLIPath to joplin CLI binary (overrides auto-detection)--
JOPLIN_PROFILEJoplin data directory for sidecar mode~/.config/joplin-mcp
JOPLIN_SYNC_TARGETSync target typenone
JOPLIN_SYNC_PATHSync target URL/path--
JOPLIN_SYNC_USERNAMESync username/email--
JOPLIN_SYNC_PASSWORDSync password--
JOPLIN_SYNC_REGIONS3 regionus-east-1
JOPLIN_SYNC_ENDPOINTS3 endpoint URL (for non-AWS providers)AWS S3
JOPLIN_SYNC_FORCE_PATH_STYLEUse path-style S3 URLs (true/false)false
LOG_LEVELLog level: debug, info, warn, errorinfo

Command Line Options

OPTIONS:  --env-file <file>          Load environment variables from file  --token <token>            Joplin API token  --transport <type>         Transport type: stdio (default) or http  --http-port <port>         HTTP server port (default: 3000, only with --transport http)  --profile <dir>            Joplin data directory (default: ~/.config/joplin-mcp)  --sync-target <type>       Sync target: none, filesystem, webdav, nextcloud,                             joplin-cloud, joplin-server, s3, dropbox, onedrive  --sync-path <url>          URL or path for sync target  --sync-username <user>     Username/email for sync  --sync-password <pass>     Password for sync  --help, -h                 Show help message

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:

bash
# Tilde expands to home directory (Linux, macOS, Windows)--sync-path ~/OneDrive/Apps/Joplin
# Environment variables (both forms supported)--sync-path ${HOME}/OneDrive/Apps/Joplin--sync-path $HOME/OneDrive/Apps/Joplin
# Windows example using USERPROFILE--sync-path ${USERPROFILE}/OneDrive/Apps/Joplin

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

TargetRequired Options
none(default, no sync)
filesystem--sync-path /path/to/dir
webdav--sync-path <url> --sync-username --sync-password
nextcloud--sync-path <url> --sync-username --sync-password
joplin-cloud--sync-username --sync-password
joplin-server--sync-path <url> --sync-username --sync-password
s3--sync-path <bucket> --sync-username <access-key> --sync-password <secret-key>
dropbox(OAuth flow)
onedrive(OAuth flow)
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:

bash
# Backblaze B2joplin-mcp-server --token my_token \  --sync-target s3 --sync-path my-bucket \  --sync-region us-west-004 \  --sync-endpoint https://s3.us-west-004.backblazeb2.com \  --sync-username <access-key> --sync-password <secret-key>
# MinIO / self-hosted: path-style URLs are usually requiredjoplin-mcp-server --token my_token \  --sync-target s3 --sync-path my-bucket \  --sync-endpoint https://minio.example.com \  --sync-force-path-style true \  --sync-username <access-key> --sync-password <secret-key>

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:

json
{  "mcpServers": {    "joplin": {      "command": "node",      "args": ["dist/bin.js"],      "env": {        "JOPLIN_TOKEN": "${JOPLIN_TOKEN}"      }    }  }}

Set JOPLIN_TOKEN in your shell (add to ~/.bashrc or ~/.zshrc):

bash
export JOPLIN_TOKEN="your_actual_token_here"

Claude Desktop

Claude Desktop does not support ${VAR} expansion. Provide values directly:

json
{  "mcpServers": {    "joplin": {      "command": "npx",      "args": ["joplin-mcp-server", "--token", "your_actual_token_here"]    }  }}

With Sync (Claude Desktop)

json
{  "mcpServers": {    "joplin": {      "command": "npx",      "args": [        "joplin-mcp-server",        "--token",        "your_token",        "--sync-target",        "filesystem",        "--sync-path",        "/path/to/sync/dir"      ]    }  }}

External Mode

json
{  "mcpServers": {    "joplin": {      "command": "npx",      "args": ["joplin-mcp-server"],      "env": {        "JOPLIN_TOKEN": "your_actual_token_here",        "JOPLIN_HOST": "192.168.0.40",        "JOPLIN_PORT": "41184"      }    }  }}

Docker

bash
docker build -t joplin-mcp .docker run -e JOPLIN_TOKEN=your_token -p 3000:3000 joplin-mcp

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.

bash
# Uses ~/OneDrive — automatically resolves to /mnt/c/Users/YourName/OneDrive on WSLnpx joplin-mcp-server --token your_token \  --sync-target filesystem \  --sync-path ~/OneDrive/Apps/Joplin
# Or specify the Windows path explicitlynpx joplin-mcp-server --token your_token \  --sync-target filesystem \  --sync-path /mnt/c/Users/YourName/OneDrive/Apps/Joplin

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:

bash
npx joplin-mcp-server --token your_token \  --sync-target joplin-cloud \  --sync-username [email protected] --sync-password pass

External Mode (Port Forwarding)

If you prefer to connect directly to Windows Joplin instead of running a sidecar:

On Windows (PowerShell as Administrator):

powershell
netsh interface portproxy add v4tov4 listenport=41184 listenaddress=0.0.0.0 connectport=41184 connectaddress=127.0.0.1

In WSL:

bash
JOPLIN_HOST=192.168.0.40 JOPLIN_PORT=41184 npx joplin-mcp-server --token your_token

Find your Windows IP with ipconfig on Windows or cat /etc/resolv.conf | grep nameserver from WSL.

Available Tools

ToolDescription
list_notebooksRetrieve the complete notebook hierarchy
search_notesSearch for notes by query string
read_notebookRead contents of a specific notebook
read_noteRead full content of a specific note
read_multinoteRead multiple notes at once
create_noteCreate a new note
create_folderCreate a new notebook
edit_noteEdit an existing note
edit_folderEdit an existing notebook
delete_noteDelete a note (requires confirmation)
delete_folderDelete a notebook (requires confirmation)
syncTrigger sync (auto-syncs every 5 min by default)

Development

bash
pnpm install          # Install dependenciespnpm build            # Build to dist/pnpm test             # Run testspnpm validate         # Format + lint + typecheck + test + buildpnpm serve:dev        # Dev mode with hot reload (stdio)pnpm serve:dev:http   # Dev mode with hot reload (HTTP)pnpm inspect          # Build and open MCP Inspector

License

MIT

來源:README.md,提交 b3f3d82

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v2.3.3最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分