Skip to main content
Glama
dragosh29

Timesheet Portal MCP server

by dragosh29

Leave bookings report

list_leave
Read-onlyIdempotent

Retrieve leave bookings within a date range, optionally filtered by status, employee, employee group, or modification date, to review holidays and absences.

Instructions

Leave bookings (holidays and other absences) in a date range (POST /leavebookings/reports/bookings, "Get leave bookings report"; a POST that changes nothing). Columns: EmployeeReference, EmployeeName, LeaveCategory, LeaveStatus, LeaveStartDate, LeaveEndDate, LeaveTotalWorkingDays, LeaveUnits, LeaveRequestDate, LeaveReviewedDate; LeaveComments only with include_contact_details. Filters sent as documented: statusFilters (omitted for every status), employeeFilter, employeeGroupFilter, modifiedAfterDate. The endpoint documents no paging; whether it counts against the report limits is not documented.

Input Schema

NameRequiredDescriptionDefault
end_dateYesLast date, YYYY-MM-DD (at most 366 days after start_date)
statusesNoLeave statuses to include (statusFilters); every status when omitted
start_dateYesFirst date, YYYY-MM-DD
max_resultsNoMost bookings to return in this call (default 100); the answer says how many were left out
employee_codeNoSent as employeeFilter
modified_afterNoOnly bookings modified after this date/time (modifiedAfterDate)
employee_group_codeNoSent as employeeGroupFilter
include_contact_detailsNoInclude the leave comments (LeaveComments, free text that can hold the reason for an absence), and stop redacting email addresses, phone numbers, national insurance numbers and UK postcodes typed into names and other text (bank and card numbers are always removed)

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A3.8/5.0
Behavior4/5

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

Adds value beyond annotations: it clarifies that the POST 'changes nothing' (consistent with readOnlyHint), discloses the effect of include_contact_details on redaction (email, phone, NI, postcodes; bank/card always removed), and honestly flags undocumented behaviors (no paging, unknown report-limit counting). The redaction detail is a genuine behavioral disclosure the annotations do not carry.

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

Conciseness3/5

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

Front-loads purpose and columns, but the column enumeration is long and the trailing caveats ('whether it counts against the report limits is not documented') add length. Some of the filter-name mapping duplicates the schema. Adequate but not tight.

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?

Complete for an 8-param list tool with no output schema: it names the returned columns, notes the max_results 'answer says how many were left out', and transparently flags undocumented paging/limits. A note on ordering or the report-limit uncertainty resolution would round it out.

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 parameters are already documented; description largely maps parameter names to API filter names (statusFilters, employeeFilter, etc.), which the schema descriptions also provide. It adds little syntax beyond what the schema states.

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?

States a specific verb+resource ('Leave bookings (holidays and other absences) in a date range'), names the endpoint and operation, and enumerates the returned columns. Distinguishes it from sibling list_leave_balances by scope (bookings vs balances).

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?

Implies usage via the date-range scoping and the note that statusFilters covers 'every status' when omitted, but names no alternative tool and gives no explicit when-to-use/when-not. For an agent picking between list_leave and list_leave_balances, guidance is only implied.

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