UseHourly
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| USEHOURLY_API_TOKEN | Yes | UseHourly API token created on Account > AI assistants (read-only or read and write, with an expiry). Sent to the remote MCP server at https://usehourly.app/api/mcp (Streamable HTTP) as an `Authorization: Bearer <your token>` header in your MCP client settings. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| whoamiA | The signed-in account (name, email, business details printed on invoices) and what this token may do (read or write). Call this first to confirm the connection. |
| list_projectsA | Every active project with its client and hourly rate. Use the "label" ("Client / Project") or the id wherever a project is asked for. Set include_archived to also see archived ones. |
| list_clientsA | Active clients, each with its active projects. |
| get_clientA | One client's billing details: full legal name and address as printed on invoices. |
| list_entriesA | Time entries between two dates (inclusive), newest first, with totals per project and per day. Optionally limited to one project. Use this for 'what did I log last week' and to check a day before adding time. |
| project_totalsB | Logged hours per project: all time and within a date range (for example this month). |
| get_running_timerA | The timer that is running now, with elapsed minutes, or null when none is running. |
| annual_reportA | One calendar year: hours and earnings by quarter, month, client and project, plus invoices issued and paid (cash and accrual views). |
| list_invoicesA | Invoice history (newest 200 at most). Filter by text, client, paid status or issue-date range. |
| get_invoiceA | The frozen invoice as issued: seller, client, lines per project and totals. Set include_detail for the per-entry breakdown. Logos are left out. |
| next_invoice_numberB | The suggested next invoice number for a year, such as INV-2026-004. |
| parse_durationA | Turn text like "1h30", "1:30" or "2.5" into whole minutes, the way UseHourly reads it. |
| log_timeA | Add one time entry: a project, a date, how long, and what was done. Give minutes or a duration text. This adds a new entry; it never merges with an existing one. Check list_entries first if the day may already be logged. |
| log_time_on_daysA | Add the same entry (project, minutes, note) on up to 31 dates. Days that already have time for this project are skipped and reported unless skip_existing is false. |
| set_day_totalsA | Set one project's total minutes for up to 31 days: more than 0 creates or updates that day's single entry, 0 clears it. Days that hold several entries or a running timer are skipped and reported, never merged. A note, when given, is applied to every day written. |
| update_entryA | Change an entry's project, date, minutes or note. Only the fields you pass change. |
| merge_entriesA | Fold several entries (same project, same day) into the first one: minutes are added and notes joined. The others are removed. |
| delete_entryA | Permanently delete one time entry. Confirm with the user before calling this. |
| start_timerA | Start a timer on a project. A timer that is already running is stopped first, so only one runs at a time. |
| stop_timerA | Stop the running timer. Elapsed time is rounded up to the next minute (at least 1). |
| create_clientC | Add a client. Names are unique per account. |
| update_clientA | Rename a client or change the legal name and address printed on its invoices. Only the fields you pass change; the logo is kept. |
| archive_clientA | Hide a client from the lists. Its time and invoices are kept. |
| create_projectB | Add a project under a client, with an hourly rate in dollars and whether it is billable. |
| update_projectA | Rename a project, move it to another client, or change its rate or billable flag. Only the fields you pass change. |
| archive_projectA | Hide a project from the lists. Its time and invoices are kept. |
| unarchive_projectA | Bring an archived project (and its client, if archived) back. |
| create_invoiceA | Issue an invoice for a client from billable time between two dates. Totals are computed on the server from the logged entries (one line per project). The number defaults to the next INV--NNN. This creates a permanent record; confirm the client, period and dates with the user first. |
| mark_invoice_paidA | Record the date an invoice was paid (this matters for cash-basis taxes), or pass null to mark it unpaid again. |
| delete_invoiceA | Permanently delete an invoice record. The time entries stay. Confirm with the user before calling this. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| log_session_time | Turn a description of finished work and how long it took into a UseHourly entry. |
| week_summary | Hours per project and per day for the week starting on a Monday. |
| invoice_client | Review a client's unbilled time and issue an invoice after confirmation. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| projects | Every active project with its client and rate. |
| timer | The running timer, if any. |
TDQS
Scored across 30 tools
Most tools target distinct resources and actions, but the time-entry trio (log_time, log_time_on_days, set_day_totals) overlaps enough that an agent must read carefully to pick correctly, and list_entries/project_totals/annual_report cover similar ground at different scopes. Descriptions do resolve most ambiguity, so boundaries are workable.
Predominantly consistent snake_case verb_noun (list_projects, create_invoice, update_entry, archive_client). A handful of noun-only names (whoami, project_totals, annual_report, next_invoice_number) deviate but remain readable and predictable in intent.
30 tools is on the heavy side for the stated scope and crosses the point where the set starts to feel large. The domain (clients, projects, entries, invoices, timers, reports) does justify many of them, but a few entry-writing tools could plausibly be consolidated.
Covers the full lifecycle: CRUD-ish for clients, projects, entries and invoices plus timers, batch logging, merging, and multiple reporting views. Archive/unarchive, invoice numbering, duration parsing, and paid-tracking round out the surface with no obvious dead ends.