joplin-mcp-server
A self-contained MCP server for Joplin that bundles the Joplin Terminal CLI as a dependency. It allows agents to search, read, create, edit, and sync Joplin notes and notebooks via a headless sidecar process without requiring the Joplin desktop app or global installs. It supports automatic port negotiation to coexist with Joplin Desktop and handles data storage, sync, and REST API exposure.
Package and access
Local package with source-attributed installation metadata. Koskamo does not execute packages during review.
Checks and signals
Each line is separate evidence, not a trust score.
- Popularity 8 GitHub stars
What you can do with it
- Search and read Joplin notes and notebooks
- Create and edit notes via MCP protocol
- Sync notes to Joplin Cloud or filesystem backends
Source and maintenance
- Last repository push
- Latest release
- v2.3.3
- Maintenance checked
Packages and installation
Source-provided package data. Koskamo has not executed or live-probed this package.
joplin-mcp-server 2.3.3
{
"version": "2.3.3",
"transport": "stdio",
"identifier": "joplin-mcp-server",
"registryType": "npm",
"environmentVariables": [
{
"name": "JOPLIN_TOKEN",
"format": "string",
"description": "Joplin API token, for external mode only (see JOPLIN_HOST). Sidecar mode manages its own token and ignores this."
},
{
"name": "JOPLIN_HOST",
"format": "string",
"description": "Connect to an existing Joplin instance at this host instead of running a sidecar"
},
{
"name": "JOPLIN_PORT",
"format": "string",
"description": "Port of the existing Joplin instance (default: 41184)"
},
{
"name": "JOPLIN_PROFILE",
"format": "string",
"description": "Joplin data directory for sidecar mode (default: ~/.config/joplin-mcp)"
},
{
"name": "JOPLIN_CLI",
"format": "string",
"description": "Path to the joplin CLI binary, overriding auto-detection"
},
{
"name": "JOPLIN_SYNC_TARGET",
"format": "string",
"description": "Sync target: none, filesystem, webdav, nextcloud, joplin-cloud, joplin-server, s3, dropbox, onedrive (default: none)"
},
{
"name": "JOPLIN_SYNC_PATH",
"format": "string",
"description": "Sync target URL or path; the bucket name for the s3 target"
},
{
"name": "JOPLIN_SYNC_USERNAME",
"format": "string",
"description": "Sync username or email; the access key for the s3 target"
},
{
"name": "JOPLIN_SYNC_PASSWORD",
"format": "string",
"description": "Sync password; the secret key for the s3 target"
},
{
"name": "JOPLIN_SYNC_REGION",
"format": "string",
"description": "S3 region (default: us-east-1)"
},
{
"name": "JOPLIN_SYNC_ENDPOINT",
"format": "string",
"description": "S3 endpoint URL for non-AWS providers such as Backblaze B2, MinIO, R2 or Wasabi (default: https://s3.amazonaws.com/)"
},
{
"name": "JOPLIN_SYNC_FORCE_PATH_STYLE",
"format": "string",
"description": "Use path-style S3 URLs, which self-hosted providers such as MinIO usually require: true or false (default: false)"
},
{
"name": "LOG_LEVEL",
"format": "string",
"description": "Log verbosity: debug, info, warn or error (default: info)"
}
]
}Tools
Reported by the attributed source; not independently observed by Koskamo.
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · repository · passed · metadata changed · updated
- · backfill · recorded · Pre-expansion baseline; unobserved rich metadata remains unknown
Connect from your client
Each snippet configures the same source-provided package; replace placeholders before use.
Cursor
{
"mcpServers": {
"joplin-mcp-server": {
"command": "npx",
"args": [
"-y",
"joplin-mcp-server@2.3.3"
],
"env": {
"JOPLIN_TOKEN": "<YOUR_JOPLIN_TOKEN>",
"JOPLIN_HOST": "<YOUR_JOPLIN_HOST>",
"JOPLIN_PORT": "<YOUR_JOPLIN_PORT>",
"JOPLIN_PROFILE": "<YOUR_JOPLIN_PROFILE>",
"JOPLIN_CLI": "<YOUR_JOPLIN_CLI>",
"JOPLIN_SYNC_TARGET": "<YOUR_JOPLIN_SYNC_TARGET>",
"JOPLIN_SYNC_PATH": "<YOUR_JOPLIN_SYNC_PATH>",
"JOPLIN_SYNC_USERNAME": "<YOUR_JOPLIN_SYNC_USERNAME>",
"JOPLIN_SYNC_PASSWORD": "<YOUR_JOPLIN_SYNC_PASSWORD>",
"JOPLIN_SYNC_REGION": "<YOUR_JOPLIN_SYNC_REGION>",
"JOPLIN_SYNC_ENDPOINT": "<YOUR_JOPLIN_SYNC_ENDPOINT>",
"JOPLIN_SYNC_FORCE_PATH_STYLE": "<YOUR_JOPLIN_SYNC_FORCE_PATH_STYLE>",
"LOG_LEVEL": "<YOUR_LOG_LEVEL>"
}
}
}
}Cline
{
"mcpServers": {
"joplin-mcp-server": {
"command": "npx",
"args": [
"-y",
"joplin-mcp-server@2.3.3"
],
"env": {
"JOPLIN_TOKEN": "<YOUR_JOPLIN_TOKEN>",
"JOPLIN_HOST": "<YOUR_JOPLIN_HOST>",
"JOPLIN_PORT": "<YOUR_JOPLIN_PORT>",
"JOPLIN_PROFILE": "<YOUR_JOPLIN_PROFILE>",
"JOPLIN_CLI": "<YOUR_JOPLIN_CLI>",
"JOPLIN_SYNC_TARGET": "<YOUR_JOPLIN_SYNC_TARGET>",
"JOPLIN_SYNC_PATH": "<YOUR_JOPLIN_SYNC_PATH>",
"JOPLIN_SYNC_USERNAME": "<YOUR_JOPLIN_SYNC_USERNAME>",
"JOPLIN_SYNC_PASSWORD": "<YOUR_JOPLIN_SYNC_PASSWORD>",
"JOPLIN_SYNC_REGION": "<YOUR_JOPLIN_SYNC_REGION>",
"JOPLIN_SYNC_ENDPOINT": "<YOUR_JOPLIN_SYNC_ENDPOINT>",
"JOPLIN_SYNC_FORCE_PATH_STYLE": "<YOUR_JOPLIN_SYNC_FORCE_PATH_STYLE>",
"LOG_LEVEL": "<YOUR_LOG_LEVEL>"
}
}
}
}VS Code
{
"servers": {
"joplin-mcp-server": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"joplin-mcp-server@2.3.3"
],
"env": {
"JOPLIN_TOKEN": "<YOUR_JOPLIN_TOKEN>",
"JOPLIN_HOST": "<YOUR_JOPLIN_HOST>",
"JOPLIN_PORT": "<YOUR_JOPLIN_PORT>",
"JOPLIN_PROFILE": "<YOUR_JOPLIN_PROFILE>",
"JOPLIN_CLI": "<YOUR_JOPLIN_CLI>",
"JOPLIN_SYNC_TARGET": "<YOUR_JOPLIN_SYNC_TARGET>",
"JOPLIN_SYNC_PATH": "<YOUR_JOPLIN_SYNC_PATH>",
"JOPLIN_SYNC_USERNAME": "<YOUR_JOPLIN_SYNC_USERNAME>",
"JOPLIN_SYNC_PASSWORD": "<YOUR_JOPLIN_SYNC_PASSWORD>",
"JOPLIN_SYNC_REGION": "<YOUR_JOPLIN_SYNC_REGION>",
"JOPLIN_SYNC_ENDPOINT": "<YOUR_JOPLIN_SYNC_ENDPOINT>",
"JOPLIN_SYNC_FORCE_PATH_STYLE": "<YOUR_JOPLIN_SYNC_FORCE_PATH_STYLE>",
"LOG_LEVEL": "<YOUR_LOG_LEVEL>"
}
}
}
}Claude Desktop
{
"mcpServers": {
"joplin-mcp-server": {
"command": "npx",
"args": [
"-y",
"joplin-mcp-server@2.3.3"
],
"env": {
"JOPLIN_TOKEN": "<YOUR_JOPLIN_TOKEN>",
"JOPLIN_HOST": "<YOUR_JOPLIN_HOST>",
"JOPLIN_PORT": "<YOUR_JOPLIN_PORT>",
"JOPLIN_PROFILE": "<YOUR_JOPLIN_PROFILE>",
"JOPLIN_CLI": "<YOUR_JOPLIN_CLI>",
"JOPLIN_SYNC_TARGET": "<YOUR_JOPLIN_SYNC_TARGET>",
"JOPLIN_SYNC_PATH": "<YOUR_JOPLIN_SYNC_PATH>",
"JOPLIN_SYNC_USERNAME": "<YOUR_JOPLIN_SYNC_USERNAME>",
"JOPLIN_SYNC_PASSWORD": "<YOUR_JOPLIN_SYNC_PASSWORD>",
"JOPLIN_SYNC_REGION": "<YOUR_JOPLIN_SYNC_REGION>",
"JOPLIN_SYNC_ENDPOINT": "<YOUR_JOPLIN_SYNC_ENDPOINT>",
"JOPLIN_SYNC_FORCE_PATH_STYLE": "<YOUR_JOPLIN_SYNC_FORCE_PATH_STYLE>",
"LOG_LEVEL": "<YOUR_LOG_LEVEL>"
}
}
}
}Let your agent find its tools
Find servers like joplin-mcp-server from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.