Teetrack
Teetrack is a time tracking and billing tool built for one person: freelancers, consultants, and solo agency owners who bill by the hour.
What it can do
- Start Timer: Start a new timer (creates a track with no end time). Multiple timers can run concurrently. Returns the new running track.
- Stop Timer: Stop a running timer by setting its end time to now. If no id is given, stops the most recently started timer. Returns the stopped track.
- Get Running Timer: Get all currently running timers (tracks with no end time). Returns an array (empty if none active).
What data it sees
Do you need an account
No: the server works without sign-in
Teetrack is a time tracking and billing tool built for one person: freelancers, consultants, and solo agency owners who bill by the hour. Track time with one click, tag it to clients and projects, set budgets per retainer, and export clean PDF or CSV timesheets at billing time.
What makes it different:
AI-native: a real MCP server (~35 tools) lets Claude, ChatGPT, and Copilot start timers, log entries, and answer "how many billable hours this week?" in chat. Calendar capture with review: import Google Calendar / Outlook / iCal events as draft time entries and confirm them in bulk — automation without wrong data. Privacy-first: EU-hosted on Hetzner, GDPR-first, no screenshots, no activity monitoring, no keystroke logging. Honest pricing: Free (€0, 5 projects), Business (€4/mo flat, 20 projects, billing + budgets + exports), Pro (€19/mo, unlimited). Every plan is single-user — one seat, one flat price.
How to connect
How to connect Teetrack to Claude
The server address to paste into Claude settings:
https://teetrack--snafu.run.tools
- Open Claude (claude.ai or the desktop app).
- Go to Settings → Connectors.
- Click Add custom connector.
- Paste the server address copied below into Remote MCP server URL and click Add.
- In a chat, click + → Connectors and switch the new connector on.
Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.
Authorization
After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.
How to connect Teetrack to ChatGPT
The server address to paste into ChatGPT settings:
https://teetrack--snafu.run.tools
- Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
- Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
- Open Settings → Connectors and click Create.
- Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
- Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
- In a new chat open + → Apps/Connectors and enable the connector.
OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.
Authorization
On first use ChatGPT opens the service's sign-in window. Sign in and approve access.
How to connect Teetrack to Cursor
The server address to paste into Cursor settings:
https://teetrack--snafu.run.tools
Fastest: click Open in Cursor below and confirm the prompt.
Manually:
- In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
- Paste the JSON copied below into
~/.cursor/mcp.json(per project:.cursor/mcp.jsonin the repo root). - Save the file. The server appears in the MCP list; authorize it there if asked.
Authorization
If the service needs sign-in, an authorize button appears next to the server in the MCP list.
Server tool list (35)
Raw names from tools/list. Only developers need these.
| start_timer | Start a new timer (creates a track with no end time). Multiple timers can run concurrently. Returns the new running track. |
| stop_timer | Stop a running timer by setting its end time to now. If no id is given, stops the most recently started timer. Returns the stopped track. |
| get_running_timer | Get all currently running timers (tracks with no end time). Returns an array (empty if none active). |
| list_tracks | List time tracking entries with optional filters and pagination. Returns tracks sorted by start time (newest first). Without done=true, unconfirmed calendar drafts (draft=true) are included; after/before bounds are exclusive. |
| get_track | Get a single time tracking entry by its ID. |
| log_time | Log a completed time entry with both start and end times. |
| update_track | Update an existing time tracking entry. Only provided fields are changed. |
| delete_track | Delete a time tracking entry by ID. |
| list_projects | List all projects with optional pagination. |
| get_project | Get a single project by its ID, including billing and budget configuration. |
| create_project | Create a new project. |
| update_project | Update an existing project. Only provided fields are changed. |
| delete_project | Delete a project by ID. |
| list_tags | List all tags with their track counts and total tracked seconds. |
| create_tag | Create a new tag. |
| update_tag | Update an existing tag. Only provided fields are changed. |
| delete_tag | Delete a tag by ID. |
| list_clients | List all clients. |
| get_client | Get a single client by ID. |
| create_client | Create a new client. |
| update_client | Update an existing client. Only provided fields are changed. |
| delete_client | Delete a client by ID. |
| get_time_summary | Get total tracked time in seconds over rolling windows counted back from now: total (all time), year (last 365 days), month (last 30 days), and day (last 24 hours). These are not calendar periods. Running timers count up to now; on the Free plan all windows are limited to the last 90 days. |
| get_project_summary | Get top projects with hours, billable amounts, and day counts. Useful for understanding where time is being spent. |
| get_budget_status | Get budget status for all projects with budgets configured. Shows tracked vs. budgeted hours/amounts and whether over budget. |
| get_user_settings | Get the current user's display and rounding settings. |
| update_user_settings | Update user settings. Only provided fields are changed. |
| get_subscription_usage | Get current subscription tier info, feature list, limits, and usage counts. |
| list_calendar_connections | List all connected calendar accounts (Google, Outlook, iCal). Returns provider, account email, sync status, and auto-import settings. |
| list_calendar_events | List calendar events within a date range from all enabled calendar connections. Excludes all-day events and cancelled events. |
| get_calendar_suggestions | List all pending draft time entries imported from calendar events. Returns drafts with their current project assignment for review. |
| confirm_draft_track | Confirm a draft time entry imported from a calendar event. Sets draft=false, making it count toward summaries. Use update_track first to change description or project. |
| bulk_confirm_draft_tracks | Confirm multiple draft time entries at once. Returns the count of confirmed entries. |
| dismiss_draft_track | Dismiss a draft time entry imported from a calendar event. The event will not be re-imported in future syncs. |
| trigger_calendar_sync | Trigger a calendar sync. If connection_id is provided, syncs that specific connection. Otherwise syncs all enabled connections. Rate limited: once per connection per 5 minutes. |