Focus ToDo

Servidor MCP que lee tus datos de Focus To-Do directamente desde la base de datos local de la aplicación de Windows — sin cuenta, sin clave API, sin necesidad de exportación.

Documentación

focus-todo-mcp

Servidor MCP que lee tus datos de Focus To-Do directamente desde tu base de datos local (aplicación de Windows o extensión de Chrome en Linux/Pop!_OS/macOS) — sin inicio de sesión, sin clave API, sin necesidad de exportación.

Qué hace

Expone tus tareas, proyectos, subtareas y sesiones Pomodoro de Focus To-Do a Claude (o cualquier cliente compatible con MCP) analizando el IndexedDB de la aplicación (formato Chrome LevelDB) almacenado localmente.

Requisitos

  • Linux (Pop!_OS, Debian, Ubuntu, etc.), macOS o Windows
  • Focus To-Do instalado mediante:
    • Extensión de Chrome (ngceodoilcgpmkijopinlkmohnfifjfb) en Chrome, Chromium, Brave, Edge, Vivaldi (estándar, Flatpak o Snap)
    • Aplicación de Microsoft Store (Windows UWP)
  • Node.js 22+

Instalación

git clone https://github.com/b0r1sOm4g0/focus-todo-mcp
cd focus-todo-mcp
npm install

Configuración con Claude Code

claude mcp add --scope user focus-todo node "/path/to/focus-todo-mcp/index.mjs"

Luego reinicia Claude Code.

Detección automática y ruta personalizada

El servidor detecta automáticamente tu base de datos de Focus To-Do en:

  • Linux (Pop!_OS / Debian / Ubuntu): ~/.config/google-chrome/<Profile>/IndexedDB/chrome-extension_ngceodoilcgpmkijopinlkmohnfifjfb_0.indexeddb.leveldb (así como perfiles de Chromium, Brave, Edge, Vivaldi, Flatpak y Snap)
  • Windows: Aplicación de Microsoft Store (%LOCALAPPDATA%\Packages) o perfiles de extensión de Chrome
  • macOS: ~/Library/Application Support/Google/Chrome/<Profile>/IndexedDB/...

Si usas una ruta de perfil de navegador no estándar, anula la detección automática con:

FOCUS_TODO_IDB_PATH="/path/to/IndexedDB/chrome-extension_ngceodoilcgpmkijopinlkmohnfifjfb_0.indexeddb.leveldb" node index.mjs

Configuración de escritura: instancia de Chrome dedicada (Linux)

Las escrituras pasan por el código propio de la extensión Focus To-Do mediante el Protocolo de Chrome DevTools. Chrome 136+ rechaza la depuración remota en tu perfil de Chrome predeterminado, por lo que Focus To-Do se ejecuta en una instancia de Chrome separada:

  1. Iníciala una vez: google-chrome --user-data-dir="$HOME/.config/focustodo-chrome" --remote-debugging-port=9222
  2. Instala la extensión Focus To-Do desde Chrome Web Store en esa ventana e inicia sesión.
  3. Espera la primera sincronización. Las cuentas grandes tardan unos minutos y la aplicación no muestra progreso.
  4. Ejecuta npm run setup:launcher para agregar un lanzador "Focus To-Do" que la abra como ventana de aplicación, y usa esa ventana de ahora en adelante.

Con el lanzador instalado, una escritura abre la instancia (mediante gtk-launch) cuando está cerrada. El servidor también lee desde la base de datos de esta instancia cuando existe. Después de una escritura, la ventana se recarga solo cuando no hay ningún pomodoro en ejecución o en pausa.

Variables de entorno: FOCUS_TODO_USER_DATA_DIR (predeterminado ~/.config/focustodo-chrome), FOCUS_TODO_CDP_PORT (predeterminado 9222), FOCUS_TODO_CHROME_PATH.

Seguridad: el puerto de depuración escucha solo en localhost, pero cualquier proceso local puede controlar esta instancia de Chrome. Mantén solo Focus To-Do en ella: sin cuenta de Google y sin otros inicios de sesión. En Linux, el servidor rechaza un puerto de depuración ocupado por el proceso de otro usuario.

Duplicados: ejecutar Focus To-Do en varios clientes a la vez (otros perfiles de Chrome, otros dispositivos) parece crear ocurrencias duplicadas de tareas recurrentes. Usar un solo cliente de escritorio las reduce; find_duplicate_tasks y remove_duplicate_tasks las limpian.

Herramientas

Herramientas de lectura (solo lectura)

HerramientaDescripción
list_projectsLista todos los proyectos (oculta los proyectos del sistema por defecto)
list_tasksLista tareas filtradas por proyecto y estado (active/overdue/completed/all, usando las reglas de la aplicación)
search_tasksBusca tareas por nombre
get_taskObtiene detalles completos de la tarea, incluidas las subtareas
list_subtasksLista subtareas de una tarea
get_pomodoro_statsEstadísticas de Pomodoro por día para los últimos N días
find_duplicate_tasksEncuentra ocurrencias duplicadas de tareas recurrentes (misma serie, mismo día)

Herramientas de escritura (requieren la instancia de Chrome dedicada)

HerramientaDescripción
complete_tasksCompleta tareas; las tareas recurrentes obtienen su siguiente ocurrencia a menos que la serie ya tenga una
skip_occurrencesOmite la ocurrencia actual de tareas recurrentes sin contarla como completada
remove_duplicate_tasksElimina copias adicionales encontradas por find_duplicate_tasks; la copia conservada nunca se elimina

Cada escritura es confirmada por ti en un formulario (elicitation de MCP, compatible con Claude Code). Los clientes sin formularios de confirmación pueden leer pero no escribir, por lo que la aprobación nunca recae en el modelo. Los cambios se sincronizan con la nube de Focus To-Do a través de la propia aplicación.

Cómo funciona

Focus To-Do (tanto la aplicación de Windows como la extensión de Chrome) almacena datos en IndexedDB (formato LevelDB de Chrome). Para las lecturas, este servidor:

  1. Detecta automáticamente la ruta LevelDB activa para Windows UWP o perfiles de extensión de Chrome
  2. Lee los archivos SSTable de LevelDB (.ldb) y el registro de escritura anticipada (.log) directamente en modo solo lectura
  3. Analiza los prefijos de clave IndexedDB de Chrome para extraer registros de almacenes de objetos
  4. Decodifica los valores usando v8.deserialize de Node.js con parche automático de encabezado V8 para versiones modernas de Chrome
  5. Almacena en caché los datos en memoria durante 30 segundos para evitar releer en cada llamada de herramienta

Para las escrituras, se conecta a la instancia de Chrome dedicada mediante el Protocolo DevTools, localiza los servicios de tareas y sincronización de la aplicación y los invoca, de modo que la recurrencia y la sincronización en la nube se comportan exactamente como en la aplicación.

Almacenes de objetos leídos:

  • os1 → Proyectos
  • os2 → Tareas
  • os3 → Subtareas
  • os4 → Sesiones Pomodoro

Notas

  • Las lecturas abren los archivos de base de datos en modo solo lectura. Las escrituras ocurren solo a través de las herramientas de escritura, dentro de la aplicación Focus To-Do, después de tu confirmación.
  • Los datos se leen directamente del disco, reflejando el último estado guardado por Chrome/Focus To-Do.

Licencia

MIT