by alondmnt
MCP server for the Joplin note taking app
# Add to your Claude Code skills
git clone https://github.com/alondmnt/joplin-mcpA FastMCP-based Model Context Protocol (MCP) server for Joplin note-taking application via its Python API joppy, enabling AI assistants to interact with your Joplin notes, notebooks, and tags through a standardized interface.
This MCP server provides 25 optimized tools for comprehensive Joplin integration:
find_notes (supports trash=True for trashed notes), find_notes_with_tag, find_notes_in_notebook, get_all_notesget_note, get_links, create_note, update_note, edit_note, delete_noteNo comments yet. Be the first to share your thoughts!
Top skills in this category by stars
list_notebooks, create_notebook, update_notebook, delete_notebooklist_tags, create_tag, update_tag, delete_tag, get_tags_by_notetag_note, untag_noterestore_from_trash - Restore soft-deleted notes or notebooksimport_from_file - Import Markdown, HTML, CSV, TXT, JEX files and directoriesping_joplinAny MCP-compatible client should work. Below are the ones with documented setup instructions.
Run the automated installer:
# Install and configure everything automatically (pip)
pip install joplin-mcp
joplin-mcp-install
# Or use zero-install with uvx (recommended if you have uv)
uvx --from joplin-mcp joplin-mcp-install
# Optional: pin a specific version/range for stability
uvx --from joplin-mcp==0.4.1 joplin-mcp-install
uvx --from 'joplin-mcp>=0.4,<0.5' joplin-mcp-install
This script will:
After setup, restart Claude Desktop and you're ready to go!
Install the orchestration plugin for smarter tool usage (edit vs update, long-note reading, bulk tagging):
/plugin marketplace add alondmnt/joplin-mcp
/plugin install joplin-mcp
You'll be prompted for your Joplin API token on first use. The skill is invoked automatically when working with Joplin tools, or manually with /joplin.
Install Jan AI from https://jan.ai
Add MCP Server in Jan's interface:
joplinuvx --from joplin-mcp joplin-mcp-server (requires uv installed)JOPLIN_TOKEN: your_joplin_api_token_hereStart chatting with access to your Joplin notes!
Automated Setup (Alternative)
# Install and configure Jan AI automatically (if Jan is already installed)
pip install joplin-mcp
joplin-mcp-install
This will detect and configure Jan AI automatically, just like Claude Desktop.
Auto-discovery (if you set up Claude Desktop first)
# Install ollmcp
pip install ollmcp
# Run with auto-discovery (requires existing Claude Desktop config)
ollmcp --auto-discovery --model qwen3:4b
Manual setup (works independently)
# Install ollmcp
pip install ollmcp
# Set environment variable
export JOPLIN_TOKEN="your_joplin_api_token_here"
# Run with uvx (requires uv installed)
ollmcp --server "joplin:uvx --from joplin-mcp joplin-mcp-server" --model qwen3:4b
# Or with an installed package (pip install joplin-mcp)
ollmcp --server "joplin:joplin-mcp-server" --model qwen3:4b
Once configured, you can ask your AI assistant:
find_notes(task=True)The setup script offers 4 permission levels:
Choose the level that matches your comfort and use case.
For developers or users who want the latest features:
macOS/Linux:
git clone https://github.com/alondmnt/joplin-mcp.git
cd joplin-mcp
./install.sh
Windows:
git clone https://github.com/alondmnt/joplin-mcp.git
cd joplin-mcp
install.bat
If you prefer manual setup or the script doesn't work:
Note on
uvx:uvxruns Python applications without permanently installing them (requiresuv:pip install uv). It can read and write user configuration files (e.g., Claude/Jan configs), souvx --from joplin-mcp joplin-mcp-installworks for setup just like a pip install.
Version pinning (optional): For long‑lived client configs or CI, you can pin or range-constrain the version for reproducibility, e.g.
uvx --from joplin-mcp==0.4.1 joplin-mcp-installoruvx --from 'joplin-mcp>=0.4,<0.5' joplin-mcp-install.
Create joplin-mcp.json in your project directory:
{
"token": "your_api_token_here",
"host": "localhost",
"port": 41184,
"timeout": 30,
"verify_ssl": false
}
Add to your claude_desktop_config.json:
Option A: Using uvx (Zero-install)
{
"mcpServers": {
"joplin": {
"command": "uvx",
"args": ["--from", "joplin-mcp", "joplin-mcp-server"],
"env": {
"JOPLIN_TOKEN": "your_token_here"
}
}
}
}
Requires uv installed: pip install uv
Option B: Using installed package
{
"mcpServers": {
"joplin": {
"command": "joplin-mcp-server",
"env": {
"JOPLIN_TOKEN": "your_token_here"
}
}
}
}
For additional client configurations including different transport options (HTTP, SSE, Streamable HTTP), see client-config.json.example.
This file includes configurations for:
/mcp JSON-RPC with legacy /sse//messages clients)Fine-tune which operations the AI can perform by editing your config:
{
"tools": {
"create_note": true,
"update_note": true,
"delete_note": false,
"create_notebook": true,
"update_notebook": false,
"delete_notebook": false,
"create_tag": true,
"update_tag": false,
"delete_tag": false,
"get_all_notes": false,
"import_from_file": true
}
}
Alternative to JSON configuration:
# Connection settings
export JOPLIN_TOKEN="your_api_token_here"
export JOPLIN_HOST="localhost"
export JOPLIN_PORT="41184"
export JOPLIN_TIMEOUT="30"
Every tool can be toggled individually via JOPLIN_TOOL_<NAME>=true|false. These take precedence over config file settings.
| Env var | Default |
|---------|---------|
| JOPLIN_TOOL_FIND_NOTES | true |
| JOPLIN_TOOL_FIND_NOTES_WITH_TAG | true |
| JOPLIN_TOOL_FIND_NOTES_IN_NOTEBOOK | true |
| JOPLIN_TOOL_FIND_IN_NOTE | true |
| JOPLIN_TOOL_GET_ALL_NOTES | false |
| JOPLIN_TOOL_GET_NOTE | true |
| JOPLIN_TOOL_GET_LINKS | true |
| JOPLIN_TOOL_CREATE_NOTE | true |
| JOPLIN_TOOL_UPDATE_NOTE | true |
| JOPLIN_TOOL_EDIT_NOTE | true |
| JOPLIN_TOOL_DELETE_NOTE | false |
| JOPLIN_TOOL_LIST_NOTEBOOKS | true |
| JOPLIN_TOOL_CREATE_NOTEBOOK | true |
| JOPLIN_TOOL_UPDATE_NOTEBOOK | false |
| JOPLIN_TOOL_DELETE_NOTEBOOK | false |
| JOPLIN_TOOL_LIST_TAGS | true |
| JOPLIN_TOOL_CREATE_TAG | true |
| JOPLIN_TOOL_UPDATE_TAG | false |
| JOPLIN_TOOL_DELETE_TAG | false |
| JOPLIN_TOOL_GET_TAGS_BY_NOTE | true |
| JOPLIN_TOOL_TAG_NOTE | true |
| JOPLIN_TOOL_UNTAG_NOTE | true |
| JOPLIN_TOOL_PING_JOPLIN | true |
| JOPLIN_TOOL_RESTORE_FROM_TRASH | true |
| JOPLIN_TOOL_IMPORT_FROM_FILE | false |
The server supports both STDIO and HTTP transports:
# STDIO (default)
joplin-mcp-server --config ~/.joplin-mcp.json
# HTTP transport (development, from repo)
PYTHONPATH=src python -m joplin_mcp.server --transport http --port 8000 --config ./joplin-mcp.json
# Opt-in HTTP compatibility bundle (modern + legacy SSE endpoints)
PYTHONPATH=src python -m joplin_mcp.server --transport http-compat --port 8000 --config ./joplin-mcp.json
# or keep --transport http and export MCP_HTTP_COMPAT=1/true to toggle the same behavior.