Harvest MCP by usefulapi

io.usefulapiPublished by usefulapi.ioOfficial publisherv1.36.5Updated Nov 8, 2026

Read time entries, projects, clients, tasks and invoices; log and update tracked time.

The publisher's own server: Ably MCP by usefulapi

VerifiedStreamable HTTPWeb executableProductivity & WorkflowBusiness & Commerce

Overview

AI-generated overview

Hosted Harvest MCP server that lets an assistant read time entries, projects, clients, tasks, invoices and expenses, and log or change tracked time.

What you can do
  • List and retrieve time entries, filtered by user, project, client, task, date range, running or billed status
  • List and retrieve projects, clients, tasks, users and the current user's project assignments
  • List and retrieve invoices with line items, estimates, expenses and company settings
  • Create, update, stop, restart and permanently delete time entries
  • Check monthly tool-call usage, request a missing feature, and manage or cancel a subscription
When to use it
Useful when you want to ask questions about tracked time, unbilled expenses or unpaid invoices in Harvest, or have an assistant log and adjust time entries without opening the Harvest app.
Requirements
Remote MCP endpoint connected by URL only; no local install. Sign-in is via OAuth, and on first connect you supply a Harvest personal access token and Account ID, which the service stores per user. A free plan allows 50 tool calls per month; paid plans raise the limit.
Before you install
Write tools create, change, stop, restart and delete time entries, and deletion cannot be undone; confirm before running them. Your Harvest personal access token and Account ID are given to a third-party hosted service, which then acts on your Harvest account. Paid plans are billed through a payment link, and cancelling does not refund the current period.

Installation

In SourceWeft

  1. Open Harvest MCP by usefulapi in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.usefulapi%2Fharvest/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "harvest-by-usefulapi": {
      "type": "http",
      "url": "https://harvest.usefulapi.io/mcp"
    }
  }
}

README

Harvest MCP by usefulapi

Use your Harvest account from Claude, Cursor, or any MCP client — read time entries, projects, clients, tasks and invoices, and log or update tracked time. Hosted, no local install: connect with your own credentials.

Live endpoint: https://harvest.usefulapi.io/mcp · Homepage: https://usefulapi.io

Connect

  • Claude (claude.ai, Desktop): open Customize → Connectors, click + Add → Add custom connector, and paste https://harvest.usefulapi.io/mcp.
  • Claude Code: claude mcp add --transport http harvest https://harvest.usefulapi.io/mcp, then run /mcp to log in.
  • VS Code: Add to VS Code.
  • Cursor and other clients: add the URL as a remote MCP server:
json
{  "mcpServers": {    "harvest": {      "url": "https://harvest.usefulapi.io/mcp"    }  }}

Add only the URL. Do not add an Authorization header or an API key to the client config: the server signs you in with OAuth, and the login page asks for your Harvest credentials.

Step-by-step setup, where to find your credentials, and FAQ: https://usefulapi.io/harvest/

On first connect you'll provide your Harvest personal access token and Account ID (id.getharvest.com → Developers). It is validated, stored per-user, and scoped to you — no keys in config files.

Tools

ToolTypeWhat it does
harvest_list_time_entriesreadList time entries
harvest_get_time_entryreadGet time entry
harvest_list_projectsreadList projects
harvest_get_projectreadGet project
harvest_list_clientsreadList clients
harvest_get_clientreadGet client
harvest_list_tasksreadList tasks
harvest_list_usersreadList users
harvest_get_current_userreadGet current user
harvest_list_project_assignmentsreadList my project assignments
harvest_list_invoicesreadList invoices
harvest_get_invoicereadGet invoice
harvest_list_estimatesreadList estimates
harvest_list_expensesreadList expenses
harvest_get_companyreadGet company
harvest_create_time_entrywriteCreate time entry
harvest_update_time_entrywriteUpdate time entry
harvest_stop_time_entrywriteStop running time entry
harvest_restart_time_entrywriteRestart stopped time entry
harvest_delete_time_entrywriteDelete time entry
harvest_usage_statusmetaUsage status (free-tier meter)
harvest_request_featuremetaRequest a missing feature
harvest_upgrademetaUpgrade to Pro or Pro+
harvest_cancel_subscriptionmetaCancel the Pro subscription

read tools are read-only; write tools mutate data (clients should confirm them); meta tools report usage, manage your subscription or send a feature request.

Pricing

PlanPriceLimit
Free$050 tool calls / month
Pro$9/mo or $90/yr (2 months free)Unlimited*

*Pro has a fair use limit of 10,000 tool calls a month on this server. For more, write to [email protected].

Pro covers this server only. Subscribe with harvest_upgrade (it returns a Stripe Checkout link). Cancel any time with harvest_cancel_subscription: Pro continues to the end of the paid period, with no refund for the current period, and running harvest_upgrade before then undoes the cancel. Or write to [email protected].

License

