Your agent is quietly getting business-day math wrong.

A free, no-auth MCP tool that does date arithmetic across bank and exchange calendars — and shows its working.

The failure

Ask any model to add business days across a holiday and it counts calendar days, guesses the holiday set, and hands you a plausible date with no indication it is wrong. There is no error, no hedge, no “I’m not sure”. It is the worst shape a mistake can take.

The single nastiest case: 4 July 2026 falls on a Saturday. The Federal Reserve does not observe it — Friday 3 July is a normal Fed business day. The NYSE does close that Friday. Same date, opposite answers, one day of drift on a settlement or a notice period.

Thursday 2 July 2026, +1 business dayAnswer
US_FED — Federal ReserveFriday 3 July
US_NYSE — exchangeMonday 6 July

Add it to your agent

Claude Desktop — claude_desktop_config.json. Cursor and Cline take the same shape.

{
  "mcpServers": {
    "buddylists": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://www.buddylists.dev/api/mcp"]
    }
  }
}

Then ask, in plain language: “Our contract gives 10 business days’ notice from 2 April 2026 under both US and UK banking calendars — what’s the deadline?”

Or just call it over HTTP

curl "https://www.buddylists.dev/api/business-days?start_date=2026-04-02\
&add_business_days=10&calendars=US_FED,UK_BANK"

Returns 2026-04-20, and tells you it skipped Good Friday and Easter Monday to get there. No key, no signup, nothing stored.

Calendars

US_FEDUS Federal Reserve bank holidays
US_NYSENew York Stock Exchange trading days
UK_BANKUK bank holidays (England & Wales)
TARGET2TARGET2 / ECB euro settlement
CA_BANKCanadian bank holidays (Payments Canada) — contributed by Grok (@grok), 2026‑08‑27
SIFMAUS bond market full closes (SIFMA recommended) — contributed by Grok (@grok), 2026‑08‑27
AU_ASXASX (Australia) trading holidays — contributed by Grok (@grok), 2026‑09‑01
DE_XETRADeutsche Börse Xetra (Germany) trading holidays — contributed by Grok (@grok), 2026‑09‑01
CH_SIXSIX Swiss Exchange (Switzerland) trading holidays — contributed by Grok (@grok), 2026‑09‑01
JP_BANKJapanese banking holidays (Bank of Japan closure rule) — contributed by Grok (@grok), 2026‑09‑01
HK_HKEXHong Kong Exchange trading holidays, proclaimed years 2025-2027 only — contributed by Grok (@grok), 2026‑09‑01

Ask for several and they intersect: a day counts only if every market is open.

Settlement dates, as their own tool

Trade date in, settlement date out: /api/settlement-date wraps the same engine in the vocabulary the question is actually asked in — and the cycle is required, never defaulted. Which cycle applies is a regulatory fact that changes: the US moved most securities from T+2 to T+1 with compliance date 2024-05-28 (SEC), and the UK and EU move to T+1 on 2027-10-11 (FCA). A silently wrong default is exactly the failure this engine exists to prevent, so there isn’t one.

curl "https://www.buddylists.dev/api/settlement-date?trade_date=2026-12-23\
&cycle=T%2B2&calendars=US_NYSE"

Returns 2026-12-28 — T+2 from that Wednesday crosses Christmas Day (Friday 25 December 2026, NYSE closed) and the weekend, and the response lists all three skipped days with their reasons. Call it with no parameters for the usage document and the cited sources.

Don’t trust it — check it

Every calendar is dumpable, so you can audit this against the official source instead of taking our word for it:

curl "https://www.buddylists.dev/api/business-days?list=US_FED&year=2026"

Ten holidays in 2026, not eleven. If that surprises you, re-read the first section.

Limits, stated plainly

Dates are UTC calendar dates with no local-time conversion. Eleven calendars, not forty. Every one is also a subscribable feed: /ics/<CALENDAR>.ics serves 2025–2027 as standard iCalendar, generated at build time from the same engine that answers the API — subscribe from any calendar app and audit it against ?list= whenever you like. CA_BANK models national Payments Canada closures only — provincial holidays (Family Day, Civic, Saint‑Jean‑Baptiste) vary by institution and are not modelled. SIFMA models full closes only, and its Good Friday is year-conditional on SIFMA's published recommendation — in 2026 it is an early close, so not a holiday here. AU_ASX models ASX cash-market full closures; ANZAC Day never substitutes to a Monday, and the 14:10 early closes on 24 and 31 December are not modelled. DE_XETRA models Xetra trading-free days; nothing substitutes, Whit Monday and German Unity Day are normal trading days, and 24 and 31 December are trading-free but remain settlement days. CH_SIX models SIX Swiss Exchange trading-free days; twelve holidays including Berchtoldstag, Ascension Day, Whit Monday and Swiss National Day, nothing substitutes, early closes out of scope. JP_BANK models Bank of Japan closures: Sunday holidays substitute to the next free day (chaining through Golden Week), a single weekday between two holidays becomes a citizens' holiday, banks close 31 December through 3 January, and the proclaimed equinox holidays use a verified approximation — projections beyond the current proclamation. HK_HKEX is different in kind: Hong Kong's lunar and proclamation-dependent holidays cannot be projected by rule, so it is table-driven from the officially gazetted years only — 2025-2027 today — and any other year fails loudly with year_not_proclaimed instead of guessing; half-day sessions are out of scope. Early exchange closes (half-days) are not modelled — the tool tells you whether a market is open, not for how long. Holiday rules are computed, not fetched, so a one-off royal or national holiday announced mid-year will not appear until the repo is updated.

Want a calendar we don’t have? Have your agent add it.

Eleven calendars ship today — and the last seven are proof this works: CA_BANK, SIFMA, AU_ASX, DE_XETRA, CH_SIX, JP_BANK and HK_HKEX were all contributed by Grok, submitted publicly in replies on X, verified against the official sources, and shipped with credit in the live API (CA_BANK · SIFMA · AU_ASX · DE_XETRA · CH_SIX · JP_BANK · HK_HKEX). If yours is missing — point your agent at /jobs.json. It specifies a JSON format for holiday rules; your agent drafts the calendar from official sources and submits it through the buddylists_suggest tool with a CALENDAR: prefix. If it verifies against the cited sources, it ships — with your agent credited by name in the live API. Submissions are data, never code, and a human reviews everything before anything ships.