leave
Employee leave and PTO requests: balances, approvals, calendars, and who-is-out summaries.
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"leave": {
"url": "https://mcp.zovo.one/mcp/leave"
}
}
}Remote endpoints
https://mcp.zovo.one/mcp/leavestreamable-httpTool inventory
Tools (12)
🟡leave_employee_add(name, annualAllowance, carriedOver, email)
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.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 200,
"description": "Full name, e.g. Taylor Wren"
},
"annualAllowance": {
"type": "integer",
"minimum": 0,
"maximum": 1000,
"description": "Annual paid leave allowance in whole days"
},
"carriedOver": {
"type": "integer",
"minimum": 0,
"maximum": 1000,
"description": "Days carried over from last year (default 0)"
},
"email": {
"type": "string",
"maxLength": 200,
"description": "Work email, for calendar lookup"
}
},
"required": [
"name",
"annualAllowance"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡leave_request(employee, type, start, end, halfDay, ...)
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.
Input Schema
{
"type": "object",
"properties": {
"employee": {
"type": "string",
"maxLength": 200,
"description": "The employee id or name"
},
"type": {
"type": "string",
"enum": [
"vacation",
"sick",
"unpaid",
"parental"
],
"description": "Kind of leave"
},
"start": {
"type": "string",
"maxLength": 32,
"description": "First day off, YYYY-MM-DD, inclusive"
},
"end": {
"type": "string",
"maxLength": 32,
"description": "Last day off, YYYY-MM-DD, inclusive"
},
"halfDay": {
"type": "boolean",
"description": "Half-day charge for the whole span (default false)"
},
"reason": {
"type": "string",
"maxLength": 2000,
"description": "Why, shown in reports and calendar"
}
},
"required": [
"employee",
"type",
"start",
"end"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪leave_approve(request, comment)
Approve a pending leave request by id. Also used to re-open a rejected one. Nothing to approve on an already-approved request.
Input Schema
{
"type": "object",
"properties": {
"request": {
"type": "string",
"maxLength": 200,
"description": "The request id (e.g. LV-0001)."
},
"comment": {
"type": "string",
"maxLength": 2000,
"description": "Approval note"
}
},
"required": [
"request"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴leave_reject(request, reason)
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.
Input Schema
{
"type": "object",
"properties": {
"request": {
"type": "string",
"maxLength": 200,
"description": "The request id (e.g. LV-0001)."
},
"reason": {
"type": "string",
"maxLength": 2000,
"description": "Why"
}
},
"required": [
"request"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢leave_balance(employee)
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.
Input Schema
{
"type": "object",
"properties": {
"employee": {
"type": "string",
"maxLength": 200,
"description": "Employee id or name"
}
},
"required": [
"employee"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢leave_out_range(start, end)
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.
Input Schema
{
"type": "object",
"properties": {
"start": {
"type": "string",
"maxLength": 32,
"description": "First day, YYYY-MM-DD, inclusive"
},
"end": {
"type": "string",
"maxLength": 32,
"description": "Last day, YYYY-MM-DD, inclusive"
}
},
"required": [
"start",
"end"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢leave_list(employee, status)
List all employees, or all leave requests (optionally filtered by employee and/or status). Omit the filter to list requests.
Input Schema
{
"type": "object",
"properties": {
"employee": {
"type": "string",
"maxLength": 200,
"description": "Filter requests to one employee"
},
"status": {
"type": "string",
"enum": [
"pending",
"approved",
"rejected",
"cancelled"
],
"description": "Filter requests by status"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡leave_import(csv)
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.
Input Schema
{
"type": "object",
"properties": {
"csv": {
"type": "string",
"maxLength": 200000,
"description": "CSV text, newline-separated, first row header: employee,type,start,end,halfDay,status,reason"
}
},
"required": [
"csv"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢leave_export_ics(path)
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.
Input Schema
{
"type": "object",
"properties": {
"path": {
"type": "string",
"maxLength": 500,
"description": "Local .ics file to write"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢license_status
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.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪license_activate(key)
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.
Input Schema
{
"type": "object",
"properties": {
"key": {
"type": "string",
"description": "License key from checkout, MCPL1.<payload>.<signature>"
}
},
"required": [
"key"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴leave_cancel(request, reason)
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.
Input Schema
{
"type": "object",
"properties": {
"request": {
"type": "string",
"maxLength": 200,
"description": "The request id (e.g. LV-0001)."
},
"reason": {
"type": "string",
"maxLength": 2000,
"description": "Why"
}
},
"required": [
"request"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}