100% standalone Joplin MCP server

Hello there!

Because i wanted to access Joplin from within my AI tools, but none of the existing MCP servers worked (or worked in a way i wanted), i created a new one. Also as a training for my agentic coding skills and test of how good AI coding currently is.

Keep in mind - this is a test implementation, 100% AI coded (but not quite vibe) with supervision of a Senior Developer (me) in my free time.

You can find it at GitHub - gelse/joplin-mcp: An MCP server to access a Joplin server · GitHub - including a (again, AI generated) README with quick start.

My workflow, that i tested:

  • privately hosted joplin server
  • docker compose on a remote machine
  • accessible on the internal network
  • configured in vscode/roo (for testing) and opencode (for prod)
  • plug-in-ready implementation
  • just exposes the joplin API endpoints 1:1 as MCP tools

Basically you just put your endpoint and credentials into .env, do a docker compose up and it works.
Does NOT need Joplin locally installed!

Give me your thoughts and comments and feel free to register bugs and ask questions.

Known missing feature: user management. (Currently) it is only possible to have a single user, as the credentials are defined on the server side. Perhaps i'll change that some time in the future, but not now.

Please note that the next pre-release will include a built-in MCP server:

https://github.com/laurent22/joplin/blob/dev/readme/apps/ai_mcp.md

Any suggestion on how to improve it would be welcome though!

That's great!

But one of my main motivations was to not have to have the desktop running.

I want to be able to use it from my phone, talking to it like I would to a person.

And for that to work it has to be able to run on a server independent from the desktop app.

If it works with the CLI client alone, that would solve the problem.

Oh I see, that's interesting. I haven't had a need for such thing yet, but it's true that having it work on mobile too is a plus.

So it means you have some MCP-compatible app on your phone and you use that to interact with your notes?

With a bit of a indirection, yes.
Part of my setup is:

  • OpenWebUI on a homelab server
  • opencode on various clients (direct access to my Joplin MCP from within my network) -> using joplin has the bridge between human and AI for a knowledge map and database
  • JoplinApp on my main machine only (which is not online all of the time)
  • Joplin Server self hosted on a VPS, available over the internet

On my mobile:

  • VPN active that connects my homelab
  • Joplin App
    but also:
  • browser points to OpenWebUI in my homelab
  • OpenWebUI has joplin-mcp connected
  • OpenWebUI has also speech recognition (which tbh is crap atm, but i am working on that)

So basically, i can use OpenWebUI as a centralized AI agent with shared knowledge and capabilites across all devices that i am using. And it also knows of my notes, so if i ask the AI to - just a silly example - tell me something about my DNS server, it can then lookup in my notes on Joplin either if the information is in there or if it can get it from executing some SSH somewhere.

And at the same time i have still full control over that content, because i can directly access my AI's knowledge database through "normal" means with the JoplinApp

And lastly - i have HomeAssistant running, with HomeAssistant Voice Preview as a interaction device - and if that can access Notes on Joplin as well (which currently it doesn't, but i am working on it), i just can stand in my living room and talk to my AI to take notes, like an idea that just came across my mind in the middle of chopping onions. For example.

Tbh - the possibilites are huge.

I'm OpenwebUi user and your solution would be fine for me
I'll try to install and Inform you If I have any problem

If joplin is on the same computer as the docker service how I identify the Joplin server?

@Delfi_R that would be great, i am desparately searching for testers. :wink: It works flawlessly for me, but that never should be enough. And the setup is also something where i am not sure if it is described enough.

I found one issue with emojis in titles, tho, but i hope my fix works.

If you can prepare the env file example for a local install I'll try to install today

If not on september I'll have more time to try on my on my own

Hm, i am not sure what you mean - as i don't know your internal setup, i can't prepare anything. The .env example should be fine for local as well as remote install.

Unless with "local install" you mean "no sync server" - that misses the point of my whole project and is not (yet?) supported.

My setup

A Mac serving OpenWebUi with a tunnel so I have access from anywhere

on this Mac I have Joplin and the database on one drive

So snitching outside docker has to been identified by docker.internal:port

Joplin setup any hosted AI chat (OpenWebUI) local AI chat (opencode)
local only Joplin not reasonably possible use Joplin built in MCP server
Joplin with self-hosted sync server my solution both possible, but mine works without Joplin running
Joplin Cloud my solution not yet tested - could work out of the box again, builtin working if Joplin App is running, mine SHOULD work, but is not yet tested

But tbh, that sounds like the builtin Joplin MCP should work just fine for you. If you want to let the JoplinApp running 24/7

Mine is built with distributed clients syncing to one central server in mind and does not work without a sync server.

So if you have an idea setup

I would try. Even If I need the Joplin app running

I have some users but this MCP should be restricted to me the admin

And I anyone wants to access to their Joplin they should set up a MCP server on their machine and connect to this server

Multiuser Joplin setups are for the future, now we test the local user setup

That's not a service topic any more, thats an infrastructure topic and not specific to Joplin or my MCP.
As i mentioned before, if you do not have a sync server running, my solution is not the correct one for you.