Skip to main content
Glama
daxrpm
by daxrpm

Super Productivity MCP

Dale a tu asistente de IA acceso real a tus tareas — sin renunciar a lo local-primero.

Un servidor MCP que lee y escribe tus tareas de Super Productivity a través del archivo de sincronización que ya está en tu Nextcloud. Sin plugin, sin fork, sin una segunda aplicación que mantener al día.

┌─────────────────┐         ┌──────────────────┐         ┌─────────────────┐
│  Super          │  sync   │    Nextcloud     │  sync   │  This MCP       │
│  Productivity   │ ──────► │  sync-data.json  │ ◄────── │  server         │
│  desktop/mobile │ ◄────── │                  │ ──────► │                 │
└─────────────────┘         └──────────────────┘         └────────┬────────┘
                                                                  │ MCP
                                                         ┌────────▼────────┐
                                                         │  OpenClaw,      │
                                                         │  Claude, …      │
                                                         └─────────────────┘

Por qué existe esto

Super Productivity es deliberadamente local-primero. No hay API remota, no hay webhook saliente, y la API REST local de la aplicación de escritorio se vincula a 127.0.0.1 — inalcanzable desde cualquier otro lugar por diseño. El plugin CalDAV exporta solo tareas que ya tienen una fecha, y las exporta como eventos de calendario, no como tareas.

El archivo de sincronización es diferente. Contiene todo: cada proyecto, cada etiqueta, todo el backlog sin fecha, subtareas, estimaciones, seguimiento de tiempo. Ya está en tu servidor. Es la imagen completa, y nada más lo es.

Así que este servidor habla con eso.

Related MCP server: Nextcloud MCP Server

Qué lo hace seguro

La versión ingenua de esta idea — descargar el JSON, editarlo, subirlo — eventualmente destruirá tu historial de tareas. Super Productivity no es un archivo con tareas dentro; es un registro de operaciones con relojes vectoriales, y tus dispositivos fusionan cambios reproduciendo operaciones, no comparando archivos.

Este servidor participa en ese protocolo correctamente. Se comporta como un dispositivo más en tu cuenta:

Editor de archivos ingenuo

Este servidor

Edición concurrente en tu teléfono

Sobrescrita silenciosamente

Detectada, re-aplicada encima

Otros dispositivos ven el cambio

Como un misterioso reemplazo de archivo completo

Como una operación normal, como cualquier dispositivo

Identidad en el protocolo de sincronización

Ninguna — se hace pasar por tu escritorio

Su propio id de cliente, su propia entrada de reloj vectorial

Un campo que no entiende

Eliminado

Preservado byte por byte

Escritura interrumpida

Archivo corrupto

La versión anterior aún está en .bak

Formato de archivo de sincronización cambiado

Se rompe

Detectado y manejado

Concretamente, cada escritura:

  1. Lee con un ETag fuerte. El OC-ETag de Nextcloud, que sobrevive a los proxies inversos que reescriben el ETag simple.

  2. Aplica el cambio a través de un puerto fiel de los propios reducers de Super Productivity — así que TODAY sigue siendo una etiqueta virtual, dueDay y dueWithTime siguen siendo mutuamente excluyentes, y completar una tarea nunca inventa una fecha de vencimiento.

  3. Emite la operación correspondiente con el id de cliente de este servidor y un reloj vectorial incrementado, para que tus otros dispositivos lo acepten como causalmente más nuevo en lugar de marcarlo como conflicto.

  4. Actualiza el .bak antes de tocar el archivo principal.

  5. Escribe condicionalmente, en la revisión que leyó. Nunca incondicionalmente. Si otro dispositivo escribió primero, toda la mutación se re-ejecuta contra el estado fresco — su cambio sobrevive, el tuyo se aplica encima.

Verificado contra un Nextcloud en vivo: If-Match se aplica genuinamente, y después de un ciclo completo de crear/programar/completar/eliminar, el remoto sigue siendo un sobre válido de esquema 4 con archivos y estado intacto byte-por-byte.


Inicio rápido

Requisitos: Node 20.11+, un Nextcloud con Super Productivity ya sincronizando con él.

git clone <this-repo> superproductivity-mcp
cd superproductivity-mcp
npm install
cp .env.example .env

Rellena .env:

SP_NEXTCLOUD_URL=https://cloud.example.com
SP_NEXTCLOUD_USER=yourname
SP_NEXTCLOUD_PASSWORD=xxxxx-xxxxx-xxxxx-xxxxx-xxxxx
SP_SYNC_FOLDER=super-productivity

