codetopolymath/joplin-mcp-server
If you are the rightful owner of joplin-mcp-server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
The Joplin MCP Server connects Claude Desktop to Joplin for efficient note management using the Model Context Protocol.
Joplin MCP Server
A Model Context Protocol (MCP) server that connects Claude Desktop to Joplin for seamless note management.
Features
š Notes Management
- Create, update, delete notes with Markdown content
- Todo note support with completion tracking
- Full-text search across all notes
- Move notes between notebooks
š Notebooks Management
- Create notebooks and sub-notebooks
- Update notebook properties
- Browse notebook hierarchy
š·ļø Tags Management
- Create and manage tags
- Add/remove tags from notes
- Auto-creation when adding to notes
š Resource Access
- Browse all notes as readable Markdown resources
- List notebooks with full hierarchy
- Search results as structured JSON
Quick Start
Prerequisites
- Python 3.10+ with UV package manager
- Joplin Desktop with API enabled
- Claude Desktop application
1. Setup Project
git clone <repository-url> joplin-mcp-server
cd joplin-mcp-server
uv sync
2. Enable Joplin API
- Open Joplin Desktop
- Go to Tools ā Options ā Web Clipper
- Enable "Enable Web Clipper Service"
- Note the port (usually 41184) and copy the Authorization token
3. Configure Environment
Create .env
file or set environment variables:
export JOPLIN_TOKEN="your_joplin_token_here"
export JOPLIN_PORT="41184" # Optional: default is 41184
4. Test Setup
uv run python test_setup.py
Expected output:
šÆ Testing Joplin MCP Server Setup
ā
Configuration successful!
ā
Ping test successful!
ā
API test successful!
š All tests passed!
Claude Desktop Configuration
Edit your Claude Desktop config file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
- Windows:
%APPDATA%\Claude\claude_desktop_config.json
Add this configuration:
{
"mcpServers": {
"joplin": {
"command": "/full/path/to/uv",
"args": [
"--directory", "/absolute/path/to/joplin-mcp-server",
"run", "python", "src/main.py"
],
"env": {
"JOPLIN_TOKEN": "your_joplin_token_here"
}
}
}
}
Important Notes:
- Use full path to
uv
(find withwhich uv
) - Use absolute path to your project directory
- Ensure Joplin Desktop is running before starting Claude Desktop
- Restart Claude Desktop after configuration changes
Usage Examples
Reading Notes
"Show me all my notes"
"Read the note with ID abc123"
"What's in my 'Project Ideas' notebook?"
"Search for notes about 'machine learning'"
Creating Content
"Create a new note titled 'Meeting Notes' with today's agenda"
"Make a todo note for 'Buy groceries' in my Personal notebook"
"Create a notebook called 'Research'"
Organizing
"Move note xyz789 to the Projects notebook"
"Add tags 'important' and 'work' to my latest note"
"Mark the todo 'Finish report' as completed"
Available Resources
Read-only access via resource URIs:
joplin://notes/
- List all notesjoplin://notes/{note_id}
- Read specific note as Markdownjoplin://notebooks/
- List all notebooks with hierarchyjoplin://search?q={query}
- Search results
Available Tools
Write operations through tools:
Notes: create_note
, update_note
, delete_note
, search_notes
Notebooks: create_notebook
, update_notebook
, delete_notebook
Tags: create_tag
, add_tag_to_note
, remove_tag_from_note
Troubleshooting
Common Issues
MCP Server Won't Connect (spawn uv ENOENT
)
- Use full UV path in config (find with
which uv
) - Common paths:
/Users/username/.cargo/bin/uv
,/opt/homebrew/bin/uv
- Alternative: Use Python directly:
"/path/to/.venv/bin/python"
with args["/path/to/src/main.py"]
Server Won't Start
- Ensure Joplin Desktop is running
- Verify API token is correct
- Check port 41184 is accessible
- Review server logs for specific errors
Claude Desktop Not Connecting
- Verify configuration file syntax
- Use absolute paths in configuration
- Check environment variables are set correctly
- Restart Claude Desktop after changes
Development
Project Structure
joplin-mcp-server/
āāā pyproject.toml # UV project configuration
āāā src/
ā āāā joplin_mcp/
ā ā āāā server.py # Main MCP server
ā ā āāā config.py # Configuration and discovery
ā ā āāā joplin_client.py # Joplin REST API client
ā ā āāā resources.py # MCP Resources (read-only)
ā ā āāā tools.py # MCP Tools (write operations)
ā āāā main.py # Entry point
āāā README.md
Adding Features
- New Tools: Add to
tools.py
and update tools list - New Resources: Add to
resources.py
and update templates - API Extensions: Extend
joplin_client.py
with new endpoints
Roadmap
Phase 1 (Current)
- ā Notes CRUD operations
- ā Basic notebook management
- ā Tag operations
- ā Search functionality
Phase 2 (Future)
- Resource/attachment handling
- Advanced search with filters
- Real-time sync using Joplin events API
- Bulk operations
- Note templates and prompts
Phase 3 (Advanced)
- Multiple Joplin instance support
- Web clipper integration
- Custom field support
- Export/import operations
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
Support
For issues:
- Check troubleshooting section
- Review Joplin's API documentation
- Check Claude Desktop MCP documentation
- Open an issue with detailed error logs
Happy note-taking with Claude and Joplin! šš¤