Harvest MCP by usefulapi
Read time entries, projects, clients, tasks and invoices; log and update tracked time.
Connect it
Settings → Connectors → Add custom connector
URL: https://harvest.usefulapi.io/mcpSettings → Apps & Connectors → Advanced → Developer mode
Create connector with URL: https://harvest.usefulapi.io/mcp{
"mcpServers": {
"harvest": {
"url": "https://harvest.usefulapi.io/mcp"
}
}
}claude mcp add --transport http harvest https://harvest.usefulapi.io/mcp{
"servers": {
"harvest": {
"type": "http",
"url": "https://harvest.usefulapi.io/mcp"
}
}
}20 tools, verified live
harvest_list_time_entriesread-onlyList time entries, optionally filtered by user, project, client, task, date range, running/billed status, or updated-since. Paginated. Harvest REST: GET /time_entries.
harvest_get_time_entryread-onlyRetrieve a single time entry by id. Harvest REST: GET /time_entries/{id}.
harvest_list_projectsread-onlyList projects, optionally filtered by active status or client, or updated-since. Paginated. Harvest REST: GET /projects.
harvest_get_projectread-onlyRetrieve a single project by id. Harvest REST: GET /projects/{id}.
harvest_list_clientsread-onlyList clients, optionally filtered by active status or updated-since. Paginated. Harvest REST: GET /clients.
harvest_get_clientread-onlyRetrieve a single client by id. Harvest REST: GET /clients/{id}.
harvest_list_tasksread-onlyList tasks (the billable/non-billable work categories that can be assigned to projects), optionally filtered by active status or updated-since. Paginated. Harvest REST: GET /tasks.
harvest_list_usersread-onlyList users in the account, optionally filtered by active status or updated-since. Paginated. Harvest REST: GET /users.
harvest_get_current_userread-onlyRetrieve the currently authenticated user (whom the access token belongs to). Harvest REST: GET /users/me.
harvest_list_project_assignmentsread-onlyList the authenticated user's active project assignments — the projects and their assignable tasks the current user can log time against (use this to find the project_id + task_id for harvest_create_time_entry). Paginated. Harvest REST: GET /users/me/project_assignments.
harvest_list_invoicesread-onlyList invoices, optionally filtered by client, project, state, date range, or updated-since. Paginated. Harvest REST: GET /invoices.
harvest_get_invoiceread-onlyRetrieve a single invoice by id, including its line items. Harvest REST: GET /invoices/{id}.
harvest_list_estimatesread-onlyList estimates, optionally filtered by client, state, date range, or updated-since. Paginated. Harvest REST: GET /estimates.
harvest_list_expensesread-onlyList expenses, optionally filtered by user, client, project, date range, billed status, or updated-since. Paginated. Harvest REST: GET /expenses.
harvest_get_companyread-onlyRetrieve the company/account settings for the authenticated account (name, currency, time/date formats, week start, feature flags). Harvest REST: GET /company.
harvest_create_time_entrycan modifyCreate a time entry. Requires project_id, task_id and spent_date. Provide `hours` to log a specific duration; OR provide `started_time` (+ optional `ended_time`) for a timestamped entry; OR omit both to start a running timer (on a timestamp-tracking account). Use harvest_list_project_assignments to find valid project_id + task_id. Harvest REST: POST /time_entries. WRITE — creates data.
harvest_update_time_entrycan modifyUpdate an existing time entry's hours, notes, spent date, or project/task. Only the fields you provide are changed. Harvest REST: PATCH /time_entries/{id}. WRITE — modifies data.
harvest_stop_time_entrycan modifyStop a currently running time entry (no-op error if it is already stopped). Harvest REST: PATCH /time_entries/{id}/stop. WRITE — modifies data.
harvest_restart_time_entrycan modifyRestart a previously stopped time entry, resuming its timer (error if it is already running). Harvest REST: PATCH /time_entries/{id}/restart. WRITE — modifies data.
harvest_delete_time_entrycan modifyPermanently delete a time entry by id. This cannot be undone. Harvest REST: DELETE /time_entries/{id}. WRITE — destroys data.
Alternatives in Finance & Payments
Compare →
PreReasonA
Financial market context for AI agents: macro, rates, bonds, FX, commodities, companies and Bitcoin.
Beancount.ioA
Query, edit, and reconcile a hosted Beancount ledger: BQL, reports, files, and bank imports.
PAPayqrA
European payment QR — SPAYD (CZ/SK) & EPC/GiroCode (SEPA), plus text/WiFi/vCard. Local, free.
ADAdisA
Czech VAT-payer reliability (ADIS / nespolehlivý plátce DPH) + registered bank accounts by DIČ.
CNCnbA
Official ČNB exchange rates — daily & historical CZK vs EUR, USD, 30+ currencies. For accounting.
ISIsirA
Czech insolvency register (ISIR) — active/historical insolvency & bankruptcy by IČO or person.