Usa una contraseña de aplicación, no tu contraseña de inicio de sesión: Configuración → Seguridad → Dispositivos y sesiones → Crear nueva contraseña de aplicación. Está limitada, es revocable, y es lo único que funciona cuando la autenticación de dos factores está activada.

Comprueba todo antes de conectarlo a cualquier cosa:

npm run doctor
Super Productivity MCP — doctor (v1.0.0)

  ok   configuration                https://cloud.example.com as yourname
  ok   sync folder                  super-productivity
  ok   mode                         read-write
  ok   client id                    M_TSrPmbHAoq
  ok   encryption                   not configured (the sync file must be plaintext)
  ok   reachable                    Nextcloud answered and the credentials were accepted
  ok   sync file                    SINGLE_FILE (sync-data.json)
  ok   decoded                      syncVersion 114, schema 4
  ok   conditional writes           the server returns a strong ETag, so concurrent writes are safe
  ok   devices                      B_UjDTUW, A_rmkezu
  ok   operation log                354 of 2000 retained
  ok   contents                     12 open tasks, 3 projects, 4 tags

All checks passed. The MCP server should work.

El doctor nunca escribe. Si un paso falla, dice cuál y por qué — que es el objetivo de tenerlo, porque cada modo de fallo aquí se muestra de otra manera dentro de tu cliente de IA como un "la herramienta no funcionó" poco útil.

Luego construye:

npm run build

Conectándolo

Añade a tu configuración de servidor MCP:

{
  "mcpServers": {
    "superproductivity": {
      "command": "node",
      "args": ["/absolute/path/to/superproductivity-mcp/dist/main.js"],
      "env": {
        "SP_NEXTCLOUD_URL": "https://cloud.example.com",
        "SP_NEXTCLOUD_USER": "yourname",
        "SP_NEXTCLOUD_PASSWORD": "xxxxx-xxxxx-xxxxx-xxxxx-xxxxx",
        "SP_SYNC_FOLDER": "super-productivity"
      }
    }
  }
}

Puedes omitir env por completo y dejar que lea el archivo .env en su lugar — establece SP_ENV_FILE a una ruta absoluta si el directorio de trabajo no será la raíz del proyecto.

Misma forma, en claude_desktop_config.json (~/Library/Application Support/Claude/ en macOS, %APPDATA%\Claude\ en Windows).

claude mcp add superproductivity -- node /absolute/path/to/dist/main.js

Es un servidor MCP estándar de stdio. Ejecuta node dist/main.js; habla JSON-RPC en stdout y registra solo en stderr.


Herramientas

Lectura

Herramienta

Qué responde

sp_overview

"¿Cómo están las cosas?" Conteos, tareas de hoy, trabajo atrasado, todos los proyectos y etiquetas con sus ids. Empieza aquí.

sp_list_tasks

Filtra por proyecto, etiqueta, estado, programación o texto. Ordenado como los trabajarías: atrasado → hoy → por fecha → backlog → hecho.

sp_get_task

Una tarea completa, con notas y subtareas.

sp_list_projects

Proyectos con conteos de tareas.

sp_list_tags

Etiquetas con ids.

Escritura

Herramienta

Notas

sp_create_task

El título es el único requisito. Pasa parentId para crear una subtarea.

sp_update_task

Parchea solo los campos que envías, así las ediciones concurrentes sobreviven.

sp_complete_task

Completa, o reabre con isDone: false.

sp_delete_task

Elimina la tarea y sus subtareas. Marcada como destructiva para que tu host pueda confirmar primero.

sp_schedule_task

dueDay para todo el día, dueAt para una hora específica, clear: true para desprogramar.

sp_plan_for_today / sp_remove_from_today

Las herramientas correctas para "hacer esto hoy".

sp_create_project / sp_update_project

Crear, renombrar, archivar, alternar backlog.

sp_create_tag / sp_update_tag

Los nombres duplicados se rechazan.

Diagnóstico

Herramienta

Notas

sp_sync_status

Diseño, versión de sincronización, qué dispositivos han estado escribiendo, y cualquier advertencia.

sp_recent_activity

El registro de operaciones en lenguaje sencillo — "¿eso realmente se guardó?"

En SP_MODE=read-only las herramientas de escritura no se anuncian en absoluto, en lugar de anunciarse y rechazarse. Una herramienta que un modelo puede ver es una herramienta que intentará.

Dos cosas que vale la pena saber

"Hoy" no es una etiqueta que apliques. Una tarea está en Hoy porque su fecha de vencimiento es hoy. sp_plan_for_today es la forma de ponerla allí; la lista de tareas de la etiqueta TODAY solo almacena el orden.

