|
All checks were successful
build / build-test (push) Successful in 30s
|
||
|---|---|---|
| .gitea/workflows | ||
| .idea | ||
| api | ||
| src | ||
| .gitignore | ||
| .npmignore | ||
| CHANGELOG.md | ||
| GENERATOR_DOC.md | ||
| LICENSE | ||
| package-lock.json | ||
| package.json | ||
| plugin.config.json | ||
| README.md | ||
| tsconfig.json | ||
| webpack.config.js | ||
Joplin MCP Server
A Joplin plugin that exposes your notes as an MCP (Model Context Protocol) server. This allows AI assistants such as Claude Desktop, Cursor, VS Code Copilot, Kilo, and any other MCP-compatible client to create, read, update, and delete notes, notebooks, and tags, as well as search through your Joplin vault — directly through the standard MCP protocol.
Features
- Full note management — create, read, update, and delete notes (including to-dos)
- Notebook operations — list, create, rename, move, and delete notebooks with tree view
- Tag management — create, rename, delete tags; add/remove tags from notes
- Powerful search — search notes, notebooks, and tags using Joplin's built-in search engine with advanced query syntax
- 20 MCP tools covering all common note-taking operations
- Streamable HTTP transport — no stdio or local process required; works over HTTP
- Session management with automatic stale-session cleanup (30-minute TTL)
- Configurable — custom host and port settings within Joplin
- CORS support — works with browser-based clients and IDE extensions
Requirements
- Joplin >= 3.5
- An MCP-compatible client (Claude Desktop, Cursor, VS Code Copilot, Kilo, etc.)
Installation
From the Joplin Plugin Directory
- Open Joplin
- Go to Tools > Options > Plugins
- Search for "MCP Server"
- Click Install
- Restart Joplin when prompted
Manually from Release
- Download the latest
net.hunnius.mcpserver.jplfile from the releases page - Open Joplin
- Go to Tools > Options > Plugins
- Click the gear icon and select Install from file
- Select the downloaded
.jplfile - Restart Joplin when prompted
Configuration
After installation, the MCP server starts automatically when Joplin launches. By default it listens on http://127.0.0.1:22123/mcp.
To change the host or port:
- Open Joplin
- Go to Tools > Options > MCP Server
- Adjust the Port (default:
22123, range: 1024–65535) - Adjust the Host (default:
127.0.0.1)
Note: You must restart Joplin for changes to take effect.
MCP Client Setup
Configure your AI assistant to connect to the Joplin MCP server. The endpoint is:
http://127.0.0.1:22123/mcp
Cursor
Add to .cursor/mcp.json in your project root:
{
"mcpServers": {
"joplin": {
"url": "http://127.0.0.1:22123/mcp"
}
}
}
Claude Desktop / VS Code Copilot
Add to your mcp.json configuration file:
{
"servers": {
"joplin": {
"url": "http://127.0.0.1:22123/mcp",
"type": "streamableHttp"
}
}
}
Kilo
Add to your kilo.json:
{
"mcps": {
"joplin": {
"url": "http://127.0.0.1:22123/mcp",
"type": "streamableHttp"
}
}
}
Generic MCP Client
Any client supporting the Streamable HTTP transport can connect to http://127.0.0.1:22123/mcp. The server implements the standard MCP protocol with session management via the mcp-session-id header.
Available Tools
The plugin provides 20 MCP tools:
Notes
| Tool | Description |
|---|---|
create_note |
Create a new note with optional title, body, notebook, to-do status, due date, and tags |
get_note |
Retrieve a specific note by ID, including full body, metadata, and tags |
update_note |
Update an existing note's title, body, notebook, to-do status, due date, or source URL |
delete_note |
Soft-delete a note (moved to trash) |
list_notes |
List notes with pagination, optional notebook filter, and sort options |
get_notes_by_ids |
Retrieve multiple notes by their IDs in a single call |
Notebooks
| Tool | Description |
|---|---|
list_notebooks |
List all notebooks as a tree hierarchy |
get_notebook |
Get notebook details including sub-notebooks and contained notes |
create_notebook |
Create a new notebook, optionally nested under a parent |
update_notebook |
Rename a notebook or move it to a different parent |
delete_notebook |
Soft-delete a notebook and all its notes |
Tags
| Tool | Description |
|---|---|
list_tags |
List all tags |
create_tag |
Create a new tag (returns existing if duplicate) |
update_tag |
Rename an existing tag |
delete_tag |
Permanently delete a tag (removed from all notes) |
get_note_tags |
List all tags assigned to a specific note |
add_tag_to_note |
Add a tag to a note (auto-creates the tag if it doesn't exist) |
remove_tag_from_note |
Remove a tag from a note |
Search
| Tool | Description |
|---|---|
search_notes |
Search notes using Joplin's query syntax (title:, body:, tag:, notebook:, -exclude, OR, etc.) |
search_notebooks |
Search notebooks by title |
search_tags |
Search tags by title |
search_all |
Search across notes, notebooks, and tags simultaneously |
Utility
| Tool | Description |
|---|---|
ping |
Test connectivity to the MCP server (returns pong) |
Search Syntax
Joplin's search engine supports advanced queries:
| Syntax | Description |
|---|---|
word |
Search for notes containing "word" |
* |
List all items |
title:word |
Search in note titles |
body:word |
Search in note bodies |
tag:name |
Search by tag |
notebook:name |
Search within a notebook |
created:20240101 |
Filter by creation date |
updated:20240101 |
Filter by update date |
any:word1 word2 |
Match any of the words |
-word |
Exclude notes containing "word" |
word1 OR word2 |
Match either word |
Security Considerations
- Localhost by default — the server binds to
127.0.0.1, making it accessible only from the local machine - CORS protection — only requests from
localhost,127.0.0.1, andvscode-webview://origins are accepted from browsers; non-browser clients (like CLI tools) are allowed by default - No authentication — the server does not require an API token or password. This is intentional for local-use simplicity. If you bind to
0.0.0.0, anyone on your network can access your Joplin data - Network exposure — binding to
0.0.0.0is supported for advanced use cases but should only be used on trusted, isolated networks
Development
Prerequisites
- Node.js >= 16
- npm
Build from Source
git clone https://codeberg.org/jhunnius/joplin-plugin-mcp.git
cd joplin-plugin-mcp
npm install
npm run dist
The built plugin is output to publish/net.hunnius.mcpserver.jpl.
Install Development Build
- Build the plugin as described above
- In Joplin, go to Tools > Options > Plugins
- Click the gear icon and select Install from file
- Select
publish/net.hunnius.mcpserver.jpl
Project Structure
src/
├── index.ts # Plugin entry point, settings registration
├── server.ts # HTTP server, session management, CORS
└── tools.ts # MCP tool definitions and handlers
License
MIT © Jan-Peter v. Hunnius
Links
- Repository: https://codeberg.org/jhunnius/joplin-plugin-mcp
- Issues: https://codeberg.org/jhunnius/joplin-plugin-mcp/issues
- Joplin: https://joplinapp.org/
- MCP Specification: https://modelcontextprotocol.io/