MCP server for business-day, SLA, cron and recurrence calculations — offline, deterministic, no network.
Strong foundation with 14 well-defined tools, all with clear descriptions (avg 180 chars) and complete JSON schemas. Tool names follow verb_noun convention (is_business_day, add_business_days, etc.). All parameters are typed and described. However, output schemas are not documented, LLMs cannot see what fields to expect in responses. Error handling is minimal; tools return errors as ValueError but lack recovery guidance. No tool annotations (readOnlyHint, idempotentHint) despite all tools being read-only and deterministic. Parameter descriptions could be more prescriptive about constraints (e.g., date format, country code format, range limits for count/days).
Move a number of working days forward or backward from a date, skipping weekends and public holidays. Use a negative number to count backwards. Zero returns the date unchanged.
Counts the working days between two dates, excluding weekends and public holidays. The range is half-open — the start date counts and the end date does not — so Monday to Tuesday is one working day. The result is negative when the end precedes the start.
Translate a five-field cron expression into plain English. Supports ranges, lists, steps, and month or weekday names. This describes the expression; it never schedules or executes anything.
Describes an iCalendar recurrence rule (RRULE) in plain English. Nothing is scheduled or executed.
Returns the first working day of a calendar month, scanning forward from the 1st past weekends and public holidays for the chosen country or subdivision. Read-only; nothing is scheduled. Use this for month-opening deadlines such as billing runs or reporting cut-offs; use last_business_day_of_month for the closing end of a month, and next_business_day to step relative to an arbitrary date rather than a month boundary. Country defaults to US; subdivision narrows the holiday set (e.g. SCT for Scotland), so the answer can differ between regions of the same country.
Output schemas not documented. LLMs cannot see what fields responses contain (e.g., is_business_day returns boolean, next_business_day returns date string). Without documented return types, agents cannot plan downstream operations or extract required fields.
Tool annotations missing. All 14 tools are read-only and deterministic (idempotent), but lack readOnlyHint and idempotentHint annotations. This prevents agents from understanding retry safety and side-effect boundaries.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Returns whether a date is a working day, accounting for weekends and public holidays in the given country or subdivision.
Returns the last working day of a calendar month, scanning backwards from the final calendar day past weekends and public holidays for the chosen country or subdivision. Read-only; nothing is scheduled. Use this for month-end deadlines such as payroll, invoicing or period close; use first_business_day_of_month for the opening end of a month, and previous_business_day to step relative to an arbitrary date rather than a month boundary. Country defaults to US; subdivision narrows the holiday set (e.g. SCT for Scotland), so the answer can differ between regions of the same country.
Returns the first working day strictly after the given date, stepping over weekends and public holidays for the chosen country or subdivision. Read-only and idempotent. The date itself is never returned even if it is a working day — use is_business_day to test a single date, add_business_days to move a known number of working days, or previous_business_day to step backwards. Country defaults to US; subdivision narrows the holiday set (e.g. SCT for Scotland).
Computes when a five-field cron expression would next fire after a given start time, returning up to 60 timestamps. A pure calculation over the expression: no job is created, stored, or executed.
Computes when an iCalendar recurrence rule (RRULE) would next occur after a given start date, returning up to 60 dates. A pure calculation: nothing is scheduled, stored, or executed.
Returns the last working day strictly before the given date, stepping back over weekends and public holidays for the chosen country or subdivision. Read-only and idempotent. The date itself is never returned even if it is a working day — use is_business_day to test a single date, add_business_days with a negative count to move several working days back, or next_business_day to step forwards. Country defaults to US; subdivision narrows the holiday set (e.g. SCT for Scotland).
Works out when a service-level agreement falls due, counting only business hours on working days. If the clock starts outside business hours it waits until the next working day opens. Business hours default to 09:00-17:00 and times are wall-clock in the calendar's own locality.
Checks whether a five-field cron expression is syntactically valid. Parsing only; nothing is scheduled or run.
Check whether an iCalendar recurrence rule (RRULE) is valid and supported. Parsing only; nothing is scheduled.
Parameter constraints under-specified. 'days' in add_business_days lacks min/max bounds; 'count' in next_cron_occurrences states 1-60 in description but not in schema; 'country' accepts any string instead of enum of valid ISO 3166-1 codes. LLMs cannot validate inputs without formal constraints.
Error handling lacks recovery guidance. invoke() returns ValueError with generic messages ('The request could not be processed') that give LLMs no actionable next steps. No categorization of errors as retryable vs user-fixable.
sla_due_time parameter 'start' description mentions 'e.g. 2026-07-27T09:00' but does not clarify timezone handling or whether wall-clock interpretation is guaranteed. The args.py code rejects UTC offsets, but this constraint is not visible in the tool schema or description.