Talk to your notes in Claude or ChatGPT
Connect hosted Claude through your own GitHub login, or give a private Custom GPT live access to search, read, create, update, move, tag, and trash exact Joplin objects.
Connect Claude to Joplin →Claude & ChatGPT Local & HTTP MCP Self-hosted Joplin
Search, read, create, organize, and update your own Joplin notes from the assistants you already use. Connect Claude with a GitHub login, give a private ChatGPT GPT live access, launch a local MCP process over stdio with no listener, or deploy guarded HTTP interfaces while keeping Joplin, its sync target, and its Data API under your control.
Open source Private by design Desktop optional
You Find my notes about the production migration.
Tool joplin_search_notes {"query":"production migration"}
{"success":true,"results":[{"title":"Migration runbook"}]}
One knowledge base, direct agent access
Joplin remains the system of record. The bridge adds authenticated, structured interfaces without introducing another note store or requiring a permanent desktop session.
Connect hosted Claude through your own GitHub login, or give a private Custom GPT live access to search, read, create, update, move, tag, and trash exact Joplin objects.
Connect Claude to Joplin →Launch typed local stdio tools with no listener, or expose Streamable HTTP for notes, notebooks, tags, search, and attachments.
Explore the MCP tools →One interactive installer sets up Joplin Terminal, recurrent sync, MCP, Actions, and Claude OAuth as coordinated rootless services on a Linux host.
Deploy Joplin Headless Service →Joplin's built-in MCP server or this bridge
Joplin Desktop can expose its own MCP server on the Web Clipper port to clients on the same computer. Use this bridge when the assistant runs elsewhere, Joplin runs without a desktop, or a change needs review. Its OAuth is built in, so reaching hosted Claude takes no extra proxy.
| Joplin's built-in MCP | joplin-md-sync | |
|---|---|---|
| Hosted assistants | Not reachable: clients must run on the same computer | Hosted Claude through built-in GitHub OAuth with no separate OAuth proxy, and ChatGPT through a private Custom GPT with Actions |
| Where it runs | Inside Joplin Desktop, which must stay open with the Web Clipper service | Beside Joplin Desktop, or headless on a Linux server with Joplin Terminal and recurrent sync |
| Other MCP clients | Local clients through 127.0.0.1 | Local stdio with no listener, or authenticated Streamable HTTP over HTTPS |
| Setup | Switches in the desktop settings | One installer configures Joplin Terminal, sync, tokens, and OAuth from your answers |
| Authentication | The Web Clipper token in the request URL | Separate MCP and Actions bearer tokens, plus GitHub OAuth limited to one account |
| Attachments | Not exposed as tools | Read, upload, replace, and delete resources and their note links |
| Bulk changes | Individual tool calls | Two-way Markdown sync with three-way diffs and dry-run pushes |
| Search | Keyword and semantic search over the local embeddings index | Joplin keyword search; the tool guides assistants to retry with synonyms and word stems |
Only local desktop clients, and semantic search matters most? The built-in server is enough. Choose an interface →
From sync target to your assistant
One installer coordinates Joplin Terminal and the agent adapter. It asks for the sync target, tokens, and the GitHub OAuth settings for Claude, hides secrets, and checks the running services. You bring an HTTPS hostname; the upstream Data API never needs to leave loopback.
Review the deployment boundaries →$ set -o pipefail
$ curl --proto '=https' --tlsv1.2 --fail \
--silent --show-error --location \
https://raw.githubusercontent.com/kogeler/\
joplin-md-sync/main/scripts/joplin_terminal_service/\
install_joplin_terminal.py | python3 - \
--sync-target nextcloud \
--sync-location https://cloud.example/Joplin \
--sync-username user
OK joplin-terminal.service active
OK joplin-md-sync.service active
OK separate MCP and Actions tokens created
OK GitHub OAuth for Claude enabled and verified
Useful every day
Both direct interfaces use the same validated operation registry. Choose Claude or ChatGPT for conversation, or MCP for any compatible client.
Find the relevant Joplin notes, read only the selected results, and turn current private context into a focused answer.
Create a decision record, meeting follow-up, research summary, or checklist in the exact notebook you name.
Rename, move, tag, restore, and trash exact objects while duplicate identities are rejected instead of silently multiplied.
Let an MCP-capable editor or coding assistant inspect runbooks and update targeted notes without exporting the whole archive.
Read, upload, replace, and traverse note-resource relationships with bounded payloads and explicit destructive operations.
Run recurrent Joplin sync and the adapter as user services on your server while desktop and laptop clients come and go.
Control is the feature
Keep the Joplin clients, sync provider, encryption choices, profile, and backups you already trust. The bridge is a replaceable open-source adapter, not a new proprietary knowledge store.
Read the security contract →A second interface for review-heavy work
Direct tools are ideal for current, targeted operations. For broad changes, repository context, or Git review, pull selected Joplin notebooks to files and approve the exact push plan.
$ joplin-md-sync pull --root ./notes --json
OK remote and base refreshed
$ joplin-md-sync diff --root ./notes \
--three-way --unified
1 note body changed locally
$ joplin-md-sync push --root ./notes \
--dry-run --json
PENDING_ACTIONS push_update_remote
$ joplin-md-sync push --root ./notes --json
OK applied 1, failed 0
Predictable failure boundaries
Direct tools and file synchronization use different consistency models, but both expose failures instead of guessing or silently repeating writes.
Keep Joplin. Add the interfaces you need.