Skip to main content
Glama

mcp-leave

MCP server for a staff leave and PTO tracker: requests, approvals, balances, who is out and a calendar export. Employee leave and PTO: balances, approvals, calendars, and who-is-out summaries.

Works with Claude Desktop, Claude Code, Cursor and any Model Context Protocol client. Runs on your own machine, or hosted with no install.

Product page: https://mcp.zovo.one/s/leave — what it does, the tools it exposes, and a live token endpoint.

Install

Hosted, nothing to install. Get a token from https://mcp.zovo.one/mcp/connect (the connect page) or https://mcp.zovo.one/mcp/token (the same token as JSON); a free anonymous one is issued on the spot and a Pro key works the same way. Then point an MCP client at https://mcp.zovo.one/mcp/leave over streamable-http and send the token as Authorization: Bearer <token>.

If your client cannot set headers, put the token in the path instead: https://mcp.zovo.one/mcp/leave/t/<token>. Both forms work. The bare URL with no token answers 401 on tools/call, so the token is not optional.

Claude Desktop, one click. Download leave.mcpb from the latest release and double-click it.

From source. The mirror is self-contained: every @theluckystrike/* dependency is vendored, so a fresh clone builds with no extra setup.

git clone https://github.com/theluckystrike/mcp-leave.git
cd mcp-leave
npm install && npm run build

Then point your client at the built entry point:

{
  "mcpServers": {
    "leave": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-leave/dist/index.js"]
    }
  }
}

@theluckystrike/mcp-leave is not published on npm yet, so an npx -y @theluckystrike/mcp-leave command will fail. The three paths above are the working ones and each is exercised by CI.

leave demo

Read-only mirror of mcp-servers/servers/leave. See MIRROR.md.

theluckystrike/mcp-leave MCP server

In the official MCP Registry (io.github.theluckystrike/leave). Employee leave/PTO tracking for solopreneurs and small studios: who is off, when, and how many days each person has left. Add employees with an annual allowance and any carried-over days, log vacation/sick/personal requests (including half-days), approve or reject them, and read balances, conflicts and who-is-out calendars directly from your MCP client — Claude Desktop, Cursor, or any MCP host.

Related MCP server: Employee Leave Management MCP Server

Tools

  • "leave_employee_add" — add an employee with annualAllowance (and optional carriedOver).

  • "leave_request" — log a leave request (employee, type, start, end, optional halfDay, reason).

  • "leave_approve" / "leave_reject" — decide a request; decisions are recorded with dates.

  • "leave_cancel" — cancel a pending or approved request (keeps the audit trail).

  • "leave_balance" — allowance, carried, approved, pending, committed and remaining days per employee.

  • "leave_out_range" — who is out in a date range: day-by-day calendar rows plus person-days.

  • "leave_list" — all employees and requests, filterable by employee and status.

  • "leave_import" (Pro) — bulk-create requests from CSV; conflicting rows are rejected one by one, valid rows still apply.

  • "leave_export_ics" (Pro) — export approved leave as an RFC5545 .ics calendar.

The one rule that decides everything else

A day is committed when the request that spends it is approved or pending. Balance is allowance + carried − approved − pending. Cancelling returns the days immediately; rejecting never charged them.

Overlapping requests for the same person are refused at creation time — both pending and approved count — so the calendar never contains two requests claiming the same day.

Free vs Pro

The free tier is the full CRUD surface: employees, requests, approvals, balances, calendars — watermark-free, no request limits. Pro (an MCP_LICENSE_KEY, activate with "license_activate") adds bulk CSV import and ICS calendar export. Run "license_status" to see the current tier.

Quick start

{
  "mcpServers": {
    "leave": { "command": "npx", "args": ["-y", "@theluckystrike/mcp-leave"] }
  }
}

Data lives in a single JSON store (~/.mcp-leave/store.json, or $XDG_DATA_HOME/mcp-servers/leave/store.json when set), written atomically under a file lock, so two clients on one machine never interleave writes.

Use these docs as an MCP server

Any MCP client (Claude, Cursor, Windsurf, VS Code) can read this repository's documentation directly via GitMCP — no install:

Available Tools

12 tools
leave_approveApprove leaveA

Approve a pending leave request by id. Also used to re-open a rejected one. Nothing to approve on an already-approved request.

NameRequiredDescriptionDefault
commentNoApproval note
requestYesThe request id (e.g. LV-0001).

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already mark this as a non-read-only, non-idempotent action. The description adds state-transition behavior beyond the annotations: it approves pending requests, re-opens rejected ones, and treats already-approved requests as having 'nothing to approve'. No contradiction exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each carrying distinct information: primary action, secondary use, and an edge-case warning. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter state-change action with no output schema, the description is complete: the agent knows what to invoke, which statuses qualify, and that already-approved requests should not be processed. No additional context is essential.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents 'request' as the request id and 'comment' as the approval note. The description only echoes 'by id' and adds no new parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the action 'Approve' and the specific resource 'a pending leave request by id', and spells out the secondary use case 're-open a rejected one'. It also warns that an already-approved request has nothing to approve, which helps differentiate it from siblings like leave_reject and leave_cancel.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states clear conditions: use for pending requests, use to re-open rejected ones, and do not use on already-approved requests. It does not explicitly name sibling alternatives like leave_reject, but the when/when-not guidance is otherwise explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

leave_balanceLeave balanceA

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.

NameRequiredDescriptionDefault
employeeYesEmployee id or name

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide no positive hints (all false), so the description carries the burden. It discloses the calculation formula, the possibility of half days, and the rounding-down behavior on the report. This goes well beyond the structured fields, though it could mention whether any side effects or permissions apply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences with no filler. It front-loads the main action and resource, then gives the formula and rounding behavior efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no output schema, the description adequately explains what is computed and what the output looks like. It is missing minor details like error handling for unknown employees, but that is not critical for a simple balance lookup.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and already explains that 'employee' is an id or name. The tool description adds no further parameter-level meaning, so it meets the baseline but does not exceed it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Show') and a specific resource ('one employee's leave balance'), and it details exactly what the balance consists of. It is clear and distinct from the sibling tools, though it does not explicitly name an alternative tool for comparison.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use is implied by the description: use this when you need a single employee's leave balance. However, it does not explicitly state when not to use it or point to an alternative such as leave_list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

leave_cancelCancel leaveA

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.

NameRequiredDescriptionDefault
reasonNoWhy
requestYesThe request id (e.g. LV-0001).

TDQS

A3.8/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description claims idempotent-like behavior ('Nothing happened if already cancelled') while the annotations set idempotentHint=false, which is a direct contradiction. It otherwise provides useful non-destructive context, but the contradiction forces the lowest score.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler: primary behavior first, then sibling differentiation, then edge case. Every sentence earns its place and the structure supports quick comprehension.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers eligible states, non-destructive outcome, sibling distinction, and the already-cancelled behavior; no output schema exists so return format is not required. It is nearly complete, but the idempotency contradiction leaves an unresolved behavioral question for the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents 'request' and 'reason'. The description adds only 'by id', which does not materially enhance parameter understanding; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly identifies the action ('Cancel'), the resource ('a pending or approved request by id'), and the outcome ('keeping its record with status cancelled'). It also distinguishes itself from the sibling leave_reject by intent, so an agent can select it without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states the eligible states (pending or approved), names the alternative leave_reject and the differentiating criterion (voluntary withdrawal), and describes the already-cancelled edge case. This gives clear when-to-use and when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

leave_employee_addAdd an employeeA

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.

NameRequiredDescriptionDefault
nameYesFull name, e.g. Taylor Wren
emailNoWork email, for calendar lookup
carriedOverNoDays carried over from last year (default 0)
annualAllowanceYesAnnual paid leave allowance in whole days

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds useful behavioral context beyond the non-informative annotations: it returns an EMP-NNNN id, explains how balances are calculated ('approved plus pending leave against allowance + carried-over'), and notes unlimited free-tier usage. This helps an agent predict side effects and follow-up behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded with the core action and return value. The phrase 'Give their annual paid-leave allowance...' is slightly awkward and could be read as a user instruction, but the overall structure earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple creation tool with a rich schema and no output schema, the description conveys the return idantification format and the balance policy relevant after creation. It is mostly complete, though it could clarify duplicate handling or non-idempotency more explicitly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description goes slightly further by explaining how annualAllowance and carriedOver interact in balance calculations, which adds meaning beyond the field-level schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action ('Add an employee to the leave tracker') and a concrete result ('return their EMP-NNNN id'), making it immediately distinguishable from sibling leave tools. It clearly identifies the resource and the operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus alternatives such as leave_import or other leave tools. The description explains what the tool does but does not state when it should be preferred or any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

leave_export_icsExport calendar (Pro)A
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
pathNoLocal .ics file to write

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the read-only/idempotent/non-destructive annotations, the description discloses the return value (calendar text), the optional file-write side effect via path, and the watermark-free output. It does not contradict the annotations since the file write is to a specified local output file rather than the tool's core data state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loads the core behavior after a one-word 'Pro.' marker. 'Pro.' and 'watermark-free' are minor extras, but they do not bloat the text or obscure the main call semantics.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-optional-parameter tool with no output schema, the description covers the operation, the input, and the return format. Small ambiguities like what 'local file' means for path resolution remain, but they are not blocking for default invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the only parameter (path) already has a schema description. The tool description repeats that path is used to write the file but adds no format, path-resolution, or overwrite details, so it meets the baseline without exceeding it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Export') and resource ('all APPROVED leave as an .ics calendar (RFC5545)'), unambiguously separating it from sibling tools like leave_list or leave_import. The optional file-write behavior is also clearly stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The tool is clearly scoped to exporting approved leave in ICS format, so the intended use is inferable. It does not name alternatives or exclusions, but no sibling tool provides the same calendar-export function, so the context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

leave_importBulk import requests (Pro)A

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.

NameRequiredDescriptionDefault
csvYesCSV text, newline-separated, first row header: employee,type,start,end,halfDay,status,reason

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With all annotations reading false/non-informative defaults, the description carries the behavioral burden and mostly meets it: it discloses that status defaults to pending, enumerates accepted status values, and — most valuably — states that conflicting rows are reported but not applied, i.e., partial application rather than all-or-nothing semantics. The 'watermark-free, full CRUD' tail adds ambiguity about whether updates/deletes are involved, slightly undercutting the otherwise strong disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core purpose, then header format, then status and conflict behavior — good progressive structure. The final 'watermark-free, full CRUD' clause is the only non-operational content and reads like plan marketing rather than guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The input side is well covered for a one-parameter tool with no output schema: format, header, defaults, and conflict behavior are all present. The gap is the response — conflicting rows are 'reported' but the shape of that report and of a successful import is never described, and an agent cannot predict the return value. The Pro-license requirement is also only hinted at.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents the sole csv parameter at 100% coverage, but the description adds meaning the schema lacks: allowed status values (approved/rejected), the omission default (pending), and per-row conflict checking. It does not specify date or halfDay column formats, which remain undocumented in both places.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Leads with a specific verb and resource — 'Bulk-create leave requests from a CSV/TSV' — which immediately distinguishes it from single-record siblings like leave_request, leave_approve, and leave_cancel. The header specification and status rules further pin down the operation. The closing 'watermark-free, full CRUD' phrase is slightly muddled but does not obscure the core purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Bulk-create ... from a CSV/TSV' phrasing establishes a clear usage context: use this when many leave requests need to be created at once from a file, in contrast to the individual flow of leave_request. However, it never names an alternative or states when not to use the tool, and the 'Pro' prerequisite is a tag rather than an explained gating condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

leave_listList employees or requestsB
Read-onlyIdempotent

List all employees, or all leave requests (optionally filtered by employee and/or status). Omit the filter to list requests.

NameRequiredDescriptionDefault
statusNoFilter requests by status
employeeNoFilter requests to one employee

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds useful default behavior (no filters means all requests) but does not disclose pagination, sorting, or response format for a list operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences contain the core behavior and a default-case hint with no filler. The wording is compact, though the employee/request ambiguity could be resolved without adding length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema and presents a dual-purpose behavior, yet the description doesn't specify the trigger for listing employees versus listing requests. It also omits practical list-operation details like pagination, limits, or response structure, making it incomplete for an agent to invoke confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema already describes both parameters with 100% coverage, providing the baseline. The description adds value by clarifying that the filters are optional, can be combined ('and/or'), and that omitting them returns all requests.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the action ('List') and resources ('all employees', 'all leave requests') and mentions filters, so it is not a pure tautology. However, it never explains what determines whether employees or requests are returned; the schema has no parameter for selecting the resource type. This ambiguity keeps it from being fully clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is the go-to tool for listing leave data and gives a default-behavior hint ('Omit the filter to list requests'). It does not explicitly say when to prefer it over siblings such as leave_balance or leave_export_ics, nor when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

leave_out_rangeWho is out?A

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.

NameRequiredDescriptionDefault
endYesLast day, YYYY-MM-DD, inclusive
startYesFirst day, YYYY-MM-DD, inclusive

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds useful behavioral details beyond annotations: inclusive date handling, each employee appearing once per day, and pending requests counting as a plan. However, annotations mark readOnlyHint as false, and the description does not clarify whether the tool has any side effects or what the return structure looks like, leaving some behavioral ambiguity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core purpose. Each sentence adds value: main behavior, edge-case semantics, use cases, and free-tier constraint. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter tool with no output schema, the description is nearly complete: it explains scope, date format, per-day deduplication, pending-request handling, and suggested use cases. It only slightly lacks explicit guidance on when not to use it or which sibling to prefer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes both parameters with format and inclusivity, achieving 100% schema description coverage. The description restates 'start and end are inclusive YYYY-MM-DD,' which reinforces the schema but adds little new parameter-specific meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as a date-range absence query ('Who is out in a date range') with inclusive start/end dates. It is distinguishable from siblings like leave_request or leave_approve, though it does not explicitly differentiate itself from leave_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use the tool: 'Use for coverage, calendars and absence summaries.' It provides clear use-case context but does not mention exclusions or alternatives, such as when leave_list or leave_balance would be more appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

leave_rejectReject leaveA

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.

NameRequiredDescriptionDefault
reasonNoWhy
requestYesThe request id (e.g. LV-0001).

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide only basic flags, so the description adds real value by defining the status transition (pending/approved to rejected) and the reopen path. It does not cover permissions, side effects, or error behavior, but it gives meaningful behavioral context beyond the schema and annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences contain no filler and front-load the core action. The final parenthetical is slightly awkward but not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter mutation tool, the description covers the main status behavior and routes to relevant siblings. The lack of an output schema and return-value note is a minor gap, but not critical at this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents both parameters with 100% coverage, so the description need not repeat them. It adds only 'by id' and a hint that a reason is involved in cancellation, which is marginal beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and resource ('Reject or cancel a leave request by id') and adds state-transition detail that distinguishes it from leave_approve and leave_cancel. The word 'cancel' slightly overlaps with the sibling name, but the state wording resolves most ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says a rejected request can be reopened with leave_approve and that leave_cancel should be used for voluntary withdrawal. The conditions are clear, though the parenthetical '(via reject with reason)' leaves some uncertainty about whether leave_cancel is an alias or a separate call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

leave_requestRequest leaveA

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.

NameRequiredDescriptionDefault
endYesLast day off, YYYY-MM-DD, inclusive
typeYesKind of leave
startYesFirst day off, YYYY-MM-DD, inclusive
reasonNoWhy, shown in reports and calendar
halfDayNoHalf-day charge for the whole span (default false)
employeeYesThe employee id or name

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations offering no meaningful behavioral guidance, the description carries the burden and adds useful details: return format, inclusive date semantics, halfDay effect, overlap refusal, and free-tier limits. It does not contradict the annotations, and no annotation contradiction is present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, each with a distinct job: purpose/return, parameter semantics, validation behavior, and quota. Front-loaded with the core action and free of filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a moderate-complexity tool with 6 parameters and no output schema, the description covers the action, return id, date/type/halfDay semantics, overlap behavior, and quota context. It could add explicit failure/error behavior, but what is present is sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description mostly restates what the schema already provides (type enum, inclusive dates, halfDay behavior), with the only notable addition being the LV-NNNN return id, which is not parameter-specific.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb-resource pair ('Create a leave or PTO request') and states the return value (LV-NNNN id), making the tool's function unambiguous. It also contrasts naturally with siblings like leave_approve, leave_cancel, and leave_reject.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes it clear this is for creating leave requests, but it does not explicitly state when to prefer this over sibling tools or mention exclusions such as checking balances first. Usage context is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

license_activateActivate licenseA

Activate a Pro key (MCPL1.xxx.yyy) from checkout: verified offline against a built-in public key, saved to your config file. A wrong, malformed or expired key is refused, unsaved. license_status reads it back.

NameRequiredDescriptionDefault
keyYesLicense key from the checkout confirmation page

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden. It discloses that verification happens offline against a built-in public key, that the key is persisted to the config file, and that invalid keys are refused and left unsaved. This is substantial transparency for an activation tool, though it could mention overwriting an existing key or the exact return behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The first sentence front-loads the main action, source, verification method, and persistence. The second sentence efficiently covers error handling and points to the related read-back tool. Every clause adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a single-parameter tool with no output schema and no annotations, the description covers activation behavior, verification mechanism, persistence, error outcomes, and how to read the result later. The only minor gap is an explicit statement of what the function returns upon success or failure, but the phrase 'refused, unsaved' implies a feedback mechanism. Overall, it is sufficiently complete for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents the 'key' parameter at 100% coverage, so the baseline is 3. The description adds meaningful semantics by giving the concrete key format ('MCPL1.xxx.yyy'), confirming the key comes from the checkout page, and explaining that malformed or expired keys will be rejected. This goes beyond the schema's one-line description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Activate a Pro key'), the exact key format ('MCPL1.xxx.yyy'), the source ('from checkout'), and the core mechanism ('verified offline against a built-in public key'). It also differentiates itself from the sibling license_status by noting that license_status reads the activation back, so there is no ambiguity about which tool does what.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: use this when you have a Pro key from checkout that needs to be activated. It also points to license_status as the read-back tool, which implies when to use a related sibling. It does not explicitly spell out 'do not use for checking status' or list other alternatives, but the context is strong enough to avoid misuse.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

license_statusLicense statusA

Report this server's licence state: product, tier free or pro, licence id, expiry, the key source and the upgrade URL. No arguments, no network. Explains a free-tier refusal; license_activate installs a key.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are absent, so the description carries the full burden of behavioral disclosure. It discloses that the call is local ('no network') and argument-free, and it mentions a specific explanatory behavior. The word 'Report' implies read-only, though it does not explicitly state non-destructive or permission requirements; this is adequate for a status command.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The first sentence lists the output fields; the second adds constraints and the sibling pointer. Every clause contributes meaningful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter status tool with no output schema, the description lists the expected output fields, behavioral constraints, and the relevant alternative tool. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has zero parameters and the description reinforces this with 'No arguments'. It adds value by listing the reported fields, helping an agent understand what the empty input will yield. The baseline for zero-parameter tools is high, and the description meets it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Report'), a clear resource ('this server's licence state'), and enumerates the exact fields returned. It also names the sibling 'license_activate' as the tool that does something different, so an agent can distinguish them immediately.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit usage constraints: no arguments, no network, and explains a free-tier refusal. It also directs the agent to license_activate when the task is to install a key, serving as an explicit pointer to the relevant alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 12 tool updatesv0.22.0
    • First observedleave_approve
    • First observedleave_balance
    • First observedleave_cancel
    • First observedleave_employee_add
    • First observedleave_export_ics
    • First observedleave_import
    • First observedleave_list
    • First observedleave_out_range
    • First observedleave_reject
    • First observedleave_request
    • First observedlicense_activate
    • First observedlicense_status

TDQS

A3.6/5.0

Scored across 12 tools

Disambiguation3/5

Most tools target distinct actions, but the approve/reject/cancel trio blurs together: leave_approve also reopens rejected requests, and leave_reject's description says voluntary withdrawal should use leave_cancel 'via reject with reason', which contradicts the stated separation. The descriptions work hard to disambiguate, but an agent could still misselect between reject and cancel.

Naming Consistency3/5

The leave_* family mostly follows verb-first verb_noun (leave_approve, leave_list, leave_import), but leave_employee_add inverts the order and leave_export_ics adds a suffix. The license_status/license_activate pair uses noun_verb, opposite of the dominant pattern.

Tool Count4/5

Twelve tools is well-scoped for a leave tracker, with each operation (request, approve, reject, cancel, list, balance, coverage, import/export) earning a place. The two license tools are peripheral but justified by the free/pro tier model.

Completeness3/5

Core lifecycle is covered (create, approve, reject, cancel, list, balance, coverage, import/export), but there is no way to edit an existing request's dates or type, no get-single-request tool, and no employee management beyond add (no list/update/remove of employees).

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables natural-language-based employee leave management including leave balance checks, leave applications, approvals, and history retrieval through an MCP-compatible client.
    -
  • F
    license
    B
    quality
    D
    maintenance
    Enables managing employee leave requests including checking balance, applying for leave, and viewing history.
    3
    -