Skip to content

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.

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
  • 211actionsin one signed file
  • 93readlook, never change
  • 90writecreate and update
  • 28wait for a yesdestructive, 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_tokenHarvest access token: a Personal Access Token from https://id.getharvest.com/developers (Create new personal access…
    • account_idHarvest 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 callcheck { 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_tokenaccount_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 2026help.getharvest.com
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.

  • 93readlook, never change
  • 90writecreate and update
  • 28destructivewait 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.

ActionWhat it doesEffectSame name in
harvest.invoices.listList all invoicesList all invoices.readfinance.invoice.list101 connectors
harvest.estimates.listList all estimatesList all estimates.readfinance.quote.list52 connectors
harvest.expenses.listList all expensesList all expenses.readfinance.expense.list40 connectors
harvest.tasks.listList all tasksList all tasks.readwork.task.list122 connectors
harvest.users.listList all usersList all users.readidentity.user.list474 connectors
harvest.projects.listList all projectsList all projects.readwork.project.list109 connectors
harvest.time_entries.listList all time entriesList all time entries.readwork.time_entry.list59 connectors
harvest.invoices.createCreate a free-form invoiceCreate a free-form invoice.writefinance.invoice.create74 connectors
harvest.roles.listList all rolesList all roles.readidentity.role.list184 connectors
harvest.estimates.createCreate an estimateCreate an estimate.writefinance.quote.create52 connectors
harvest.expenses.createCreate an expenseCreate an expense.writefinance.expense.create36 connectors
harvest.invoices.deleteDelete an invoiceDelete an invoice.destructivefinance.invoice.delete56 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. Readread

    Which Harvest invoices are more than 30 days overdue? Group them by customer with the total owed.

    callsharvest.invoices.list

  2. Writewrite

    Create a free-form invoice in Harvest. Show me exactly what you will send before you save it.

    callsharvest.invoices.create

  3. Across systemsread

    For each customer, how many invoices are in Harvest and how many tickets in ConnectWise PSA?

    callsharvest.invoices.listconnectwise_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

  • 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

Also mapped by other connectorsidentity.user 517crm.company 227crm.contact 192identity.current_user 142work.project 116identity.role 107work.task 105finance.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 invoiceharvest.invoices.delete
  • Delete an estimateharvest.estimates.delete
  • Delete an expenseharvest.expenses.delete
  • Delete a taskharvest.tasks.delete
  • Delete a projectharvest.projects.delete
  • Delete a userharvest.users.delete
  • Delete a time entryharvest.time_entries.delete
  • Delete a contactharvest.contacts.delete
  • Delete a clientharvest.clients.delete
  • Delete a roleharvest.roles.delete
  • Delete an invoice paymentharvest.invoice_payments.delete
  • Delete a time off policyharvest.pto_types.delete
  • Delete a custom roleharvest.custom_roles.delete
  • Delete a saved reportharvest.saved_reports.delete
  • Disconnect from e-invoicingharvest.e_invoicing.disconnect
  • Delete an invoice messageharvest.invoice_messages.delete
  • Delete a task assignmentharvest.task_assignments.delete
  • Delete a user assignmentharvest.user_assignments.delete
  • Delete an estimate messageharvest.estimate_messages.delete
  • Delete an expense categoryharvest.expense_categories.delete
  • Delete a user mappingharvest.gusto_user_mappings.delete
  • Delete a holiday calendarharvest.pto_holiday_calendars.delete
  • Deactivate a work scheduleharvest.pto_work_schedules.deactivate
  • Delete an invoice item categoryharvest.invoice_item_categories.delete
  • Delete an estimate item categoryharvest.estimate_item_categories.delete
  • Delete a holiday calendar entryharvest.pto_holiday_calendar_entries.delete
  • Delete a time entry’s external referenceharvest.time_entries.delete_external_reference
  • Cancel a time off requestharvest.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.

doharvest.invoices.deleteconfirm_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: "[email protected]" },    { match: "harvest.estimates.delete", approver: "[email protected]" },    { match: "harvest.expenses.delete", approver: "[email protected]" }  ]}
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.

  • 1upstream call per actionall 211 Harvest actions
  • 211actions pageeach page of a long list is one call
  • 93reads can be cacheda cache hit costs nothing
  • 100,000calls a month, freepaid plans from US$49 a month for 250,000

See pricing

Action index

Every Harvest action.

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

Reports14
  • harvest.reports.expenses_categoriesExpense Categories Reportread
  • harvest.reports.expenses_clientsClients Reportread
  • harvest.reports.expenses_detailedExpense Detailed Reportread
  • harvest.reports.expenses_projectsProjects Reportread
  • harvest.reports.expenses_teamTeam Reportread
  • harvest.reports.generateGenerate a reportread
  • harvest.reports.profitabilityProfitability Reportread
  • harvest.reports.project_budgetProject Budget Reportread
  • harvest.reports.time_clientsClients Reportread
  • harvest.reports.time_detailedTime Detailed Reportread
  • harvest.reports.time_projectsProjects Reportread
  • harvest.reports.time_tasksTasks Reportread
  • harvest.reports.time_teamTeam Reportread
  • harvest.reports.uninvoicedUninvoiced Reportread
Pto requests10
  • harvest.pto_requests.approveApprove a time off requestwrite
  • harvest.pto_requests.bulk_approveApprove multiple time off requestswrite
  • harvest.pto_requests.bulk_declineDecline multiple time off requestswrite
  • harvest.pto_requests.cancelCancel a time off requestdestructive
  • harvest.pto_requests.createCreate a time off requestwrite
  • harvest.pto_requests.declineDecline a time off requestwrite
  • harvest.pto_requests.getRetrieve a time off requestread
  • harvest.pto_requests.listList all time off requestsread
  • harvest.pto_requests.request_changesRequest changes on a time off requestwrite
  • harvest.pto_requests.updateUpdate a time off requestwrite
Time entries9
  • harvest.time_entries.createCreate a time entry via durationwrite
  • harvest.time_entries.create_with_timesCreate a time entry via start and end timewrite
  • harvest.time_entries.deleteDelete a time entrydestructive
  • harvest.time_entries.delete_external_referenceDelete a time entry’s external referencedestructive
  • harvest.time_entries.getRetrieve a time entryread
  • harvest.time_entries.listList all time entriesread
  • harvest.time_entries.restartRestart a stopped time entrywrite
  • harvest.time_entries.stopStop a running time entrywrite
  • harvest.time_entries.updateUpdate a time entrywrite
Invoice messages8
  • harvest.invoice_messages.createCreate and send an invoice messagewrite
  • harvest.invoice_messages.deleteDelete an invoice messagedestructive
  • harvest.invoice_messages.listList all messages for an invoiceread
  • harvest.invoice_messages.mark_closedMark an open invoice as closedwrite
  • harvest.invoice_messages.mark_draftMark an open invoice as a draftwrite
  • harvest.invoice_messages.mark_sentMark a draft invoice as sentwrite
  • harvest.invoice_messages.previewRetrieve invoice message subject and body for specific invoiceread
  • harvest.invoice_messages.reopenRe-open a closed invoicewrite
Invoices8
  • harvest.invoices.createCreate a free-form invoicewrite
  • harvest.invoices.create_from_trackedCreate an invoice based on tracked time and expenseswrite
  • harvest.invoices.deleteDelete an invoicedestructive
  • harvest.invoices.e_invoice_statusRetrieve an e-invoice statusread
  • harvest.invoices.getRetrieve an invoiceread
  • harvest.invoices.listList all invoicesread
  • harvest.invoices.send_e_invoiceSend an e-invoicewrite
  • harvest.invoices.updateUpdate an invoicewrite
Estimate messages7
  • harvest.estimate_messages.createCreate an estimate messagewrite
  • harvest.estimate_messages.deleteDelete an estimate messagedestructive
  • harvest.estimate_messages.listList all messages for an estimateread
  • harvest.estimate_messages.mark_acceptedMark an open estimate as acceptedwrite
  • harvest.estimate_messages.mark_declinedMark an open estimate as declinedwrite
  • harvest.estimate_messages.mark_sentMark a draft estimate as sentwrite
  • harvest.estimate_messages.reopenRe-open a closed estimatewrite
Expenses7
  • harvest.expenses.approveApprove an expensewrite
  • harvest.expenses.createCreate an expensewrite
  • harvest.expenses.deleteDelete an expensedestructive
  • harvest.expenses.getRetrieve an expenseread
  • harvest.expenses.listList all expensesread
  • harvest.expenses.updateUpdate an expensewrite
  • harvest.expenses.withdrawWithdraw an expensewrite
Users7
  • harvest.users.archiveArchive a userwrite
  • harvest.users.createCreate a userwrite
  • harvest.users.deleteDelete a userdestructive
  • harvest.users.getRetrieve a userread
  • harvest.users.listList all usersread
  • harvest.users.meRetrieve the currently authenticated userread
  • harvest.users.updateUpdate a userwrite
Saved reports6
  • harvest.saved_reports.createCreate a saved reportwrite
  • harvest.saved_reports.deleteDelete a saved reportdestructive
  • harvest.saved_reports.getRetrieve a saved reportread
  • harvest.saved_reports.listList all saved reportsread
  • harvest.saved_reports.runRun a saved reportread
  • harvest.saved_reports.updateUpdate a saved reportwrite
