# Clockify MCP connector

The Clockify connector brings clients, expenses, timesheet approval requests, cost rates and workspace settings into Claude, ChatGPT, Cursor and the Elaichi Agent, so each person can look up and update them inside their own Clockify access.

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

## Facts

| | |
| --- | --- |
| Application | Clockify |
| Category | Time Tracking |
| AI tools | 169 |
| 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 Clockify is connected

- Which approval requests are still waiting in the Design workspace?
- List every expense logged for Acme this month.
- Add Northwind as a client in the Consulting workspace.

## Connect Clockify in Elaichi

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

1. Open Connections, choose Add connection, and pick Clockify.
2. Optionally set Share with, then press Connect.
3. Paste a Clockify API key. One person generates a token in Clockify 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 Clockify tools are exposed, rename them, or freeze arguments before anyone points a client at it.

## Clockify 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.

## Clockify 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.

## Clockify 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 Clockify 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 Clockify 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 Clockify through Elaichi

### Review expenses before the month closes

Finance. Ask for every expense logged in a Clockify workspace this month, grouped by client, and add the ones that came in by email without opening Clockify.

### Update cost rates for the whole team

Finance. When salaries change, apply new cost rates across a Clockify workspace in one pass instead of editing each person by hand.

### Keep the client list current

Operations. Add a new client to Clockify the moment a contract is signed, rename one after a rebrand, or archive one the work has ended for.

### Chase approvals that are still waiting

People. List the timesheet approval requests still open in Clockify, see who submitted them, and approve or send back the ones that need a change.

### Set up a workspace for a new engagement

Project management. Create a Clockify workspace, add the custom fields the client wants on every entry, and check which users already have access.

### Answer a client question from live records

Agency leadership. When a client asks what was spent last week, pull the matching Clockify expenses and approval requests and summarize them in the reply.

## Frequently asked questions

### How do I connect Clockify to Claude?

Connect Clockify in Elaichi first. Clockify signs in with an API key that you copy from your Clockify profile and paste into Elaichi, and there is no client ID or secret to generate. Then in Claude go to Customize, then Connectors, then Add, and paste the endpoint https://api.elaichi.ai/mcp. Claude signs you in through Elaichi and your Clockify clients, expenses and approval requests are available.

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

Yes. Once Clockify 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 Clockify once and every client uses it.

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

It can list the clients, expenses, approval requests, users and workspaces in Clockify, look one up by name, and create or update them for you. In practice that means asking which approval requests are still waiting, adding an expense for a client, or setting new cost rates across a workspace. Short, concrete asks such as "add Northwind as a client" work better than long paragraphs.

### Does connecting Clockify give the AI access to every workspace?

No. Every call to Clockify runs as the person who signed in, so the AI sees only the workspaces, clients and expenses that person can already see in Clockify. Elaichi can narrow that further with restrictions, and it can never widen it beyond what Clockify itself allows that person.

### Can my team share one Clockify connection?

Yes. One person connects Clockify with their API key and shares the connection with a team in Elaichi, and nobody else ever handles the key. Each teammate still signs in to Elaichi as themselves, so the audit log records who created a Clockify expense or approved a request.

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

Yes. Restrictions in Elaichi apply per action, so you can allow reading Clockify clients and expenses while blocking deleting a client or changing cost rates. A restricted action is never shown to Claude, ChatGPT or Cursor at all, so no prompt can reach it.

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

Offboarding a person in Elaichi ends their access to Clockify through every client at once. If they connected Clockify and shared it, the shared connection keeps working for everyone else on the team. Disconnecting Clockify once in Elaichi removes it from Claude, ChatGPT, Cursor and every other client together.

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

Yes. Clockify 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.

## All 169 Clockify tools

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