Las duraciones están en minutos. Super Productivity almacena milisegundos; este servidor convierte en el límite para que nada esté nunca desviado por un factor de sesenta.


Configuración

Variable

Predeterminado

Notas

SP_NEXTCLOUD_URL

obligatorio

URL base, sin ruta. http:// se actualiza si tu servidor redirige.

SP_NEXTCLOUD_USER

obligatorio

El nombre de usuario bajo el que viven tus archivos.

SP_NEXTCLOUD_PASSWORD

obligatorio

Contraseña de aplicación muy preferida.

SP_NEXTCLOUD_LOGIN_NAME

Solo si tu instancia inicia sesión por correo electrónico pero almacena archivos bajo un nombre de usuario diferente.

SP_SYNC_FOLDER

super-productivity

Carpeta dentro de tu Nextcloud.

SP_ENCRYPTION_PASSWORD

Solo si habilitaste el cifrado en la configuración de sincronización de Super Productivity. Debe coincidir exactamente.

SP_MODE

read-write

read-only oculta cada herramienta de escritura.

SP_CLIENT_ID

derivado

La identidad de este servidor en el reloj vectorial. Derivado de forma estable de máquina + objetivo; establécelo solo si necesitas fijarlo.

SP_CACHE_TTL_SECONDS

20

Cuánto tiempo una lectura puede servirse desde caché. Las escrituras siempre re-obtienen.

SP_LOG_LEVEL

info

silent | error | warn | info | debug. Siempre a stderr.

SP_REQUEST_TIMEOUT_MS

30000

Tiempo de espera por solicitud.

SP_ENV_FILE

./.env

De dónde leer el archivo de entorno.

Los nombres heredados nextcloud_user / nextcloud_password también se aceptan, así que un .env existente no necesita renombrarse.

Por qué se analiza el archivo .env en lugar de ejecutarlo: las contraseñas de aplicación rutinariamente comienzan con $, y source .env en un shell expande $Nyd0… a la cadena vacía. El fallo resultante se ve exactamente como una contraseña incorrecta. Este servidor lee el archivo literalmente y evita toda esa clase de confusión.


Cómo funciona

src/
├── domain/          Pure. No I/O, no framework, no network.
│   ├── model/         Super Productivity's state, as we read it
│   ├── reducers/      Faithful ports of upstream's own reducers
│   ├── sync/          Vector clocks, the compact operation format
│   ├── errors.ts      One taxonomy, split by what the caller should do
│   └── ports.ts       The boundary: FileStore, Clock, IdGenerator, Logger
├── application/     Use cases and projections
│   ├── workspace.ts   Read-modify-write with optimistic concurrency
│   ├── read-models.ts Raw state → something a model can act on
│   └── services/      Task, organiser and diagnostics use cases
├── infrastructure/  Everything that touches the outside world
│   ├── codec/         The pf_ prefix, gzip, Argon2id + AES-GCM
│   ├── webdav/        Conditional writes, strong validators
│   ├── sync/          Layout detection, operation replay
│   └── config/        Env loading and validation
├── presentation/    The MCP tool surface
└── composition-root.ts  The only place a concrete dependency is chosen

La regla de dependencia apunta hacia adentro: domain no sabe nada de WebDAV o MCP. Eso no es decoración — es por lo que la suite de integración puede ejecutar la totalidad del stack, incluida la lógica de reintento de escritura condicional, contra un almacén en memoria con un reloj congelado, sin conexión, en menos de dos segundos.

Ambos diseños de sincronización, detectados automáticamente

Super Productivity ha enviado dos diseños remotos, y puede migrar una carpeta en cualquier momento:

  • Archivo únicosync-data.json contiene la instantánea, archivos y registro juntos. El predeterminado.

  • Divididosync-ops.json es el punto de confirmación, sync-state.json la instantánea. Opt-in ("Sincronización quirúrgica").

El diseño se detecta en cada lectura, nunca se configura. En el diseño dividido, la instantánea solo se reescribe en la compactación, por lo que puede retrasarse hasta 2000 operaciones; este servidor reproduce el registro pendiente para cerrar la brecha y informa de cualquier cosa que no haya podido reproducir en lugar de mostrarte silenciosamente una imagen incompleta.

Cifrado

Si habilitaste el cifrado en Super Productivity, establece SP_ENCRYPTION_PASSWORD con la misma contraseña. La canalización — JSON → gzip → AES-256-GCM derivado de Argon2id — coincide exactamente con la versión original, incluido el formato PBKDF2 heredado para archivos escritos por clientes antiguos.

Un archivo en texto plano es rechazado cuando el cifrado está configurado. La marca de cifrado vive fuera del sobre autenticado, por lo que cualquiera que pueda escribir en tu remoto podría eliminarla y servirte sus propios datos; la intención local prevalece sobre la autodeclaración del remoto.


