create_client
Create a new client for project management and billing. Requires client name and supports address and currency configuration.
Run a Harvest account from the client: start and stop timers, keep projects, tasks and clients in shape, raise invoices and estimates, and pull the report of billable work nobody has invoiced yet.
LABSCO SUMMARY
The read side is filterable rather than a dump: list_time_entries narrows by user, client, project, task, billing state and date range, and returns paginated results. Deletion is not uniform, and the difference matters — delete_project, delete_task, delete_client and delete_user archive the record and keep its history, while delete_time_entry, delete_invoice, delete_expense and delete_estimate are permanent. Writing time has its own shape too: create_time_entry needs project_id, task_id and spent_date, plus either hours or both started_time and ended_time.
A client for the Harvest time-tracking and billing API, 54 tools reaching from the running timer through projects, tasks, clients and users to invoices, estimates, expenses and reports.
HARVEST_ACCESS_TOKEN and HARVEST_ACCOUNT_ID for the Harvest account the tools act on.
One command plus a key — npm install -g @ianaleck/harvest-mcp-server, then supply credentials
USE CASES
Pull the time and expenses that were never invoiced, check them against the time report, then raise the invoice for the client and adjust its terms before it goes out.
Start a timer against the project and task you are on, stop it when the block ends, and restart an earlier entry when you pick the same work back up.
Create the client, open a project against it with its budget and billing settings, then define the tasks and attach them so time can be booked.
Compare spend against budget across projects, then follow the expense side of the ones that are over before deciding what to do about the rate.
Create the user with the permissions and rates they should have, correct them once the engagement settles, and check the result against the rest of the team.
Counted once with only startup setup. Other versions, modes or optional credentials may expose a different list.
create_clientCreate a new client for project management and billing. Requires client name and supports address and currency configuration.
create_estimateCreate a new estimate for a client with optional line items and terms. Supports custom pricing, taxes, and discounts.
create_expenseCreate a new expense entry for a project with category and cost details. Supports receipt attachment and billable status.
create_invoiceCreate a new invoice for a client with optional line items and billing details. Supports custom terms, taxes, and payment configurations.
create_projectCreate a new project for a client. Requires project name and client ID. Supports extensive configuration including budget settings, billing preferences, and project timeline.
create_project_task_assignmentAssign a task to a project, making it available for time tracking on that project. Allows setting project-specific rates and budgets.
create_taskCreate a new task that can be assigned to projects for time tracking. Tasks define what type of work is being performed.
create_time_entryCreate a new time entry. Requires project_id, task_id, and spent_date. Must provide either hours OR both started_time and ended_time.
create_userCreate a new user with specified roles and permissions. Supports team member management and access control.
delete_clientDelete (archive) a client. This action archives the client rather than permanently deleting it, preserving historical project and billing data.
delete_estimateDelete an estimate permanently. This action cannot be undone.
delete_expenseDelete an expense permanently. This action cannot be undone.
delete_invoiceDelete an invoice permanently. This action cannot be undone and will remove all associated billing data.
delete_projectDelete (archive) a project. This action archives the project rather than permanently deleting it, preserving historical data while making it inactive.
delete_project_task_assignmentRemove a task assignment from a project, making the task unavailable for time tracking on that project.
delete_taskDelete (archive) a task. This action archives the task rather than permanently deleting it, preserving historical data while making it inactive.
delete_time_entryDelete a time entry permanently. This action cannot be undone.
delete_userDelete (archive) a user. This action archives the user rather than permanently deleting them, preserving time tracking history.
get_clientRetrieve a specific client by its ID. Returns complete client details including contact information and billing configuration.
get_companyRetrieve company information and settings for the authenticated account. Returns comprehensive company details including billing configuration, time tracking preferences, and enabled features.
get_current_userRetrieve the currently authenticated user's profile and permissions.
get_estimateRetrieve a specific estimate by ID with complete details including line items, terms, and client information.
get_expenseRetrieve a specific expense by ID with complete details including receipts and billing information.
get_expense_reportGenerate comprehensive expense reports with filtering by date range, users, clients, projects, and categories. Supports grouping and billing status filtering.
get_invoiceRetrieve a specific invoice by ID with complete details including line items, payments, and billing information.
get_projectRetrieve a specific project by its ID. Returns complete project details including client information, budget settings, billing configuration, and project dates.
get_project_budget_reportGenerate project budget reports showing spending vs budgets across projects. Helps track project profitability and budget utilization.
get_taskRetrieve a specific task by its ID. Returns complete task details including default billing settings and activity status.
get_time_entryRetrieve a specific time entry by its ID. Returns complete time entry details including project, task, user, and timing information.
get_time_reportGenerate comprehensive time tracking reports with filtering by date range, users, clients, projects, and tasks. Supports grouping and billable status filtering.
get_uninvoiced_reportGenerate reports of uninvoiced time and expenses within a date range. Essential for identifying billable work that hasn't been invoiced yet.
get_userRetrieve a specific user by ID. Returns complete user profile including roles, permissions, and billing rates.
list_clientsRetrieve a list of clients with optional filtering by active status and updated date. Returns paginated results with client details including billing information.
list_estimatesRetrieve estimates with filtering by client, state, and date ranges. Returns paginated results with estimate details.
list_expense_categoriesRetrieve available expense categories for expense classification and organization.
list_expensesRetrieve expenses with filtering by user, client, project, billing status, and date ranges. Returns paginated results with expense details.
list_invoicesRetrieve invoices with optional filtering by client, project, state, and date ranges. Returns paginated results with complete invoice details.
list_project_task_assignmentsRetrieve task assignments for a specific project. Shows which tasks are available for time tracking on the project and their specific settings.
list_projectsRetrieve a list of projects with optional filtering by client, active status, and updated date. Returns paginated results with comprehensive project details.
list_tasksRetrieve a list of tasks with optional filtering. Tasks are the building blocks for time tracking and can be assigned to projects.
list_time_entriesRetrieve a list of time entries with optional filtering. Supports filtering by user, client, project, task, billing status, date ranges, and more. Returns paginated results.
list_usersRetrieve a list of users with optional filtering by active status and updated date. Returns paginated results with user profiles and permissions.
restart_timerRestart a previously stopped timer, creating a new running time entry based on an existing entry.
start_timerStart a timer for a new time entry. Creates a running time entry that tracks time automatically.
stop_timerStop a running timer and finalize the time entry with calculated hours.
update_clientUpdate an existing client. Can modify name, active status, address, and currency. Only provided fields will be updated.
update_estimateUpdate an existing estimate including subject, terms, taxes, and other details. Only provided fields will be updated.
update_expenseUpdate an existing expense including project, category, cost, and billing details. Only provided fields will be updated.
update_invoiceUpdate an existing invoice including subject, dates, terms, taxes, and other billing details. Only provided fields will be updated.
update_projectUpdate an existing project. Can modify any project settings including name, billing configuration, budget settings, and project timeline. Only provided fields will be updated.
update_project_task_assignmentUpdate an existing project task assignment including rates, budget, and active status. Only provided fields will be updated.
update_taskUpdate an existing task. Can modify task name, billing settings, and activity status. Only provided fields will be updated.
update_time_entryUpdate an existing time entry. Can modify project, task, hours, notes, and other fields. Only provided fields will be updated.
update_userUpdate an existing user's profile, permissions, and rates. Only provided fields will be updated.
BEFORE YOU INSTALL
54 tools when we connected.
The documented client runs the server on your machine.
CONTEXT COST
Rated by the size of the 54 tool definitions that ride along on every turn, not by how many there are
INSTALLATION
npm install -g @ianaleck/harvest-mcp-server{
"mcpServers": {
"harvest": {
"command": "npx",
"args": [
"-y",
"@ianaleck/harvest-mcp-server"
],
"env": {
"HARVEST_ACCESS_TOKEN": "<YOUR_HARVEST_ACCESS_TOKEN>",
"HARVEST_ACCOUNT_ID": "<YOUR_HARVEST_ACCOUNT_ID>"
}
}
}
}