bizdays

Verified business-day math for AI agents.

Agents confidently answer "what's 5 business days after Dec 22 in the UK?" or "how many working days are in this month?" — and get them wrong: they miscount, forget public holidays, and assume every country's weekend is Saturday/Sunday. bizdays returns the deterministic answer, showing the weekend rule and the exact holidays it skipped. "Qiniso" means "truth" in Zulu.

Why it exists

Business-day math looks trivial and isn't: the answer depends on a country's public-holiday calendar and its weekend rule, and "holiday" must mean a real day off — not an observance. LLMs hold none of this reliably, so they answer fluently and wrongly. bizdays computes it deterministically.

23%of business-day questions a frontier LLM answers wrong, cold — and 63% when counting the working days in a month. bizdays: 0%.
206countries' public holidays, plus per-country weekend rules.
0API keys, secrets or network calls — deterministic and offline.
TaskLLM alonebizdays
Count working days in a month63% wrong0%
Is this date a working day?20% wrong0%
Add N working days to a date0% wrong0%

Method: 30 business-day questions across 12 countries on the 2025 calendar, asked of a frontier model with no tools, scored against ground truth from authoritative sources (date-holidays + Unicode CLDR). The model handles small "add N days" hops but breaks on counting a month and on non-Western weekends (it flipped a UAE Friday and Saudi National Day). bizdays is correct by construction. Reproduce it with the harness in the repo (bench/).

Why it's right when libraries are wrong

Weekends ≠ Sat/Sun

Resolved per country from Unicode CLDR — Fri/Sat in Saudi Arabia, Egypt & Israel; Fri in Iran; Sun in India; Sat/Sun in the UAE (post-2022) — with a curated override layer for cases CLDR gets wrong (Bangladesh, Nepal).

Public holidays only

Off-the-shelf holiday data counts observances like Valentine's Day, Tax Day and Christmas Eve as holidays. Those aren't days off. bizdays counts only real public holidays, so deadlines don't drift.

What it does

add_business_days

Add or subtract N working days to a date, skipping weekends + public holidays.

count_business_days

Count working days between two dates, with a weekend/holiday breakdown.

is_business_day

Is a date a working day? If not, the precise reason and holiday name.

next_business_day

First working day strictly after a date.

previous_business_day

Last working day strictly before a date.

country_rule

Weekend rule + source, whether holidays apply, and a confidence flag.

A Tier-1 set of ~65 countries is verified; others work but are flagged unverified. Where no holiday calendar exists (e.g. Qatar, Kuwait, Oman), the correct weekend still applies and the response says so. Dates are YYYY-MM-DD in UTC; no regional/optional holidays unless you pass them via extraHolidays.

Add it to Claude

Settings → Connectors → Add custom connector, and paste the URL. Hosted on the edge, no login, no key:

https://bizdays.qinisolabs.workers.dev/mcp

Or run it locally

Prefer no dependency on the hosted endpoint? Run it yourself over stdio — add this to your MCP client config (e.g. Claude Desktop → Settings → Developer → Edit Config), then restart:

{
  "mcpServers": {
    "bizdays": { "command": "npx", "args": ["-y", "@qinisolabs/bizdays"] }
  }
}

Using asdf or nvm? The desktop app may not see npx on its PATH — replace "npx" with the full path from which npx.

Or import it as a library

Every tool is also a typed function — no MCP required:

npm i @qinisolabs/bizdays

import { addBusinessDays, isBusinessDay } from "@qinisolabs/bizdays";
addBusinessDays("2025-12-22", 5, "GB").result; // "2025-12-31" (skips Christmas + Boxing Day)
isBusinessDay("2025-06-13", "SA").isBusinessDay; // false — Friday is weekend in Saudi Arabia