leave

Employee leave and PTO requests: balances, approvals, calendars, and who-is-out summaries.

Rate this Server

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-http

Tool inventory

Tools (12)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟡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#"
}

Recent observations

verifiedversion not recorded12 tools