Available tools
All 41 Hoursmith MCP tools, including nine read-only payout tools, grouped by resource with permissions and destructive-action safeguards.
The Hoursmith MCP server exposes 41 tools, grouped by resource. Each tool maps to exactly one REST API call, and runs with the permissions of the membership that minted your token — so a tool only works if your role allows the underlying API call.
The tool list is the same whether your client connects over stdio or Streamable HTTP.
This list describes published 0.11.0, npm's latest as checked September 24, 2026.
Upgrade an older installation to obtain the payout tools. Source version 0.12.0 is not yet
published; see Payout integrations.
5 of these tools are destructive — they delete or archive data. They're flagged below. As a
safety net, each one requires an explicit confirm: true argument, so your assistant can't run
them by accident. Every tool also carries standard MCP hints (read-only / destructive / idempotent)
so capable clients can warn you before a write. Still, review what your assistant is about to do
before you approve it. See Security.
Identity
Read-only details about you and your workspace.
| Tool | API call | Notes |
|---|---|---|
get_me | GET /me | The authenticated member. |
get_organization | GET /organization | Your workspace/organization. |
Clients
| Tool | API call | Notes |
|---|---|---|
list_clients | GET /clients | |
get_client | GET /clients/{id} | |
create_client | POST /clients | Needs Manager+. |
update_client | PATCH /clients/{id} | Needs Manager+. |
delete_client ⚠️ | DELETE /clients/{id} | Destructive. Refuses if the client has active projects or invoices. |
Projects
| Tool | API call | Notes |
|---|---|---|
list_projects | GET /projects | |
get_project | GET /projects/{id} | |
create_project | POST /projects | Needs Manager+. Hourly rates apply only to Hourly projects; Fixed fee needs a contract value and may use an effort-hours budget. |
update_project | PATCH /projects/{id} | Needs Manager+. Can reconcile fixedFeePriorInvoicedAmount for an existing/imported Fixed fee project. |
archive_project ⚠️ | POST /projects/{id}/archive | Destructive (soft-delete). Needs Manager+. |
Tasks
| Tool | API call | Notes |
|---|---|---|
list_tasks | GET /tasks | Returns effective billability: Fixed fee and Non-billable project work is always false. |
get_task | GET /tasks/{id} | Returns effective project-policy billability. |
create_task | POST /tasks | |
update_task | PATCH /tasks/{id} | |
archive_task ⚠️ | POST /tasks/{id}/archive | Destructive (soft-delete). |
Time entries
| Tool | API call | Notes |
|---|---|---|
list_time_entries | GET /time-entries | Filter by the day an entry is filed under or by when the work started. Billability filters follow current project policy. |
get_time_entry | GET /time-entries/{id} | Fixed fee and Non-billable project work is returned as non-billable. |
get_running_timer | GET /time-entries/running | Your currently running timer, if any. |
create_time_entry | POST /time-entries | Logs a time entry, from a duration or a start and end time. |
update_time_entry | PATCH /time-entries/{id} | Can add, change, or clear an entry's start and end times. |
delete_time_entry ⚠️ | DELETE /time-entries/{id} | Destructive. Fails on already-invoiced entries. |
Logging when the work happened. Ask for "log 9am to 10:30 on the Acme redesign" and the assistant sends a start and end time instead of a duration — Hoursmith works the duration out. It's both times or neither: a start with no end is what a running timer looks like, and is refused. To find work by when it happened rather than which day it's filed under, ask for a window — "what did I work on between 9 and noon yesterday?" — which filters on the start time. Entries logged as a plain duration have no start time and won't appear in those results.
Fixed-fee project rules in MCP 0.9
- Omit
hourlyRateforFIXEDandNON_BILLABLE; it is required or inherited only forHOURLY. - A
FIXEDproject requiresfixedFeeAmount, can use an optionalbudgetHourseffort cap, and cannot usebudgetAmount. - For an older/imported fixed-fee project, call
update_projectwithfixedFeePriorInvoicedAmountbefore its contract balance can be invoiced. Use0when nothing was invoiced previously. - Project reconciliation and money fields are omitted from Member responses;
budgetHoursremains visible because it represents time, not money. - Task and time-entry reads expose effective project policy. Even a locked legacy row that stored
billable: truereads and filters as non-billable after its project becomes Fixed fee or Non-billable.
Expenses
All expense tools need a Manager+ role.
| Tool | API call | Notes |
|---|---|---|
list_expenses | GET /expenses | Needs Manager+. |
get_expense | GET /expenses/{id} | Needs Manager+. |
create_expense | POST /expenses | Needs Manager+. |
update_expense | PATCH /expenses/{id} | Needs Manager+. |
delete_expense ⚠️ | DELETE /expenses/{id} | Destructive. Needs Manager+. |
Invoices (read-only)
There is no write capability for invoices via MCP — you can read them, but you can't create, edit, or send them. This mirrors the REST API.
| Tool | API call | Notes |
|---|---|---|
list_invoices | GET /invoices | Needs Manager+. |
get_invoice | GET /invoices/{id} | Needs Manager+. |
Members (read-only)
There is no write capability for members via MCP — you can't invite, edit, or remove teammates. This mirrors the REST API.
| Tool | API call | Notes |
|---|---|---|
list_members | GET /members | |
get_member | GET /members/{id} |
Payouts (read-only, since 0.11.0)
All nine tools require an Owner/Admin token with read scope. Managers and Members cannot access payout data, including their own. Agency is required for active compensation queries; Studio retains finalized bill/payment history after downgrade, but drafts require Agency.
| Tool | API call | Purpose |
|---|---|---|
list_team_payees | GET /team-payouts/payees | Configured compensation recipients and dated rates. |
get_team_payee | GET /team-payouts/payees/{id} | A recipient's private rate history and credits. |
get_team_payout_summary | GET /team-payouts/summary | Currency-separated estimates and balances. |
list_team_unpaid_time | GET /team-payouts/unpaid-time | Priced, unclaimed work awaiting bill review. |
list_team_bills | GET /team-payouts/bills | Internal bills, including unpaid/overdue filters. |
get_team_bill | GET /team-payouts/bills/{id} | Frozen lines, dates, and settlement balances. |
list_team_payments | GET /team-payouts/payments | External payment records and reversals. |
get_team_payment | GET /team-payouts/payments/{id} | Actual transfer and bill-currency settlement evidence. |
get_team_profitability | GET /team-payouts/profitability | Work profitability or cash movement, with original currencies and incomplete-data indicators. |
Use payout payee IDs, not membership IDs; the returned userId links to the ordinary member.
Outstanding balances are current even when the summary period filters estimates and payments.
For already-approved unpaid work, query bills with outstandingOnly=true, not unpaid time.
Keep currency totals separate and use exact decimal strings. No tool approves a bill, sends an
email, or moves money.
Collection filters (since 0.10.0)
Core list tools retain singular filters and add bounded plural arrays such as statuses,
clientIds, and projectIds. Singular/plural values merge and deduplicate into repeated REST
parameters. Use sort: "relevance" only with a non-empty search; keep filters/sort unchanged
while following opaque cursors. Each tool exposes only its documented filters.
The 5 destructive tools
These are the only tools that remove or archive data, and each one requires confirm: true —
the call is rejected without it, so an assistant can't delete something on a stray instruction:
delete_client— refuses if the client has active projects or invoices.archive_project— soft-delete; needs Manager+.archive_task— soft-delete.delete_time_entry— fails on already-invoiced entries.delete_expense— needs Manager+.
Roles cascade: a Member token can read most things and write its own time and the projects it's on, but can't touch invoices, expenses, or clients. A Manager token can read client financial data and write clients, projects, tasks, and time, but cannot access private Payouts. See Permissions & plans and Roles explained.
Configure Odin and HTTP clients
Connect Odin or any URL-based MCP client to Hoursmith with Streamable HTTP, a local /mcp/ URL, and an API-key header.
Example prompts
Real things you can ask your AI assistant once Hoursmith MCP is connected — log time, look up unpaid invoices, create a client, and more.