MIT — see LICENSE. Documentation only; the server is hosted.

Source: servers/harvest/README.md at commit 4046075

Tools

20

harvest_list_time_entries

List time entries

List time entries, optionally filtered by user, project, client, task, date range, running/billed status, or updated-since. Paginated. Harvest REST: GET /time_entries.

Parameterstofrompagetask_iduser_idper_pageclient_idis_billedis_runningproject_idupdated_since

harvest_get_time_entry

Get time entry

Retrieve a single time entry by id. Harvest REST: GET /time_entries/{id}.

Parameterstime_entry_idrequired

harvest_list_projects

List projects

List projects, optionally filtered by active status or client, or updated-since. Paginated. Harvest REST: GET /projects.

Parameterspageper_pageclient_idis_activeupdated_since

harvest_get_project

Get project

Retrieve a single project by id. Harvest REST: GET /projects/{id}.

Parametersproject_idrequired

harvest_list_clients

List clients

List clients, optionally filtered by active status or updated-since. Paginated. Harvest REST: GET /clients.

Parameterspageper_pageis_activeupdated_since

harvest_get_client

Get client

Retrieve a single client by id. Harvest REST: GET /clients/{id}.

Parametersclient_idrequired

harvest_list_tasks

List tasks

List 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.

Parameterspageper_pageis_activeupdated_since

harvest_list_users

List users

List users in the account, optionally filtered by active status or updated-since. Paginated. Harvest REST: GET /users.

Parameterspageper_pageis_activeupdated_since

harvest_get_current_user

Get current user

Retrieve the currently authenticated user (whom the access token belongs to). Harvest REST: GET /users/me.

Takes no parameters.

harvest_list_project_assignments

List my project assignments

List 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.

Parameterspageper_page

harvest_list_invoices

List invoices

List invoices, optionally filtered by client, project, state, date range, or updated-since. Paginated. Harvest REST: GET /invoices.

Parameterstofrompagestateper_pageclient_idproject_idupdated_since

harvest_get_invoice

Get invoice

Retrieve a single invoice by id, including its line items. Harvest REST: GET /invoices/{id}.

Parametersinvoice_idrequired

harvest_list_estimates

List estimates

List estimates, optionally filtered by client, state, date range, or updated-since. Paginated. Harvest REST: GET /estimates.

Parameterstofrompagestateper_pageclient_idupdated_since

harvest_list_expenses

List expenses

List expenses, optionally filtered by user, client, project, date range, billed status, or updated-since. Paginated. Harvest REST: GET /expenses.

Parameterstofrompageuser_idper_pageclient_idis_billedproject_idupdated_since

harvest_get_company

Get company

Retrieve the company/account settings for the authenticated account (name, currency, time/date formats, week start, feature flags). Harvest REST: GET /company.

Takes no parameters.

harvest_create_time_entry

Create time entry

Create 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.

Parametershoursnotestask_idrequireduser_idended_timeproject_idrequiredspent_daterequiredstarted_time

harvest_update_time_entry

Update time entry

Update 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.

Parametershoursnotestask_idended_timeproject_idspent_datestarted_timetime_entry_idrequired

harvest_stop_time_entry

Stop running time entry

Stop a currently running time entry (no-op error if it is already stopped). Harvest REST: PATCH /time_entries/{id}/stop. WRITE — modifies data.

Parameterstime_entry_idrequired

harvest_restart_time_entry

Restart stopped time entry

Restart a previously stopped time entry, resuming its timer (error if it is already running). Harvest REST: PATCH /time_entries/{id}/restart. WRITE — modifies data.

Parameterstime_entry_idrequired

harvest_delete_time_entry

Delete time entry

Permanently delete a time entry by id. This cannot be undone. Harvest REST: DELETE /time_entries/{id}. WRITE — destroys data.

Parameterstime_entry_idrequired

Version history

22
  1. v1.36.5LatestNov 8, 2026
  2. v1.36.4Nov 7, 2026
  3. v1.35.3Nov 5, 2026
  4. v1.35.2Nov 5, 2026
  5. v1.35.1Nov 4, 2026
  6. v1.35.0Nov 3, 2026
  7. v1.34.1Nov 3, 2026
  8. v1.33.0Nov 1, 2026
  9. v1.31.0Oct 31, 2026
  10. v1.30.0Oct 31, 2026
  11. v1.29.2Oct 30, 2026
  12. v1.29.0Oct 30, 2026
  13. v1.24.0Oct 26, 2026
  14. v1.21.3Oct 25, 2026
  15. v1.21.0Oct 25, 2026
  16. v1.20.0Oct 24, 2026
  17. v1.17.0Oct 23, 2026
  18. v1.16.4Oct 22, 2026
  19. v1.16.3Oct 21, 2026
  20. v1.11.1Oct 9, 2026
  21. v1.10.0Oct 9, 2026
  22. v1.0.0Sep 16, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

Other Usefulapi integrations