Clockify MCP Server
A scoped MCP server for managing Clockify workspaces, offering read/write tools for clients, projects, tasks, tags, and time entries, with idempotent structure scaffolding and gated deletion.
README
Clockify MCP Server
A scoped Clockify MCP server for mcp.sco-mo.com. Exposes a fixed read/write
tool set plus a code-defined structure scaffold that replaces Clockify's
paid-gated project templates. The structure lives as code (lib/structure.ts) —
a single source of truth that's editable, re-runnable, and version-controlled.
v0.1 DRAFT. The
STRUCTUREconfig is a draft pending Oel's Excel reconciliation. The mechanism is built; do not runscaffoldStructureagainst the live workspace yet (see Build sequence).
Stack
- Next.js App Router route handler +
mcp-handler(Vercel adapter) - Pipeline: GitHub → Vercel → Cloudflare, custom domain
mcp.sco-mo.com - Clockify base API:
https://api.clockify.me/api/v1
MCP endpoint (streamable-http): https://mcp.sco-mo.com/api/mcp
Health probe (open): https://mcp.sco-mo.com/api/health
Environment variables
Set these in the Vercel dashboard (never in code, never committed):
| Var | Value | Notes |
|---|---|---|
CLOCKIFY_API_KEY |
the raw NDQ… key |
Sent as X-Api-Key. Never logged. |
CLOCKIFY_WORKSPACE_ID |
69476cbc9bfb39506eedab0a |
Fixed target workspace. |
MCP_BEARER_TOKEN |
a strong random token | Guards the endpoint. Clients send Authorization: Bearer <token>. |
.env is git-ignored. Copy .env.example → .env.local for local dev.
If MCP_BEARER_TOKEN is unset the endpoint fails closed (401), never open.
Tools — the complete scoped set (do not add to this)
Read — getCurrentUser, listUsers, listTimeEntries, getTimeEntry,
listProjects, listClients, listTasks, listTags
Write — upsertTimeEntry, upsertProject, upsertClient, upsertTask,
upsertTag, archiveProject, archiveClient, deleteProject (gated),
deleteClient (gated), scaffoldStructure, newProjectFromShape
Delete discipline (the one irreversible surface)
- Clockify enforces archive-before-delete.
deleteProject/deleteClientverify the target is archived and refuse otherwise. - Both require an explicit
confirm: trueargument (typed asliteral(true)), and are never called by an unattended agent — the review gate. - Deleting a project removes it from time entries but leaves the underlying time data intact.
scaffoldStructure
Idempotent, additive-only reconcile of the workspace toward STRUCTURE:
creates any missing client/project/task/tag, skips what exists, never deletes.
dryRun defaults to true — it returns the plan without writing. Pass
dryRun: false to apply. Idempotency is by name.
newProjectFromShape
The template replacement. Instantiates a project + its standard task list from a
shape in STRUCTURE.shapes (e.g. matter). Creates the client if a clientName
is given and missing.
Local development
npm install
cp .env.example .env.local # fill in the three vars
npm run dev # http://localhost:3000/api/mcp
npm run typecheck
Smoke-test the endpoint (expects 401 without the token):
curl -s http://localhost:3000/api/health
Deploy
- Push to GitHub; import into Vercel (framework auto-detected as Next.js).
- Add the three environment variables in Vercel → Settings → Environment Variables.
- Add the domain
mcp.sco-mo.com(Vercel → Domains); point Cloudflare DNS per the existing pipeline. - Redeploy. Verify
GET /api/healthreturnsconfigalltrue.
Build sequence
- ✅ Now: server, scoped tool set, delete gate, and
scaffoldStructure/newProjectFromShapebuilt and deployed. - ⛔ Do not run
scaffoldStructurewithdryRun:falseagainst the live workspace yet. - Oel sends the Excel of the existing structure. Reconcile
lib/structure.tsagainst it — Scottmoore project granularity, kill dead old-company projects, confirm the Personal breakdown. - Then run
scaffoldStructureto build/adjust the live workspace, and archive/delete old-company remnants (delete gated, oneconfirmeach).
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.