by alondmnt
MCP server for the Joplin note taking app
# Add to your Claude Code skills
git clone https://github.com/alondmnt/joplin-mcpGuides for using mcp servers skills like joplin-mcp.
Last scanned: 5/30/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-05-30T16:22:12.161Z",
"npmAuditRan": true,
"pipAuditRan": false
}joplin-mcp is an open-source mcp servers skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by alondmnt. MCP server for the Joplin note taking app. It has 132 GitHub stars.
Yes. joplin-mcp passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/alondmnt/joplin-mcp" and add it to your Claude Code skills directory (see the Installation section above).
joplin-mcp is primarily written in Python. It is open-source under alondmnt on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other MCP Servers skills you can browse and compare side by side. Open the MCP Servers category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh joplin-mcp against similar tools.
No comments yet. Be the first to share your thoughts!
Top skills in this category by stars
A 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 26 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_note_resources (read OCR text from attached images/PDFs), get_links, create_note, update_note, edit_note, delete_notelist_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.
Restrict AI access to specific notebooks using pattern-based access control. When configured, only matching notebooks (and their contents) are visible — all other notebooks are hidden.
JSON config (joplin-mcp.json):
{
"token": "your_token",
"notebook_allowlist": ["Work", "Projects/Public"]
}
Environment variable:
export JOPLIN_NOTEBOOK_ALLOWLIST="Work,Projects/Public"
Patterns use gitignore/gitwildmatch semantics:
| Pattern | Matches | Example |
|---|---|---|
Work |
Exact notebook name (and all children) | Work, Work/Tasks, Work/Notes |
Projects/* |
Direct children of Projects | Projects/Alpha, Projects/Beta |
Projects/** |
All descendants recursively | Projects/Alpha/Tasks/Q1 |
!Projects/Secret |
Exclude (negate) a specific path | Everything in Projects except Secret |
Negation patterns always win over positive patterns (any negation match on a path or ancestor denies access).
Projects means notes in Projects/Work/Tasks are also accessible.get_note, get_note_resources, find_notes, get_links — notes in blocked notebooks are filtered out or rejected.create_note, update_note, edit_note, delete_note — operations on notes in blocked notebooks are rejected.list_notebooks only shows accessible notebooks. create_notebook is rejected both under a blocked parent and at the top level (no parent_name) when an allowlist is set, and update_notebook rejects moves to top-level (parent_name="/") under the same policy — both would let the agent silently move a notebook out of allowlist-enforced scope. To grow the allowlist, create or relocate the notebook in the Joplin UI, then add it to notebook_allowlist and restart the server.find_notes results are filtered to only include notes in accessible notebooks.tag_note, untag_note, get_tags_by_note enforce access on the note's notebook.Single project focus (notebook name containing a space):
{ "notebook_allowlist": ["Work Projects"] }
Multiple notebooks with exclusion:
{ "notebook_allowlist": ["Projects", "!Projects/Secret", "AI", "Reference"] }
Glob patterns:
{ "notebook_allowlist": ["Projects/*", "!Projects/Private"] }
No allowlist (default) — all notebooks accessible:
{ "notebook_allowlist": null }
At server startup, the allowlist is validated and logged:
For developers or users who want the latest features:
git clone https://github.com/alondmnt/joplin-mcp.git
cd joplin-mcp
python bootstrap.py
bootstrap.py is cross-platform: it offers to create a ./venv, runs pip install -e ., then launches the interactive installer. Pass --no-venv to install into whichever Python is already active.
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": {
"