Sandbox
@dweigend/joplin-mcp-server

MCP server for Joplin notes

This project exposes Joplin through the Model Context Protocol so an AI assistant can work with your notes directly. It supports search, notebook browsing, note creation and editing, deletion, and markdown import.

90 starsβ€’17 forksβ€’Pythonβ€’Updated 1mo ago
Who it's for

Builders who want Claude or another MCP client to read and manage Joplin notes.

What it delivers

You can ask your agent to use your Joplin notebook as live context instead of manually moving notes around.

What it does

Search notes

Full-text search across notes with a query and optional result limit.

Browse notebooks

Lists notebooks and sub-notebooks as a tree.

Create and update notes

Creates new notes, edits existing notes, and supports todo status and notebook placement.

Delete notes

Moves notes to trash or deletes them permanently.

Import markdown

Imports a markdown file as a new note in a chosen notebook.

Claude and MCP support

Runs as an MCP server for Claude Desktop and other MCP-capable assistants.

How to get it

  1. 1Create a .env file in the project directory
    JOPLIN_TOKEN=your_api_token_here
  2. 2To start the server in debug mode
    MCP_LOG_LEVEL=debug mcp dev src/mcp/joplin_mcp.py

README

πŸ“ Joplin MCP Server

A Model Context Protocol (MCP) Server for Joplin that enables note access through the Model Context Protocol. Perfect for integration with AI assistants like Claude.

✨ Features

  • πŸ” Search Notes: Full-text search across all notes
  • πŸ“š List Notebooks: Browse available notebooks and sub-notebooks
  • πŸ—‚οΈ Create Notebooks: Create notebooks and nested sub-notebooks
  • πŸ“– Read Notes: Retrieve individual notes
  • ✏️ Edit Notes: Create new notes and update existing ones
  • πŸ—‘οΈ Delete Notes: Move notes to trash or delete permanently
  • πŸ“₯ Markdown Import: Import markdown files as notes
  • πŸ€– AI Integration: Seamless integration with Claude and other MCP-capable AI assistants

πŸš€ Installation

Prerequisites

  • Python 3.10 or higher
  • Joplin Desktop with Web Clipper Service enabled
  • uv (Python package manager)
# Clone repository
git clone https://github.com/dweigend/joplin-mcp.git
cd joplin-mcp

# Create and activate virtual environment
uv venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate

# Install dependencies
```bash
uv pip install -e .

βš™οΈ Configuration

Joplin API Token

  1. Open Joplin Desktop
  2. Go to Tools -> Options -> Web Clipper
  3. Enable the Web Clipper Service
  4. Copy the API Token

Create a .env file in the project directory:

JOPLIN_TOKEN=your_api_token_here

Claude Desktop Setup

  1. Install Claude Desktop

    • Download Claude Desktop
    • Ensure you have the latest version (Menu: Claude -> Check for Updates...)
  2. Configure MCP Server

    {
      "mcpServers": {
        "joplin": {
          "command": "/PATH/TO/UV/uv",
          "args": [
            "--directory",
            "/PATH/TO/YOUR/PROJECT/joplin_mcp",
            "run",
            "src/mcp/joplin_mcp.py"
          ]
        }
      }
    }
    
    • Replace /PATH/TO/UV/uv with the absolute path to your uv installation
      • Find the path with: which uv
      • Example macOS: /Users/username/.local/bin/uv
      • Example Windows: C:\Users\username\AppData\Local\Microsoft\WindowsApps\uv.exe
    • Replace /PATH/TO/YOUR/PROJECT/joplin_mcp with the absolute path to your project

    Important: Claude Desktop needs the full path to uv as it cannot access shell environment variables.

πŸ› οΈ Available Tools

search_notes

Search for notes in Joplin.

Parameters:

  • query (string): Search query
  • limit (int, optional): Maximum number of results (default: 100)

get_note

Retrieve a specific note by its ID.

Parameters:

  • note_id (string): ID of the note

list_notebooks

List all available notebooks as a tree.

Parameters:

  • None

create_notebook

Create a new notebook.

Parameters:

  • title (string): Notebook title
  • parent_id (string, optional): Parent notebook ID
  • parent_notebook_name (string, optional): Parent notebook title or full path

create_note

Create a new note.

Parameters:

  • title (string): Note title
  • body (string, optional): Note content in Markdown
  • parent_id (string, optional): ID of parent folder
  • notebook_name (string, optional): Notebook title or full path such as Work/Projects
  • is_todo (boolean, optional): Whether this is a todo item

update_note

Update an existing note.

Parameters:

  • note_id (string): ID of note to update
  • title (string, optional): New title
  • body (string, optional): New content
  • parent_id (string, optional): New parent folder ID
  • notebook_name (string, optional): New notebook title or full path such as Work/Projects
  • is_todo (boolean, optional): New todo status

delete_note

Delete a note.

Parameters:

  • note_id (string): ID of note to delete
  • permanent (boolean, optional): If true, permanently delete the note

import_markdown

Import a markdown file as a new note.

Parameters:

  • file_path (string): Path to the markdown file
  • parent_id (string, optional): ID of parent folder
  • notebook_name (string, optional): Notebook title or full path such as Work/Projects

πŸ§ͺ Development

Debug Mode

To start the server in debug mode:

MCP_LOG_LEVEL=debug mcp dev src/mcp/joplin_mcp.py

This starts the MCP Inspector at http://localhost:5173 where you can test the tools.

πŸ“„ License

MIT License - Copyright (c) 2025 David Weigend

πŸ‘€ Author

David Weigend

🀝 Contributing

Contributions, issues and feature requests are welcome! Visit the issues page.

Files in the repo

Repository payloadβ€’9 top-level entries
  • src
  • tests
  • .env.example
  • .gitignore
  • joplin-mcp
  • LICENSE
  • pyproject.toml
  • README.md
  • uv.lock

Discussion (0)

Ask about usage, or say what you built with it

Sign in to join the discussion.

No comments yet. Be the first to say what this is good for.

More connectors

Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface

86k

Universal provider proxy for OpenAI Codex & Claude Code β€” use any LLM (Claude, Gemini, Grok, DeepSeek, Ollama…) with Codex CLI, App, SDK, and Claude Code

14k
okf-memory/
okf-agent-memory

Git-native persistent memory for AI coding agents. Implements Google OKF v0.2 with sub-300Β΅s in-memory BM25 search, embedded MCP server, and progressive disclosure. Slashes token bloat by 80% with zero external databases or dependencies. Built in pure Go.

547

Context7 Platform -- Up-to-date code documentation for LLMs and AI code editors

62k
1 add

Open-source auth gateway connecting 1400+ SaaS providers to AI agents through SDK, CLI, MCP, HTTP, and OpenAPI.

5.7k

Open-source 3D architectural editor with a local CLI, MCP tools, and practical workflows for humans and AI agents.

23k