
Joplin MCP Server
io.github.alondmnt由 GitHub 帳號 alondmnt 發布v0.10.0更新於 Oct 24, 2026
FastMCP server exposing Joplin notes, notebooks, tags, and imports.
概覽
一個本機 MCP 伺服器,透過 Joplin Web Clipper API 讓 AI 助理存取 Joplin 的筆記、筆記本與標籤。
- 可以做什麼
- 搜尋與讀取筆記,包括全文搜尋、依標籤與筆記本篩選、筆記內正規表達式搜尋、連結,以及附件的 OCR 文字。建立、更新、精準編輯與刪除筆記,並在筆記本之間移動筆記。列出、建立、重新命名、移動與刪除筆記本。列出、建立、更新與刪除標籤,並批次為筆記加上或移除標籤。從垃圾桶還原軟刪除的筆記或筆記本。匯入 Markdown、HTML、CSV、TXT 與 JEX 檔案或目錄,並檢查與 Joplin 的連線。
- 適用情境
- 適合將知識庫、會議記錄或待辦清單放在 Joplin,並希望助理搜尋、摘要、草擬或整理這些內容的情況。也適合批次加上標籤、匯入既有檔案,以及從垃圾桶還原項目。
- 執行需求
- 以 Python 套件在本機執行(pip 或 uvx),需要執行中的 Joplin Desktop 3.x 並啟用 Web Clipper 服務。需透過 JOPLIN_TOKEN 提供 Web Clipper 授權權杖;JOPLIN_URL 為選用,可覆寫預設的 localhost:41184 位址。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Joplin MCP Server,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
Joplin MCP Server
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.
Table of Contents
- What You Can Do
- Quick Start
- Supported Clients
- Example Usage
- Tool Permissions
- Notebook Allowlist
- Advanced Configuration
- Docker
- Project Structure
- Testing
- Complete Tool Reference
- Changelog
What You Can Do
This MCP server provides 26 optimized tools for comprehensive Joplin integration:
Note Management
- Find & Search:
find_notes(supportstrash=Truefor trashed notes),find_notes_with_tag,find_notes_in_notebook,get_all_notes - CRUD Operations:
get_note,get_note_resources(read OCR text from attached images/PDFs),get_links,create_note,update_note,edit_note,delete_note
Notebook Management
- Organize:
list_notebooks,create_notebook,update_notebook,delete_notebook
Tag Management
- Categorize:
list_tags,create_tag,update_tag,delete_tag,get_tags_by_note - Link:
tag_note,untag_note
Trash Management
- Recover:
restore_from_trash- Restore soft-deleted notes or notebooks
Import
- File Import:
import_from_file- Import Markdown, HTML, CSV, TXT, JEX files and directories
System
- Health:
ping_joplin
Quick Start
- Open Joplin Desktop → Tools → Options → Web Clipper
- Enable the Web Clipper service
- Copy the Authorization token
- Set up your preferred client below
Supported Clients
Any MCP-compatible client should work. Below are the ones with documented setup instructions.
Claude Desktop
Run the automated installer:
This script will:
- Configure your Joplin API token
- Set tool permissions (Create/Update/Delete)
- Set up Claude Desktop automatically
- Test the connection
After setup, restart Claude Desktop and you're ready to go!
Claude Code
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.
Jan AI
-
Install Jan AI from https://jan.ai
-
Add MCP Server in Jan's interface:
- Open Jan AI
- Go to Settings → Extensions → Model Context Protocol
- Click Add MCP Server
- Configure:
- Name:
joplin - Command:
uvx --from joplin-mcp joplin-mcp-server(requiresuvinstalled) - Environment Variables:
JOPLIN_TOKEN:your_joplin_api_token_here
- Name:
- Enable the server
-
Start chatting with access to your Joplin notes!
Automated Setup (Alternative)
This will detect and configure Jan AI automatically, just like Claude Desktop.
OllMCP (Local Ollama Models)
Auto-discovery (if you set up Claude Desktop first)
Manual setup (works independently)
Example Usage
Once configured, you can ask your AI assistant:
- "List all my notebooks" - See your Joplin organization
- "Find notes about Python programming" - Search your knowledge base
- "Create a meeting note for today's standup" - Quick note creation
- "Tag my recent AI notes as 'important'" - Organize with tags
- "Show me my todos" - Find task items with
find_notes(task=True)
Tool Permissions
The setup script offers 4 permission levels:
- Read (always enabled): Browse and search your notes safely
- Write (optional): Create new notes, notebooks, and tags
- Update (optional): Modify existing content
- Delete (optional): Remove content permanently
Choose the level that matches your comfort and use case.
Notebook Allowlist
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.
Quick Setup
JSON config (joplin-mcp.json):
Environment variable:
Pattern Syntax
Patterns use gitignore/gitwildmatch semantics:
Negation patterns always win over positive patterns (any negation match on a path or ancestor denies access).
How It Works
- Hierarchical access: Allowing a parent notebook grants access to all its children. Allowing
Projectsmeans notes inProjects/Work/Tasksare also accessible. - Read protection:
get_note,get_note_resources,find_notes,get_links— notes in blocked notebooks are filtered out or rejected. - Write protection:
create_note,update_note,edit_note,delete_note— operations on notes in blocked notebooks are rejected. - Notebook operations:
list_notebooksonly shows accessible notebooks.create_notebookis rejected both under a blocked parent and at the top level (noparent_name) when an allowlist is set, andupdate_notebookrejects 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 tonotebook_allowlistand restart the server. - Search filtering:
find_notesresults are filtered to only include notes in accessible notebooks. - Tag operations:
tag_note,untag_note,get_tags_by_noteenforce access on the note's notebook. - Error privacy: Blocked access raises a generic "Notebook not accessible" error without revealing notebook names or IDs.
Configuration Examples
Single project focus (notebook name containing a space):
Multiple notebooks with exclusion:
Glob patterns:
No allowlist (default) — all notebooks accessible:
Startup Behavior
At server startup, the allowlist is validated and logged:
- Each entry is resolved against existing notebooks
- Unresolvable patterns trigger warnings (but never block startup)
- If the allowlist resolves to zero accessible notebooks, a warning is logged
Advanced Configuration
Development Installation
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.
Manual Configuration
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.
1. Create Configuration File
Create joplin-mcp.json in your project directory:
2. Claude Desktop Configuration
Add to your claude_desktop_config.json:
Option A: Using uvx (Zero-install)
Requires uv installed: pip install uv
Option B: Using installed package
3. More Client Configuration Examples
For additional client configurations including different transport options (HTTP, SSE, Streamable HTTP), see client-config.json.example.
This file includes configurations for:
- STDIO transport (default, most compatible)
- HTTP transport (basic HTTP server mode)
- SSE transport (recommended for gemini-cli and OpenAI clients)
- Streamable HTTP transport (advanced web clients)
- HTTP-compat transport (bridges modern
/mcpJSON-RPC with legacy/sse//messagesclients)
Tool Permission Configuration
Fine-tune which operations the AI can perform by editing your config:
Environment Variables
Usable instead of a JSON config file, or alongside one:
Environment variables override the config file key by key, so the env
block in your MCP client's configuration wins over whatever file the
server discovers. A variable only takes part when it is actually set, so
setting one leaves the rest of your file alone. Full order: direct
parameters > environment > config file > defaults.
Per-Tool Env Vars
Every tool can be toggled individually via JOPLIN_TOOL_<NAME>=true|false. These take precedence over config file settings.
Notebook Allowlist Env Var
HTTP Transport Support
The server supports both STDIO and HTTP transports:
HTTP client config
Note: Claude Desktop currently uses STDIO transport and does not consume HTTP/SSE configs directly. The following example applies to clients that support network transports.
Configuration Reference
Basic Settings
Tool Permissions
Notebook Allowlist
Content Exposure (Privacy Settings)
Lowering max_preview_length and smart_toc_threshold, or setting
search_results to "none", is the main way to cut how many tokens a
session spends. list_notebooks and list_tags return only the fields
an agent acts on; pass verbose=True for icons, parent ids and
timestamps. See docs/content-privacy.md.
Docker
Run the MCP server in a container. Default transport is HTTP for broad compatibility; switch via environment variables.
Build
Run (HTTP default)
With mounted config
Choose transport
- SSE (streaming):
-e MCP_TRANSPORT=sse - Streamable HTTP:
-e MCP_TRANSPORT=streamable-http - STDIO (no port):
-e MCP_TRANSPORT=stdio
Example (SSE):
The container listens on 0.0.0.0:8000 by default. If exposing publicly, place behind a reverse proxy and terminate TLS there. For SSE, ensure proxy keep-alives and buffering are configured appropriately.
Project Structure
src/joplin_mcp/- Main package directoryfastmcp_server.py- Server implementation with 26 tools and Pydantic validation typesconfig.py- Configuration management (including notebook allowlist)notebook_utils.py- Notebook path resolution, allowlist matching, and cachingserver.py- Server entrypoint (module and CLI)tools/- Tool implementations (notes, notebooks, tags)ui_integration.py- UI integration utilities
docs/- Documentation (troubleshooting, privacy controls, enhancement proposals)tests/- Unit test suitetests/e2e/- End-to-end tests against a real Joplin Desktop (3.x) via the Web Clipper API; see "Running Tests"
Testing
Test your connection:
You should see:
Running Tests
The E2E suite talks to a real Joplin Desktop via the Web Clipper API and exercises every tool including notebook allowlist enforcement. If JOPLIN_HOST:JOPLIN_PORT is unreachable the suite skips itself, so it's safe to run alongside the unit tests. Requires Joplin 3.x (the trash schema introduced in 3.0 — earlier versions fail with no such column: deleted_time).
Complete Tool Reference
來源:README.md,提交 b84c313
工具
0版本歷史
1- v0.10.0最新Sep 16, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分