Connect Your AI Agent with Harvest for Slack

Integrate Harvest MCP server into your Slack workspace for instant access to your AI agent.

Back to MCP Servers
Harvest
Harvest
Online Time Tracking and Invoicing Software

Categories

Productivity

Available Tools

Tools that your AI agent can use through this MCP server to interact with Harvest

Update User

Update an existing user. Use List Users to find a valid ID. Example: call with userId set to a user's ID and lastName set to a new value to update their name. See the documentation.

Update User Assignment

Update a user assignment on a project. Use List User Assignments to find IDs. Example: call with projectId, userAssignmentId, and hourlyRate="150" to set that person's custom billing rate on the project. See the documentation.

Update Time Entry

Update an existing time entry. Use List Time Entries to find a valid ID. Example: call with timeEntryId set to a logged entry's ID and hours set to a corrected value to fix a mistaken time entry. See the documentation.

Update Task Assignment

Update a task assignment on a project. Use List Task Assignments to find IDs. Example: call with projectId, taskAssignmentId, and billable=false to stop billing that task on the project. See the documentation.

Update Project

Update an existing project. Use Get Projects to find a project ID. Example: call with projectId set to a project's ID and projectName set to a new name to rename it. See the documentation.

Update Invoice

Update an existing invoice. Use List Invoices to find a valid ID. Example: call with invoiceId set to a draft invoice's ID and subject set to a new value to revise it before sending. See the documentation.

Stop Time Entry

Stop a currently running time entry. Use List Time Entries with Is Running set to true to find a running entry to stop. Example: call with timeEntryId set to a currently running entry's ID to stop the clock on it. See the documentation.

Start Time Entry

Restart a stopped time entry so it resumes running. Use List Time Entries with Is Running set to false to find a stopped entry to restart. Example: call with timeEntryId set to a stopped entry's ID to resume tracking time on it. See the documentation.

List Users

List users in the Harvest account, automatically following pagination up to 200 users. Use this to discover user IDs for Create User Assignment, Create Timesheet Entry, and other tools that accept a User ID. Example: call with isActive=true to find Alan Grant's user ID before logging time on his behalf. See the documentation.

List User Assignments

List user assignments, automatically following pagination up to 200. Omit Project ID to use the global endpoint; provide a Project ID to list assignments for a single project. Example: call with projectId set to the Isla Sorna Genetics Lab project's ID to see who is staffed on it. See the documentation.

List Time Entries

Retrieve a list of time entries from Harvest, with optional filters, automatically following pagination up to 200 entries. Use this to discover time entry IDs for Get Time Entry, Update Time Entry, or Delete Time Entry. For a pure "how many entries are there" question, set countOnly to skip fetching any entries and just return the true total — safe even on a huge, unfiltered result set that would otherwise exceed the response-size limit. Pass notes to filter results to entries whose notes contain that text (client-side, case-insensitive substring) — useful for finding one entry inside a large result set without hitting the output-size limit. Example: call with projectId set to a project's ID and from/to set to a date range to total up hours logged that week. See the documentation.

List Tasks

List tasks in the Harvest account, automatically following pagination up to 200 tasks. Use this to discover task IDs for Create Task Assignment, Create Timesheet Entry, and other tools that accept a Task ID. Example: call with isActive=true to find the ID for the "Fence Maintenance" task before assigning it to a project. See the documentation.

List Task Assignments

List task assignments, automatically following pagination up to 200. Omit Project ID to use the global endpoint; provide a Project ID to list assignments for a single project. Example: call with projectId set to the Jurassic Park Construction project's ID to see which tasks are billable on it. See the documentation.

List Invoices

List invoices with optional filters, automatically following pagination up to 200 invoices. Use this to discover invoice IDs for Get Invoice, Update Invoice, or Delete Invoice. Example: call with clientId set to InGen Corp's client ID and state="open" to find their unpaid invoices. See the documentation.

List Clients

List clients in the Harvest account, automatically following pagination up to 200 clients. Use this to discover client IDs for Create Invoice, Create Project, and other tools that accept a Client ID. Example: to find InGen Corp's client ID, call with no filters and look for the client named "InGen Corp" in the results. See the documentation.

List Account ID Options

List the Harvest accounts (companies) the authenticated user has access to, each with its Account ID. Use this first to find the Account ID required by every other Harvest tool. Example: call with no parameters, then pass the returned id as Account ID on any other Harvest tool call. See the documentation.

Get User

Retrieve a single user by ID. Use List Users to find a valid ID. To fetch the authenticated user, use Get Me instead. Example: call with userId set to a known user's ID to see their name, email, and role. See the documentation.

Get User Assignment

Retrieve a single user assignment on a project. Use List User Assignments to find IDs. Example: call with projectId and userAssignmentId to check that person's hourly rate on the project. See the documentation.

Get Time Report

