Hi all,
I’ve created a joplin-cli. A lightweight CLI client that uses the Web Clipper API to interact with Joplin from the command line.
I primarily wrote it as a lean alternative to MCP servers to connect Joplin to your favorite AI Agent.
Why CLI over MCP?
- No Server Needed In my setup I'm running the Joplin Desktop App locally and sync my notes via Nextcloud. So I don't have a need for an MCP server running outside of my Laptop. While I could run an MCP server locally, spinning up a full blown MCP server, felt a bit too much.
- Lean Code Base The entire code base of
joplin-cliis ~500 lines of TypeScript, including tests. This makes it super easy to maintain & extend. - Less Token Usage CLI usage requires much less Context window compared to MCP. Watch the The Pragmatic Engineer interview with Peter Steinberger, creator of Clawdbot and OpenClaw or read the excerpt below for more detailed explanation.
Q: In order for this (OpenClaw) to work you want everything to be a CLI. Why CLIs and not MCPs?
A: MCP is a crutch. The best thing that came out of MCP is it made companies rethink to open up more APIs. The whole concept is silly. You have to pre export all the functions of all the tools and all the explanations when your tool loads. And then the model has to send a precise blob of JSON there and gets JSON back. But surprise, models are really good at using bash. Imagine you have a weather service and the model could ask for a list of available cities and get like 500 cities back, and then it picks one city out of that list but it cannot filter that list because that’s not part of how MCP works … and you’d say okay give me the weather for London. And you’d get weather forecast, temperature, wind… and 50 other things I don’t care about because I just want to know "is it raining or not? "But the model needs to digest everything and then you have so much crap in your context. Whereas if it’s a CLI I could filter for exactly what it needs. Companies are solving for this but it doesn’t solve the problem that I cannot chain them. I cannot easily build a script that says hey give me all the cities that are over 25 degrees and then filter out only that part of information and pack it in one command. It’s all individual MCP calls I cannot script it.
How to get try it out?
You can get in on GitHub vsaw/joplin-cli. The CLI client is working and including it into Gemini CLI or other tools is as easy as adding one line to the prompt:
Search my Joplin Notes for Birthday presents. Use the command line tool "joplin-cli" to access my Joplin Notes.
The agent will then teach itself how to use joplin-cli and continue on its own.
At some point in the future I'd like to package a proper SKILL.md to make integration even easier but for now this works great!
Feedback Welcome
This is the first time I'm inviting others to try it out, so I'm happy to hear your thoughts and feedback!
Best,
Valentin