- **Create a Clockify file image** (Create). Upload a photo image to Clockify. Returns the uploaded file's record including its id and upstream-defined attributes.
- **List all Clockify users** (List). Get the currently logged-in Clockify user's info. Returns the user object with its id plus the user attributes defined by Clockify's upstream UserDtoV1 schema; the full field-level breakdown is in the Clockify API reference.
- **List all Clockify workspaces** (List). List all Clockify workspaces the authenticated user belongs to. Returns workspace records, each identified by its id.
- **Create a Clockify workspace** (Create). Create a new workspace in Clockify. Returns the created workspace record, including its id. Requires a JSON body matching the Clockify CreateWorkspaceRequestV1 schema.
- **Get single Clockify workspace by ID** (Get). Get info for a single Clockify workspace by id. Returns the workspace record, including its id. Required: id.
- **List all Clockify workspace approval requests** (List). List approval requests in a Clockify workspace, filterable by status and request type. Returns approval request detail objects, each with an id and schema-specific fields defined by Clockify's ApprovalDetailsDtoV1. Required: workspace_id.
- **Create a Clockify workspace approval request** (Create). Submit an approval request in a Clockify workspace. Returns the created approval request, including its id, with further fields defined by Clockify's ApprovalRequestDtoV1 schema. A JSON request body is required. Deprecated upstream. Required: workspace_id, periodStart.
- **Update a Clockify workspace approval request by ID** (Update). Update an approval request in a Clockify workspace by id. Returns the updated approval request, including its id, with further fields defined by Clockify's ApprovalRequestDtoV1 schema. A JSON request body is required. Required: id, workspace_id, state.
- **Create a Clockify approval requests user** (Create). Submit an approval request for a user in Clockify. Returns the created approval request object including its id, type, and workspaceId. Requires workspace_id, user_id, and a JSON body following Clockify's CreateApprovalRequest schema. This upstream operation is deprecated. Required: workspace_id, user_id, periodStart.
- **List all Clockify workspace clients** (List). List clients on a Clockify workspace. Returns each client's id and name. Required: workspace_id.
- **Create a Clockify workspace client** (Create). Create a new client in a Clockify workspace. Returns the created client's id and name. Required: workspace_id.
- **Get single Clockify workspace client by ID** (Get). Get a single Clockify client by id. Returns the client's id and name. Required: id, workspace_id.
- **Update a Clockify workspace client by ID** (Update). Update a client in a Clockify workspace by id. Returns the updated client's id and name. Required: id, workspace_id.
- **Delete a Clockify workspace client by ID** (Delete). Delete a client from a Clockify workspace by id. Returns the deleted client's id and name. Required: id, workspace_id.
- **Clockify workspace cost rates bulk update** (Update). Update the workspace-level cost rate for a Clockify workspace. Returns the updated workspace record with its id and workspace-specific attributes (fields defined by Clockify's WorkspaceDtoV1). Requires workspace_id and a cost-rate payload body. Required: workspace_id, amount.
- **List all Clockify workspace custom fields** (List). List the custom fields defined on a Clockify workspace. Returns: allowedValues, description, entityType, id, name, onlyAdminCanEdit, placeholder, projectDefaultValues, required, status, type, workspaceDefaultValue, workspaceId. Required: workspace_id.
- **Create a Clockify workspace custom field** (Create). Create a custom field on a Clockify workspace. Returns the created custom field's id, name, type, and description. Required: workspace_id, name, type.
- **Update a Clockify workspace custom field by ID** (Update). Update a custom field on a Clockify workspace by id. Returns the updated custom field's id, name, type, and description. Required: id, workspace_id, name.
- **Delete a Clockify workspace custom field by ID** (Delete). Delete a custom field from a Clockify workspace by id. Returns an empty 204 response on success. Required: id, workspace_id.
- **Get single Clockify entities created by ID** (Get). List Clockify workspace records created within a start/end date range (experimental). Returns created entity records with content-type-specific fields, determined by the requested type values.g. TIME_ENTRY). Required: id, type.
- **Get single Clockify entities deleted by ID** (Get). Get Clockify workspace records that were deleted within a date range (experimental). Returns pageable deleted-entity records, each with an id and entity-type-specific attributes. Deleted entities are reflected in the results about one minute after deletion, and entities created and deleted within the requested range are excluded. Required: id, type.
- **Get single Clockify entities updated by ID** (Get). List Clockify workspace records that were updated within a date range (experimental). Returns updated-entity change records with fields specific to each requested entity type.g. TIME_ENTRY). Entities both created and updated within the range are excluded from the results. Required: id, type.
- **List all Clockify workspace expenses** (List). List all expenses in a Clockify workspace, optionally filtered by the user linked to the expense. Returns the workspace's expense records, each including its id; the remaining fields of Clockify's expenses-and-totals response (ExpensesAndTotalsDtoV1) are not enumerated in the discovered docs. Required: workspace_id.
- **Create a Clockify workspace expense** (Create). Create an expense in a Clockify workspace by sending a multipart/form-data body. Returns the created expense record, including its id; the remaining fields of Clockify's ExpenseDtoV1 response are not enumerated in the discovered docs. Required: workspace_id.
- **Update a Clockify workspace expense by ID** (Update). Update a Clockify expense by id, sending a multipart/form-data body. Returns the updated expense record, including its id; the remaining fields of Clockify's ExpenseDtoV1 response are not enumerated in the discovered docs. Required: id, workspace_id.
- **Delete a Clockify workspace expense by ID** (Delete). Delete a Clockify expense by id from a workspace. Returns an empty 204 response on success. Required: id, workspace_id.
- **Get single Clockify workspace expense by ID** (Get). Get a Clockify expense by id within a workspace. Returns the expense record with its id and an attributes object holding the expense's fields (the exact field set is defined by Clockify's expense schema). Required: id, workspace_id.
- **List all Clockify expenses categories** (List). List all expense categories in a Clockify workspace. Returns each category's id and name. Required: workspace_id.
- **Create a Clockify expenses category** (Create). Create a new expense category in a Clockify workspace. Returns the created category's id and name. Required: workspace_id, name.
- **Update a Clockify expenses category by ID** (Update). Update an existing expense category in a Clockify workspace by id. Returns the updated category's id and name. Required: id, workspace_id, name.
- **Delete a Clockify expenses category by ID** (Delete). Delete an expense category from a Clockify workspace by id. Returns an empty 204 response on success. Required: id, workspace_id.
- **Clockify categorie status bulk update** (Update). Archive an expense category in a Clockify workspace by updating its status. Returns the updated category with its id and name. Required: id, workspace_id.
- **List all Clockify expense files** (List). Download the receipt file attached to a Clockify expense. Returns the raw receipt file contents as binary data; the format depends on how the file was uploaded. Required: file_id, expense_id, workspace_id.
- **List all Clockify workspace holidays** (List). List holidays on a Clockify workspace. Returns an array of holiday records, each including its id. Required: workspace_id.
- **Create a Clockify workspace holiday** (Create). Create a holiday on a Clockify workspace. Returns the created holiday record including its id and name. Required: workspace_id, datePeriod, name.
- **Update a Clockify workspace holiday by ID** (Update). Update a holiday on a Clockify workspace by id. Returns the updated holiday record including its id and name. Required: id, workspace_id, datePeriod, name, occursAnnually.
- **Delete a Clockify workspace holiday by ID** (Delete). Delete a holiday from a Clockify workspace by id. Returns the deleted holiday record including its id and name. Required: id, workspace_id.
- **List all Clockify holidays in periods** (List). List Clockify holidays on a workspace that fall within a specific period, filtered by assigned user and start/end dates (expected format yyyy-MM-ddThh:mm:ssZ). Returns an array of holiday records; each includes its holiday id. Required: workspace_id, assigned_to, start, end.
- **Clockify workspace hourly rates bulk update** (Update). Update a Clockify workspace's hourly billable rate. Returns the updated workspace object (WorkspaceDtoV1); the source documents its shape by schema reference only, without field-level detail. Required: workspace_id, amount, currency.
- **List all Clockify workspace invoices** (List). List all invoices on a Clockify workspace. Returns a paginated list of invoices with fields including id, status, client, issue_date, due_on, amount, and balance. Requires workspace_id. Required: workspace_id.
- **Create a Clockify workspace invoice** (Create). Create a new invoice in a Clockify workspace. Returns the created invoice including id, status, client, issue_date, and amount. Requires workspace_id and a JSON body matching Clockify's CreateInvoiceRequest schema. Required: workspace_id, clientId, currency, dueDate, issuedDate, number.
- **Update a Clockify workspace invoice by ID** (Update). Update an invoice in a Clockify workspace by id. Returns the updated invoice including id, status, client, issue_date, and amount. Requires workspace_id, id, and a JSON body matching Clockify's UpdateInvoiceRequestV1 schema. Required: id, workspace_id, currency, discountPercent, dueDate, issuedDate, number, tax2Percent, taxPercent.
- **Delete a Clockify workspace invoice by ID** (Delete). Delete an invoice from a Clockify workspace by id. Requires workspace_id and id. Returns an empty 200 response on success. Required: id, workspace_id.
- **Clockify workspace invoices duplicate** (Duplicate). Duplicate an existing invoice in a Clockify workspace. Returns the new duplicate invoice including id, status, client, issue_date, and amount. Requires workspace_id and invoice_id. Required: invoice_id, workspace_id.
- **Get single Clockify workspace invoice by ID** (Get). Get a single Clockify invoice by id within a workspace. Returns the invoice overview with its id, client, status, issue_date, due_on, amount, and balance. Required: id, workspace_id.
- **List all Clockify invoices info** (List). Filter and list Clockify invoices on a workspace by sending filter criteria in the request body. Returns matching invoice info records including their id. Required: workspace_id.
- **List all Clockify invoices settings** (List). Get the invoice settings for a Clockify workspace. Returns the invoice settings object (upstream schema InvoiceSettingsDtoV1) with schema-defined fields; the field-level breakdown is not enumerated in these docs. Required: workspace_id.
- **Clockify invoices settings bulk update** (Update). Change the invoice settings for a Clockify workspace. Returns an empty 200 response on success. First GET the current settings, modify only the fields to change, and send the full payload back — PUT replaces the entire resource, so omitted fields are overwritten with defaults or cleared. Required: workspace_id, labels.
- **Get single Clockify invoice export by ID** (Get). Export a Clockify invoice as a downloadable file within a workspace. Returns the exported invoice file as raw binary content (not a JSON object). Required: id, workspace_id, user_locale.
- **Create a Clockify invoice item** (Create). Add item to an invoice. Returns: amount, balance, billFrom, calculationType, clientAddress, clientId, clientName, companyId. Required: workspace_id, invoice_id, applyTaxes, description, itemType, quantity, unitPrice.
- ...and 119 more tools. Call `tools/list` via the MCP endpoint, or see the full catalog via the API, for the complete set.
