Server data from the Official MCP Registry
MCP server for the Clockify time-tracking API (projects, time entries, reports, invoices).
MCP server for the Clockify time-tracking API (projects, time entries, reports, invoices).
The clockify-mcp server is a well-structured MCP server that exposes Clockify time-tracking APIs through a tiered access-mode system. Authentication is properly handled via API key (env vars, not hardcoded), input validation is present through workspace/user resolution, and permissions are appropriately scoped to the stated purpose. Minor code quality observations around error handling and logging do not materially affect security posture. Supply chain analysis found 3 known vulnerabilities in dependencies (0 critical, 3 high severity). Package verification found 1 issue.
4 files analyzed · 8 issues found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
This plugin requests these system permissions. Most are normal for its category.
Set these up before or after installing:
Environment variable: CLOCKIFY_API_KEY
Environment variable: CLOCKIFY_ACCESS_MODE
Environment variable: CLOCKIFY_DEFAULT_WORKSPACE_ID
Add this to your MCP configuration file:
{
"mcpServers": {
"io-github-tracegazer-clockify-mcp": {
"env": {
"CLOCKIFY_API_KEY": "your-clockify-api-key-here",
"CLOCKIFY_ACCESS_MODE": "your-clockify-access-mode-here",
"CLOCKIFY_DEFAULT_WORKSPACE_ID": "your-clockify-default-workspace-id-here"
},
"args": [
"clockify-mcp"
],
"command": "uvx"
}
}
}From the project's GitHub README.
A Model Context Protocol server for the Clockify time-tracking API.
Give your AI assistant access to your Clockify data — query workspaces, projects, and time entries, generate reports, log hours, and manage clients, invoices, and more — all through natural language.
112 tools across 18 domains. Read-only by default, with optional write operations behind explicit opt-in.
48 read-only tools are available today (Phase 0–8b — 18 domains). 64 write tools (create/update/delete across clients, projects, tasks, tags, time entries, holidays, expenses, and expense categories, plus time-off policy/request management, approval submit/resubmit/update, custom-field create/update/delete and project assignment, scheduling assignment management, invoice and payment management, shared-report management, and webhook create/update/delete/token) register when you set CLOCKIFY_ACCESS_MODE=full (or the back-compat CLOCKIFY_ENABLE_WRITES=true). A middle time-tracking mode exposes only the time-entry writes for logging hours — see Access modes.
| Domain | Tools | Tool names |
|---|---|---|
| Workspaces | 3 | get_current_user, list_workspaces, get_workspace |
| Users | 3 | list_users, get_user_member_profile, find_user_team_manager |
| Groups | 1 | list_user_groups |
| Clients | 2 | list_clients, get_client |
| Projects | 2 | list_projects, get_project |
| Tasks | 2 | list_tasks, get_task |
| Tags | 2 | list_tags, get_tag |
| Time entries | 2 | list_time_entries, get_time_entry |
| Reports | 6 | generate_detailed_report, generate_summary_report, generate_weekly_report, generate_attendance_report‡, generate_expense_report‡, export_report (PDF/CSV/XLSX to a file) |
| Shared reports | 2 | list_shared_reports, get_shared_report |
| Time off† | 5 | list_time_off_policies, get_time_off_policy, list_time_off_balances_by_policy, list_time_off_balances_by_user, list_time_off_requests |
| Holidays† | 2 | list_holidays, list_holidays_in_period |
| Expenses† | 4 | list_expenses, get_expense, list_expense_categories, download_expense_receipt |
| Approvals† | 1 | list_approval_requests |
| Custom fields† | 2 | list_workspace_custom_fields, list_project_custom_fields |
| Scheduling† | 3 | list_scheduled_assignments, get_project_scheduling_totals, get_user_scheduling_totals |
| Invoices† | 3 | list_invoices, get_invoice, get_invoice_payments |
| Webhooks† | 3 | list_webhooks, get_webhook, get_webhook_logs |
† Time off, Holidays, Expenses, Approvals, Custom fields, Scheduling, Invoices, and Webhooks are paid Clockify features — these tools error (HTTP 402/403/404) on plans without them.
‡ generate_attendance_report and generate_expense_report (and export_report for those two types) need the workspace's attendance/Expenses add-ons; the time-based reports (detailed/summary/weekly) and shared reports work on the free plan.
Write tools (opt-in — set CLOCKIFY_ENABLE_WRITES=true):
| Domain | Tools | Tool names |
|---|---|---|
| Clients | 3 | create_client, update_client, delete_client |
| Projects | 3 | create_project, update_project, delete_project |
| Tasks | 3 | create_task, update_task, delete_task |
| Tags | 3 | create_tag, update_tag, delete_tag |
| Time entries | 7 | create_time_entry, update_time_entry, delete_time_entry, duplicate_time_entry, bulk_update_time_entries, create_time_entry_for_user, stop_running_timer |
| Shared reports | 3 | create_shared_report, update_shared_report, delete_shared_report |
| Time off† | 5 | create_time_off_policy, create_time_off_request, approve_time_off_request, reject_time_off_request, withdraw_time_off_request |
| Holidays† | 3 | create_holiday, update_holiday, delete_holiday |
| Expenses† | 7 | create_expense, update_expense, delete_expense, create_expense_category, update_expense_category, delete_expense_category, archive_expense_category |
| Approvals† | 4 | submit_approval_request, submit_approval_request_for_user, resubmit_approval_entries, update_approval_request |
| Custom fields† | 5 | create_workspace_custom_field, update_workspace_custom_field, delete_workspace_custom_field, set_project_custom_field, remove_project_custom_field |
| Scheduling† | 5 | create_scheduled_assignment, update_scheduled_assignment, delete_scheduled_assignment, publish_scheduled_assignment, copy_scheduled_assignment |
| Invoices† | 9 | create_invoice, update_invoice, change_invoice_status, duplicate_invoice, delete_invoice, create_invoice_item, update_invoice_item, delete_invoice_item, create_invoice_payment |
| Webhooks† | 4 | create_webhook, update_webhook, delete_webhook, generate_webhook_token |
† Time off, Holidays, Expenses, Approvals, Custom fields, Scheduling, Invoices, and Webhooks are paid Clockify features — these tools error (HTTP 402/403/404) on plans without them.
create_expense and update_expense accept an optional local receipt file, uploaded via multipart.
pip install clockify-mcp
Or run without installing (requires uv):
uvx clockify-mcp
Add this to your claude_desktop_config.json:
{
"mcpServers": {
"clockify": {
"command": "uvx",
"args": ["clockify-mcp"],
"env": {
"CLOCKIFY_API_KEY": "your-api-key"
}
}
}
}
Restart Claude Desktop. Ask: "What workspaces do I have in Clockify?"
{
"mcpServers": {
"clockify": {
"command": "clockify-mcp",
"env": {
"CLOCKIFY_API_KEY": "your-api-key"
}
}
}
}
By default the server is read-only. Opt into writes with CLOCKIFY_ACCESS_MODE:
| Mode | Reads | Writes |
|---|---|---|
read (default) | everything | nothing |
time-tracking | everything | time-entry writes only (log & edit hours) |
full | everything | all write tools (clients, projects, invoices, …) |
{
"mcpServers": {
"clockify": {
"command": "uvx",
"args": ["clockify-mcp"],
"env": {
"CLOCKIFY_API_KEY": "your-api-key",
"CLOCKIFY_ACCESS_MODE": "full"
}
}
}
}
Compatibility: the legacy
CLOCKIFY_ENABLE_WRITES=truestill works and maps tofull. If both are set,CLOCKIFY_ACCESS_MODEwins. Intime-trackingmode,duplicate/bulkalways act on the authenticated user; forupdate/deleteby id the assistant is told to confirm before touching an entry that may belong to someone else.
Warning: write mode lets the connected agent create, modify, and delete real data through your Clockify credential.
delete_*tools andwithdraw_time_off_requestare irreversible.
Log into Clockify → Profile Settings → API → copy your API key.
Configuration resolves in this order (highest priority first):
~/.config/clockify-mcp/config.toml| Env var | TOML key | Description |
|---|---|---|
CLOCKIFY_API_KEY | api_key | Your Clockify API key (required) |
CLOCKIFY_REGION | region | global (default) | euc1 (EU) | use2 (USA) | euw2 (UK) | apse2 (AU) |
CLOCKIFY_BASE_URL | base_url | Override for subdomain workspaces, e.g. https://acme.clockify.me |
CLOCKIFY_DEFAULT_WORKSPACE_ID | default_workspace_id | Fallback workspace when a tool call omits workspace_id |
CLOCKIFY_ACCESS_MODE | access_mode | read (default) | time-tracking (read + log hours) | full (all writes) |
CLOCKIFY_ENABLE_WRITES | enable_writes | Back-compat alias: true = access_mode=full. CLOCKIFY_ACCESS_MODE takes precedence. |
CLOCKIFY_TELEMETRY | telemetry_enabled | Enable OpenTelemetry — default false |
CLOCKIFY_TELEMETRY_DETAIL | telemetry_detail | Span detail: metadata (default), ids, or full |
Access modes: read exposes only read tools. time-tracking adds the time-entry write tools (create/update/delete/duplicate/bulk) for logging hours and nothing else — duplicate/bulk always act on the authenticated user, and for update/delete by id the assistant is told to confirm before touching an entry that may belong to someone else. full exposes all write tools. This gates which MCP tools the server registers; it is not a replacement for the API key's own permissions.
See config.toml.example for a copy-paste template.
# ~/.config/clockify-mcp/config.toml
api_key = "your-clockify-api-key"
# region = "global"
# default_workspace_id = ""
# access_mode = "read" # read | time-tracking | full
Tip: create the config directory first:
mkdir -p ~/.config/clockify-mcp
clockify-mcp # STDIO transport (default)
clockify-mcp --transport sse # SSE/HTTP transport
Security note: STDIO (the default) keeps everything local. The
sseandstreamable-httptransports have no built-in authentication — only use them bound to loopback or behind an authenticated reverse proxy.
/workspaces/{workspaceId}/...). Tools accept an optional workspace_id; when omitted they fall back to CLOCKIFY_DEFAULT_WORKSPACE_ID. If neither is set, the tool asks you to resolve one first via list_workspaces.page/page_size and return one page. The high-volume lists (list_time_entries, list_projects, list_clients, list_tasks, list_tags, list_users) also accept fetch_all=true to follow pagination and return every page concatenated (may make several API calls).PLAN_REQUIRED, ACCESS_DENIED, or AUTH — so the assistant knows whether to ask you to upgrade the plan, enable a module, or fix the key. See Paid features.Many domains are gated by two independent things — both must be true for the tools to work:
1. The workspace plan must include the feature. Otherwise the API returns 402 (or a "subscription" message) and the server raises ClockifyAPIError with category PLAN_REQUIRED.
| Feature | Minimum plan |
|---|---|
| Reports (detailed/summary/weekly), Shared reports | Free |
| Webhooks | Free (up to 3) — paid for more |
| Time off, Holidays, Invoices, Approvals | Standard |
| Expenses (incl. expense report), Custom fields, Scheduling | Pro |
| Attendance report | Pro (attendance/time-tracking add-on) |
2. The module must be enabled in the workspace. Even on the right plan, an admin must turn these on in Clockify → Workspace Settings: Time off, Expenses, Approval, Invoicing, Scheduling. Until enabled, the API returns 403 "Access Denied" and the server raises ClockifyAPIError with category ACCESS_DENIED. (Custom fields, webhooks, and reports need no separate toggle.)
When an operation fails, the error category says what to do:
PLAN_REQUIRED — upgrade the workspace plan (Standard/Pro).ACCESS_DENIED — enable the feature in Workspace Settings, or check the API key user's role/permission.AUTH — the API key is missing, invalid, or revoked.The server can emit OpenTelemetry traces, metrics, and logs — completely opt-in and vendor-neutral. Export to any OTLP-compatible backend (Dynatrace, Grafana, Datadog, Jaeger, etc.). When disabled, opentelemetry is never imported.
pip install "clockify-mcp[telemetry]"
export CLOCKIFY_TELEMETRY=1
OTLP endpoint and headers are configured via standard OpenTelemetry env vars (not in the TOML file). CLOCKIFY_TELEMETRY_DETAIL controls how much argument/payload data is attached (metadata default → ids → full); the API key is always redacted.
export OTEL_EXPORTER_OTLP_ENDPOINT="https://<your-env>.live.dynatrace.com/api/v2/otlp"
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Api-Token <YOUR_DT_TOKEN>"
export OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE=delta
export OTEL_SERVICE_NAME=clockify-mcp
Token scopes needed: openTelemetryTrace.ingest, metrics.ingest, logs.ingest. Dynatrace's OTLP metrics ingest requires delta temporality — without that env var, metric export fails with 400 Bad Request.
export OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:4318"
export OTEL_SERVICE_NAME=clockify-mcp
Signals emitted:
execute_tool <name>) and per Clockify API requestmcp.tool.duration, mcp.tool.errors, and Clockify client request durationsgit clone https://github.com/tracegazer/clockify-mcp
cd clockify-mcp
uv sync --extra dev
CLOCKIFY_API_KEY=dummy uv run clockify-mcp --help
uv run pytest -q
uv run ruff check src/ tests/
Be the first to review this server!
by Modelcontextprotocol · Developer Tools
Read, search, and manipulate Git repositories programmatically
by Modelcontextprotocol · Developer Tools
Web content fetching and conversion for efficient LLM usage
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.