Back to help

MCP server

Connect Realtime to Cursor, Claude, or any MCP client so your assistant can start timers, log time and expenses, and check budgets on your behalf — using the exact same business logic and authorization as the REST API. No cloning the repo, no environment variables, no API keys.

Connect

  1. Add this URL as a remote MCP server in Cursor (or Claude, or any MCP client)
  2. Click Connect, then sign in with your Realtime account
  3. Approve the one-time consent screen — that's it
https://realtime.fyi/api/mcp

Authentication is OAuth 2.1 (PKCE) — the same login you use for the web app. Nothing to paste except this URL. Revoke access anytime from Settings.

Tools (14)

timer_getCheck if a timer is running.
Any
timer_startStart a timer (stops any existing one first).
Any
timer_stopStop the running timer.
Any
time_listList time entries (default: this week).
Any
time_logLog a time entry without a timer.
Any
time_deleteHard-delete an unbilled time entry and write an audit row. Locked/invoiced entries stay undeletable.
Any
projects_listList projects you can log time to.
Any
tasks_listList tasks for a project.
Any
expenses_listList your expenses.
Any
expense_logLog a new expense.
Any
budget_statusBudget usage + alert thresholds for your projects.
Any
invoices_listList invoices.
Admin
invoice_draftCreate a draft invoice from unbilled items.
Admin
uninvoiced_summaryUnbilled time + expenses by client.
Admin

Admin-only tools reject member sessions the same way the REST API does — never a silent success with empty data. Members never see rates, costs, or invoice amounts through MCP either.

Example prompts

  • “Start a timer on the Fintech Redesign project for development work”
  • “What's my budget usage on the E-commerce Upgrade project?”
  • “How much unbilled time does Kiwi Fintech have?”
  • “Log 2.5 hours of design work on the Brand Campaign project for today”
Self-host / stdio (advanced, not the recommended path)

apps/mcp in the monorepo is a standalone stdio/local-HTTP MCP server that talks directly to the database, for people who want to run their own copy instead of connecting to the hosted one above. It needs its own database connection and a shared secret — most people should use the hosted URL instead.

{
  "mcpServers": {
    "realtime-local": {
      "command": "npx",
      "args": ["tsx", "apps/mcp/src/index.ts"],
      "env": {
        "DATABASE_URL": "your-neon-database-url",
        "REALTIME_API_KEY": "a-secret-only-you-set"
      }
    }
  }
}

Every tool call there takes apiKey and userId as explicit arguments — unlike the hosted OAuth server above, which resolves both from your session automatically.