---
title: "Harvest MCP server for AI agents - actionlake"
description: "Give Claude 211 Harvest actions through one MCP server: reports, pto requests, time entries. Your agent never holds the credential. 100,000 calls a month free."
canonical: https://actionlake.com/connectors/harvest
updated: 2026-10-22
---

Connectors · Accounting & finance

# Harvest MCP server for AI agents.

actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to Harvest and the rest of your systems. It gives your agent 211 Harvest actions (93 reads, 90 writes and 28 that wait for a confirmation) and holds the Harvest credential itself, so the agent never does. It paces Harvest's limits and records every call.

[Connect Harvest free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

100,000 free calls a month. No card, no email, no password: press Start a free sandbox on the next screen and keep the key it shows you.

`claude mcp add --transport http actionlake https://connect.actionlake.com/mcp`

the first call

```
do {
  action: "harvest.invoices.list",
  intent: "check which Harvest account is connected"
}
# List all invoices · read · 1 upstream call
```

- 211 actions in one signed file
- 93 read look, never change
- 90 write create and update
- 28 wait for a yes destructive, confirmed first

Set up

## Connect Harvest in three steps.

1. 01
   ### Add actionlake to Claude.
   Run the command once in Claude Code; its consent page can create a free sandbox: 100,000 calls a month, no card. In the Claude app, add a custom connector with the URL below and paste your key on the consent page. Creating a new sandbox from the Claude app is not yet tested by us.
   `https://connect.actionlake.com/mcp`
2. 02
   ### Connect Harvest.
   Header credentials. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead. actionlake stores what you paste write-only, sealed under your tenant's key.
   - `access_token` Harvest access token: a Personal Access Token from https://id.getharvest.com/developers (Create new personal access…
   - `account_id` Harvest Account ID: shown beside the token on https://id.getharvest.com/developers (or returned by…
   ```
   account { op: "connections.requirements", service: "harvest" }
   # free: exactly what to paste, and what is found for you
   ```
3. 03
   ### Make the first call. Check before a write.
   Ask in plain words; Claude picks the action. Before anything changes, `check` validates the call and prices it, for free.
   ```
   do    { action: "harvest.invoices.list" }
   # list all invoices · read · 1 upstream call
   check { action: "harvest.invoices.create", input: { … } }
   # free: inputs, permissions, cost and confirmations, nothing sent
   ```

Harvest at a glance

**Sign-in**

Header credentials. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead.

**You provide**

`access_token` `account_id`

**Limits we pace to**

100 calls per 15 seconds, per connection

**API covered**

Harvest API v2 (REST, documented at help.getharvest.com/api-v2)`api.harvestapp.com`

**Built from**

Harvest's documentation, read 22 October 2026[help.getharvest.com](https://help.getharvest.com/api-v2/)

**Service file**

Version 1.0.0, signed (Ed25519)

**Cached reads**

93 of 93 reads, for up to 5 minutes; a write clears what it affects

**Shared entities**

12, so ask can line Harvest up with your other systems

**Data**

Processed and stored in Sydney, Australia. No US region yet

Capabilities

## What an AI agent can do in Harvest.

211 actions in 48 areas. Every one carries its effect, so a key can allow the reads and hold the rest.

- **93** read look, never change
- **90** write create and update
- **28** destructive wait for a confirmation

1. ### Reports
   14
   14 read · 0 write · 0 destructive
   Expense Categories Report · Clients Report · Expense Detailed Report · Projects Report
2. ### Pto requests
   10
   2 read · 7 write · 1 destructive
   Create a time off request · List all time off requests · Approve a time off request · Approve multiple time off requests
3. ### Time entries
   9
   2 read · 5 write · 2 destructive
   List all time entries · Create a time entry via duration · Update a time entry · Retrieve a time entry
4. ### Invoice messages
   8
   2 read · 5 write · 1 destructive
   Create and send an invoice message · List all messages for an invoice · Mark an open invoice as closed · Mark an open invoice as a draft
5. ### Invoices
   8
   3 read · 4 write · 1 destructive
   List all invoices · Create a free-form invoice · Retrieve an invoice · Update an invoice
6. ### Estimate messages
   7
   1 read · 5 write · 1 destructive
   Create an estimate message · List all messages for an estimate · Mark an open estimate as accepted · Mark an open estimate as declined
7. ### Expenses
   7
   2 read · 4 write · 1 destructive
   List all expenses · Create an expense · Retrieve an expense · Update an expense
8. ### Users
   7
   3 read · 3 write · 1 destructive
   List all users · Retrieve the currently authenticated user · Create a user · Retrieve a user

**40 more areas · 141 actions**

- Saved reports **6**
- Task assignments **6**
- User assignments **6**
- Clients **5**
- Contacts **5**
- Custom roles **5**
- Estimate item categories **5**
- Estimates **5**
- Expense categories **5**
- Invoice item categories **5**
- Notifications **5**
- Projects **5**
- Pto holiday calendars **5**
- Pto types **5**
- Pto work schedules **5**
- Roles **5**
- Tasks **5**
- Pto holiday calendar entries **4**
- Billable rates **3**
- Cost rates **3**
- Gusto sync runs **3**
- Gusto user mappings **3**
- Imports **3**
- Invoice payments **3**
- Notification preferences **3**
- Pto allocations **3**
- Reimbursements **3**
- Approvals **2**
- Company **2**
- E invoicing **2**
- Gusto settings **2**
- Project assignments **2**
- Pto assignments **2**
- Reimbursement settings **2**
- Report exports **2**
- Teammates **2**
- Accounts **1**
- Permissions **1**
- Pto balances **1**
- Tags **1**

Top actions

## The Harvest API, shaped for agents.

The ids your agent types, what each does, and the one name it shares with other systems. 56 of Harvest's 57 action names are shared with at least one other connector, so an agent learns them once.

| Action | What it does | Effect | Same name in |
| --- | --- | --- | --- |
| `harvest.invoices.list` List all invoices | List all invoices. | read | `finance.invoice.list` 101 connectors |
| `harvest.estimates.list` List all estimates | List all estimates. | read | `finance.quote.list` 52 connectors |
| `harvest.expenses.list` List all expenses | List all expenses. | read | `finance.expense.list` 40 connectors |
| `harvest.tasks.list` List all tasks | List all tasks. | read | `work.task.list` 122 connectors |
| `harvest.users.list` List all users | List all users. | read | `identity.user.list` 474 connectors |
| `harvest.projects.list` List all projects | List all projects. | read | `work.project.list` 109 connectors |
| `harvest.time_entries.list` List all time entries | List all time entries. | read | `work.time_entry.list` 59 connectors |
| `harvest.invoices.create` Create a free-form invoice | Create a free-form invoice. | write | `finance.invoice.create` 74 connectors |
| `harvest.roles.list` List all roles | List all roles. | read | `identity.role.list` 184 connectors |
| `harvest.estimates.create` Create an estimate | Create an estimate. | write | `finance.quote.create` 52 connectors |
| `harvest.expenses.create` Create an expense | Create an expense. | write | `finance.expense.create` 36 connectors |
| `harvest.invoices.delete` Delete an invoice | Delete an invoice. | destructive | `finance.invoice.delete` 56 connectors |

Try it

## Prompts to paste into Claude.

Each one names the Harvest actions it will call, so you know what it reads and what it changes before you send it.

1. Read read
   Which Harvest invoices are more than 30 days overdue? Group them by customer with the total owed.
   calls `harvest.invoices.list`
2. Write write
   Create a free-form invoice in Harvest. Show me exactly what you will send before you save it.
   calls `harvest.invoices.create`
3. Across systems read
   For each customer, how many invoices are in Harvest and how many tickets in ConnectWise PSA?
   calls `harvest.invoices.list` `connectwise_manage.tickets.list`

Across your systems

## Harvest, joined to the rest of your business.

One `ask` fetches from Harvest and another system, joins the rows on the same customer on our side, and hands your agent the answer, not every row.

- For each customer, how many invoices are in Harvest and how many tickets in ConnectWise PSA?
  `harvest.invoices.list` + `connectwise_manage.tickets.list`, on `crm.company` · [ConnectWise PSA](https://actionlake.com/connectors/connectwise-psa)
- For each customer, how many invoices are in Harvest and how many tickets in HubSpot CRM?
  `harvest.invoices.list` + `hubspot_crm.tickets.list`, on `crm.company` · [HubSpot CRM](https://actionlake.com/connectors/hubspot-crm)

Also mapped by other connectors `identity.user` **517** `crm.company` **227** `crm.contact` **192** `identity.current_user` **142** `work.project` **116** `identity.role` **107** `work.task` **105** `finance.invoice` **91**

ask

```
ask {
  intent: "for each customer, how many invoices are in Harvest and how many tickets in ConnectWise PSA",
  steps: [
    { action: "harvest.invoices.list", as: "inv", input: {}, limit: 100, max_pages: 5 },
    { action: "connectwise_manage.tickets.list", as: "tix", input: {}, limit: 100, max_pages: 5 },
    { join: {
        left: "inv",
        right: "tix",
        on: "crm.company",
        group_by: "inv.company_name",
        select: ["inv.company_name", "count(inv.id) as invoices", "count(tix.id) as tickets"]
    } }
  ]
}
```

Example. Run it through check first: it validates the steps and prices them, and it is free.

Governance for Harvest

## Destructive actions wait for a yes.

28 Harvest actions are destructive. These are all of them:

- Delete an invoice `harvest.invoices.delete`
- Delete an estimate `harvest.estimates.delete`
- Delete an expense `harvest.expenses.delete`
- Delete a task `harvest.tasks.delete`
- Delete a project `harvest.projects.delete`
- Delete a user `harvest.users.delete`
- Delete a time entry `harvest.time_entries.delete`
- Delete a contact `harvest.contacts.delete`
- Delete a client `harvest.clients.delete`
- Delete a role `harvest.roles.delete`
- Delete an invoice payment `harvest.invoice_payments.delete`
- Delete a time off policy `harvest.pto_types.delete`
- Delete a custom role `harvest.custom_roles.delete`
- Delete a saved report `harvest.saved_reports.delete`
- Disconnect from e-invoicing `harvest.e_invoicing.disconnect`
- Delete an invoice message `harvest.invoice_messages.delete`
- Delete a task assignment `harvest.task_assignments.delete`
- Delete a user assignment `harvest.user_assignments.delete`
- Delete an estimate message `harvest.estimate_messages.delete`
- Delete an expense category `harvest.expense_categories.delete`
- Delete a user mapping `harvest.gusto_user_mappings.delete`
- Delete a holiday calendar `harvest.pto_holiday_calendars.delete`
- Deactivate a work schedule `harvest.pto_work_schedules.deactivate`
- Delete an invoice item category `harvest.invoice_item_categories.delete`
- Delete an estimate item category `harvest.estimate_item_categories.delete`
- Delete a holiday calendar entry `harvest.pto_holiday_calendar_entries.delete`
- Delete a time entry’s external reference `harvest.time_entries.delete_external_reference`
- Cancel a time off request `harvest.pto_requests.cancel`

A destructive action runs only with `confirm: true`. Under the `human` policy the agent cannot confirm for itself: the run stops until a named person approves, in the console or from a signed link in an email. The cap on a key is refused before the call is sent, never after.

do harvest.invoices.delete confirm_policy: **human**

Delete an invoice?

**intent:** the user asked me to delete an invoice

run suspended · waiting for a named person · key _harvest-agent_ cannot confirm itself

In the console, or from an emailed signed link.

a key for this connector

```
account {
  op: "keys.create", name: "harvest-agent",
  allowed_actions: ["harvest.*"], cap_calls: 2000,
  confirm_policy: "human_for_writes",
  approval_rules: [
    { match: "harvest.invoices.delete", approver: "lead@example.com" },
    { match: "harvest.estimates.delete", approver: "lead@example.com" },
    { match: "harvest.expenses.delete", approver: "lead@example.com" }
  ]
}
```

Illustrative. Scoped to Harvest only, capped at 2,000 upstream calls, every write confirmed, and the destructive ones approved by a named person.

Cost

## What Harvest costs on actionlake.

Every Harvest action is one upstream call, the only thing actionlake bills. Searching, `check`, `cost`, `account` and any call Harvest refused with 401, 403, 429 or a 5xx are free. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

- 1 upstream call per action all 211 Harvest actions
- 211 actions page each page of a long list is one call
- 93 reads can be cached a cache hit costs nothing
- 100,000 calls a month, free paid plans from US$49 a month for 250,000

[See pricing](https://actionlake.com/pricing)

Action index

## Every Harvest action.

211 actions by area: the id your agent calls, what it does, and its effect.

**Reports 14**

- `harvest.reports.expenses_categories` Expense Categories Report read
- `harvest.reports.expenses_clients` Clients Report read
- `harvest.reports.expenses_detailed` Expense Detailed Report read
- `harvest.reports.expenses_projects` Projects Report read
- `harvest.reports.expenses_team` Team Report read
- `harvest.reports.generate` Generate a report read
- `harvest.reports.profitability` Profitability Report read
- `harvest.reports.project_budget` Project Budget Report read
- `harvest.reports.time_clients` Clients Report read
- `harvest.reports.time_detailed` Time Detailed Report read
- `harvest.reports.time_projects` Projects Report read
- `harvest.reports.time_tasks` Tasks Report read
- `harvest.reports.time_team` Team Report read
- `harvest.reports.uninvoiced` Uninvoiced Report read

**Pto requests 10**

- `harvest.pto_requests.approve` Approve a time off request write
- `harvest.pto_requests.bulk_approve` Approve multiple time off requests write
- `harvest.pto_requests.bulk_decline` Decline multiple time off requests write
- `harvest.pto_requests.cancel` Cancel a time off request destructive
- `harvest.pto_requests.create` Create a time off request write
- `harvest.pto_requests.decline` Decline a time off request write
- `harvest.pto_requests.get` Retrieve a time off request read
- `harvest.pto_requests.list` List all time off requests read
- `harvest.pto_requests.request_changes` Request changes on a time off request write
- `harvest.pto_requests.update` Update a time off request write

**Time entries 9**

- `harvest.time_entries.create` Create a time entry via duration write
- `harvest.time_entries.create_with_times` Create a time entry via start and end time write
- `harvest.time_entries.delete` Delete a time entry destructive
- `harvest.time_entries.delete_external_reference` Delete a time entry’s external reference destructive
- `harvest.time_entries.get` Retrieve a time entry read
- `harvest.time_entries.list` List all time entries read
- `harvest.time_entries.restart` Restart a stopped time entry write
- `harvest.time_entries.stop` Stop a running time entry write
- `harvest.time_entries.update` Update a time entry write

**Invoice messages 8**

- `harvest.invoice_messages.create` Create and send an invoice message write
- `harvest.invoice_messages.delete` Delete an invoice message destructive
- `harvest.invoice_messages.list` List all messages for an invoice read
- `harvest.invoice_messages.mark_closed` Mark an open invoice as closed write
- `harvest.invoice_messages.mark_draft` Mark an open invoice as a draft write
- `harvest.invoice_messages.mark_sent` Mark a draft invoice as sent write
- `harvest.invoice_messages.preview` Retrieve invoice message subject and body for specific invoice read
- `harvest.invoice_messages.reopen` Re-open a closed invoice write

**Invoices 8**

- `harvest.invoices.create` Create a free-form invoice write
- `harvest.invoices.create_from_tracked` Create an invoice based on tracked time and expenses write
- `harvest.invoices.delete` Delete an invoice destructive
- `harvest.invoices.e_invoice_status` Retrieve an e-invoice status read
- `harvest.invoices.get` Retrieve an invoice read
- `harvest.invoices.list` List all invoices read
- `harvest.invoices.send_e_invoice` Send an e-invoice write
- `harvest.invoices.update` Update an invoice write

**Estimate messages 7**

- `harvest.estimate_messages.create` Create an estimate message write
- `harvest.estimate_messages.delete` Delete an estimate message destructive
- `harvest.estimate_messages.list` List all messages for an estimate read
- `harvest.estimate_messages.mark_accepted` Mark an open estimate as accepted write
- `harvest.estimate_messages.mark_declined` Mark an open estimate as declined write
- `harvest.estimate_messages.mark_sent` Mark a draft estimate as sent write
- `harvest.estimate_messages.reopen` Re-open a closed estimate write

**Expenses 7**

- `harvest.expenses.approve` Approve an expense write
- `harvest.expenses.create` Create an expense write
- `harvest.expenses.delete` Delete an expense destructive
- `harvest.expenses.get` Retrieve an expense read
- `harvest.expenses.list` List all expenses read
- `harvest.expenses.update` Update an expense write
- `harvest.expenses.withdraw` Withdraw an expense write

**Users 7**

- `harvest.users.archive` Archive a user write
- `harvest.users.create` Create a user write
- `harvest.users.delete` Delete a user destructive
- `harvest.users.get` Retrieve a user read
- `harvest.users.list` List all users read
- `harvest.users.me` Retrieve the currently authenticated user read
- `harvest.users.update` Update a user write

**Saved reports 6**

- `harvest.saved_reports.create` Create a saved report write
- `harvest.saved_reports.delete` Delete a saved report destructive
- `harvest.saved_reports.get` Retrieve a saved report read
- `harvest.saved_reports.list` List all saved reports read
- `harvest.saved_reports.run` Run a saved report read
- `harvest.saved_reports.update` Update a saved report write

**Task assignments 6**

- `harvest.task_assignments.create` Create a task assignment write
- `harvest.task_assignments.delete` Delete a task assignment destructive
- `harvest.task_assignments.get` Retrieve a task assignment read
- `harvest.task_assignments.list` List all task assignments read
- `harvest.task_assignments.list_for_project` List all task assignments for a specific project read
- `harvest.task_assignments.update` Update a task assignment write

**User assignments 6**

- `harvest.user_assignments.create` Create a user assignment write
- `harvest.user_assignments.delete` Delete a user assignment destructive
- `harvest.user_assignments.get` Retrieve a user assignment read
- `harvest.user_assignments.list` List all user assignments read
- `harvest.user_assignments.list_for_project` List all user assignments for a specific project read
- `harvest.user_assignments.update` Update a user assignment write

**Clients 5**

- `harvest.clients.create` Create a client write
- `harvest.clients.delete` Delete a client destructive
- `harvest.clients.get` Retrieve a client read
- `harvest.clients.list` List all clients read
- `harvest.clients.update` Update a client write

**Contacts 5**

- `harvest.contacts.create` Create a contact write
- `harvest.contacts.delete` Delete a contact destructive
- `harvest.contacts.get` Retrieve a contact read
- `harvest.contacts.list` List all contacts read
- `harvest.contacts.update` Update a contact write

**Custom roles 5**

- `harvest.custom_roles.create` Create a custom role write
- `harvest.custom_roles.delete` Delete a custom role destructive
- `harvest.custom_roles.get` Retrieve a custom role read
- `harvest.custom_roles.list` List all custom roles read
- `harvest.custom_roles.update` Update a custom role write

**Estimate item categories 5**

- `harvest.estimate_item_categories.create` Create an estimate item category write
- `harvest.estimate_item_categories.delete` Delete an estimate item category destructive
- `harvest.estimate_item_categories.get` Retrieve an estimate item category read
- `harvest.estimate_item_categories.list` List all estimate item categories read
- `harvest.estimate_item_categories.update` Update an estimate item category write

**Estimates 5**

- `harvest.estimates.create` Create an estimate write
- `harvest.estimates.delete` Delete an estimate destructive
- `harvest.estimates.get` Retrieve an estimate read
- `harvest.estimates.list` List all estimates read
- `harvest.estimates.update` Update an estimate write

**Expense categories 5**

- `harvest.expense_categories.create` Create an expense category write
- `harvest.expense_categories.delete` Delete an expense category destructive
- `harvest.expense_categories.get` Retrieve an expense category read
- `harvest.expense_categories.list` List all expense categories read
- `harvest.expense_categories.update` Update an expense category write

**Invoice item categories 5**

- `harvest.invoice_item_categories.create` Create an invoice item category write
- `harvest.invoice_item_categories.delete` Delete an invoice item category destructive
- `harvest.invoice_item_categories.get` Retrieve an invoice item category read
- `harvest.invoice_item_categories.list` List all invoice item categories read
- `harvest.invoice_item_categories.update` Update an invoice item category write

**Notifications 5**

- `harvest.notifications.list` List all notifications read
- `harvest.notifications.mark_all_read` Mark all notifications as read write
- `harvest.notifications.mark_read` Mark a notification as read write
- `harvest.notifications.peek` Peek at notifications read
- `harvest.notifications.unread_count` Retrieve the unread count read

**Projects 5**

- `harvest.projects.create` Create a project write
- `harvest.projects.delete` Delete a project destructive
- `harvest.projects.get` Retrieve a project read
- `harvest.projects.list` List all projects read
- `harvest.projects.update` Update a project write

**Pto holiday calendars 5**

- `harvest.pto_holiday_calendars.create` Create a holiday calendar write
- `harvest.pto_holiday_calendars.delete` Delete a holiday calendar destructive
- `harvest.pto_holiday_calendars.get` Retrieve a holiday calendar read
- `harvest.pto_holiday_calendars.list` List all holiday calendars read
- `harvest.pto_holiday_calendars.update` Update a holiday calendar write

**Pto types 5**

- `harvest.pto_types.create` Create a time off policy write
- `harvest.pto_types.delete` Delete a time off policy destructive
- `harvest.pto_types.get` Retrieve a time off policy read
- `harvest.pto_types.list` List all time off policies read
- `harvest.pto_types.update` Update a time off policy write

**Pto work schedules 5**

- `harvest.pto_work_schedules.create` Create a work schedule write
- `harvest.pto_work_schedules.deactivate` Deactivate a work schedule destructive
- `harvest.pto_work_schedules.get` Retrieve a work schedule read
- `harvest.pto_work_schedules.list` List all work schedules read
- `harvest.pto_work_schedules.update` Update a work schedule write

**Roles 5**

- `harvest.roles.create` Create a role write
- `harvest.roles.delete` Delete a role destructive
- `harvest.roles.get` Retrieve a role read
- `harvest.roles.list` List all roles read
- `harvest.roles.update` Update a role write

**Tasks 5**

- `harvest.tasks.create` Create a task write
- `harvest.tasks.delete` Delete a task destructive
- `harvest.tasks.get` Retrieve a task read
- `harvest.tasks.list` List all tasks read
- `harvest.tasks.update` Update a task write

**Pto holiday calendar entries 4**

- `harvest.pto_holiday_calendar_entries.create` Create an entry in a holiday calendar write
- `harvest.pto_holiday_calendar_entries.delete` Delete a holiday calendar entry destructive
- `harvest.pto_holiday_calendar_entries.list` List entries in a holiday calendar read
- `harvest.pto_holiday_calendar_entries.update` Update a holiday calendar entry write

**Billable rates 3**

- `harvest.billable_rates.create` Create a billable rate write
- `harvest.billable_rates.get` Retrieve a billable rate read
- `harvest.billable_rates.list` List all billable rates for a specific user read

**Cost rates 3**

- `harvest.cost_rates.create` Create a cost rate write
- `harvest.cost_rates.get` Retrieve a cost rate read
- `harvest.cost_rates.list` List all cost rates for a specific user read

**Gusto sync runs 3**

- `harvest.gusto_sync_runs.create` Create a sync run write
- `harvest.gusto_sync_runs.get` Retrieve a sync run read
- `harvest.gusto_sync_runs.preview` Preview a sync run read

**Gusto user mappings 3**

- `harvest.gusto_user_mappings.bulk_create` Bulk create user mappings write
- `harvest.gusto_user_mappings.create` Create a user mapping write
- `harvest.gusto_user_mappings.delete` Delete a user mapping destructive

**Imports 3**

- `harvest.imports.get` Retrieve an import read
- `harvest.imports.list` List all imports read
- `harvest.imports.revert` Revert an import write

**Invoice payments 3**

- `harvest.invoice_payments.create` Create an invoice payment write
- `harvest.invoice_payments.delete` Delete an invoice payment destructive
- `harvest.invoice_payments.list` List all payments for an invoice read

**Notification preferences 3**

- `harvest.notification_preferences.get` Retrieve notification preferences read
- `harvest.notification_preferences.replace` Update notification preferences with PUT write
- `harvest.notification_preferences.update` Update notification preferences write

**Pto allocations 3**

- `harvest.pto_allocations.bulk_update` Bulk update user allocations write
- `harvest.pto_allocations.list` List user allocations read
- `harvest.pto_allocations.update` Update or reset a user allocation write

**Reimbursements 3**

- `harvest.reimbursements.list` List all reimbursements read
- `harvest.reimbursements.reject` Reject a reimbursement write
- `harvest.reimbursements.restore` Restore a reimbursement write

**Approvals 2**

- `harvest.approvals.list` List all approvals read
- `harvest.approvals.submit` Submit a timesheet for approval write

**Company 2**

- `harvest.company.get` Retrieve a company read
- `harvest.company.update` Update a company write

**E invoicing 2**

- `harvest.e_invoicing.disconnect` Disconnect from e-invoicing destructive
- `harvest.e_invoicing.enroll` Enroll in e-invoicing write

**Gusto settings 2**

- `harvest.gusto_settings.get` Retrieve Gusto settings read
- `harvest.gusto_settings.update` Update Gusto settings write

**Project assignments 2**

- `harvest.project_assignments.list` List active project assignments read
- `harvest.project_assignments.list_mine` List active project assignments for the currently authenticated user read

**Pto assignments 2**

- `harvest.pto_assignments.list` List user assignments read
- `harvest.pto_assignments.update` Update user assignments write

**Reimbursement settings 2**

- `harvest.reimbursement_settings.get` Retrieve reimbursement settings read
- `harvest.reimbursement_settings.update` Update reimbursement settings write

**Report exports 2**

- `harvest.report_exports.create` Create a report export write
- `harvest.report_exports.get` Retrieve a report export read

**Teammates 2**

- `harvest.teammates.list` List all assigned teammates for a specific user read
- `harvest.teammates.update` Update a user’s assigned teammates write

**Accounts 1**

- `harvest.accounts.list` Scopes and account access read

**Permissions 1**

- `harvest.permissions.list` List all permissions read

**Pto balances 1**

- `harvest.pto_balances.get` Retrieve time off balances read

**Tags 1**

- `harvest.tags.list` List all tags read

Questions

## The Harvest MCP server, answered.

**Is there a Harvest MCP server for Claude?**

Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 211 Harvest actions across reports, pto requests, time entries and invoice messages, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by Harvest.

**What do I need to connect Harvest?**

Harvest access token: a Personal Access Token from https://id.getharvest.com/developers (Create new personal access… and Harvest Account ID: shown beside the token on https://id.getharvest.com/developers (or returned by…. The free call account { op: "connections.requirements", service: "harvest" } lists exactly what to paste.

**Can an AI agent delete or change things in Harvest?**

Only if its key allows it, and only with an explicit confirmation. 28 Harvest actions are destructive, including delete an invoice, delete an estimate and delete an expense. Each runs only with confirm: true. Under the human confirm policy, or an approval rule on the key, the run waits until a named person approves it.

**Will an AI agent use up my Harvest API limit?**

actionlake paces every call to the limits in the Harvest service file: 100 calls per 15 seconds per connection. Repeated reads are answered from cache (93 Harvest actions can be), which never reaches Harvest.

**What does a Harvest action cost?**

One upstream call, the only unit actionlake bills. A list that pages bills one call per page (211 Harvest actions page). Cache hits, searches, dry runs and calls Harvest refused with 401, 403, 429 or a 5xx are free. The Free plan includes 100,000 calls a month with no card. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

**Which Harvest API does it cover?**

The Harvest API v2 (REST, documented at help.getharvest.com/api-v2) at api.harvestapp.com. It is built from Harvest's documentation as read on 22 October 2026. 211 actions in 48 areas, each one in the signed service file (version 1.0.0).

**Can I combine Harvest with my other systems?**

Yes. ask joins Harvest to ConnectWise PSA or HubSpot CRM on the same customer and returns the answer rather than every row. Harvest maps crm.company, which 227 other connectors also map.

**Does actionlake keep my Harvest data, and where?**

actionlake processes and stores data in Sydney, Australia; there is no US region yet. Reads may be cached for up to 5 minutes, and a write clears the reads it affects. Each run's request and response is kept, sealed, for your plan's trace window: 1 day on Free, 3 days on Starter, 7 days on Pro, 14 days on Team, 30 days on Business and 30 days on Enterprise. Your Harvest credential is sealed under your tenant's key, never logged and never returned. Your traffic is not used to train models.

**Which AI clients can use it?**

Claude Code, tested by us end to end, and the Claude app as a custom connector, tested by us with an existing key. Other MCP clients that support remote servers over Streamable HTTP (MCP revisions 2025-06-18 and 2025-11-25) and OAuth dynamic client registration, or a bearer header, should connect the same way; we have not tested them. Or plain REST, under the same action names.

## More connectors like Harvest

Shares the most action names with

- [Zoho Billing 44](https://actionlake.com/connectors/zoho-billing)
- [FreeAgent 41](https://actionlake.com/connectors/freeagent)
- [Jobber 40](https://actionlake.com/connectors/jobber)
- [Smokeball 32](https://actionlake.com/connectors/smokeball)
- [Simpro 31](https://actionlake.com/connectors/simpro)
- [Karbon 24](https://actionlake.com/connectors/karbon)

Joins with, on shared entities

- [HaloPSA 8](https://actionlake.com/connectors/halopsa)
- [Accelo 8](https://actionlake.com/connectors/accelo)
- [Kaseya BMS 8](https://actionlake.com/connectors/kaseya-bms)
- [Teamwork 7](https://actionlake.com/connectors/teamwork)
- [Microsoft Dynamics 365 7](https://actionlake.com/connectors/microsoft-dynamics-365)
- [Productive.io 7](https://actionlake.com/connectors/productive-io)

Browse

- [All Accounting & finance connectors](https://actionlake.com/connectors/category/accounting-and-finance)
- [All connectors](https://actionlake.com/connectors)
- [How actionlake compares](https://actionlake.com/compare)

actionlake is independent. It is not made or endorsed by Harvest; the name is the vendor's own. Counts are from the Harvest service file, version 1.0.0.

## Give your agent Harvest today.

[Connect Harvest free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.

---

Source: https://actionlake.com/connectors/harvest
More: https://actionlake.com/llms.txt
