Skip to main content
Glama
@iiinigence/harvest-mcp

@iiinigence/harvest-mcp

by iiinigence

@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)

  1. Download iiinigence-harvest.mcpb from the latest release

  2. In Claude Desktop: Settings → Extensions → Advanced settings → Install Extension → pick the downloaded file. Claude shows what you're getting; click Install.

  3. 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

get_me

Verify the connection; your user id, roles, timezone

list_clients

Clients in the account

list_projects

Projects with client, code, and budget info

list_project_tasks

Tasks available on a project (needed to log time)

list_time_entries

Entries with filters: date range, project, person, running

get_time_report

Aggregated hours by client / project / task / team member

log_time

Create a completed time entry

start_timer

Start a running timer (auto-stops any other running timer)

stop_timer

Stop the running timer

update_time_entry

Edit hours, notes, date, project, or task

list_users

Team members (admin/manager)

Configuration

Env var

Required

Description

HARVEST_ACCESS_TOKEN

✅

Personal Access Token from id.getharvest.com/developers

HARVEST_ACCOUNT_ID

✅

Numeric account id shown next to the token

READ_ONLY

—

true = reports and entries readable, all writing blocked (default false)

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.js

MIT 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 tools
get_meWho am IA
Read-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 reportA
Read-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 clientsB
Read-only

List clients in the Harvest account. Returns id, name, active state.

Inputs: active_only.

list_projectsList projectsA
Read-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 projectA
Read-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 entriesA
Read-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 membersA
Read-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

    A4.1/5.0

    Scored across 11 tools

    Disambiguation5/5

    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).

    Naming Consistency5/5

    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.

    Tool Count5/5

    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.

    Completeness4/5

    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

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • -
      license
      Not graded
      quality
      Not graded
      maintenance
      Provides 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.
      -
    • A
      license
      Not graded
      quality
      D
      maintenance
      An 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 npm
      MIT