io.github.alondmnt/joplin-mcp

平台与服务

by alondmnt

基于 FastMCP 的服务器,开放 Joplin 的笔记、笔记本、标签及导入功能,便于 AI 统一访问与管理。

把 Joplin 笔记、笔记本和标签统一开放给 AI 调用,基于 FastMCP 接入顺手,还支持导入,特别适合做个人知识库自动化。

什么是 io.github.alondmnt/joplin-mcp

基于 FastMCP 的服务器,开放 Joplin 的笔记、笔记本、标签及导入功能,便于 AI 统一访问与管理。

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.

<!-- mcp-name: io.github.alondmnt/joplin-mcp -->

Table of Contents

What You Can Do

This MCP server provides 24 optimized tools for comprehensive Joplin integration:

Note Management

  • Find & Search: find_notes, find_notes_with_tag, find_notes_in_notebook, get_all_notes
  • CRUD Operations: get_note, 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

Import

  • File Import: import_from_file - Import Markdown, HTML, CSV, TXT, JEX files and directories

System

  • Health: ping_joplin

Quick Start

  1. Open Joplin DesktopToolsOptionsWeb Clipper
  2. Enable the Web Clipper service
  3. Copy the Authorization token
  4. 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:

bash
# 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:

  • 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!

code
"List my notebooks" or "Create a note about today's meeting"

Claude Code

Install the orchestration plugin for smarter tool usage (edit vs update, long-note reading, bulk tagging):

bash
/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.

Jan AI

  1. Install Jan AI from https://jan.ai

  2. Add MCP Server in Jan's interface:

    • Open Jan AI
    • Go to SettingsExtensionsModel Context Protocol
    • Click Add MCP Server
    • Configure:
      • Name: joplin
      • Command: uvx --from joplin-mcp joplin-mcp-server (requires uv installed)
      • Environment Variables:
        • JOPLIN_TOKEN: your_joplin_api_token_here
    • Enable the server
  3. Start chatting with access to your Joplin notes!

Automated Setup (Alternative)

bash
# 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.

code
"Show me my recent notes" or "Create a project planning note"

OllMCP (Local Ollama Models)

Auto-discovery (if you set up Claude Desktop first)

bash
# Install ollmcp
pip install ollmcp

# Run with auto-discovery (requires existing Claude Desktop config)
ollmcp --auto-discovery --model qwen3:4b

Manual setup (works independently)

bash
# Install ollmcp
pip install ollmcp

# Set environment variable
export JOPLIN_TOKEN="your_joplin_api_token_here"

# Run with manual server configuration (requires uv installed)
ollmcp --server "joplin:uvx --from joplin-mcp joplin-mcp-server" --model qwen3:4b

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.


Advanced Configuration

Alternative Installation Methods

Method 1: Traditional pip install

If you don't have uvx or prefer to customize MCP settings:

bash
# Install the package
pip install joplin-mcp

# Run the setup script
joplin-mcp-install

This method provides the same functionality as uvx joplin-mcp-install but requires a local Python environment.

Method 2: Development Installation

For developers or users who want the latest features:

macOS/Linux:

bash
git clone https://github.com/alondmnt/joplin-mcp.git
cd joplin-mcp
./install.sh

Windows:

batch
git clone https://github.com/alondmnt/joplin-mcp.git
cd joplin-mcp
install.bat

Manual Configuration

If you prefer manual setup or the script doesn't work:

Note on uvx: uvx runs Python applications without permanently installing them (requires uv: pip install uv). It can read and write user configuration files (e.g., Claude/Jan configs), so uvx --from joplin-mcp joplin-mcp-install works 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-install or uvx --from 'joplin-mcp>=0.4,<0.5' joplin-mcp-install.

1. Create Configuration File

Create joplin-mcp.json in your project directory:

json
{
  "token": "your_api_token_here",
  "host": "localhost", 
  "port": 41184,
  "timeout": 30,
  "verify_ssl": false
}

