
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 分