MCP Time Tracker
Rastreie o tempo faturável sem sair do chat.
Documentação
Rastreie o tempo pelo Claude com um servidor gratuito, sem instalação
Destaque no Awesome MCP Servers - listagem no diretório | endpoint hospedado ao vivo, plano gratuito, sem cadastro.
Rastreie horas faturáveis sem sair do seu chat de IA. Diga "inicie um cronômetro no redesign da acme", continue trabalhando e depois peça "minhas horas desta semana por projeto" ou "linhas de fatura para acme em agosto". Ele mantém um cronômetro em execução, permite registrar tempo que você esqueceu de rastrear, aplica sua taxa horária por projeto e transforma o resultado em um relatório, um arquivo CSV ou um conjunto de itens de linha de fatura. Tudo é armazenado como JSON simples na sua própria máquina.
Criado por theluckystrike.
No Registro Oficial de MCP (io.github.theluckystrike/time-tracker-timesheet-billable-hours).
Listado no Índice de Produtos de IA - endpoint remoto ao vivo em mcp.zovo.one/s/time-tracker, plano gratuito, sem cadastro.
![]()
Rastreie horas faturáveis pelo chat e transforme-as diretamente em um relatório ou itens de linha de fatura, zero configuração, tudo local.
Instalação em 60 segundos
A publicação no npm para @theluckystrike/mcp-time-tracker está pendente. Até lá, o pacote de um clique .mcpb ou um clone+compilação
é o caminho funcional, ambos verificados abaixo.
Um clique (.mcpb): baixe time-tracker.mcpb do lançamento mais recente e clique duas vezes nele no Claude Desktop:
https://github.com/theluckystrike/mcp-servers/releases/latest
(claude_desktop_config.json):
{
"mcpServers": {
"time-tracker": {
"command": "npx",
"args": ["-y", "@theluckystrike/mcp-time-tracker"]
}
}
}
Claude Code:
claude mcp add time-tracker -- npx -y @theluckystrike/mcp-time-tracker
(.cursor/mcp.json):
{
"mcpServers": {
"time-tracker": {
"command": "npx",
"args": ["-y", "@theluckystrike/mcp-time-tracker"]
}
}
}
O formulário npx acima começa a funcionar no momento em que o pacote for publicado. Até lá, use o pacote .mcpb acima, ou
compile a partir do código-fonte com exatamente estes três comandos:
git clone https://github.com/theluckystrike/mcp-servers.git && cd mcp-servers
npm install
npm run build -w packages/mcp-license -w servers/time-tracker
Em seguida, aponte o command do seu cliente para node com um argumento: o caminho absoluto para servers/time-tracker/dist/index.js.
Para executar no modo Pro, defina MCP_LICENSE_KEY no mesmo bloco de configuração, ou chame license_activate uma vez com sua chave.
Ferramentas
| Ferramenta | O que ela faz |
|---|---|
timer_start | Inicia um cronômetro em um projeto (tarefa, tags, taxa e moeda opcionais). Iniciar um novo para e registra o anterior. Um nome de projeto parcial que corresponda exatamente a um projeto existente é usado como esse projeto. |
timer_stop | Para o cronômetro em execução, grava a entrada e retorna a duração. |
timer_status | O que está em execução, há quanto tempo e o total de hoje. |
entry_add | Registra tempo que você já trabalhou (início mais fim ou minutos), com taxa e moeda opcionais: taxa "90 euros por hora" fatura como EUR 225,00 por 2,5 h. Nomes parciais de projeto são resolvidos como timer_start. |
entry_list | Tabela compacta de entradas, filtrada por intervalo de datas e projeto. |
entry_edit | Altera qualquer campo de uma entrada. |
entry_delete | Exclui uma entrada por id. |
project_set_rate | Define a taxa horária e a moeda usadas para totais monetários (a moeda aceita códigos ou palavras: EUR, euros, libras, zl). apply_to_existing: true reavalia o tempo já registrado para esse projeto; adicione only_missing: true para tocar apenas em entradas sem taxa. |
report | Horas e dinheiro de um período, opcionalmente agrupados por projeto, dia, tarefa ou tag; omita group_by para o total simples por moeda. Tabela, JSON ou CSV. Horas já faturadas são deixadas de fora; passe unbilled_only: false para a folha de ponto completa. |
export_csv | Grava entradas em um arquivo CSV e retorna o caminho. |
invoice_summary | Itens de linha prontos para fatura de um projeto: horas, taxa, valor, total, na moeda em que o tempo foi registrado. Uma linha por tarefa e taxa, para que nenhuma linha mostre uma taxa combinada que ninguém concordou. Retorna o entry_ids por trás das linhas e pula horas já faturadas (unbilled_only: false as inclui). Grátis nos últimos 7 dias, Pro para qualquer período do histórico completo. |
entry_mark_billed | Carimba as horas que foram para uma fatura com o número dela (ids de invoice_summary, ou project + from + to), para que report e invoice_summary parem de oferecê-las e as mesmas horas nunca sejam cobradas duas vezes. |
license_status | Grátis ou Pro, e onde atualizar. |
license_activate | Ativa uma chave Pro (verificada offline). |
Também expostos: o recurso timetracker://today (resumo de hoje) e o prompt daily_standup
(escreve uma atualização de standup a partir do tempo rastreado de ontem e de hoje).
O que você pode dizer
Nenhum nome de ferramenta é necessário. Estas são as frases que foram realmente testadas contra o servidor; a coluna de ferramenta é o que respondeu a elas.
| Você diz | Ferramenta |
|---|---|
| "Inicie um cronômetro para o projeto do site da Acme." | timer_start |
| "Pare o cronômetro e me diga quanto tempo trabalhei." | timer_stop |
| "O que está em execução agora e há quanto tempo?" | timer_status |
| "Registre 2,5 horas ontem para Acme, revisão de design, a 90 euros por hora." | entry_add |
| "Mostre minhas entradas da Acme desta semana." | entry_list |
| "Essa última entrada deveria dizer refatoração de API, não revisão de design." | entry_edit |
| "Exclua a entrada que acabei de registrar duas vezes." | entry_delete |
| "Defina minha taxa para Acme em 90 EUR por hora." | project_set_rate |
| "Quantas horas faturei este mês, agrupadas por projeto?" | report |
| "Me dê as linhas de fatura para Acme em agosto." | invoice_summary |
| "Faturei essas horas como INV-2026-0001." | entry_mark_billed |
Mais duas que valem a pena conhecer: "exporte meu tempo para um CSV para meu contador" (export_csv) e "escreva minha atualização
de standup de ontem e hoje" (o prompt daily_standup).
Exemplo prático
Este é um transcript real da auditoria em docs/USER_VALUE_R2.md, números inalterados.
You: Log 2.5 hours yesterday for Acme, design review, at 90 euros an hour.
entry_add { project: "Acme", ... }
-> "Acme" resolved to the existing project "Acme website"
-> rate "90 euros an hour" parsed as EUR 90.00/h
Assistant: Logged 2.50 h for Acme website - design review at EUR 90.00/h = EUR 225.00.
You: How much do I bill Acme this week? Give me invoice lines.
invoice_summary { project: "Acme website", from: "2026-08-31", to: "2026-09-02" }
Assistant: Invoice summary - Acme website
design review 2.50 h EUR 90.00/h EUR 225.00
TOTAL 2.50 h EUR 225.00
Uma chamada cada. A taxa carrega sua moeda por todo o caminho: o relatório nunca imprime um "225" simples, e nunca vira "$225" por acidente.
Um segundo exemplo prático, o relatório semanal e o prompt daily_standup:
You: How many hours did I put into Acme this week, grouped by task?
report { project: "Acme website", from: "2026-08-27", to: "2026-09-02", group_by: "task" }
Assistant: Acme website, 2026-08-27 to 2026-09-02
design review 2.50 h EUR 225.00
TOTAL 2.50 h EUR 225.00
You: Write my standup update.
(prompt) daily_standup
Assistant: Yesterday: 2.50 h on Acme website (design review).
Today: nothing logged yet.
Fechamento de horas faturadas
Uma hora que foi faturada está encerrada. entry_mark_billed {ids, invoice_number} grava
billed_at e billed_invoice nessas entradas; a partir daí, report e invoice_summary
as pulam por padrão, para que o "faturar acme" do próximo mês não possa refaturar trabalho já pago. A
folha de ponto completa ainda está lá: passe unbilled_only: false para qualquer uma delas. invoice_summary
retorna o entry_ids que usou precisamente para que possam ser entregues diretamente a entry_mark_billed
assim que a fatura existir.
report e invoice_summary respondem a perguntas sobrepostas de propósito: report é para "quanto tempo
e dinheiro", agrupado como você quiser; invoice_summary é para "me dê as linhas que posso colocar em uma
fatura", que é uma visão mais restrita, em formato de fatura, das mesmas entradas de um projeto.
Como ele armazena dados
Entradas, projetos e taxas vivem em um único arquivo JSON:
${XDG_DATA_HOME:-~/.local/share}/mcp-servers/time-tracker/data.json.
Toda gravação (iniciar ou parar um cronômetro, adicionar, editar ou excluir uma entrada, definir uma taxa) acontece
sob um arquivo de bloqueio consultivo em .../time-tracker/.lock, mantido durante todo o ciclo de carregar-mutar-salvar, para que
duas chamadas sobrepostas não possam se intercalar e corromper o arquivo. A gravação em si escreve em um arquivo temporário
e o renomeia para o lugar, para que uma falha ou um processo morto no meio da gravação deixe ou o arquivo antigo ou o
novo, nunca um meio-escrito. Leituras (entry_list, report, timer_status, export_csv) não usam
o bloqueio.
Para fazer backup dos seus dados, copie o único arquivo data.json (e .lock se presente, embora ele não contenha dados).
Não há banco de dados e nenhum segundo arquivo oculto.
Se data.json estiver ilegível ou não for JSON válido, o servidor não trata isso como "sem dados ainda".
Ele move o arquivo para o lado, byte por byte, como data.json.corrupt-<timestamp>, grava um marcador data.json.corrupt
e faz todas as ferramentas, incluindo leituras, retornarem arquivo de dados corrompido; movido para ...; nada foi gravado. Restore a good data.json (a cópia em quarentena está bem ali) e exclua o arquivo de marcador para
continuar. Nada é sobrescrito nesse meio tempo.
Datas, horários e taxas
- Carimbos de data/hora sem deslocamento são seu horário local.
2026-09-02T09:00:00significa 09:00 onde você está, não UTC. Passe um deslocamento explícito (2026-09-02T09:00:00+02:00) ou umZfinal e ele será respeitado exatamente. - Limites somente de data cobrem dias locais inteiros.
from: "2026-09-01"é 00:00:00 local no dia 1º eto: "2026-09-30"é 23:59:59.999 local no dia 30, então um mês relatado por datas inclui seu último dia. Carimbos de data/hora com hora são usados como fornecidos. - Entradas são recortadas para a janela. Uma entrada que começa antes de
fromou termina depois detoconta para a parte dentro do período, não toda e não nenhuma. - Entradas são divididas à meia-noite local para agrupamento por dia. Trabalho das 23:30 às 01:30 é 0,5 h no primeiro
dia e 1,5 h no seguinte, inclusive através de uma fronteira de mês.
timer_statusconta apenas a parte de uma entrada, ou do cronômetro em execução, que cai após a meia-noite de hoje. - Strings de taxa são analisadas, nunca adivinhadas.
"1,200 USD"é 1200 (uma vírgula seguida de exatamente três dígitos é agrupamento de milhares),"12,50 EUR"é 12,50 (a forma decimal europeia inequívoca) e"1.200,50"é 1200,50. Qualquer coisa que possa significar uma coisa ou outra, como"1,2345", é recusada com um exemplo prático em vez de ser lida como o número errado. - Taxas são capturadas quando o tempo é registrado.
entry_addetimer_stoparmazenam a taxa horária efetiva e a moeda na entrada, e relatórios e faturas usam essa taxa armazenada.project_set_rateportanto se aplica apenas a entradas futuras; passeapply_to_existing: truepara reavaliar o tempo já registrado para esse projeto. Isso recarimba TODA entrada do projeto, incluindo entradas que já carregam uma taxa, e a resposta diz quantas mudaram e o novo total do projeto. Adicioneonly_missing: truepara tocar apenas em entradas que não capturaram taxa própria. - Linhas de tag se sobrepõem. Em
group_by: "tag", uma entrada marcada comdevemeetingaparece em ambas as linhas; o total é calculado a partir das entradas uma vez, então nunca é a soma das linhas.
Limites e ressalvas honestas
- Grátis
entry_list,report,export_csveinvoice_summarysó veem os últimos 7 dias. Cronômetros e entradas em si são ilimitados e nada é jamais excluído; a janela apenas estreita o que uma chamada gratuita pode ler de volta. - O plano gratuito suporta taxas horárias em 2 projetos; um terceiro projeto com taxa requer Pro.
- Todo agrupamento
reporté gratuito, incluindo tag: o total de tag é uma correção de exatidão, não um recurso premium.group_byem si é opcional; omita-o para o total simples por moeda. - Apenas um cronômetro pode rodar por vez. Iniciar um segundo para e registra o primeiro; não há modo de cronômetro concorrente.
- Não há lembrete ou detecção de inatividade: se você esquecer de parar um cronômetro, ele continua rodando até você pará-lo ou iniciar outro.
Solução de problemas
npxtrava ou não encontra o pacote: a publicação no npm deste pacote está pendente. Use o pacote.mcpbou o caminho de clone-e-compilação acima até que ela seja publicada.- Usando o pacote
.mcpb: ele instala diretamente no Claude Desktop; não há caminho separado para configurar. - Usando o caminho de clone: o binário do servidor é
servers/time-tracker/dist/index.jsapósnpm run build. Aponte ocommanddo seu cliente paranodecom esse caminho absoluto como único argumento. - Versão do Node: requer Node >= 18. Verifique com
node -v. - Nada aparece / falhas silenciosas: este servidor grava logs apenas em stderr, nunca em stdout (stdout é
reservado para o protocolo MCP). No Claude Desktop, verifique Configurações -> Desenvolvedor -> o arquivo de log
do servidor; no Claude Code, execute com
--mcp-debugou verifique o terminal de onde você o iniciou. - Uma chave Pro não é reconhecida: execute
license_statuspara ver o que o servidor acha que é seu nível, e confirme queMCP_LICENSE_KEYestá definido no mesmo processo em que o cliente inicia (não apenas no seu shell).
Privacidade
Todos os dados permanecem locais: as entradas ficam em ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/time-tracker/data.json.
O servidor não faz requisições de rede, não tem telemetria e não precisa de conta. As chaves de licença são assinaturas Ed25519
verificadas offline contra uma chave pública compilada no pacote; a ativação funciona sem
conexão com a internet.
Combina com
- mcp-invoice, transforme a saída de
invoice_summarydiretamente em uma fatura em PDF numerada. - mcp-spreadsheet, exporte um CSV com
export_csve consulte ou reformate-o. - mcp-price-tracker, se você também compra itens para o cliente, acompanhe esses preços.
- office-suite, todos os servidores irmãos em uma única instalação, uma única entrada de configuração.
- Guia: Rastreie horas faturáveis no Claude Code e no Cursor
FAQ
Sim. Todos os três falam MCP via stdio com o mesmo formato de configuração; as ferramentas e o arquivo de dados são idênticos independentemente do cliente.
Nada é excluído. A entrada permanece em data.json para sempre; ela simplesmente não aparecerá nos resultados de entry_list,
report, export_csv ou invoice_summary até você ativar o Pro, que abre o histórico completo.
Sim. A moeda é definida por projeto (ou por entrada, substituindo o padrão do projeto) e cada total é agrupado por moeda; um relatório nunca soma EUR e USD juntos.
O servidor não bloqueia sobreposições; ele registra o que você informa. entry_edit permite corrigir um erro depois
do ocorrido.
Não. Não há chamadas de rede em nenhum lugar deste servidor, inclusive para ativação de licença, que é verificada com uma chave pública local.
Licença
MIT
Um perfil de negócio para toda a suíte
Sua identidade é armazenada uma única vez, em ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/profile/business.json,
e todos os servidores da suíte a leem: o emissor de faturas, o cabeçalho de docx, o emissor
recorrente, a taxa de IVA padrão do expense-tracker, o fuso horário padrão do time-tracker e do timezone, e os
cabeçalhos de currículo e contrato. Defina uma vez com business_set (invoice ou docx) — você nunca
repete em nenhum outro lugar. Um endereço de e-mail só é obtido desse perfil ou de um argumento
explícito; quando nenhum está armazenado, os documentos mostram [add: email] e a ferramenta informa isso em vez de
deixar qualquer um improvisar um endereço.
Perguntas frequentes
Existe um servidor MCP gratuito de rastreamento de tempo?
Sim. O servidor time-tracker em mcp.zovo.one é um servidor MCP gratuito de rastreamento de tempo sem instalação: inicie e pare cronômetros no chat, mantenha totais por cliente e gere relatórios semanais. Diferente de rastreadores SaaS (WebWork, TrackingTime), ele não precisa de conta — cole a URL hospedada e pronto.
Como rastreio tempo pelo Claude?
Conecte https://mcp.zovo.one/mcp/time-tracker (URL tokenizada de mcp.zovo.one/mcp/connect) e diga: 'Inicie um cronômetro para o projeto Acme.' Pare-o mais tarde da mesma forma; resumos semanais estão a um pedido de distância.
Use estes documentos como um servidor MCP
Qualquer cliente MCP (Claude, Cursor, Windsurf, VS Code) pode ler a documentação deste repositório diretamente via GitMCP — sem instalação:
- URL MCP de documentos: https://gitmcp.io/theluckystrike/mcp-time-tracker