Skip to main content
Glama
ivanherula
by ivanherula
README.md
# @ivanherula/clockify-mcp-server

An MCP (Model Context Protocol) server for [Clockify](https://clockify.me) time tracking. Exposes Clockify functionality as tools that Claude and other MCP-compatible LLM clients can invoke.

## Installation

```bash
npx @ivanherula/clockify-mcp-server
```

Or install globally:

```bash
npm install -g @ivanherula/clockify-mcp-server
clockify-mcp-server
```

## Environment Variables

| Variable | Required | Description |
|----------|----------|-------------|
| `CLOCKIFY_API_KEY` | **Yes** | Your Clockify API key (found in Profile Settings → API) |
| `CLOCKIFY_WORKSPACE_ID` | No | Override workspace ID. If omitted, the first workspace is used automatically. |

## Configuration

### Claude Desktop (`claude_desktop_config.json`)

macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
Windows: `%APPDATA%\Claude\claude_desktop_config.json`

```json
{
  "mcpServers": {
    "clockify": {
      "command": "npx",
      "args": ["-y", "@ivanherula/clockify-mcp-server@latest"],
      "env": {
        "CLOCKIFY_API_KEY": "your_api_key_here"
      }
    }
  }
}
```

### Claude Code (`claude.json`)

```json
{
  "mcpServers": {
    "clockify": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "@ivanherula/clockify-mcp-server@latest"
      ],
      "env": {
        "CLOCKIFY_API_KEY": "your_api_key_here"
      }
    }
  }
}
```

### Local development / testing

```json
{
  "mcpServers": {
    "clockify": {
      "command": "node",
      "args": ["/path/to/clockify-mcp-server/build/index.js"],
      "env": {
        "CLOCKIFY_API_KEY": "your_api_key_here"
      }
    }
  }
}
```

## Available Tools

| Tool | Description |
|------|-------------|
| `get_workspaces` | List all workspaces |
| `get_current_user` | Get authenticated user info |
| `get_projects` | List projects (filter by name, archived; paginated) |
| `get_clients` | List clients (filter by name, archived; paginated) |
| `get_tags` | List tags (filter by name, archived; paginated) |
| `get_time_entries` | List time entries with optional date range filter |
| `get_current_timer` | Get the currently running timer (null if none) |
| `create_time_entry` | Create a time entry; omit `end` to start a live timer |
| `stop_timer` | Stop the running timer with an end time |
| `update_time_entry` | Full replace of a time entry (requires `start`) |
| `delete_time_entry` | Delete a time entry by ID |

## Testing with MCP Inspector

```bash
CLOCKIFY_API_KEY=your_key npx @modelcontextprotocol/inspector node build/index.js
```

Opens at `http://localhost:5173` where you can interactively test all tools.

## License

MIT

TDQS

A3.5/5.0

Scored across 13 tools

Disambiguation5/5

Each tool targets a distinct resource or action: retrieval of workspaces/users/projects/clients/tags/tasks, CRUD for time entries, and timer control. The only potential overlap is between get_current_timer and get_time_entries, but descriptions clearly differentiate them.

Naming Consistency5/5

All tool names use snake_case with a consistent verb_noun pattern (get_, create_, update_, delete_, stop_, submit_). No deviations or mixed conventions.

Tool Count5/5

13 tools is well within the typical 3-15 range for a focused MCP server. Each tool corresponds to a meaningful operation in the Clockify domain, with no obvious redundancies.

Completeness4/5

The server covers the full lifecycle for time entries (create, read, update, delete, start/stop timer, submit for approval) and provides read access to supporting entities. However, it lacks create/update/delete operations for projects, clients, tags, and tasks, which may limit management workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues