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.
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.
{
"mcpServers": {
"ontime": {
"command": "npx",
"args": ["-y", "@ontime/mcp"],
"env": { "ONTIME_API_KEY": "ont_••••••••••••" }
}
}
}scoped · rate-limited · mutations audit-logged
Settings → API. The key is shown once and hashed at rest. Scope it to what the agent should be able to read.
Drop the config into your MCP client. The key travels as an environment variable, never in the prompt.
"Who still hasn't punched in at the Pune plant?" — the agent reads the same reconciled timeline your console shows.
Who still hasn't punched in at the Pune plant?
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.
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 | What the agent can do | Status |
|---|---|---|
employees.list | Directory: name, code, department, status — filtered, org-scoped. GET /api/public/v1/employees | LIVE |
attendance.byDate | Any day's reconciled attendance: status, worked minutes, OT minutes. GET /api/public/v1/attendance | LIVE |
reports.run | Run a report template and get CSV, Excel or PDF back. | ROADMAP |
leave.pending / regularizations.pending | Read approval queues with their context — balance-after and team coverage. | ROADMAP |
roster.draft | Propose next week's roster as a draft. A human publishes it. | ROADMAP |
Write actions — approve, publish, disburse | Deliberately absent. Agents prepare; humans decide. | POLICY |
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.
Delivery is in-process and best-effort rather than a durable queue — treat a webhook as a prompt to fetch, not a guaranteed record.
Approvals stay human. That's the point.
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.
Payroll is calculated, reviewed and disbursed by people inside the console. An agent can help you prepare a cycle; it cannot move money.
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.
Free for your first 10 employees. Issue a key in Settings → API.