Time tracking MCP server for Claude, Cursor and other AI agents

Oretta's MCP server lets an AI agent log your hours and pull reports from your studio's Oretta. Any MCP client that can send a header connects to https://oretta.app/mcp with your own token. It's in every plan, Free included.

Log 2.5 h on Website refresh yesterday from 14:00, sign-in screen mockups

list_projects(search: "Website refresh")

Website refresh · Atlas Architects · billable

I'll add this entry:

Date
Mon 9 Nov
Time
14:00 to 16:30 (2:30)
Project
Website refresh, Atlas Architects
Note
Sign-in screen mockups

Add it?

yes

add_time_entry(projectId: 12, date: "yesterday", startTime: "14:00", durationHours: 2.5, description: "Sign-in screen mockups")

created 2026-11-09 14:00-16:30 · 2h 30m · warnings: none

Added 2:30 on Website refresh for Atlas Architects, yesterday from 14:00 to 16:30.

Claude Code logging time: the agent finds the project, shows the entry and waits for a yes before it adds anything.

What you can ask

Plain sentences work. Under each request are the tools the agent called to answer it.

Check what you logged last week

The agent reads your own entries and checks that no timer is still running.

What did I log last week? Does any day look short?

get_running_timer()

get_time_entries(start: "2026-11-02", end: "2026-11-06")

You logged 32:10 last week. Thursday looks short:

Mon 2 Nov7:45
Tue 3 Nov8:10
Wed 4 Nov6:30
Thu 5 Nov2:15
Fri 6 Nov7:30

No timer is running. Want me to add the rest of Thursday?

A person checks their own week

Hours for a client, by person

A team lead gets the team's hours, everyone else their own. Amounts appear if your role sees rates.

How many hours did we log for Atlas Architects in October, by person?

list_clients(search: "Atlas")

generate_summary_report(dateRangeStart: "2026-10-01", dateRangeEnd: "2026-10-31", clientIds: [3], groupBy: "USER")

45.25 h for Atlas Architects in October:

PersonHoursShare
Ola18.541%
Kuba1431%
Marta8.2518%
Tom4.510%
A team lead asks for a client report

Projects past 80% of their budget

Team leads and admins get each budget with the hours used so far, the same figures the Projects page shows.

Which projects are past 80% of their budget?

list_projects()

Two are past 80%:

Website refreshAtlas Architects44 of 50 h88%
WayfindingCity Library83 of 80 h this month104%

Spring labels is next, at 72% of 60 h.

A team lead asks about budgets

Fix yesterday's entry

The agent changes only your own entries from the last 7 days. Older ones, and other people's, you fix in the app.

Yesterday's Brand book entry should be 1.5 h, not 2.

get_time_entries(start: "yesterday", end: "yesterday")

Found it: Brand book for Fennel & Co, Mon 9 Nov, 10:00 to 12:00, "Logo files for print". I'll make it 10:00 to 11:30. OK?

ok

update_time_entry(timeEntryId: 4178, durationHours: 1.5)

Done. Monday's Brand book entry is now 10:00 to 11:30.

A person corrects their own entry

Connect Claude Code in three steps

Claude Code takes one command. Everyone in the studio connects with their own token, so the agent works with their role.

  1. In Oretta, open Account and scroll to API tokens. Name the token after the device, like "Claude Code, MacBook", click Create token and copy it. Oretta shows it only once.

    API tokens

    1. Create a token
    2. Copy the command
    3. Paste it in the terminal

    Token nameClaude Code, MacBookCreate token

    Copy it now, it won't be shown again.

    (the token, hidden here)

    Using Claude Code? Connect it with:

    claude mcp add --transport http oretta https://oretta.app/mcp --header "Authorization: Bearer (your token)"

    Account > API tokens, right after creating a token. The token itself is hidden here.
  2. Run the command Oretta shows under the token, or this one with your token in place of YOUR_TOKEN. Add --scope user to use Oretta in every project, not only the folder you're in.

    claude mcp add --transport http oretta https://oretta.app/mcp --header "Authorization: Bearer YOUR_TOKEN"
  3. Start Claude Code and type /mcp to check that oretta is connected. Then ask something, like "What did I log this week?"

    Mon 9 NovTotal 5:15

    • Logo files for printBrand book · Fennel & Co10:00-11:301:30
    • Label dielines, second roundSpring labels · Sowa Brewery11:45-13:001:15
    • Sign-in screen mockupsWebsite refresh · Atlas Architects14:00-16:302:30
    The entry from the top of this page on Oretta's Time page, with the rest of that Monday.

Connect other AI clients

They all connect to the same server with the same kind of token, and each setup below keeps the token out of the project folder.

Claude desktop and web app

In Claude, open Customize, then Connectors, click + Add and pick Add custom connector. Enter https://oretta.app/mcp, choose No sign-in, and under Request headers add authorization with the value Bearer YOUR_TOKEN.

Request headers are in beta, so your account may not have them yet. On Team and Enterprise plans an Owner adds connectors for the whole organization, which would share one person's token with everyone. Use Claude Code there.

Cursor

Add this to .cursor/mcp.json in a project, or to ~/.cursor/mcp.json for all of them. Cursor fills in the token from the ORETTA_TOKEN environment variable.

{
  "mcpServers": {
    "oretta": {
      "url": "https://oretta.app/mcp",
      "headers": {
        "Authorization": "Bearer ${env:ORETTA_TOKEN}"
      }
    }
  }
}

