@iiinigence/harvest-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@@iiinigence/harvest-mcp How many hours did I log this week?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@iiinigence/harvest-mcp
Track time, run timers, and read time reports — by just asking your AI.
An open-source MCP server for Harvest, developed by IIInigence. Works with Claude Desktop, Claude Code, and any MCP-compatible client.
🎥 Setup tutorial video: coming soon — subscribe
Easiest install — one file, no terminal (Claude Desktop)
Download
iiinigence-harvest.mcpbfrom the latest releaseIn Claude Desktop: Settings → Extensions → Advanced settings → Install Extension → pick the downloaded file. Claude shows what you're getting; click Install.
Paste your Harvest Personal Access Token and Account ID (both from id.getharvest.com/developers) into the settings form, then click the Disabled button so it reads Enabled. Done.
No Node, no config files — Claude Desktop runs the bundle with its built-in runtime. Nervous about giving an AI write access to your timesheet? Flip on Read-only mode in the same form: Claude can read projects, entries, and reports but can't log or change a thing until you turn it off.
Related MCP server: harvest-mcp-server
Quick start (manual / npx route)
1. Get your credentials — id.getharvest.com/developers → Create new personal access token. Note the token and the numeric Account ID shown with it.
2. Add to Claude Desktop — Settings → Developer → Edit Config:
{
"mcpServers": {
"harvest": {
"command": "npx",
"args": ["-y", "@iiinigence/harvest-mcp"],
"env": {
"HARVEST_ACCESS_TOKEN": "your_token_here",
"HARVEST_ACCOUNT_ID": "1234567",
"READ_ONLY": "false"
}
}
}
}Restart Claude Desktop, then try: "How many hours did I log this week?"
What it's like to use
"Start a timer on the Acme website project — task: development, note: fixing the checkout bug."
"Stop my timer."
"Log 2 hours yesterday on Acme — client meeting."
"How many hours did we spend per client this month, and how much of it was billable?"
"Who on the team logged the most hours last week?"
"Find my unbilled overtime — compare this month's hours to the project budgets."
Tools
Tool | What it does |
| Verify the connection; your user id, roles, timezone |
| Clients in the account |
| Projects with client, code, and budget info |
| Tasks available on a project (needed to log time) |
| Entries with filters: date range, project, person, running |
| Aggregated hours by client / project / task / team member |
| Create a completed time entry |
| Start a running timer (auto-stops any other running timer) |
| Stop the running timer |
| Edit hours, notes, date, project, or task |
| Team members (admin/manager) |
Configuration
Env var | Required | Description |
| ✅ | Personal Access Token from id.getharvest.com/developers |
| ✅ | Numeric account id shown next to the token |
| — |
|
Safety notes
No delete tool — by design. This server can log and edit time, but it can never delete an entry. If something truly needs deleting, do it in Harvest.
Read-only mode is a hard block enforced by the server, not a suggestion to the model.
Your Personal Access Token carries your Harvest permissions. Treat it like a password; revoke it at id.getharvest.com/developers if unsure.
Keep yourself as the approval step for edits: ask your assistant to show entries before changing them.
Privacy
This connector runs locally, collects no data, has no telemetry, and talks only to Harvest's API. Your token is stored on your device by Claude Desktop and sent only to Harvest. Full policy: PRIVACY.md.
Who built this
IIInigence — a software development agency: custom software, AI automations, full platforms. This connector is part of our video series on connecting Claude to your business tools, one at a time. See also our SendGrid connector.
Want something like this built for your business? Tell us what you'd build.
Development
git clone https://github.com/iiinigence/harvest-mcp.git
cd harvest-mcp
npm install
npm run build
HARVEST_ACCESS_TOKEN=xxx HARVEST_ACCOUNT_ID=1234567 node dist/index.jsMIT licensed. PRs welcome.
This is an independent project by IIInigence. It is not affiliated with, endorsed, or sponsored by Harvest. "Harvest" is a trademark of Iridesco, LLC, used here only to describe compatibility.
Available Tools
11 toolsget_meWho am IARead-only
Get the authenticated Harvest user (name, email, id, roles, timezone). Useful to resolve 'my' time entries and check the connection.
Inputs: no named parameters.
get_time_reportTime reportARead-only
Aggregated hours for a date range, grouped by clients, projects, tasks, or team members. Includes billable vs total hours and billable amounts (when permitted). Perfect for 'how many hours did we spend on X this month?'
Inputs: to (required), from (required), group_by (required).
list_clientsList clientsBRead-only
List clients in the Harvest account. Returns id, name, active state.
Inputs: active_only.
list_projectsList projectsARead-only
List projects with their client, code, and budget info. Filter by client_id or include archived projects.
Inputs: client_id, active_only.
list_project_tasksList tasks on a projectARead-only
List the task assignments for a project (task_id + name). You need a task_id to log time or start a timer on that project.
Inputs: project_id (required).
list_time_entriesList time entriesARead-only
List time entries, newest first. Filter by date range (from/to, YYYY-MM-DD), project_id, user_id, or only_running. Use mine=true to limit to the authenticated user. Returns up to 300 entries per call.
Inputs: to, from, mine, user_id, +2 more.
list_usersList team membersARead-only
List users in the Harvest account (id, name, email, roles). Needed for per-person filters and team reports. Requires admin/manager access.
Inputs: active_only.
log_timeLog timeA
Create a completed time entry: project, task, date, and duration in hours (e.g. 1.5). Use list_projects and list_project_tasks first to get ids. Add a short note describing the work.
Inputs: hours (required), task_id (required), project_id (required), spent_date (required), +1 more.
start_timerStart a timerA
Start a running timer on a project + task for today (authenticated user). Any other running timer for the user is stopped automatically by Harvest. Use list_project_tasks to get the task_id.
Inputs: task_id (required), project_id (required), notes.
stop_timerStop the running timerA
Stop a running timer. If time_entry_id is omitted, finds and stops the authenticated user's currently running timer.
Inputs: time_entry_id.
update_time_entryUpdate a time entryA
Edit an existing time entry's hours, notes, date, project, or task. Only provided fields are changed. (This server intentionally has no delete tool — set hours or move entries instead, and delete in Harvest itself if truly needed.)
Inputs: time_entry_id (required), hours, notes, task_id, +2 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 11 tools
Each tool targets a distinct resource or action. The only potential overlap is between log_time and start_timer, but descriptions clearly separate completed entries from running timers. list_time_entries and get_time_report serve different purposes (raw vs aggregated).
All tool names follow a consistent verb_noun pattern using snake_case. Read operations use list_ for collections and get_ for single entities (get_me, get_time_report), which is a predictable and logical variation. No mixed naming conventions are present.
11 tools is well within the ideal 3-15 range. Each tool addresses a core time-tracking workflow: listing entities, logging/editing entries, managing timers, and generating reports. No tool seems redundant or unnecessary.
The surface covers the essential lifecycle of time entries: create (log_time, start_timer), read (list_time_entries, get_time_report), and update (update_time_entry). Delete is intentionally omitted with a clear rationale, making it a minor gap. Project/client/task management is limited to listing, but that is suitable for a time-tracking integration.
Maintenance
Related MCP Connectors
timesheet.io MCP server - manage timers, projects, tasks and reports
MCP server for MOCO business software: time tracking, projects, budgets, and invoicing via API
Toggl 2.0 MCP server for tasks, projects, time entries, and workspace operations.
Official Todoist MCP server. Manage tasks and projects. Hosted, no API key needed.
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceProvides MCP integration for Harvest's time tracking, project management, and invoicing functionality, enabling natural language interaction with Harvest API through tools for managing clients, time entries, projects, tasks, and users.-
- AlicenseBqualityCmaintenanceMCP server for Harvest time tracking. Manage time entries, start/stop timers, handle projects, clients, tasks, and generate time and expense reports via the Harvest API v2.5483 npm8MIT
- AlicenseAqualityDmaintenanceAn MCP server for Productive.io that enables users to log time, inspect projects, and manage time entries using natural language commands. It features fuzzy project matching, local caching, and remembers default services per project for streamlined time tracking.14MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server for time tracking and billing that allows freelancers to control timers, manage projects, and export invoices via natural language in any MCP-compatible AI assistant.6 npmMIT