Skip to main content
Glama
README.md
# Clockify MCP Server

A Model Context Protocol (MCP) server for Clockify that allows interaction with Clockify's time tracking entities through a standardized protocol.

## Features

- **Full CRUD Support**: Comprehensive Create, Read, Update, and Delete operations for all core Clockify entities.
- **Access to Clockify entities**:
  - Workspaces
  - Projects
  - Tasks
  - Clients
  - Tags
  - Users
  - Time Entries
  - Reports
- **Time Tracking**: Start/stop timers, log time manually, and manage time entries.
- **Full MCP Support**: Standardized protocol for use with any MCP client (Claude Desktop, Cursor, Windsurf, etc.).

## 🚀 Quick Start (Hosted)

The fastest way to use Clockify MCP is through our hosted instance at `https://kyzu-clockify-mcp.fastmcp.app/mcp`.

Add it to your favorite AI tools using these commands:

### Codex CLI
```bash
codex mcp add --url https://kyzu-clockify-mcp.fastmcp.app/mcp kyzu-clockify
```

### Claude CLI
```bash
claude mcp add --scope local --transport http kyzu-clockify https://kyzu-clockify-mcp.fastmcp.app/mcp
```

### Gemini CLI
```bash
gemini mcp add kyzu-clockify https://kyzu-clockify-mcp.fastmcp.app/mcp --transport http
```

---

## 🛠️ Local Setup (Self-Hosted)

If you prefer to run the server locally for development or private use.

### 1. Prerequisites
- [uv](https://github.com/astral-sh/uv) installed on your system.
- Clockify API key (get it from [Clockify Profile Settings](https://clockify.me/user/settings)).

### 2. Installation
```bash
git clone https://github.com/antuking/clockify-mcp.git
cd clockify-mcp
uv sync
```

### 3. Configuration
Create a `.env` file in the root directory:
```env
CLOCKIFY_API_KEY=your-api-key
CLOCKIFY_WORKSPACE_ID=your-workspace-id  # optional
```

### 4. Running the Server
```bash
uv run clockify-mcp
```

### 5. Using with MCP Clients (Local)

#### Codex CLI
```bash
codex mcp add clockify_mcp \
  --env CLOCKIFY_API_KEY=<CLOCKIFY_API_KEY> \
  --env CLOCKIFY_WORKSPACE_ID=<CLOCKIFY_WORKSPACE_ID> \
  -- uv --directory <REPO_PATH> run clockify-mcp
```

#### Claude Desktop
```json
{
  "mcpServers": {
    "clockify": {
      "command": "uv",
      "args": ["--directory", "<REPO_PATH>", "run", "clockify-mcp"],
      "env": {
        "CLOCKIFY_API_KEY": "your-api-key",
        "CLOCKIFY_WORKSPACE_ID": "your-workspace-id"
      }
    }
  }
}
```

#### Cursor / Windsurf
```json
{
  "name": "Clockify MCP",
  "command": "uv",
  "args": ["--directory", "<REPO_PATH>", "run", "clockify-mcp"],
  "env": {
    "CLOCKIFY_API_KEY": "your-api-key",
    "CLOCKIFY_WORKSPACE_ID": "your-workspace-id"
  }
}
```

#### Gemini CLI
```bash
gemini mcp add clockify \
  --env CLOCKIFY_API_KEY=<CLOCKIFY_API_KEY> \
  --env CLOCKIFY_WORKSPACE_ID=<CLOCKIFY_WORKSPACE_ID> \
  -- uv --directory <REPO_PATH> run clockify-mcp
```

## API Coverage

This server implements the following Clockify API endpoints:

### Workspaces
- `get_workspaces` - List all workspaces
- `get_workspace` - Get workspace by ID

### Projects
- `get_projects` - List all projects in a workspace
- `get_project` - Get project by ID
- `add_project` - Create a new project
- `update_project` - Update an existing project
- `delete_project` - Delete a project

### Tasks
- `get_tasks` - List all tasks
- `get_task` - Get task by ID
- `add_task` - Create a new task
- `update_task` - Update an existing task
- `delete_task` - Delete a task

### Clients
- `get_clients` - List all clients
- `get_client` - Get client by ID
- `add_client` - Create a new client
- `update_client` - Update an existing client
- `delete_client` - Delete a client

### Tags
- `get_tags` - List all tags
- `get_tag` - Get tag by ID
- `add_tag` - Create a new tag
- `update_tag` - Update an existing tag
- `delete_tag` - Delete a tag

### Users
- `get_current_user` - Get the authenticated user
- `get_users` - List all users in a workspace
- `get_user` - Get user by ID
- `add_user` - Add a user to a workspace
- `update_user` - Update a user
- `delete_user` - Remove a user from a workspace

### Time Entries
- `get_time_entries` - List time entries (with optional date range)
- `get_time_entry` - Get time entry by ID
- `add_time_entry` - Create a new time entry
- `update_time_entry` - Update an existing time entry
- `delete_time_entry` - Delete a time entry
- `get_time_entries_for_project` - Get time entries for a project

## Development

This server is built using:
- [FastMCP](https://github.com/jlowin/fastmcp) - A Python framework for building MCP servers
- [Requests](https://requests.readthedocs.io/) - For HTTP communication
- [python-dotenv](https://github.com/theskumar/python-dotenv) - For environment management

TDQS

B3.1/5.0

Scored across 36 tools

Disambiguation5/5

Each tool targets a distinct resource and action (e.g., add_client, delete_client, get_client, update_client), with no overlapping purposes. The resource type is always clear from the name.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case (add_, delete_, get_, update_). The few exceptions like get_current_user or get_reports_detailed still adhere to the pattern.

Tool Count4/5

36 tools cover CRUD for multiple resources (clients, projects, tags, tasks, time entries, users) plus workspaces and reports. While on the higher end, it is appropriate for Clockify's API scope.

Completeness5/5

The tool set covers all major CRUD operations for each resource, plus specific queries like get_time_entries_for_project and report endpoints. No obvious gaps for typical usage.

Maintenance

ActivityInactive
ResponsivenessNo issues