Task assignments6
  • harvest.task_assignments.createCreate a task assignmentwrite
  • harvest.task_assignments.deleteDelete a task assignmentdestructive
  • harvest.task_assignments.getRetrieve a task assignmentread
  • harvest.task_assignments.listList all task assignmentsread
  • harvest.task_assignments.list_for_projectList all task assignments for a specific projectread
  • harvest.task_assignments.updateUpdate a task assignmentwrite
User assignments6
  • harvest.user_assignments.createCreate a user assignmentwrite
  • harvest.user_assignments.deleteDelete a user assignmentdestructive
  • harvest.user_assignments.getRetrieve a user assignmentread
  • harvest.user_assignments.listList all user assignmentsread
  • harvest.user_assignments.list_for_projectList all user assignments for a specific projectread
  • harvest.user_assignments.updateUpdate a user assignmentwrite
Clients5
  • harvest.clients.createCreate a clientwrite
  • harvest.clients.deleteDelete a clientdestructive
  • harvest.clients.getRetrieve a clientread
  • harvest.clients.listList all clientsread
  • harvest.clients.updateUpdate a clientwrite
Contacts5
  • harvest.contacts.createCreate a contactwrite
  • harvest.contacts.deleteDelete a contactdestructive
  • harvest.contacts.getRetrieve a contactread
  • harvest.contacts.listList all contactsread
  • harvest.contacts.updateUpdate a contactwrite
Custom roles5
  • harvest.custom_roles.createCreate a custom rolewrite
  • harvest.custom_roles.deleteDelete a custom roledestructive
  • harvest.custom_roles.getRetrieve a custom roleread
  • harvest.custom_roles.listList all custom rolesread
  • harvest.custom_roles.updateUpdate a custom rolewrite
Estimate item categories5
  • harvest.estimate_item_categories.createCreate an estimate item categorywrite
  • harvest.estimate_item_categories.deleteDelete an estimate item categorydestructive
  • harvest.estimate_item_categories.getRetrieve an estimate item categoryread
  • harvest.estimate_item_categories.listList all estimate item categoriesread
  • harvest.estimate_item_categories.updateUpdate an estimate item categorywrite
Estimates5
  • harvest.estimates.createCreate an estimatewrite
  • harvest.estimates.deleteDelete an estimatedestructive
  • harvest.estimates.getRetrieve an estimateread
  • harvest.estimates.listList all estimatesread
  • harvest.estimates.updateUpdate an estimatewrite
Expense categories5
  • harvest.expense_categories.createCreate an expense categorywrite
  • harvest.expense_categories.deleteDelete an expense categorydestructive
  • harvest.expense_categories.getRetrieve an expense categoryread
  • harvest.expense_categories.listList all expense categoriesread
  • harvest.expense_categories.updateUpdate an expense categorywrite
Invoice item categories5
  • harvest.invoice_item_categories.createCreate an invoice item categorywrite
  • harvest.invoice_item_categories.deleteDelete an invoice item categorydestructive
  • harvest.invoice_item_categories.getRetrieve an invoice item categoryread
  • harvest.invoice_item_categories.listList all invoice item categoriesread
  • harvest.invoice_item_categories.updateUpdate an invoice item categorywrite
Notifications5
  • harvest.notifications.listList all notificationsread
  • harvest.notifications.mark_all_readMark all notifications as readwrite
  • harvest.notifications.mark_readMark a notification as readwrite
  • harvest.notifications.peekPeek at notificationsread
  • harvest.notifications.unread_countRetrieve the unread countread
Projects5
  • harvest.projects.createCreate a projectwrite
  • harvest.projects.deleteDelete a projectdestructive
  • harvest.projects.getRetrieve a projectread
  • harvest.projects.listList all projectsread
  • harvest.projects.updateUpdate a projectwrite
Pto holiday calendars5
  • harvest.pto_holiday_calendars.createCreate a holiday calendarwrite
  • harvest.pto_holiday_calendars.deleteDelete a holiday calendardestructive
  • harvest.pto_holiday_calendars.getRetrieve a holiday calendarread
  • harvest.pto_holiday_calendars.listList all holiday calendarsread
  • harvest.pto_holiday_calendars.updateUpdate a holiday calendarwrite
Pto types5
  • harvest.pto_types.createCreate a time off policywrite
  • harvest.pto_types.deleteDelete a time off policydestructive
  • harvest.pto_types.getRetrieve a time off policyread
  • harvest.pto_types.listList all time off policiesread
  • harvest.pto_types.updateUpdate a time off policywrite
Pto work schedules5
  • harvest.pto_work_schedules.createCreate a work schedulewrite
  • harvest.pto_work_schedules.deactivateDeactivate a work scheduledestructive
  • harvest.pto_work_schedules.getRetrieve a work scheduleread
  • harvest.pto_work_schedules.listList all work schedulesread
  • harvest.pto_work_schedules.updateUpdate a work schedulewrite
