Focus ToDo

Servidor MCP que lê seus dados do Focus To-Do diretamente do banco de dados local do aplicativo Windows — sem conta, sem chave de API, sem necessidade de exportação.

Documentação

focus-todo-mcp

Servidor MCP que lê seus dados do Focus To-Do diretamente do seu banco de dados local (aplicativo Windows ou Extensão do Chrome no Linux/Pop!_OS/macOS) — sem login em conta, sem chave de API, sem necessidade de exportação.

O que ele faz

Expõe suas tarefas, projetos, subtarefas e sessões Pomodoro do Focus To-Do para o Claude (ou qualquer cliente compatível com MCP) analisando o IndexedDB do aplicativo (formato Chrome LevelDB) armazenado localmente.

Requisitos

  • Linux (Pop!_OS, Debian, Ubuntu, etc.), macOS ou Windows
  • Focus To-Do instalado via:
    • Extensão do Chrome (ngceodoilcgpmkijopinlkmohnfifjfb) no Chrome, Chromium, Brave, Edge, Vivaldi (padrão, Flatpak ou Snap)
    • Aplicativo da Microsoft Store (Windows UWP)
  • Node.js 22+

Instalação

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

Configuração com Claude Code

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

Em seguida, reinicie o Claude Code.

Detecção automática e caminho personalizado

O servidor detecta automaticamente seu banco de dados do Focus To-Do em:

  • Linux (Pop!_OS / Debian / Ubuntu): ~/.config/google-chrome/<Profile>/IndexedDB/chrome-extension_ngceodoilcgpmkijopinlkmohnfifjfb_0.indexeddb.leveldb (assim como perfis do Chromium, Brave, Edge, Vivaldi, Flatpak e Snap)
  • Windows: Aplicativo da Microsoft Store (%LOCALAPPDATA%\Packages) ou perfis da Extensão do Chrome
  • macOS: ~/Library/Application Support/Google/Chrome/<Profile>/IndexedDB/...

Se você usar um caminho de perfil de navegador não padrão, substitua a detecção automática com:

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

Configuração de escrita: instância dedicada do Chrome (Linux)

As escritas passam pelo próprio código da extensão do Focus To-Do via Chrome DevTools Protocol. O Chrome 136+ recusa a depuração remota no seu perfil padrão do Chrome, então o Focus To-Do roda em uma instância separada do Chrome:

  1. Inicie uma vez: google-chrome --user-data-dir="$HOME/.config/focustodo-chrome" --remote-debugging-port=9222
  2. Instale a extensão do Focus To-Do pela Chrome Web Store nessa janela e faça login.
  3. Aguarde a primeira sincronização. Contas grandes levam alguns minutos e o aplicativo não mostra progresso.
  4. Execute npm run setup:launcher para adicionar um lançador "Focus To-Do" que o abre como janela de aplicativo, e use essa janela daqui em diante.

Com o lançador instalado, uma escrita abre a instância (via gtk-launch) quando ela está fechada. O servidor também lê do banco de dados dessa instância quando ele existe. Após uma escrita, a janela é recarregada apenas quando nenhum pomodoro está em execução ou pausado.

Variáveis de ambiente: FOCUS_TODO_USER_DATA_DIR (padrão ~/.config/focustodo-chrome), FOCUS_TODO_CDP_PORT (padrão 9222), FOCUS_TODO_CHROME_PATH.

Segurança: a porta de depuração escuta apenas em localhost, mas qualquer processo local pode controlar esta instância do Chrome. Mantenha apenas o Focus To-Do nela: sem conta Google e sem outros logins. No Linux, o servidor recusa uma porta de depuração mantida por um processo de outro usuário.

Duplicatas: executar o Focus To-Do em vários clientes ao mesmo tempo (outros perfis do Chrome, outros dispositivos) parece criar ocorrências duplicadas de tarefas recorrentes. Usar um único cliente de desktop reduz isso; find_duplicate_tasks e remove_duplicate_tasks limpam as duplicatas.

Ferramentas

Ferramentas de leitura (somente leitura)

FerramentaDescrição
list_projectsLista todos os projetos (oculta projetos do sistema por padrão)
list_tasksLista tarefas filtradas por projeto e status (active/overdue/completed/all, usando as regras do aplicativo)
search_tasksBusca tarefas por nome
get_taskObtém detalhes completos da tarefa, incluindo subtarefas
list_subtasksLista subtarefas de uma tarefa
get_pomodoro_statsEstatísticas de Pomodoro por dia para os últimos N dias
find_duplicate_tasksEncontra ocorrências duplicadas de tarefas recorrentes (mesma série, mesmo dia)

Ferramentas de escrita (exigem a instância dedicada do Chrome)

FerramentaDescrição
complete_tasksConclui tarefas; tarefas recorrentes ganham a próxima ocorrência, a menos que a série já tenha uma
skip_occurrencesPula a ocorrência atual de tarefas recorrentes sem contá-la como concluída
remove_duplicate_tasksExclui cópias extras encontradas por find_duplicate_tasks; a cópia mantida nunca é excluída

Toda escrita é confirmada por você em um formulário (elicitação MCP, suportada pelo Claude Code). Clientes sem formulários de confirmação podem ler, mas não podem escrever, então a aprovação nunca depende do modelo. As alterações são sincronizadas com a nuvem do Focus To-Do pelo próprio aplicativo.

Como funciona

O Focus To-Do (tanto o aplicativo Windows quanto a extensão do Chrome) armazena dados no IndexedDB (formato LevelDB do Chrome). Para leituras, este servidor:

  1. Detecta automaticamente o caminho ativo do LevelDB para perfis do Windows UWP ou da Extensão do Chrome
  2. Lê os arquivos SSTable do LevelDB (.ldb) e o Write-Ahead Log (.log) diretamente em modo somente leitura
  3. Analisa os prefixos de chave do IndexedDB do Chrome para extrair registros de object store
  4. Decodifica valores usando o v8.deserialize do Node.js com patch automático de cabeçalho V8 para versões modernas do Chrome
  5. Armazena dados em cache na memória por 30 segundos para evitar releituras a cada chamada de ferramenta

Para escritas, ele se conecta à instância dedicada do Chrome pelo DevTools Protocol, localiza os serviços de tarefas e sincronização do aplicativo e os chama, para que recorrência e sincronização na nuvem se comportem exatamente como no aplicativo.

Object stores lidos:

  • os1 → Projetos
  • os2 → Tarefas
  • os3 → Subtarefas
  • os4 → Sessões Pomodoro

Notas

  • As leituras abrem arquivos de banco de dados em modo somente leitura. As escritas acontecem apenas pelas ferramentas de escrita, dentro do aplicativo Focus To-Do, após sua confirmação.
  • Os dados são lidos diretamente do disco, refletindo o último estado gravado pelo Chrome/Focus To-Do.

Licença

MIT