Home · Guides

Popular servers: Spreadsheet · Server for Invoices — Generate Invoices from Claude · Expense Tracker — Log Expenses from Claude · Recurring Invoices · Word Document Server — Create .docx from Claude · Server for Bill of Sale — Draft and Sign from Claude · Zip · Job Card

How to track billable hours inside Claude Code and Cursor

If you bill by the hour and you already spend the day inside Claude Code or Cursor, the timesheet is the part that gets lost. You finish a task, move to the next one, and at the end of the week you reconstruct Tuesday from git history. The MCP Time Tracker puts the timer where the work happens: you say "start a timer for Acme, task API refactor", keep working, and later ask for the week's hours. Entries are plain JSON under your home directory. Nothing is uploaded.

Install it

One click, with no JSON. Download time-tracker.mcpb from the bundle catalog and open it in Claude Desktop. It runs on the Node runtime Claude Desktop ships with, so your own PATH and node version never come into it.

Or a URL, with nothing installed. /mcp/connect mints a free anonymous token and prints the ready line:

claude mcp add --transport http time-tracker https://mcp.zovo.one/mcp/time-tracker/t/<token>

Or from a clone, for a client with no bundle installer. Build once, then point the client at the built file:

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

claude mcp add --scope user time-tracker -- node /absolute/path/to/mcp-servers/servers/time-tracker/dist/index.js

Claude Desktop, Cursor, Windsurf and Cline take the same two strings as JSON, in claude_desktop_config.json or the client's own MCP config file:

{
  "mcpServers": {
    "time-tracker": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-servers/servers/time-tracker/dist/index.js"]
    }
  }
}

The npm packages are not published yet, so the npx form below returns a 404 today. It is kept because it is what that config becomes the day the publish lands, with nothing else changed; installing these servers when npx does not work yet has the whole picture.

claude mcp add time-tracker -- npx -y @theluckystrike/mcp-time-tracker

Whichever path you take, there is no account, no API key and no login step. The server runs locally over stdio and writes to ~/.local/share/mcp-servers/time-tracker/.

The four things you actually do

Start and stop a timer. Say "start tracking time on the Acme website project". Only one timer runs at a time, so starting a second one stops and logs the first. "Stop the timer and tell me how long I worked" closes it and writes the entry.

Log time you forgot. The timer is not the only path in. "Log 2.5 hours yesterday for Acme, design review, at 90 euros an hour" writes a complete entry: project, task, duration, rate and currency. The rate accepts the words you said, so "90 euros an hour" stores 90 EUR rather than defaulting to dollars.

Get a report. "How many hours did I put into Acme this week, grouped by task" returns totals in hours and money. Grouping works by project, day, task or tag.

Turn it into invoice lines. "Give me invoice lines for Acme in August" returns one line per task with hours, rate and amount, plus a total. Those lines feed straight into an invoice PDF if you also run the invoice server.

What the audit measured

The servers were driven by the real Claude CLI as an MCP client against a fresh data directory, with prompts phrased the way a person phrases them and no tool names mentioned. Starting the timer, stopping it, and logging a forgotten 2.5 hour entry each completed in a single tool call: one call, one correct result, no clarifying question. The weekly billing question took three calls, because the model asked for a report and then invoice lines separately. Round trip times were 8.6 s, 9.4 s and 10.0 s for the single-call steps.

The same audit found two real defects and both are fixed in the shipped server. The currency in "90 euros an hour" used to be dropped, so a report printed dollars for euro work; entry_add now takes a currency, in words or as an ISO code. Project names that differed only in phrasing ("the Acme website project" and "for Acme") used to create two projects and split the week's billing; a partial name that matches exactly one existing project now resolves to that project.

Money arithmetic

Hours are stored as seconds and money as integer minor units. An entry's amount is computed from seconds and the rate in one rounding step, then summed, so the total of a report equals the sum of the lines you can see. There is no floating point drift between what the report shows and what you invoice.

Free tier and Pro

Free gives unlimited timers and entries. Reports, invoice summaries and grouping by project, day, task or tag all run on the free tier too; the limit is that every read (report, invoice_summary, entry_list, CSV export) is clamped to the last 7 days, and only two projects can carry an hourly rate. Pro ($19 once, lifetime) opens the full history and unlimited rated projects. The full comparison is in free versus Pro. Product page: MCP Time Tracker. There are thirty-one of these MCP servers in total; one lifetime key covering all of them, this one included, is $39.

Connect without installing

Claude.ai, the Claude Desktop connector dialog and several IDE pickers take a remote URL and nothing else, so the command above is not the only way in. mcp/connect mints a token and prints a ready-to-paste URL for every server, including time-tracker, and the claude.ai and Claude Desktop setup page has the exact steps.

A kanban board on the same task

If the hours you log start life as a task on a board, MCP Kanban hands task_start_timer the exact project and task name for this server's timer_start, so the entry never drifts from what the board calls the task; see running a kanban board with time tracking.

Questions

Does this work in Cursor as well as Claude Code?

Yes. Both speak MCP over stdio. Claude Code takes the claude mcp add command; Cursor reads the same JSON block from ~/.cursor/mcp.json. The tools and the data directory are identical.

Where is my time data stored?

In plain JSON under ~/.local/share/mcp-servers/time-tracker/ (or $XDG_DATA_HOME if you set it). Writes are atomic. Nothing is sent to a server, and there is no account to create.

Can I bill in euros if my other projects are in dollars?

Yes. Currency is per entry and per project. entry_add takes a currency as an ISO code or as words such as 'euros'. If you give neither, it falls back to the project currency and then to USD.

What happens when the free 7 day window runs out?

Nothing is deleted. Entries keep accumulating; reports, listings and CSV exports cover the last 7 days until you activate a Pro key, which opens the whole history.

Does it work offline?

Yes. The server never makes a network call, and Pro keys are Ed25519 signatures verified locally, so activation works on a machine with no internet connection.

Related

All MCP servers and prices · All guides · Buy the bundle $39

Related guides: Read a .ics calendar in Claude: free and busy, conflicts, and billable meetings · MCP Service Agreement: stop copying a rotting contract template off the internet · Generate Word proposals and contracts from a chat message