# Hourtick MCP connector

The Hourtick connector brings time entries, timesheets, approvals, cost rates and invoicing into Claude, ChatGPT, Cursor and the Elaichi Agent, so each person works inside their own Hourtick access with every call logged.

Source: https://elaichi.ai/connectors/hourtick/

## Facts

| | |
| --- | --- |
| Application | Hourtick |
| Category | Time Tracking |
| AI tools | 119 |
| Authentication | Connects with an API key |
| Bring your own OAuth app | No |
| MCP endpoint | https://api.elaichi.ai/mcp |
| Works with | Claude, ChatGPT, Cursor, any MCP client, and the Elaichi Agent |
| Tools advertised by name | No. Connected tools are never listed one by one, however few there are. The endpoint advertises `search_tools` and `execute_tool` instead |

## What you can ask once Hourtick is connected

- Which timesheets are still missing for last week?
- Summarize billable hours by project for March.
- Draft an invoice from Acme's approved time entries this month.

## Connect Hourtick in Elaichi

This happens once for the organization, before any client is involved.

1. Open Connections, choose Add connection, and pick Hourtick.
2. Optionally set Share with, then press Connect.
3. Paste a Hourtick API key. One person generates a token in Hourtick and pastes it once. Everyone else works through Share with, and never sees it.

Credentials are vaulted and nobody, including the AI, reads them back. The connection becomes a toolbox immediately, so you can curate which Hourtick tools are exposed, rename them, or freeze arguments before anyone points a client at it.

## Hourtick MCP connector for Claude

Endpoint: https://api.elaichi.ai/mcp

1. Open Customize, then Connectors.
2. Press Add.
3. Name it, paste the MCP server URL, then Continue.
4. Sign in and approve.

On Team and Enterprise, an Owner adds it once. Everyone else turns it on for themselves.

## Hourtick MCP connector for ChatGPT

Endpoint: https://api.elaichi.ai/mcp

1. Open Plugins, then press the + button.
2. Name it and paste the endpoint into Server URL.
3. Leave Authentication on OAuth, then tick the risk acknowledgement.
4. Press Create, then sign in and approve.

Works on the web today. The plugin directory lives at chatgpt.com/plugins.

## Hourtick MCP connector for Cursor

Endpoint: https://api.elaichi.ai/mcp

1. Open `~/.cursor/mcp.json`.
2. Add the endpoint under `mcpServers`.
3. Reload Cursor, then sign in and approve.

Set up per machine, so repeat it on each computer you work from.

## Connect Hourtick to any MCP client

Endpoint: https://api.elaichi.ai/mcp

1. Add the endpoint as a remote MCP server.
2. Sign in and approve.

The Elaichi Agent already has these tools, with nothing to set up.

## What the consent screen decides

Only Read is granted by default, which is not enough to call a Hourtick tool. Over MCP there is no trusted place to confirm a write in the moment, so the consent screen is the standing approval rather than a formality. Grant Read and Run tools. Think hard before granting Delete, which reaches into connected apps and cannot be undone.

## What teams do with Hourtick through Elaichi

### Turn approved hours into an invoice

Finance. Pull the approved time entries for a client and raise the invoice in Hourtick without re-keying a single line. The numbers come from the timesheets that were actually signed off.

### Chase missing timesheets before the week closes

Operations. Ask which members have not submitted a Hourtick timesheet for last week and get the list in seconds. Follow up with the right people instead of scanning every row.

### See where the week's hours went

Project management. Summarize time entries by project, stream or member straight from Hourtick reports. Spot the project that quietly ate three days before it becomes a budget conversation.

### Approve a batch of timesheets in one go

Team leads. Review the timesheets waiting on you and record approvals in Hourtick from the same chat. No clicking through each one by hand.

### Keep cost rates current across members

People. When salaries change, update member cost rates in Hourtick in a single bulk pass. Reports and invoicing pick up the new rates from that point on.

### Track what AI agents are costing you

IT. List the AI providers set up in Hourtick, see agent costs as they accrue, and add or remove a provider when a contract changes.

## Elaichi vs Zapier MCP vs Composio for Hourtick

All three can connect Hourtick to an AI assistant, and all three have admin controls. They differ in where access lives and how you pay.

