FastMCP server exposing Joplin notes, notebooks, tags, and imports.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
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:
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):
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)
This will detect and configure Jan AI automatically, just like Claude Desktop.
Auto-discovery (if you set up Claude Desktop first)
Manual setup (works independently)
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):
Environment variable:
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):
Multiple notebooks with exclusion:
Glob patterns:
No allowlist (default) β all notebooks accessible:
At server startup, the allowlist is validated and logged:
For developers or users who want the latest features:
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:
Add to your claude_desktop_config.json:
Factual signals from GitHub, npm, and our automated checks β not a rating.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/joplin-mcp)<a href="https://allmcps.com/mcp/joplin-mcp"><img src="https://allmcps.com/api/badge/joplin-mcp?style=directory" alt="Joplin MCP on AllMCPs" /></a>