Roles5
  • harvest.roles.createCreate a rolewrite
  • harvest.roles.deleteDelete a roledestructive
  • harvest.roles.getRetrieve a roleread
  • harvest.roles.listList all rolesread
  • harvest.roles.updateUpdate a rolewrite
Tasks5
  • harvest.tasks.createCreate a taskwrite
  • harvest.tasks.deleteDelete a taskdestructive
  • harvest.tasks.getRetrieve a taskread
  • harvest.tasks.listList all tasksread
  • harvest.tasks.updateUpdate a taskwrite
Pto holiday calendar entries4
  • harvest.pto_holiday_calendar_entries.createCreate an entry in a holiday calendarwrite
  • harvest.pto_holiday_calendar_entries.deleteDelete a holiday calendar entrydestructive
  • harvest.pto_holiday_calendar_entries.listList entries in a holiday calendarread
  • harvest.pto_holiday_calendar_entries.updateUpdate a holiday calendar entrywrite
Billable rates3
  • harvest.billable_rates.createCreate a billable ratewrite
  • harvest.billable_rates.getRetrieve a billable rateread
  • harvest.billable_rates.listList all billable rates for a specific userread
Cost rates3
  • harvest.cost_rates.createCreate a cost ratewrite
  • harvest.cost_rates.getRetrieve a cost rateread
  • harvest.cost_rates.listList all cost rates for a specific userread
Gusto sync runs3
  • harvest.gusto_sync_runs.createCreate a sync runwrite
  • harvest.gusto_sync_runs.getRetrieve a sync runread
  • harvest.gusto_sync_runs.previewPreview a sync runread
Gusto user mappings3
  • harvest.gusto_user_mappings.bulk_createBulk create user mappingswrite
  • harvest.gusto_user_mappings.createCreate a user mappingwrite
  • harvest.gusto_user_mappings.deleteDelete a user mappingdestructive
Imports3
  • harvest.imports.getRetrieve an importread
  • harvest.imports.listList all importsread
  • harvest.imports.revertRevert an importwrite
Invoice payments3
  • harvest.invoice_payments.createCreate an invoice paymentwrite
  • harvest.invoice_payments.deleteDelete an invoice paymentdestructive
  • harvest.invoice_payments.listList all payments for an invoiceread
Notification preferences3
  • harvest.notification_preferences.getRetrieve notification preferencesread
  • harvest.notification_preferences.replaceUpdate notification preferences with PUTwrite
  • harvest.notification_preferences.updateUpdate notification preferenceswrite
Pto allocations3
  • harvest.pto_allocations.bulk_updateBulk update user allocationswrite
  • harvest.pto_allocations.listList user allocationsread
  • harvest.pto_allocations.updateUpdate or reset a user allocationwrite
Reimbursements3
  • harvest.reimbursements.listList all reimbursementsread
  • harvest.reimbursements.rejectReject a reimbursementwrite
  • harvest.reimbursements.restoreRestore a reimbursementwrite
Approvals2
  • harvest.approvals.listList all approvalsread
  • harvest.approvals.submitSubmit a timesheet for approvalwrite
Company2
  • harvest.company.getRetrieve a companyread
  • harvest.company.updateUpdate a companywrite
E invoicing2
  • harvest.e_invoicing.disconnectDisconnect from e-invoicingdestructive
  • harvest.e_invoicing.enrollEnroll in e-invoicingwrite
Gusto settings2
  • harvest.gusto_settings.getRetrieve Gusto settingsread
  • harvest.gusto_settings.updateUpdate Gusto settingswrite
Project assignments2
  • harvest.project_assignments.listList active project assignmentsread
  • harvest.project_assignments.list_mineList active project assignments for the currently authenticated userread
Pto assignments2
  • harvest.pto_assignments.listList user assignmentsread
  • harvest.pto_assignments.updateUpdate user assignmentswrite
Reimbursement settings2
  • harvest.reimbursement_settings.getRetrieve reimbursement settingsread
  • harvest.reimbursement_settings.updateUpdate reimbursement settingswrite
Report exports2
  • harvest.report_exports.createCreate a report exportwrite
  • harvest.report_exports.getRetrieve a report exportread
Teammates2
  • harvest.teammates.listList all assigned teammates for a specific userread
  • harvest.teammates.updateUpdate a user’s assigned teammateswrite
Accounts1
  • harvest.accounts.listScopes and account accessread
Permissions1
  • harvest.permissions.listList all permissionsread
Pto balances1
  • harvest.pto_balances.getRetrieve time off balancesread
Tags1
  • harvest.tags.listList all tagsread

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.

Give your agent Harvest today.

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