Joplin MCP
Joplin MCP
Un servidor MCP que expone una colección de notas de Joplin como un conjunto de herramientas, que se ejecuta como un agente con estado en Cloudflare Workers. Apunta un cliente MCP (Claude, etc.) al endpoint desplegado y podrá explorar libretas y notas, y crear/actualizar/eliminar notas y libretas directamente contra tu propia instancia de Joplin.
Cómo funciona
Cada llamada a una herramienta va directamente a la Joplin Data API de tu instancia activa; no hay ningún índice ni ninguna caché en medio. La propia Joplin Data API nunca se expone a Internet: el Worker accede a ella de forma privada mediante una vinculación de Workers VPC Service a través de un Cloudflare Tunnel.
MCP client ──HTTP/SSE──► Worker (/mcp) ──► JoplinMCP (Durable Object)
│
JoplinClient ──► JOPLIN_VPC (Workers VPC Service)
│
Cloudflare Tunnel ──► Joplin Data API (LAN-only)JoplinMCP es un McpAgent alojado en un Durable Object.
Related MCP server: Capacities MCP Worker
Herramientas
Cada herramienta que admite una nota o libreta acepta un nombre con la misma facilidad que un ID hexadecimal de 32 caracteres, de modo que el agente que la invoca no tenga que gastar un viaje de ida y vuelta buscando un ID. Los nombres se comparan de forma aproximada (se ignoran mayúsculas, acentos, puntuación y el orden de las palabras); cuando un nombre es realmente ambiguo, la herramienta devuelve los candidatos con sus IDs en lugar de adivinar.
Herramienta | Descripción |
| Leer una nota por título (aproximado) o ID |
| Buscar a texto completo en todas las notas, con fragmentos |
| Listar las notas actualizadas más recientemente en todas las libretas |
| Listar las libretas como rutas completas con IDs |
| Listar las notas de una libreta — la libreta predeterminada si no se nombra ninguna |
| Crear una nota, en la libreta predeterminada a menos que se indique otra cosa |
| Reemplazar el cuerpo, o |
| Mover una nota a la papelera ( |
| Crear una libreta, opcionalmente anidada |
| Renombrar o mover una libreta |
| Mover una libreta (y sus notas) a la papelera |
Las notas y libretas en la papelera se excluyen de todos los resultados — listados, búsqueda y lecturas directas por igual.
Menos viajes de ida y vuelta
Las herramientas están diseñadas para que un agente pueda llegar a la nota que quiere en el menor número de llamadas posible. Leer una nota por nombre es una llamada en lugar de tres:
list_notebooks → list_notes → get_note ⟶ get_note { note: "grocery list" }y añadir una línea a la nota es una llamada en lugar de dos, porque append realiza la operación de lectura-modificación-escritura en el servidor:
get_note → update_note { body: <whole note> } ⟶ update_note { note: "grocery list", append: "- milk" }La resolución de nombres pasa por el propio índice de búsqueda de Joplin, por lo que normalmente cuesta una sola llamada a la API; un índice local de títulos solo se construye cuando la búsqueda no devuelve resultados (erratas o títulos que el índice de texto completo tokeniza de forma extraña). La lista de libretas se guarda en caché en el Durable Object, por lo que resolver un nombre de libreta suele ser gratuito.
Configuración
npm installAntes de desplegar, tu Joplin Data API debe ser accesible desde un Cloudflare Tunnel, registrado como un 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>A continuación, vincula el ID de servicio resultante en wrangler.jsonc:
"vpc_services": [
{ "binding": "JOPLIN_VPC", "service_id": "<service-id-from-above>", "remote": true }
]JOPLIN_API_TOKEN (un token de la Joplin Data API) se lee desde el Secrets Store de Cloudflare, no de un secreto Wrangler normal. Créalo una vez por cuenta y se puede reutilizar entre Workers:
wrangler secrets-store secret create <store-id> \
--name joplin-token --scopes workers --remotewrangler.jsonc lo vincula después mediante secrets_store_secrets:
"secrets_store_secrets": [
{ "binding": "JOPLIN_API_TOKEN", "store_id": "<store-id>", "secret_name": "joplin-token" }
]Para el desarrollo local, crea un secreto solo local con el mismo nombre (omite --remote) para que wrangler dev tenga algo que leer.
Libreta predeterminada
Las herramientas que aceptan una libreta recurren a la que nombra la variable JOPLIN_DEFAULT_NOTEBOOK en wrangler.jsonc ("Default" por defecto). Apunta esta variable a la libreta en la que deben crearse las notas nuevas; si no existe ninguna libreta con ese nombre, las herramientas lo indican en lugar de elegir una.
Consulta CLAUDE.md para ver la referencia completa de la arquitectura y las vinculaciones.
Desarrollo
npm run dev # wrangler dev — local development with hot reload
npm run test # vitest run
npm run typecheck # tsc --noEmitDespliegue
npm run deployO conecta este repositorio a un Cloudflare Worker para despliegues basados en git. En cualquier caso, el secreto joplin-token debe existir en el Secrets Store de la cuenta — nunca se almacena en el repositorio.
Tecnologías
Cloudflare Workers + Durable Objects (con respaldo SQLite)
Cloudflare Agents SDK (
agents/mcp)TypeScript, Zod para los esquemas de entrada de las herramientas, Vitest
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