Employee leave and PTO requests: balances, approvals, calendars, and who-is-out summaries.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Bearer <Pro license key or anonymous token from GET https://mcp.zovo.one/mcp/token>
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Approve a pending leave request by id. Also used to re-open a rejected one. Nothing to approve on an already-approved request.
The request id (e.g. LV-0001).
Approval note
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Approve a pending leave request by id. Also used to re-open a rejected one. Nothing to approve on an already-approved request.
| Argument | Type | Description |
|---|---|---|
| comment | string | Approval note |
| request* | string | The request id (e.g. LV-0001). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"request"
],
"properties": {
"comment": {
"type": "string",
"maxLength": 2000,
"description": "Approval note"
},
"request": {
"type": "string",
"maxLength": 200,
"description": "The request id (e.g. LV-0001)."
}
},
"additionalProperties": false
}Show one employee's leave balance: allowance + carried-over, minus approved and pending, as whole days plus a possible half day. Remaining is rounded down to whole days on the report.
| Argument | Type | Description |
|---|---|---|
| employee* | string | Employee id or name |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"employee"
],
"properties": {
"employee": {
"type": "string",
"maxLength": 200,
"description": "Employee id or name"
}
},
"additionalProperties": false
}Cancel a pending or approved request by id, keeping its record with status cancelled. Differs from leave_reject in intent (voluntary withdrawal). Nothing happened if already cancelled.
| Argument | Type | Description |
|---|---|---|
| reason | string | Why |
| request* | string | The request id (e.g. LV-0001). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"request"
],
"properties": {
"reason": {
"type": "string",
"maxLength": 2000,
"description": "Why"
},
"request": {
"type": "string",
"maxLength": 200,
"description": "The request id (e.g. LV-0001)."
}
},
"additionalProperties": false
}Add an employee to the leave tracker and return their EMP-NNNN id. Give their annual paid-leave allowance in whole days and any days carried over from last year. Balances charge approved plus pending leave against allowance + carried-over. Free tier: unlimited.
| Argument | Type | Description |
|---|---|---|
| name* | string | Full name, e.g. Taylor Wren |
| string | Work email, for calendar lookup | |
| carriedOver | integer | Days carried over from last year (default 0) |
| annualAllowance* | integer | Annual paid leave allowance in whole days |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"name",
"annualAllowance"
],
"properties": {
"name": {
"type": "string",
"maxLength": 200,
"description": "Full name, e.g. Taylor Wren"
},
"email": {
"type": "string",
"maxLength": 200,
"description": "Work email, for calendar lookup"
},
"carriedOver": {
"type": "integer",
"maximum": 1000,
"minimum": 0,
"description": "Days carried over from last year (default 0)"
},
"annualAllowance": {
"type": "integer",
"maximum": 1000,
"minimum": 0,
"description": "Annual paid leave allowance in whole days"
}
},
"additionalProperties": false
}Pro. Export all APPROVED leave as an .ics calendar (RFC5545). Returns the calendar text; pass path to also write it to a local file. watermark-free.
| Argument | Type | Description |
|---|---|---|
| path | string | Local .ics file to write |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"path": {
"type": "string",
"maxLength": 500,
"description": "Local .ics file to write"
}
},
"additionalProperties": false
}Pro. Bulk-create leave requests from a CSV/TSV. First row is a header: employee,type,start,end,halfDay,status,reason. status may be omitted (defaults to pending) or be approved/rejected. Each request is still checked for overlap conflicts; a conflicting row is reported, not applied. watermark-free, full CRUD.
| Argument | Type | Description |
|---|---|---|
| csv* | string | CSV text, newline-separated, first row header: employee,type,start,end,halfDay,status,reason |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"csv"
],
"properties": {
"csv": {
"type": "string",
"maxLength": 200000,
"description": "CSV text, newline-separated, first row header: employee,type,start,end,halfDay,status,reason"
}
},
"additionalProperties": false
}List all employees, or all leave requests (optionally filtered by employee and/or status). Omit the filter to list requests.
| Argument | Type | Description |
|---|---|---|
| status | string | Filter requests by status |
| employee | string | Filter requests to one employee |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"status": {
"enum": [
"pending",
"approved",
"rejected",
"cancelled"
],
"type": "string",
"description": "Filter requests by status"
},
"employee": {
"type": "string",
"maxLength": 200,
"description": "Filter requests to one employee"
}
},
"additionalProperties": false
}Who is out in a date range: start and end are inclusive YYYY-MM-DD. Each employee appears once per day; pending requests count as a plan. Use for coverage, calendars and absence summaries. Free tier: unlimited.
| Argument | Type | Description |
|---|---|---|
| end* | string | Last day, YYYY-MM-DD, inclusive |
| start* | string | First day, YYYY-MM-DD, inclusive |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"start",
"end"
],
"properties": {
"end": {
"type": "string",
"maxLength": 32,
"description": "Last day, YYYY-MM-DD, inclusive"
},
"start": {
"type": "string",
"maxLength": 32,
"description": "First day, YYYY-MM-DD, inclusive"
}
},
"additionalProperties": false
}Reject or cancel a leave request by id. A pending or approved request becomes rejected; a rejected one can be reopened via leave_approve. Use leave_cancel (via reject with reason) for voluntary withdrawal.
| Argument | Type | Description |
|---|---|---|
| reason | string | Why |
| request* | string | The request id (e.g. LV-0001). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"request"
],
"properties": {
"reason": {
"type": "string",
"maxLength": 2000,
"description": "Why"
},
"request": {
"type": "string",
"maxLength": 200,
"description": "The request id (e.g. LV-0001)."
}
},
"additionalProperties": false
}Create a leave or PTO request and return its LV-NNNN id. type is vacation, sick, unpaid or parental. start and end are inclusive YYYY-MM-DD dates; halfDay charges half a day for the whole span. A pending request is refussed if it would overlap another approved or pending request of the same employee. Free tier: unlimited requests.
| Argument | Type | Description |
|---|---|---|
| end* | string | Last day off, YYYY-MM-DD, inclusive |
| type* | string | Kind of leave |
| start* | string | First day off, YYYY-MM-DD, inclusive |
| reason | string | Why, shown in reports and calendar |
| halfDay | boolean | Half-day charge for the whole span (default false) |
| employee* | string | The employee id or name |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"employee",
"type",
"start",
"end"
],
"properties": {
"end": {
"type": "string",
"maxLength": 32,
"description": "Last day off, YYYY-MM-DD, inclusive"
},
"type": {
"enum": [
"vacation",
"sick",
"unpaid",
"parental"
],
"type": "string",
"description": "Kind of leave"
},
"start": {
"type": "string",
"maxLength": 32,
"description": "First day off, YYYY-MM-DD, inclusive"
},
"reason": {
"type": "string",
"maxLength": 2000,
"description": "Why, shown in reports and calendar"
},
"halfDay": {
"type": "boolean",
"description": "Half-day charge for the whole span (default false)"
},
"employee": {
"type": "string",
"maxLength": 200,
"description": "The employee id or name"
}
},
"additionalProperties": false
}Turn Pro on for this connection with key, an MCPL1.<payload>.<signature> issued at checkout for this server or the bundle. Data under your token stays; a wrong or expired key changes nothing. license_status confirms it.
| Argument | Type | Description |
|---|---|---|
| key* | string | License key from checkout, MCPL1.<payload>.<signature> |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"key"
],
"properties": {
"key": {
"type": "string",
"description": "License key from checkout, MCPL1.<payload>.<signature>"
}
},
"additionalProperties": false
}Report this endpoint's licence state for your token as JSON: the product, the tier free or pro, why it is not Pro, and the checkout URL. Call it to explain a free-tier refusal. No arguments, nothing changes.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}