joplin-mcp-server 2.0.10 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  [![CI](https://github.com/jordanburke/joplin-mcp-server/actions/workflows/ci.yml/badge.svg)](https://github.com/jordanburke/joplin-mcp-server/actions/workflows/ci.yml)
5
5
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
6
 
7
- A self-contained MCP (Model Context Protocol) server for [Joplin](https://joplinapp.org/). Bundles the Joplin Terminal CLI as a dependency — no desktop app, no global installs, no external processes to manage.
7
+ A self-contained MCP (Model Context Protocol) server for [Joplin](https://joplinapp.org/). 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.
8
8
 
9
9
  ## Quick Start
10
10
 
@@ -20,6 +20,8 @@ That's it. The server spawns its own Joplin Terminal instance (sidecar mode), sy
20
20
 
21
21
  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.
22
22
 
23
+ 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.
24
+
23
25
  ```bash
24
26
  # Basic usage — sidecar starts automatically
25
27
  npx joplin-mcp-server --token your_token
@@ -100,6 +102,8 @@ The `--sync-path` and `--profile` options support `~` and environment variable e
100
102
 
101
103
  This works in MCP client configs (`.mcp.json`, Claude Desktop) where shell expansion isn't available.
102
104
 
105
+ **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.
106
+
103
107
  ### Sync Targets
104
108
 
105
109
  | Target | Required Options |
@@ -203,20 +207,27 @@ docker run -e JOPLIN_TOKEN=your_token -p 3000:3000 joplin-mcp
203
207
 
204
208
  ## WSL Setup
205
209
 
206
- Running in WSL? The sidecar architecture makes this straightforward — no Windows port forwarding needed.
210
+ 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.
207
211
 
208
212
  ### Filesystem Sync via OneDrive (Recommended)
209
213
 
210
214
  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.
211
215
 
212
216
  ```bash
213
- # Point the sidecar at your OneDrive Joplin sync folder
217
+ # Uses ~/OneDrive automatically resolves to /mnt/c/Users/YourName/OneDrive on WSL
218
+ npx joplin-mcp-server --token your_token \
219
+ --sync-target filesystem \
220
+ --sync-path ~/OneDrive/Apps/Joplin
221
+
222
+ # Or specify the Windows path explicitly
214
223
  npx joplin-mcp-server --token your_token \
215
224
  --sync-target filesystem \
216
- --sync-path /mnt/c/Users/YourName/OneDrive/Joplin
225
+ --sync-path /mnt/c/Users/YourName/OneDrive/Apps/Joplin
217
226
  ```
218
227
 
219
- In your Joplin desktop app, configure sync to the same OneDrive folder: **Tools > Options > Synchronisation > File system > /Users/YourName/OneDrive/Joplin**
228
+ In your Joplin desktop app, configure sync to the same OneDrive folder: **Tools > Options > Synchronisation > File system > /Users/YourName/OneDrive/Apps/Joplin**
229
+
230
+ > **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.
220
231
 
221
232
  ### Cloud Sync
222
233
 
@@ -248,20 +259,20 @@ Find your Windows IP with `ipconfig` on Windows or `cat /etc/resolv.conf | grep
248
259
 
249
260
  ## Available Tools
250
261
 
251
- | Tool | Description |
252
- | ---------------- | ----------------------------------------------------- |
253
- | `list_notebooks` | Retrieve the complete notebook hierarchy |
254
- | `search_notes` | Search for notes by query string |
255
- | `read_notebook` | Read contents of a specific notebook |
256
- | `read_note` | Read full content of a specific note |
257
- | `read_multinote` | Read multiple notes at once |
258
- | `create_note` | Create a new note |
259
- | `create_folder` | Create a new notebook |
260
- | `edit_note` | Edit an existing note |
261
- | `edit_folder` | Edit an existing notebook |
262
- | `delete_note` | Delete a note (requires confirmation) |
263
- | `delete_folder` | Delete a notebook (requires confirmation) |
264
- | `sync` | Trigger a Joplin sync with the configured sync target |
262
+ | Tool | Description |
263
+ | ---------------- | ------------------------------------------------ |
264
+ | `list_notebooks` | Retrieve the complete notebook hierarchy |
265
+ | `search_notes` | Search for notes by query string |
266
+ | `read_notebook` | Read contents of a specific notebook |
267
+ | `read_note` | Read full content of a specific note |
268
+ | `read_multinote` | Read multiple notes at once |
269
+ | `create_note` | Create a new note |
270
+ | `create_folder` | Create a new notebook |
271
+ | `edit_note` | Edit an existing note |
272
+ | `edit_folder` | Edit an existing notebook |
273
+ | `delete_note` | Delete a note (requires confirmation) |
274
+ | `delete_folder` | Delete a notebook (requires confirmation) |
275
+ | `sync` | Trigger sync (auto-syncs every 5 min by default) |
265
276
 
266
277
  ## Development
267
278
 
package/dist/bin.js CHANGED
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  //#region src/bin.ts
3
- if (!process.env.TRANSPORT_TYPE) process.env.TRANSPORT_TYPE = "stdio";
3
+ process.env.TRANSPORT_TYPE ??= "stdio";
4
4
  const args = process.argv.slice(2);
5
5
  if (args.includes("--version") || args.includes("-v")) {
6
- console.log("2.0.10");
6
+ console.log("2.1.1");
7
7
  process.exit(0);
8
8
  }
9
9
  if (args.includes("--help") || args.includes("-h")) {
10
10
  console.log(`
11
- Joplin MCP Server v2.0.10
11
+ Joplin MCP Server v2.1.1
12
12
 
13
13
  Usage: joplin-mcp-server [options]
14
14
 
@@ -29,8 +29,8 @@ For more information, visit: https://github.com/jordanburke/joplin-mcp-server
29
29
  async function main() {
30
30
  await import("./index.js");
31
31
  }
32
- main().then();
33
-
32
+ main();
34
33
  //#endregion
35
- export { };
34
+ export {};
35
+
36
36
  //# sourceMappingURL=bin.js.map
package/dist/bin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bin.js","names":[],"sources":["../src/bin.ts"],"sourcesContent":["#!/usr/bin/env node\n\n// Version is injected at build time via tsdown.config.ts define\ndeclare const __VERSION__: string\n\n// Force stdio mode for CLI/npx usage (unless explicitly overridden)\nif (!process.env.TRANSPORT_TYPE) {\n process.env.TRANSPORT_TYPE = \"stdio\"\n}\n\n// Handle command line arguments BEFORE any other imports\nconst args = process.argv.slice(2)\n\nif (args.includes(\"--version\") || args.includes(\"-v\")) {\n console.log(__VERSION__)\n process.exit(0)\n}\n\nif (args.includes(\"--help\") || args.includes(\"-h\")) {\n console.log(`\nJoplin MCP Server v${__VERSION__}\n\nUsage: joplin-mcp-server [options]\n\nOptions:\n -v, --version Show version number\n -h, --help Show help\n\nEnvironment Variables:\n JOPLIN_TOKEN Joplin API token (required)\n JOPLIN_HOST Connect to existing Joplin at this host (skips sidecar)\n JOPLIN_PORT Connect to existing Joplin on this port (skips sidecar)\n JOPLIN_CLI Path to joplin CLI binary (overrides auto-detection)\n\nFor more information, visit: https://github.com/jordanburke/joplin-mcp-server\n`)\n process.exit(0)\n}\n\n// Import and start server if not showing version/help\nasync function main() {\n // Import and run the main function from the FastMCP server\n await import(\"./index.js\")\n}\n\nmain().then()\n"],"mappings":";;AAMA,IAAI,CAAC,QAAQ,IAAI,eACf,SAAQ,IAAI,iBAAiB;AAI/B,MAAM,OAAO,QAAQ,KAAK,MAAM,EAAE;AAElC,IAAI,KAAK,SAAS,YAAY,IAAI,KAAK,SAAS,KAAK,EAAE;AACrD,SAAQ,aAAgB;AACxB,SAAQ,KAAK,EAAE;;AAGjB,IAAI,KAAK,SAAS,SAAS,IAAI,KAAK,SAAS,KAAK,EAAE;AAClD,SAAQ,IAAI;;;;;;;;;;;;;;;;EAgBZ;AACA,SAAQ,KAAK,EAAE;;AAIjB,eAAe,OAAO;AAEpB,OAAM,OAAO;;AAGf,MAAM,CAAC,MAAM"}
1
+ {"version":3,"file":"bin.js","names":[],"sources":["../src/bin.ts"],"sourcesContent":["#!/usr/bin/env node\n\n// Version is injected at build time via tsdown.config.ts define\ndeclare const __VERSION__: string\n\n// Force stdio mode for CLI/npx usage (unless explicitly overridden)\nprocess.env.TRANSPORT_TYPE ??= \"stdio\"\n\n// Handle command line arguments BEFORE any other imports\nconst args = process.argv.slice(2)\n\nif (args.includes(\"--version\") || args.includes(\"-v\")) {\n console.log(__VERSION__)\n process.exit(0)\n}\n\nif (args.includes(\"--help\") || args.includes(\"-h\")) {\n console.log(`\nJoplin MCP Server v${__VERSION__}\n\nUsage: joplin-mcp-server [options]\n\nOptions:\n -v, --version Show version number\n -h, --help Show help\n\nEnvironment Variables:\n JOPLIN_TOKEN Joplin API token (required)\n JOPLIN_HOST Connect to existing Joplin at this host (skips sidecar)\n JOPLIN_PORT Connect to existing Joplin on this port (skips sidecar)\n JOPLIN_CLI Path to joplin CLI binary (overrides auto-detection)\n\nFor more information, visit: https://github.com/jordanburke/joplin-mcp-server\n`)\n process.exit(0)\n}\n\n// Import and start server if not showing version/help\nasync function main() {\n // Import and run the main function from the FastMCP server\n await import(\"./index.js\")\n}\n\nvoid main()\n"],"mappings":";;AAMA,QAAQ,IAAI,mBAAmB;AAG/B,MAAM,OAAO,QAAQ,KAAK,MAAM,CAAC;AAEjC,IAAI,KAAK,SAAS,WAAW,KAAK,KAAK,SAAS,IAAI,GAAG;CACrD,QAAQ,IAAA,OAAe;CACvB,QAAQ,KAAK,CAAC;AAChB;AAEA,IAAI,KAAK,SAAS,QAAQ,KAAK,KAAK,SAAS,IAAI,GAAG;CAClD,QAAQ,IAAI;;;;;;;;;;;;;;;;CAgBb;CACC,QAAQ,KAAK,CAAC;AAChB;AAGA,eAAe,OAAO;CAEpB,MAAM,OAAO;AACf;AAEK,KAAK"}