The Joplin MCP Server provides a comprehensive MCP (Model Context Protocol) interface for managing Joplin notes and notebooks. It enables you to:
Read & Search
List complete notebook hierarchies
Search for notes using queries
Read individual notes or multiple notes at once
Read notebook contents
Create Content
Create new notes with attributes like title, body, todo status, HTML body, parent notebook, and image data
Create new folders/notebooks with optional parent relationships
Edit Content
Update existing notes (title, body, todo status, due date, completion status, parent notebook)
Edit folders/notebooks (title, parent folder)
Delete Content
Delete notes and folders/notebooks (both require confirmation, with optional force deletion for folders)
This server essentially provides full CRUD (Create, Read, Update, Delete) operations for your Joplin workspace through a programmatic interface.
Enables loading configuration from environment files, supporting custom environment file paths for flexible configuration management.
Provides tools for interacting with Joplin notebooks and notes, including listing notebooks, searching notes, reading notebook contents, and accessing individual or multiple notes with their full content.
Server implementation is built on Node.js, allowing the MCP server to run in Node.js environments.
Enables installation and execution via npm's package manager, supporting both local installation and execution via npx without installation.
Joplin MCP Server
This is a Node.js implementation of an MCP (Model Context Protocol) server for Joplin.
Quick Start
Install via npx (no installation required):
Configuration
Create a .env file with the following variables:
You can find your Joplin token in the Joplin desktop app under: Tools > Options > Web Clipper
WSL (Windows Subsystem for Linux) Setup
If you're running the MCP server in WSL and Joplin on Windows, you'll need to set up port forwarding because Joplin binds to 127.0.0.1 (localhost only) by default.
Option 1: Windows Port Forwarding (Recommended)
This is the simplest solution that requires no Joplin configuration changes and persists across reboots.
On Windows (PowerShell as Administrator):
Configure your .env file in WSL:
To find your Windows IP address:
To remove the port forward later (if needed):
Note: This port forwarding rule persists across reboots - you only need to set it up once!
Option 2: Configure Joplin to Listen on All Interfaces (Alternative)
If you prefer to configure Joplin directly instead of using port forwarding:
Find your Joplin configuration file:
Windows:
C:\Users\YourUsername\.config\joplin-desktop\settings.json
Add this configuration to settings.json:
{ "clipperServer.host": "0.0.0.0" }Restart Joplin for the changes to take effect
Set your .env file in WSL:
JOPLIN_HOST=10.255.255.254 # WSL bridge IP from /etc/resolv.conf JOPLIN_PORT=41184 JOPLIN_TOKEN=your_joplin_token
Security Note: This makes Joplin accessible on your entire local network. The API token is still required for all operations.
Troubleshooting WSL Connectivity
Test connectivity from WSL:
Common issues:
Connection refused: Port forwarding not set up or Joplin not running
Verify port forward:
netsh interface portproxy show all(on Windows)Verify Joplin is running with Web Clipper enabled
Connection timeout: Windows Firewall is blocking the port
Open Windows Defender Firewall
Add Inbound Rule for TCP port 41184
Wrong IP: Make sure you're using your actual Windows IP address
Check with
ipconfigon Windows (look for IPv4 Address on your active network adapter)
Command Line Options
Command Line Usage Examples
MCP Client Configuration
Claude Desktop Configuration
Important: Claude Desktop does NOT support environment variable expansion (${VAR} syntax). You must provide values directly.
Option 1: Using env Section (Recommended)
Add to your claude_desktop_config.json:
Option 2: Using Command-Line Arguments
Restart Claude Desktop after updating the configuration.
Claude Code Configuration
Claude Code supports environment variable expansion in .mcp.json.
1. Set environment variables in your shell (add to ~/.bashrc or ~/.zshrc):
2. Use the included :
The repository includes a working .mcp.json file that uses environment variable expansion:
The server will automatically use JOPLIN_PORT and JOPLIN_HOST from your shell environment, or use the defaults (127.0.0.1:41184).
Other MCP Clients (Cursor, etc.)
Most MCP clients support environment variable expansion (${VAR} syntax).
With environment variables:
With direct values:
Using environment file:
Logging
The server logs all incoming commands and outgoing responses. Logs are stored in two places:
Console output: Basic information is displayed in the console
Log files: Detailed logs are saved in the
logsdirectory with timestamps
You can adjust the log level by setting the LOG_LEVEL environment variable:
Available log levels (from most to least verbose):
debug: All messages including detailed command and response datainfo: Standard operational messages (default)warn: Warnings and errors onlyerror: Only error messages
Available Tools
list_notebooks
Retrieves the complete notebook hierarchy from Joplin.
search_notes
Searches for notes in Joplin and returns matching notebooks.
Parameters:
query: The search query string
Important: Note the difference between note titles and IDs. When using the
read_notebookcommand, you must use the notebook ID (a long alphanumeric string), not the notebook title.
read_notebook
Reads the contents of a specific notebook.
Parameters:
notebook_id: The ID of the notebook to read
Common Error: If you try to use a note title (like "todo") instead of a notebook ID, you'll get an error. Always use the notebook ID (the long alphanumeric string) shown in the search results or notebook list.
read_note
Reads the full content of a specific note.
Parameters:
note_id: The ID of the note to read
Note: The
read_notecommand shows the full content of a specific note, while theread_notebookcommand shows a list of notes in a notebook. Usesearch_notesto find notes and get their IDs.
read_multinote
Reads the full content of multiple notes at once.
Parameters:
note_ids: An array of note IDs to read
Tip: When you search for notes or view a notebook, you'll see a suggestion for using
read_multinotewith the exact IDs of the notes found. This makes it easy to read multiple related notes at once.
Development
Local Development Setup
Testing Local Changes
License
MIT
Related MCP Servers
- -securityAlicense-qualityMarineTraffic MCP ServerLast updated -8MIT License
- MIT License
- MIT License