VS Code with GitHub Copilot

Add this to .vscode/mcp.json and use Copilot in agent mode. VS Code asks for the token when the server first starts, so it never goes into the file.

{
  "inputs": [
    {
      "type": "promptString",
      "id": "oretta-token",
      "description": "Oretta API token",
      "password": true
    }
  ],
  "servers": {
    "oretta": {
      "type": "http",
      "url": "https://oretta.app/mcp",
      "headers": {
        "Authorization": "Bearer ${input:oretta-token}"
      }
    }
  }
}

OpenAI Codex CLI

Codex reads the token from the ORETTA_TOKEN environment variable, so set it in your shell first.

codex mcp add oretta --url https://oretta.app/mcp --bearer-token-env-var ORETTA_TOKEN

Gemini CLI

Set ORETTA_TOKEN first. Your shell puts its value into the header and Gemini CLI saves it in its settings, so --scope user keeps it in your home folder instead of the project.

gemini mcp add --scope user --transport http --header "Authorization: Bearer $ORETTA_TOKEN" oretta https://oretta.app/mcp

Any other MCP client

A client that connects to remote MCP servers over Streamable HTTP and can send a header should work with these settings:

Server URL
https://oretta.app/mcp
Transport
Streamable HTTP, stateless
Header
Authorization: Bearer YOUR_TOKEN
Sign-in
None yet. The token tells Oretta who you are.

ChatGPT

Not yet. ChatGPT's connectors expect an OAuth sign-in, and Oretta's server works with personal tokens for now.

What the agent can and can't do

Ten tools: eight read and two write. The eight carry the MCP read-only annotation, so a client can tell them apart from the two that write.

ToolWhat it doesAccess
get_current_userWho you are: name, role, and whether you can see other people's entriesReads
list_clientsClients, searchable by nameReads
list_projectsProjects with their client and tasks. Team leads and admins also get each budget and the hours usedReads
list_tagsTags, searchable by nameReads
get_time_entriesEntries filtered by date, project, client, description or person. By default, your own from the last 7 daysReads
get_running_timerWhether your timer is running, so the agent doesn't log the same time twiceReads
generate_summary_reportHours for a date range grouped by project, client, task, tag, person, description, day, week or month. Amounts per currency if your role sees rates; admins also get cost and marginReads
generate_detailed_reportEvery entry in a date range with client, project, description and time, and the amount if your role sees ratesReads
add_time_entryAdds a new entry and warns if it overlaps one you already have. Admins can add one for someone elseWrites
update_time_entryChanges one of your own entries started in the last 7 daysWrites
  • There's no delete tool, and no tool changes clients, projects, people or rates.
  • Before it adds or changes an entry, the agent is told to show you a summary and wait for your yes.
  • It edits only your own entries started in the last 7 days. Older ones, and other people's, you change in the app.
  • When a new entry overlaps one you already logged, add_time_entry says so.
  • Permissions are enforced in the database: you see your own entries, a team lead sees the team, only admins see rates and costs. A token never sees more than the person who made it.
  1. Your tokenSent with every request. Oretta stores only a hash of it.
  2. Your roleUser, team lead or admin, as set in your studio.
  3. Database rulesChecked on every query, the same as in the app.
  4. What the agent getsOnly what you could open in Oretta yourself.
Each request is checked the same way as when you open Oretta yourself.

One token per person and device

Each person creates their own token under Account > API tokens. The agent then acts as that person, with their role, so there's no shared studio key.

Make one per device or client and name it so you'll recognize it later ("Cursor, studio iMac"). Oretta shows a token once and stores only a hash of it. If you lose one, or a laptop goes missing, delete that token under API tokens and create a new one. Whatever used the old token loses access on its next request.

Keep tokens out of shared repositories. Every setup on this page stores the token outside the project folder, in an environment variable or in the client's own settings. The same kind of token also connects the Chrome extension.

What reaches your AI provider

When you ask something, the agent calls a tool and gets back what your role can see: client and project names, entries, and amounts if your role sees rates. That reply goes to the AI provider behind your client (Anthropic, if you use Claude), under your own agreement with that provider.

Oretta sends nothing to AI providers on its own. The server gets only the tool calls and what the agent fills in, like an entry's description. It never sees the rest of your conversation and keeps no session between requests.

The privacy policy has the details, and the subprocessor list names Anthropic as your provider, not Oretta's.

Questions

Is the MCP server included in my plan?
Yes. Every feature is in every plan, including Free for one person.
Which AI clients work with Oretta?
Claude Code, the Claude desktop and web app (where custom request headers are available), Cursor, VS Code with GitHub Copilot, OpenAI Codex CLI and Gemini CLI. Any other MCP client that connects to a remote server over Streamable HTTP and sends an Authorization header should work too.
Can the agent delete my time entries?
No. There's no delete tool. The agent can add entries and change your own entries from the last 7 days, and it's told to ask you first.
Can my team's agents see rates?
An agent sees what its owner sees. Permissions are enforced in the database: a person sees their own entries, a team lead sees the team, and only admins see rates and costs.
Does it work with ChatGPT?
Not yet. ChatGPT's connectors expect an OAuth sign-in, and Oretta's server works with personal tokens for now.
I lost my token. What now?
Delete it under Account > API tokens and create a new one. Oretta stores only a hash, so it can't show the old token again.
Can I sign in with OAuth, or find Oretta in Claude's connector directory?
Not yet. For now you connect with a personal token, as shown above.
v1.10.2