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 +30 -19
- package/dist/bin.js +6 -6
- package/dist/bin.js.map +1 -1
- package/dist/index.js +515 -397
- package/dist/index.js.map +1 -1
- package/package.json +15 -14
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
[](https://github.com/jordanburke/joplin-mcp-server/actions/workflows/ci.yml)
|
|
5
5
|
[](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
|
-
#
|
|
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
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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()
|
|
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)\
|
|
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"}
|