Joplin MCP
Joplin MCP
一个 MCP 服务器,将 Joplin 的笔记集合以工具集的形式暴露出来,并作为运行在 Cloudflare Workers 上的有状态代理工作。把 MCP 客户端(如 Claude)指向已部署的端点,它就能浏览笔记本和笔记,并直接对你的 Joplin 实例创建、更新、删除笔记和笔记本。
工作原理
每次工具调用都会直达你正在运行的实例上的 Joplin Data API——中间没有索引或缓存。Joplin Data API 本身绝不暴露到公网:Worker 通过基于 Cloudflare Tunnel 的 Workers VPC Service 绑定,在私有网络中访问它。
MCP client ──HTTP/SSE──► Worker (/mcp) ──► JoplinMCP (Durable Object)
│
JoplinClient ──► JOPLIN_VPC (Workers VPC Service)
│
Cloudflare Tunnel ──► Joplin Data API (LAN-only)JoplinMCP 是一个托管在 Durable Object 上的 McpAgent。
Related MCP server: Capacities MCP Worker
工具
每个接受笔记或笔记本的工具,既接受 名称,也接受 32 字符的十六进制 ID,因此调用代理不需要为了查询 ID 而多花一次往返。名称是模糊匹配的(大小写、重音、标点和词序都被忽略);当名称确实有歧义时,工具会返回候选结果及其 ID,而不会自行猜测。
工具 | 描述 |
| 按标题(模糊)或 ID 读取笔记 |
| 对所有笔记进行全文搜索,并返回摘要片段 |
| 各笔记本中最近更新的笔记 |
| 以完整路径形式列出笔记本,并附有 ID |
| 列出某个笔记本中的笔记;若没有指定笔记本,则使用默认笔记本 |
| 创建笔记;除非另行指定,否则放入默认笔记本 |
| 替换正文,或者无需先读取即可 |
| 将笔记移到回收站( |
| 创建笔记本,可选择嵌套 |
| 重命名或移动笔记本 |
| 将笔记本(及其中的笔记)移动到回收站 |
回收站中的笔记和笔记本,会从所有结果中排除——列表、搜索和直接读取都一样。
减少往返
工具接口的设计让代理能够用尽可能少的调用次数就找到目标笔记。按名称读取笔记只需要一次调用,而不是三次:
list_notebooks → list_notes → get_note ⟶ get_note { note: "grocery list" }向笔记追加一行也只需要一次调用,而不是两次,因为 append 在服务端完成了读取-修改-写入:
get_note → update_note { body: <whole note> } ⟶ update_note { note: "grocery list", append: "- milk" }名称解析走的是 Joplin 自己的搜索索引,因此通常一次 API 调用就可以完成;只有搜索为空时(比如有拼写错误,或全文索引对标题分词方式比较特殊),才会构建本地标题索引。笔记本列表会缓存在 Durable Object 中,所以解析笔记本名称通常没有额外成本。
设置
npm install部署前,你的 Joplin Data API 需要能够通过 Cloudflare Tunnel 被访问,并注册为 Workers VPC Service:
npx wrangler vpc service create joplin-data-api \
--type http \
--tunnel-id <YOUR_TUNNEL_ID> \
--hostname <JOPLIN_HOST_ON_YOUR_LAN> \
--http-port <JOPLIN_PORT>然后把得到的 service ID 绑定到 wrangler.jsonc:
"vpc_services": [
{ "binding": "JOPLIN_VPC", "service_id": "<service-id-from-above>", "remote": true }
]JOPLIN_API_TOKEN(一个 Joplin Data API 令牌)从 Cloudflare 的 Secrets Store 读取,而不是普通的 Wrangler secret。每个账户创建一次,之后就可以在多个 Worker 之间复用:
wrangler secrets-store secret create <store-id> \
--name joplin-token --scopes workers --remote接着在 wrangler.jsonc 中通过 secrets_store_secrets 绑定它:
"secrets_store_secrets": [
{ "binding": "JOPLIN_API_TOKEN", "store_id": "<store-id>", "secret_name": "joplin-token" }
]本地开发时,再创建一个同名的本地 secret(不要加 --remote),这样 wrangler dev 才有值可读取。
默认笔记本
需要笔记本的工具会回退到 wrangler.jsonc 中 JOPLIN_DEFAULT_NOTEBOOK 变量指定的那个笔记本,默认是 "Default"。把它指向你希望新笔记落到的笔记本;如果不存在同名的笔记本,工具会如实说明,不会任选一个。
完整的架构与绑定参考,见 CLAUDE.md。
开发
npm run dev # wrangler dev — local development with hot reload
npm run test # vitest run
npm run typecheck # tsc --noEmit部署
npm run deploy或者也可以把这个仓库连接到一个 Cloudflare Worker,通过 Git 进行部署。两种方式都一样:账户的 Secrets Store 中必须存在 joplin-token secret——它绝不会被保存在仓库内。
技术栈
Cloudflare Workers + Durable Objects(SQLite 存储)
Cloudflare Agents SDK(
agents/mcp)
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceSelf-hosted semantic memory layer for Claude and MCP-compatible AI clients. Store notes, search by meaning not keywords, and recall relevant context automatically across sessions. Runs free on Cloudflare Workers, D1, Vectorize, and Workers AI2738MIT
- AlicenseNot gradedqualityDmaintenanceA Cloudflare Worker that wraps the Capacities API as a remote MCP server, enabling Claude on any device to interact with your Capacities knowledge base.MIT
- AlicenseAqualityAmaintenanceEnables AI assistants to interact with Joplin notes, notebooks, and tags through a standardized MCP interface, supporting CRUD operations, search, and organization.19165MIT
- AlicenseNot gradedqualityCmaintenanceUnofficial MCP server that enables interaction with NotebookLM through a Cloudflare Worker, supporting tools for notebooks, sources, chat, notes, and more. It uses OAuth authentication and stateless encrypted credential envelopes.1MIT
Related MCP Connectors
Search, read, and write your Apple Notes from ChatGPT/Claude via a local Mac agent + MCP relay.
Read and write your Fresh Jots notes from Claude, Cursor, and any MCP client.
Hosted remote MCP server for YNAB on Cloudflare Workers with OAuth
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/crunchypancake1/joplin-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server