Retrieve total hours logged, aggregated by a chosen dimension (clients, projects, tasks, or team) over a date range, automatically following pagination up to 200 results. Use when the user asks "how many hours were logged/worked on X", "how much time did the team spend on Y", or wants a time report/summary/breakdown — this is the only tool that returns aggregated totals; List Time Entries returns individual raw entries you would have to sum yourself. The Report By value selects which /reports/time/{dimension} endpoint is called. Example: call with reportBy="projects", from="20260901", to="20260930" to see total hours logged per project for the month. See the documentation

Get Time Entry

Retrieve a single time entry by ID. Use List Time Entries to find a valid ID. Example: call with timeEntryId set to a known entry's ID to see its hours, project, and task. See the documentation.

Get Task Assignment

Retrieve a single task assignment on a project. Use List Task Assignments to find IDs. Example: call with projectId and taskAssignmentId to check whether that task is billable on the project. See the documentation.

Get Projects

Retrieve one or more projects. Omit Project IDs to list every project in the account (up to 200) — use this to discover project IDs for other Harvest tools. Provide Project IDs to fetch specific projects instead. Example: call with no Project IDs to find the ID for "Jurassic Park Construction" before creating a task assignment on it. See the documentation.

Get Project

Retrieve a single project by ID. Example: call with projectId set to a known project's ID to see its client, budget, and billing method. See the documentation.

Get Me

Retrieve the currently authenticated user from GET /users/me. Takes no ID input. Example: call with no parameters to answer "who am I logged in as in Harvest?". See the documentation.

Get Invoice

Retrieve a single invoice by ID. Use List Invoices to find a valid ID. Example: call with invoiceId set to a known invoice's ID to check its amount and payment state. See the documentation.

Delete User

Permanently delete a user (only possible if they have no time entries or expenses). Use List Users to find a valid ID. Example: call with userId set to a departed team member's ID to remove their Harvest access. See the documentation.

Delete User Assignment

Delete a user assignment from a project (only possible if it has no time entries or expenses). Use List User Assignments to find IDs. Example: call with projectId and userAssignmentId to unstaff that person from the project. See the documentation.

Delete Time Entry

Permanently delete a time entry. Use List Time Entries to find a valid ID. Example: call with timeEntryId set to a mistakenly logged entry's ID to remove it. See the documentation.

Delete Task Assignment

Delete a task assignment from a project (only possible if it has no time entries). Use List Task Assignments to find IDs. Example: call with projectId and taskAssignmentId to remove that task from the project. See the documentation.

Delete Project

Permanently delete a project and all time entries and expenses tracked to it (invoices are not deleted). Use Get Projects to find a project ID. Example: call with projectId set to a project's ID to permanently remove it. See the documentation.

Delete Invoice

Permanently delete an invoice. Use List Invoices to find a valid ID. Example: call with invoiceId set to a draft invoice's ID to remove it before it's sent. See the documentation.

Create User

Create a new user in the Harvest account. Example: call with firstName="Ian", lastName="Malcolm", email="[email protected]" to add a new team member. See the documentation.

Create User Assignment

Assign a user to a project. Use Get Projects to find a project ID, and List Users to find user IDs. Example: call with projectId and userId set to staff that person on the project. See the documentation.

Create Timesheet Entry

Create a new time entry. Two ways to log time, matching the account's Company setting: on duration-based accounts (wants_timestamp_timers is false — the common case) set Hours to log a completed entry directly. On timestamp-based accounts (wants_timestamp_timers is true) leave Hours blank and use Started Time/Ended Time instead — leave both time fields blank too to start a running timer now, or set both to log a completed entry with explicit start/end times. Passing Started/Ended Time on a duration-based account is silently ignored by Harvest (it starts a running timer instead) — if that happens, switch to Hours. Use Get Projects to find a Project ID, List Tasks to find a Task ID, and List Users to find a User ID. Example (duration-based): call with projectId, taskId, spentDate="2026-09-17", hours=3.5. Example (timestamp-based): the same call with hours omitted and startedTime/endedTime set instead. See the documentation and start/end time variant.

Create Task Assignment

Assign a task to a project. Use Get Projects to find a project ID and List Tasks to find a task ID. Example: call with projectId set to the Jurassic Park Construction project's ID and taskId set to the Genetics Research task's ID to put that task on the project. See the documentation.

Create Project

Create a new project. Example: call with clientId set to InGen Corp's client ID, projectName="Compound Perimeter Fence Upgrade", isBillable=true, billBy="Project", budgetBy="none". See the documentation.

Create Invoice

Create a new free-form invoice for a client. Provide Line Items as a JSON array to itemize the invoice. Example: call with clientId set to InGen Corp's client ID, subject="Consulting Services", lineItems=[{"kind":"Service","description":"Genetics consulting","unit_price":2000,"quantity":1}]. See the documentation.