Desarrollo

npm test              # unit + integration, no network, ~2s
npm run test:unit
npm run test:integration
npm run test:coverage
npm run test:e2e      # real Nextcloud — see below
npm run verify        # format + lint + typecheck + test
npm run dev           # run from source

284 pruebas. La suite de integración ejecuta toda la pila contra un almacén en memoria que evalúa If-Match de verdad, cubriendo las situaciones que de otro modo son casi imposibles de preparar: un dispositivo rival confirmando dentro de la brecha de lectura-escritura, un servidor sin ETags utilizables, una escritura de copia de seguridad fallida, una carpeta con tombstone, un remoto corrupto.

El fixture de prueba es un archivo de sincronización real — mismo sobre, mismo registro de 344 operaciones, misma versión de esquema — con cada título y nota reemplazados por texto sintético.

De extremo a extremo

npm run test:e2e se ejecuta contra un Nextcloud real, en una carpeta de sandbox separada sembrada a partir de una copia de tu archivo de sincronización y eliminada después. Tu carpeta de sincronización real nunca es escrita por la suite. Se omite a sí misma cuando no hay credenciales configuradas.

Establece SP_E2E_FOLDER en .env (por defecto super-productivity-mcp-e2e). Debe diferir de SP_SYNC_FOLDER; la suite crea, sobrescribe y elimina archivos dentro de ella.


Limitaciones

Dicho claramente, porque la alternativa es descubrirlas más tarde:

  • La sincronización no es instantánea. Los cambios llegan al archivo de sincronización inmediatamente; tu escritorio y tu teléfono los recogen en su próxima sincronización.

  • Las tareas archivadas son de solo lectura. Este servidor lee tus archivos pero nunca escribe en ellos. Completa las tareas en lugar de archivarlas.

  • El diseño dividido es de solo añadir. Cuando su registro de operaciones se llena, el servidor rechaza más escrituras y te dice que abras Super Productivity una vez para que pueda compactar. Compactar significaría publicar una instantánea parcialmente reproducida como autoritativa, lo que podría descartar silenciosamente lo que no logró reproducir.

  • Sin seguimiento de tiempo ni Pomodoro. Esas son funciones locales y en vivo; no hay nada sensato que escribir desde aquí.

  • Las notas y las tareas repetitivas son de solo lectura, no escribibles.

  • Un nivel de anidamiento de subtareas, igual que Super Productivity.

Solución de problemas

Síntoma

Causa probable

Nextcloud rejected the credentials

Contraseña de inicio de sesión con 2FA habilitado: usa una contraseña de aplicación. O una contraseña que comience con $ que un shell se haya comido; este servidor analiza .env literalmente, pero tu gestor de procesos puede no hacerlo.

Remote file not found: sync-data.json

SP_SYNC_FOLDER incorrecto. Comprueba el nombre de la carpeta en el navegador de archivos de Nextcloud.

Not a Super Productivity sync file

Apuntaste al archivo equivocado, o el cifrado está activado y SP_ENCRYPTION_PASSWORD no está establecido.

The remote sync file is plaintext but…

SP_ENCRYPTION_PASSWORD está establecido pero el cifrado está desactivado en la aplicación. Límpialo.

no usable ETag en el doctor

Un proxy está eliminando las cabeceras ETag. Las escrituras se rechazarán en lugar de arriesgarse a sobrescribir otro dispositivo. Arregla el proxy.

Cambios no visibles en tu teléfono

Abre la aplicación y deja que sincronice. Comprueba sp_sync_status para ver qué dispositivos han estado escribiendo.

another device kept writing first

Algo está sincronizando en un bucle cerrado. Inténtalo de nuevo en un momento. No se cambió nada.


Créditos

Construido sobre Super Productivity por Johannes Millan. El formato de registro de operaciones, los algoritmos de reloj vectorial y la semántica del reductor aquí son puertos de la implementación de ese proyecto — consulta docs/sync-and-op-log/ para la arquitectura que este servidor tuvo que aprender a hablar.

Licencia

MIT

A
license - permissive license
Not graded
quality - not tested
C
maintenance

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

View all related MCP servers

Related MCP Connectors

  • Read and write your Fresh Jots notes from Claude, Cursor, and any MCP client.

  • Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…

  • Manage your MakeMeBetter AI tasks, habits, and goals from your AI assistant.

View all MCP Connectors

Latest Blog Posts

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/daxrpm/superproductivity-mcp-offline'

If you have feedback or need assistance with the MCP directory API, please join our Discord server