2. Claude Desktop Configuration

Add to your claude_desktop_config.json:

Option A: Using uvx (Zero-install)

json
{
  "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

json
{
  "mcpServers": {
    "joplin": {
      "command": "joplin-mcp-server",
      "env": {
        "JOPLIN_TOKEN": "your_token_here"
      }
    }
  }
}

3. OllMCP Manual Configuration

Option A: Using uvx (Zero-install)

bash
# Set environment variable
export JOPLIN_TOKEN="your_token_here"

# Run with manual server configuration
ollmcp --server "joplin:uvx --from joplin-mcp joplin-mcp-server" --model qwen3:4b

Requires uv installed: pip install uv

Option B: Using installed package

bash
# Set environment variable
export JOPLIN_TOKEN="your_token_here"

# Run with manual server configuration
ollmcp --server "joplin:joplin-mcp-server" --model qwen3:4b

4. 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 /mcp JSON-RPC with legacy /sse//messages clients)

Tool Permission Configuration

Fine-tune which operations the AI can perform by editing your config:

json
{
  "tools": {
    "create_note": true,
    "update_note": true, 
    "delete_note": false,
    "create_notebook": true,
    "delete_notebook": false,
    "create_tag": true,
    "update_tag": false,
    "delete_tag": false,
    "import_from_file": true,
    "get_all_notes": false,
    "update_notebook": false,
    "update_tag": false
  }
}

Environment Variables

Alternative to JSON configuration:

bash
# Connection settings
export JOPLIN_TOKEN="your_api_token_here"
export JOPLIN_HOST="localhost"
export JOPLIN_PORT="41184"
export JOPLIN_TIMEOUT="30"

Per-Tool Env Vars

Every tool can be toggled individually via JOPLIN_TOOL_<NAME>=true|false. These take precedence over config file settings.

Env varDefault
JOPLIN_TOOL_FIND_NOTEStrue
JOPLIN_TOOL_FIND_NOTES_WITH_TAGtrue
JOPLIN_TOOL_FIND_NOTES_IN_NOTEBOOKtrue
JOPLIN_TOOL_FIND_IN_NOTEtrue
JOPLIN_TOOL_GET_ALL_NOTESfalse
JOPLIN_TOOL_GET_NOTEtrue
JOPLIN_TOOL_GET_LINKStrue
JOPLIN_TOOL_CREATE_NOTEtrue
JOPLIN_TOOL_UPDATE_NOTEtrue
JOPLIN_TOOL_EDIT_NOTEtrue
JOPLIN_TOOL_DELETE_NOTEfalse
JOPLIN_TOOL_LIST_NOTEBOOKStrue
JOPLIN_TOOL_CREATE_NOTEBOOKtrue
JOPLIN_TOOL_UPDATE_NOTEBOOKfalse
JOPLIN_TOOL_DELETE_NOTEBOOKfalse
JOPLIN_TOOL_LIST_TAGStrue
JOPLIN_TOOL_CREATE_TAGtrue
JOPLIN_TOOL_UPDATE_TAGfalse
JOPLIN_TOOL_DELETE_TAGfalse
JOPLIN_TOOL_GET_TAGS_BY_NOTEtrue
JOPLIN_TOOL_TAG_NOTEtrue
JOPLIN_TOOL_UNTAG_NOTEtrue
JOPLIN_TOOL_PING_JOPLINtrue
JOPLIN_TOOL_IMPORT_FROM_FILEfalse

HTTP Transport Support

The server supports both STDIO and HTTP transports:

bash
# 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.

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.

json
{
  "mcpServers": {
    "joplin": {
      "transport": "http",
      "url": "http://localhost:8000/mcp"
    }
  }
}

Configuration Reference

Basic Settings

OptionDefaultDescription
tokenrequiredJoplin API authentication token
hostlocalhostJoplin server hostname
port41184Joplin Web Clipper port
timeout30Request timeout in seconds
verify_sslfalseSSL certificate verification

Tool Permissions

OptionDefaultDescription
tools.create_notetrueAllow creating new notes
tools.update_notetrueAllow modifying existing notes
tools.delete_notefalseAllow deleting notes (disabled by default — destructive)
tools.create_notebooktrueAllow creating new notebooks
tools.update_notebookfalseAllow modifying notebook titles
tools.delete_notebookfalseAllow deleting notebooks (disabled by default — destructive)
tools.create_tagtrueAllow creating new tags
tools.update_tagfalseAllow modifying tag titles
tools.delete_tagfalseAllow deleting tags (disabled by default — destructive)
tools.tag_notetrueAllow adding tags to notes
tools.untag_notetrueAllow removing tags from notes
tools.find_notestrueAllow text search across notes (with task filtering)
tools.find_notes_with_tagtrueAllow finding notes by tag (with task filtering)
tools.find_notes_in_notebooktrueAllow finding notes by notebook (with task filtering)
tools.get_all_notesfalseAllow getting all notes (disabled by default - can fill context window)
tools.get_notetrueAllow getting specific notes
tools.get_linkstrueAllow extracting links to other notes
tools.list_notebookstrueAllow listing all notebooks
tools.list_tagstrueAllow listing all tags
tools.get_tags_by_notetrueAllow getting tags for specific notes
tools.ping_joplintrueAllow testing server connectivity
tools.import_from_filefalseAllow importing files/directories (MD, HTML, CSV, TXT, JEX)

Content Exposure (Privacy Settings)

OptionDefaultDescription
content_exposure.search_results"preview"Content visibility in search results: "none", "preview", "full"
content_exposure.individual_notes"full"Content visibility for individual notes: "none", "preview", "full"
content_exposure.listings"none"Content visibility in note listings: "none", "preview", "full"
content_exposure.max_preview_length300Maximum length of content previews (characters)

Docker

Run the MCP server in a container. Default transport is HTTP for broad compatibility; switch via environment variables.

Build

bash
docker build -t joplin-mcp .

Run (HTTP default)

bash
docker run --rm \
  -p 8000:8000 \
  -e JOPLIN_TOKEN=your_api_token \
  joplin-mcp

With mounted config

bash
docker run --rm \
  -p 8000:8000 \
  -v $PWD/joplin-mcp.json:/config/joplin-mcp.json:ro \
  joplin-mcp

Choose transport

  • SSE (streaming): -e MCP_TRANSPORT=sse
  • Streamable HTTP: -e MCP_TRANSPORT=streamable-http
  • STDIO (no port): -e MCP_TRANSPORT=stdio

Example (SSE):

bash
docker run --rm \
  -p 8000:8000 \
  -e JOPLIN_TOKEN=your_api_token \
  -e MCP_TRANSPORT=sse \
  joplin-mcp

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 directory
    • fastmcp_server.py - Server implementation with 24 tools and Pydantic validation types
    • config.py - Configuration management
    • server.py - Server entrypoint (module and CLI)
    • ui_integration.py - UI integration utilities
  • docs/ - Documentation (troubleshooting, privacy controls, enhancement proposals)
  • tests/ - Test suite

Testing

Test your connection:

bash
# For pip install
joplin-mcp-server --config ~/.joplin-mcp.json

# For development (from repo)
PYTHONPATH=src python -m joplin_mcp.server --config ./joplin-mcp.json

You should see:

code
Starting Joplin FastMCP Server...
Successfully connected to Joplin!
Found X notebooks, Y notes, Z tags
FastMCP server starting...
Available tools: 24 tools ready

Complete Tool Reference

ToolPermissionDescription
Finding Notes
find_notesReadFull-text search across all notes (supports task filtering)
find_notes_with_tagReadFind notes with specific tag (supports task filtering)
find_notes_in_notebookReadFind notes in specific notebook (supports task filtering)
get_all_notesReadGet all notes, most recent first (disabled by default)
get_noteReadGet specific note by ID
find_in_noteReadRegex search within a single note (paginated matches & context, multiline anchors on by default)
get_linksReadExtract links to other notes from a note
Managing Notes
create_noteWriteCreate new notes
update_noteUpdateModify existing notes
edit_noteUpdatePrecision edit note content (find/replace, append, prepend)
delete_noteDeleteRemove notes
Managing Notebooks
list_notebooksReadBrowse all notebooks
create_notebookWriteCreate new notebooks
update_notebookUpdateModify notebook titles
delete_notebookDeleteRemove notebooks
Managing Tags
list_tagsReadView all available tags
create_tagWriteCreate new tags
update_tagUpdateModify tag titles
delete_tagDeleteRemove tags
get_tags_by_noteReadList tags on specific note
Tag-Note Relationships
tag_noteUpdateAdd tags to notes
untag_noteUpdateRemove tags from notes
Import Tools
import_from_fileWriteImport files/directories (MD, HTML, CSV, TXT, JEX)
System Tools
ping_joplinReadTest connectivity

常见问题

io.github.alondmnt/joplin-mcp 是什么?

基于 FastMCP 的服务器,开放 Joplin 的笔记、笔记本、标签及导入功能,便于 AI 统一访问与管理。

相关 Skills

MCP构建

by anthropics

Universal
热门

聚焦高质量 MCP Server 开发,覆盖协议研究、工具设计、错误处理与传输选型,适合用 FastMCP 或 MCP SDK 对接外部 API、封装服务能力。

想让 LLM 稳定调用外部 API,就用 MCP构建:从 Python 到 Node 都有成熟指引,帮你更快做出高质量 MCP 服务器。

平台与服务
未扫描111.1k

Slack动图

by anthropics

Universal
热门

面向Slack的动图制作Skill,内置emoji/消息GIF的尺寸、帧率和色彩约束、校验与优化流程,适合把创意或上传图片快速做成可直接发送的Slack动画。

帮你快速做出适配 Slack 的动图,内置约束规则和校验工具,少踩上传与播放坑,做表情包和演示都更省心。

平台与服务
未扫描111.1k

MCP服务构建器

by alirezarezvani

Universal
热门

从 OpenAPI 一键生成 Python/TypeScript MCP server 脚手架,并校验 tool schema、命名规范与版本兼容性,适合把现有 REST API 快速发布成可生产演进的 MCP 服务。

帮你快速搭建 MCP 服务与后端 API,脚手架完善、扩展顺手,尤其适合想高效验证服务能力的开发者。

平台与服务
未扫描9.6k

相关 MCP Server

Slack 消息

编辑精选

by Anthropic

热门

Slack 是让 AI 助手直接读写你的 Slack 频道和消息的 MCP 服务器。

这个服务器解决了团队协作中需要 AI 实时获取 Slack 信息的痛点,特别适合开发团队让 Claude 帮忙汇总频道讨论或发送通知。不过,它目前只是参考实现,文档有限,不建议在生产环境直接使用——更适合开发者学习 MCP 如何集成第三方服务。

平台与服务
83.0k

by netdata

热门

io.github.netdata/mcp-server 是让 AI 助手实时监控服务器指标和日志的 MCP 服务器。

这个工具解决了运维人员需要手动检查系统状态的痛点,最适合 DevOps 团队让 Claude 自动分析性能数据。不过,它依赖 NetData 的现有部署,如果你没用过这个监控平台,得先花时间配置。

平台与服务
78.3k

by d4vinci

热门

Scrapling MCP Server 是专为现代网页设计的智能爬虫工具,支持绕过 Cloudflare 等反爬机制。

这个工具解决了爬取动态网页和反爬网站时的头疼问题,特别适合需要批量采集电商价格或新闻数据的开发者。不过,它依赖外部浏览器引擎,资源消耗较大,不适合轻量级任务。

平台与服务
34.8k

评论