MCP · API · Webhooks

Your workforce, one prompt away.

ontime ships an MCP server over its public API. Point Claude, Cursor, or any MCP client at it — every call scoped, permission-gated, and rate-limited. The agent only reads; every mutation in ontime happens elsewhere, by a person, and is written to the audit log.

600 requests/minute per keyRead-only for agents
claude_desktop_config.json
{
  "mcpServers": {
    "ontime": {
      "command": "npx",
      "args": ["-y", "@ontime/mcp"],
      "env": { "ONTIME_API_KEY": "ont_••••••••••••" }
    }
  }
}

scoped · rate-limited · mutations audit-logged

60-second setup

Three steps, then ask it something.

01

Issue a key

Settings → API. The key is shown once and hashed at rest. Scope it to what the agent should be able to read.

02

Point your client at it

Drop the config into your MCP client. The key travels as an environment variable, never in the prompt.

03

Ask your first question

"Who still hasn't punched in at the Pune plant?" — the agent reads the same reconciled timeline your console shows.

A real conversation

Ask it what you'd ask an analyst.

Who still hasn't punched in at the Pune plant?

attendance.byDate · pune-plant · 200 OK · 84ms

6 of 142 haven't punched in as of 09:40. Three are on approved leave; Arjun P. and Meena S. are usually in by 09:15 — and one punch is held for review (off-zone, photo attached). Want the list as CSV, or a draft note to their supervisor?

Draft the note, and flag the off-zone punch for HR.

employees.list · reports-to:supervisor-07 · 200 OK

Drafted. The off-zone punch is already in the regularization queue — it stays with the manager, and it will show as aged once it passes 48 hours.

Can you export June's muster roll?

Not yet — reports.run is on the roadmap, so I can't pull it for you. You can export the muster roll from Compliance → Registers today, and I can tell you exactly which register you need.

Tool surface

What it can do, badged honestly.

ToolWhat the agent can doStatus
employees.listDirectory: name, code, department, status — filtered, org-scoped. GET /api/public/v1/employeesLIVE
attendance.byDateAny day's reconciled attendance: status, worked minutes, OT minutes. GET /api/public/v1/attendanceLIVE
reports.runRun a report template and get CSV, Excel or PDF back. ROADMAP
leave.pending / regularizations.pendingRead approval queues with their context — balance-after and team coverage. ROADMAP
roster.draftPropose next week's roster as a draft. A human publishes it. ROADMAP
Write actions — approve, publish, disburseDeliberately absent. Agents prepare; humans decide. POLICY
Webhooks

React to what happens, not just ask what happened.

Nine events post to your endpoint with an HMAC-SHA256 signature header, so you can verify origin. Failed deliveries retry with backoff, and each hook shows its own health.

leave.approvedleave.rejectedregularization.approvedregularization.rejectedovertime.approvedovertime.rejectedpayslip.publishedform16.availablemessage.received

Delivery is in-process and best-effort rather than a durable queue — treat a webhook as a prompt to fetch, not a guaranteed record.

Guardrails

What your agent can't do.

Approvals stay human. That's the point.

It cannot approve

Leave, punch fixes and overtime are decided by a person. There is no API surface an agent could use to approve one, and adding it is not on the roadmap.

It cannot disburse

Payroll is calculated, reviewed and disbursed by people inside the console. An agent can help you prepare a cycle; it cannot move money.

It cannot see past its key

Every call is scoped to the key's permissions and its organisation. An agent sees exactly what that key is allowed to see, and every mutation lands in the audit log.

Give your agent a workforce.

Free for your first 10 employees. Issue a key in Settings → API.