| What to check | Elaichi | Zapier MCP | Composio |
| --- | --- | --- | --- |
| Where the AI connects | One address for the whole organization. Endpoint: https://api.elaichi.ai/mcp | A server per member, created at sign-in. | An MCP endpoint per team, or an SDK. |
| Control over Hourtick tools | Allow or restrict single Hourtick tools, per role or user. | App and action restrictions on the account. | Role permissions, down to the action. |
| Record of calls | One audit entry per Hourtick call. | A History tab of tool calls. | A log of every tool call. |
| Single sign-on | SAML or OIDC, plus SCIM, on Gold. | SAML on Enterprise. | SAML and OIDC on Enterprise. |
| Price | $15 per user per month. | 2 tasks per successful call. | Billed per tool call. |

Sources: Zapier MCP [docs](https://docs.zapier.com/mcp/get-started/quickstart), [security](https://docs.zapier.com/mcp/manage/security), [usage](https://docs.zapier.com/mcp/features/usage); Composio [docs](https://docs.composio.dev/docs/composio-connect), [gateway](https://composio.dev/mcp-gateway), [enterprise](https://composio.dev/enterprise), [pricing](https://composio.dev/pricing). Checked September 2026.

Longer take: [Zapier MCP alternative](/blog/zapier-mcp-alternative/) and [when you don't need an MCP gateway](/blog/when-you-dont-need-an-mcp-gateway/).

## Frequently asked questions

### How do I connect Hourtick to Claude?

First connect Hourtick in Elaichi by pasting your Hourtick API key, which Elaichi stores for you. Then open Claude, go to Customize, then Connectors, then Add, and paste https://api.elaichi.ai/mcp. There is no OAuth application to register and no client ID or secret to generate, so the whole thing takes a few minutes.

### Does Hourtick work with ChatGPT and Cursor as well as Claude?

Yes. Once Hourtick is connected in Elaichi, the same endpoint, https://api.elaichi.ai/mcp, works in Claude, ChatGPT, Cursor, any other MCP client and the Elaichi Agent. You connect Hourtick once and every client picks it up.

### What can an AI agent actually do with my Hourtick data?

It can pull up Hourtick time entries, timesheets, approvals, members and reports, and tell you which timesheets are missing or where the week's hours went. It can submit a timesheet, record an approval, raise an invoice from approved time, and update cost rates across members in one pass. Short concrete asks, such as asking for last week's unapproved timesheets, get better results than long paragraphs.

### Does connecting Hourtick give the AI access to everyone's hours?

No. Every call runs inside the Hourtick access of the person who signed in, so a team lead sees the timesheets they could already see in Hourtick and nothing more. Elaichi can narrow that access further with restrictions, and it can never widen it.

### Can my team share one Hourtick connection?

Yes. One person connects Hourtick with the API key and shares the connection with a team, and nobody else ever handles the key. Each teammate still signs in to Elaichi as themselves, so the audit log names the actual person who submitted a timesheet or raised an invoice.

### Can I stop an agent from deleting or changing things in Hourtick?

Yes. Restrictions in Elaichi work per action, so you can allow reading Hourtick time entries and reports while blocking bulk changes to entries, invoicing, or deleting agent costs. A restricted action is never advertised to Claude, ChatGPT or Cursor at all, so no prompt can reach it.

### What happens to a Hourtick connection when someone leaves?

Offboarding that person in Elaichi ends their access to Hourtick through every client at once. A Hourtick connection they had shared keeps working for everyone else on the team. If you want Hourtick gone entirely, disconnecting it once in Elaichi removes it from Claude, ChatGPT, Cursor and every other client.

### Does the Hourtick MCP connector work with Gemini, Codex, Claude Code or other MCP clients?

Yes. Hourtick is reached over the same MCP endpoint every client uses, so anything that speaks MCP can call it — Gemini, Codex, Claude Code, Windsurf, Cline, Zed and OpenCode among them — alongside Claude, ChatGPT, Cursor, and the Elaichi Agent. The tools on offer and the access behind them are identical whichever client asks. Only the setup screen differs.

### Is Elaichi an alternative to Zapier MCP for Hourtick?

Yes. Both let Claude, ChatGPT or Cursor use Hourtick. Zapier MCP fits a team that already automates in Zapier, since each person signs in and acts as themselves in that account. Elaichi fits when IT wants one address for the whole company, per-tool rules by role, and a record of every Hourtick call.

### How is Elaichi different from Composio for Hourtick?

Composio gives AI agents tools and sign-in handling across 1,000+ apps, for developers building agents or people using an assistant, billed per tool call. Elaichi gives a company's own people governed access to Hourtick: one address, restrictions per role or user, and $15 per user per month. Both have role permissions and a log of every call.

## All 119 Hourtick tools

Every tool below is callable through https://api.elaichi.ai/mcp once Hourtick is connected, subject to the toolbox it is in and the restrictions on the caller.

- **List all Hourtick bootstraps** (List). Retrieve the Hourtick bootstrap for the current user: who they are and what they can track on. Returns: user, workspace, profile, clients, projects, tasks, recent. Takes no parameters.
- **List all Hourtick time entries** (List). List your Hourtick time entries within a date range, including your currently running timer if one is active. Returns time-entry records with: id, version, notes, billable, spentDate, durationSeconds, projectId, taskId, workItemId, and userId. Required: from, to.
- **Hourtick time entries bulk update** (Update). Update one or many time entries in Hourtick by applying one patch (notes, projectId, taskId, spentDate, durationSeconds, or userId to reassign the time) to every listed entry. Returns: updated, entries. Up to 500 entries per request; running, invoiced, submitted or approved entries and stale versions fail atomically with…. Required: entries, patch.
- **Create a Hourtick command** (Create). Run a Hourtick time command: start, restart, stop, create, edit, delete, or restore a time entry. start stops any running timer; edit and delete require expectedVersion. Returns the resulting time entries with their id, projectId, taskId, notes, billable, durationSeconds, and version. Each command carries an idempotent commandId, so retrying is always safe. Required: commandId, command.
- **List all Hourtick reports** (List). Get a Hourtick report of totals, groups and time entries for a period (team scope for managers; admins also get P&L — costs, profit and uncosted seconds — inside totals and groups). Returns: scope, totals, groups, entries, truncated. Set format to csv for CSV output instead of JSON. Required: from, to.
- **List all Hourtick streams** (List). Server-Sent Events: live entry changes for your account and task changes in the workspace.
- **List all Hourtick timesheets** (List). Get your timesheet status for one week in Hourtick. Returns the week object with weekStart and status (null when not submitted, otherwise submitted, approved or rejected). Required: weekStart, the Monday of the week (e.g. 2026-08-03).

- **Create a Hourtick timesheet** (Create). Submit or withdraw a timesheet week in Hourtick. Returns a JSON object whose field set is not enumerated upstream — the API documents an untyped object response. A 409 is returned when the week is in the wrong state for the requested action. Required: weekStart, action.
- **List all Hourtick approvals** (List). List the weeks waiting for approval in Hourtick (managers). Optionally filter by status, `submitted` or `approved`. Returns a JSON object; the API spec documents no specific fields for it.
- **Create a Hourtick approval** (Create). Approve, send back, or reopen a team member's week in Hourtick (managers). Returns a JSON object; the API spec documents no specific fields for it. Requires userId, weekStart, and action (`approve`, `reject`, or `reopen`). Required: userId, weekStart, action.
- **Create a Hourtick invoicing** (Create). Mark hourtick time entries as invoiced (or revert them) in bulk. Returns: updated. Admin-only; marked entries are locked. Required: entryIds, invoiced.
- **List all Hourtick members** (List). List all members of a Hourtick workspace (managers). Returns each member's id and the upstream member fields (attributes). No query parameters are required.
- **List all Hourtick cost rates** (List). List every member's hourly cost rates in Hourtick, newest first. Returns: userId, hourlyCostMinor, validFrom. Requires admin access.
- **Hourtick member cost rates bulk update** (Update). Set a member's hourly cost rate in hourtick, effective from a given day — time is costed at the rate valid on its day. Returns: validFrom. Admins only; set hourlyCost to null to remove the rate that starts on validFrom. Required: user_id, hourlyCost.
- **List all Hourtick agent costs** (List). List the Hourtick agent cost ledger for a period. Returns cost rows with costUsd, model, inputTokens, outputTokens, agentId, and spentDate; an agent's own rows, or all for admins (agentId narrows it). Required: from, to.
- **Create a Hourtick agent cost** (Create). Report what a piece of work cost in Hourtick; it counts toward the agent's budget and the P&L, and each cost is reported once (here, MCP log_time usage, or session usage). Returns the created cost record with costUsd, model, inputTokens, outputTokens, agentId, and spentDate. Admins pass agentId to report for another agent; spentDate defaults to today.
- **Delete a Hourtick agent cost by ID** (Delete). Delete an agent cost row in hourtick by id. Use this to remove an incorrectly recorded cost. Returns an empty 204 response on success. Required: id.
- **List all Hourtick AI providers** (List). List the AI provider connections in Hourtick used for verified agent cost. Returns each connection's id, provider, label, and fillGaps setting; keys are never returned, only their last 4 characters.
- **Create a Hourtick AI provider** (Create). Connect an Anthropic, OpenAI, or OpenRouter key in Hourtick to read what the provider billed for agent work; the key is checked against the provider, then stored encrypted. Returns the created connection with id, provider, label, and fillGaps. Required: provider, key.
- **Update a Hourtick AI provider by ID** (Update). Rename an AI provider connection in Hourtick, or turn gap-filling from provider bills on or off. Returns an empty 204 response on success. Required: id.
- **Delete a Hourtick AI provider by ID** (Delete). Delete an AI provider connection in Hourtick, removing the stored key, its synced bills, and the cost it filled in. Returns an empty 204 response on success. Required: id.
- **List all Hourtick AI provider scopes** (List). List the AI provider scopes in hourtick: what the connected AI provider's key can see — Anthropic workspaces, OpenAI projects and API keys, OpenRouter keys — and which agent each is mapped to. Returns a single JSON object whose field structure is not documented in the upstream API reference. Required: ai_provider_id.
- **Hourtick AI provider scopes bulk update** (Update). Map an AI provider scope to an agent in hourtick, or clear the mapping by passing agentId as null. Returns an empty 204 response on success. For OpenAI, an agent can map to projects or API keys but not both. Required: ai_provider_id, scopeType, scopeId, agentId.
- **Create a Hourtick AI provider sync** (Create). Trigger a manual sync of an AI provider in hourtick to read its last 30 days of bills now and reconcile them (the same sync also runs automatically every 6 hours). Returns: rows. Required: ai_provider_id.
- **List all Hourtick reports cost reconciliations** (List). Get the Hourtick agent cost reconciliation report: what agents reported as their cost vs what the providers (Anthropic, OpenAI, OpenRouter) billed, per agent and UTC month, including what was filled in from the cost ledger source. Admins only. Returns the report object with report-specific fields (the upstream API does not enumerate them). Required: from, to.
- **List all Hourtick reports agent outcomes** (List). List Hourtick agent outcomes for a date range: for each task with agent work done in the period, the agent's time and cost, people's time before (briefing) and after (review and rework) delivery, how often work was sent back, and who approved it. Returns: currency, from, to, totals, agents, tasks. Required: from, to.
- **List all Hourtick client AI reports previews** (List). Preview a client AI work report in Hourtick without sharing it: people's and agents' hours, agents and models used, and whether a person reviewed each piece of agent work (no rates, costs or notes). Returns the report object with report-specific fields. Required: clientId, from, to.
- **List all Hourtick client AI reports** (List). List shared client AI work reports in Hourtick, newest first. Returns each report's id and report content (hours by people and agents, models used, human review); links are not included.
- **Create a Hourtick client AI report** (Create). Freeze a client AI work report for a Hourtick client and get a share link. Returns: id. Admins only. Required: clientId, from, to.
- **Delete a Hourtick client AI report by ID** (Delete). Revoke a shared client AI work report in Hourtick by id; its share link stops working at once. Returns an empty 204 response on success. Admins only. Required: id.
- **Get single Hourtick AI report by ID** (Get). Get a shared client AI work report from Hourtick by id (the token from the report's share link). Returns the report content plus fingerprint, createdAt, and fingerprintMethod. Unknown or revoked tokens return 404. Required: id.
- **List all Hourtick integrations** (List). List the vendor integrations Hourtick supports (Linear, Notion, Teamwork, Asana) and whether you are connected to each. Returns: id, label, available, asks, connection.
- **Create a Hourtick integration** (Create). Start connecting a vendor integration (linear, notion, teamwork or asana) in Hourtick. Returns: url. Required: provider.
- **Hourtick integrations bulk delete** (Delete). Disconnect a vendor integration (linear, notion, teamwork or asana) from Hourtick: forgets the stored tokens and asks the vendor to revoke them where it supports that. Returns an empty 204 response on success. Required: provider.
- **List all Hourtick work item links** (List). List the items linked to a Hourtick work item (Linear issues, Notion pages, Teamwork or Asana tasks). Returns each link's id, provider, label, url, title, and status, with title and status refreshed when older than 5 minutes. Required: work_item_id.
- **Create a Hourtick work item link** (Create). Link a Linear issue, Notion page, Teamwork task or Asana task to a Hourtick work item by its address (a Linear identifier such as ENG-123 also works). Returns the created link with id, provider, label, url, title, and status. One link per provider per task — a new link replaces the old, and the provider must already be connected. Required: work_item_id, url.
- **Delete a Hourtick work item link by ID** (Delete). Remove a link from a Hourtick work item. Time already sent to Teamwork stays there. Returns an empty 204 response on success. Required: id, work_item_id.
- **List all Hourtick notes** (List). List notes on a project or client in Hourtick, newest edit first, with titles and previews. Returns each note's id, title, preview, updatedAt, updatedBy, and createdBy. Give either projectId or clientId.

- **Create a Hourtick note** (Create). Create a note on a project or client in Hourtick, sending the document as markdown or as Tiptap JSON in content. Returns the created note including id, title, version, markdown, and updatedAt.
- **Get single Hourtick note by ID** (Get). Get a single note by id in Hourtick. Returns the full note including title, Tiptap content, markdown, plain text, and version. Required: id.
- **Update a Hourtick note by ID** (Update). Save a note by id in Hourtick: replace the title and/or document (markdown or Tiptap content) against the version you started from, or append with appendMarkdown without a version. On a 409 conflict, resend with force: true to keep yours. Returns the saved note including id, title, version, and updatedAt. Required: id.
- **Delete a Hourtick note by ID** (Delete). Delete a note by id in Hourtick (its creator or a manager). Returns an empty 204 response on success. Required: id.
- **List all Hourtick files** (List). List files attached to a Hourtick project or client, newest first. Returns attachment records including id, created_at, and updated_at. Filter by projectId or clientId.
- **Create a Hourtick file** (Create). Upload a file to a Hourtick project or client as multipart form data. Returns the created file record including id, created_at, and updated_at. Up to 25 MB; uploads count toward usage and pause when the limit is reached.
- **Get single Hourtick file by ID** (Get). Open a Hourtick file by id and get its short-lived signed URL — the endpoint answers with a 302 redirect, or a `{ url }` JSON body when JSON output is requested. Returns: url. Required: id.
- **Delete a Hourtick file by ID** (Delete). Delete a Hourtick file by id. Only the file's uploader or a manager may delete it. Returns an empty 204 response on success. Required: id.
- **List all Hourtick records counts** (List). Get the number of notes and files attached to each project and client in Hourtick. Returns: projects, clients. Takes no parameters.
- **List all Hourtick clients** (List). List Hourtick clients with their VAT numbers and active project counts. Returns each client's id, name, vatNumber, and activeProjectCount.
- **Create a Hourtick client** (Create). Create a client in Hourtick (admins, or an agent an admin allows), optionally with a VAT number; the creation records who added it. Returns: id, name, vatNumber. Requires name (1–200 characters). Required: name.
- **Update a Hourtick client by ID** (Update). Update a client in Hourtick: rename it, set or clear its VAT number, or archive it. Returns the updated client object including id, name, vatNumber, and archived. Client names must be unique. Required: id.
- ...and 69 more tools. Call `tools/list` via the MCP endpoint, or see the full catalog via the API, for the complete set.
