Deterministic date arithmetic with auditable receipts: business days, due dates, holidays.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
The date N whole calendar days after a date (exclusive counting: the start date is day 0). Omit date for today in tz. For working days use business_days; for the gap between two dates use days_between.
Whole calendar days to add. Negative counts backwards.
IANA timezone that defines "today" (e.g. Africa/Kampala). Default UTC.
ISO date YYYY-MM-DD, or "today" (resolved in tz)
The date N whole calendar days after a date (exclusive counting: the start date is day 0). Omit date for today in tz. For working days use business_days; for the gap between two dates use days_between.
| Argument | Type | Description |
|---|---|---|
| tz | string | IANA timezone that defines "today" (e.g. Africa/Kampala). Default UTC. |
| date | string | ISO date YYYY-MM-DD, or "today" (resolved in tz) |
| days* | integer | Whole calendar days to add. Negative counts backwards. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"days"
],
"properties": {
"tz": {
"type": "string",
"default": "UTC",
"maxLength": 64,
"description": "IANA timezone that defines \"today\" (e.g. Africa/Kampala). Default UTC."
},
"date": {
"type": "string",
"default": "today",
"pattern": "^(\\d{4}-\\d{2}-\\d{2}|today)$",
"description": "ISO date YYYY-MM-DD, or \"today\" (resolved in tz)"
},
"days": {
"type": "integer",
"maximum": 100000,
"minimum": -100000,
"description": "Whole calendar days to add. Negative counts backwards."
}
},
"additionalProperties": false
}Span mode (from+to): business days between two dates, exclusive of the start day, inclusive of the end day. Add mode (days, optional date): the date N business days away. Passing from or to selects span mode and needs both; days and date are then ignored, so add mode takes its start date in date, not from. Optional holiday jurisdiction or custom calendar, and a selectable working week. For calendar days use add_days, subtract_days or days_between.
| Argument | Type | Description |
|---|---|---|
| to | string | ISO date YYYY-MM-DD, or "today" (resolved in tz) |
| tz | string | IANA timezone that defines "today" (e.g. Africa/Kampala). Default UTC. |
| date | string | ISO date YYYY-MM-DD, or "today" (resolved in tz) |
| days | integer | Add mode: business days to move. Negative counts backwards. |
| from | string | ISO date YYYY-MM-DD, or "today" (resolved in tz) |
| workweek | string | Working week. Default mon-fri (Sat+Sun weekend). |
| jurisdiction | string | Holiday jurisdiction id: US, GB, GB-SCT, GB-NIR, IE, FR, CA, AU, UG (alias UK for GB). No default: omit for no holiday calendar. |
Signed whole calendar days from the from date to the to date, midnight to midnight in tz: positive when to is later, negative when it is earlier. Endpoints are exclusive, so this is the gap and consecutive dates are 1 apart. Either date may be "today", resolved in tz. For working days between two dates use business_days; to move a date by N days use add_days or subtract_days.
| Argument | Type | Description |
|---|---|---|
| to* | string | ISO date YYYY-MM-DD, or "today" (resolved in tz) |
| tz | string | IANA timezone that defines "today" (e.g. Africa/Kampala). Default UTC. |
| from* | string | ISO date YYYY-MM-DD, or "today" (resolved in tz) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"from",
"to"
],
"properties": {
"to": {
"type": "string",
"pattern": "^(\\d{4}-\\d{2}-\\d{2}|today)$",
"description": "ISO date YYYY-MM-DD, or \"today\" (resolved in tz)"
},
"tz": {
"type": "string",
"default": "UTC",
"maxLength": 64,
"description": "IANA timezone that defines \"today\" (e.g. Africa/Kampala). Default UTC."
},
"from": {
"type": "string",
"pattern": "^(\\d{4}-\\d{2}-\\d{2}|today)$",
"description": "ISO date YYYY-MM-DD, or \"today\" (resolved in tz)"
}
},
"additionalProperties": false
}Runs any operation and returns the receipt plus human-readable derivation steps. Set op, then pass the fields that operation's own tool takes. Use it when the user asks how an answer was reached.
| Argument | Type | Description |
|---|---|---|
| op* | string | Operation to explain. holiday_lookup is the holidays tool; the others share their tool's name. |
| to | string | ISO date YYYY-MM-DD, or "today" (resolved in tz) |
| tz | string | IANA timezone that defines "today" (e.g. Africa/Kampala). Default UTC. |
| net | integer | Net-N payment terms in calendar days (Net 30 = 30). |
| date | string | ISO date YYYY-MM-DD, or "today" (resolved in tz) |
| days | integer | Day count for add_days, subtract_days and business_days add mode. |
| from | string | ISO date YYYY-MM-DD, or "today" (resolved in tz) |
| roll | boolean | Roll a weekend or holiday due date forward to the next business day. Default false. |
| year |
Observed public holidays with the nominal (legal) date and status: rule (statutory) or declared (officially declared for that year). Declared-only holidays are omitted for undeclared years, with a holiday_data_incomplete warning.
| Argument | Type | Description |
|---|---|---|
| year* | integer | Calendar year to list, e.g. 2027 |
| jurisdiction* | string | Holiday jurisdiction id: US, GB, GB-SCT, GB-NIR, IE, FR, CA, AU, UG (alias UK for GB). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"jurisdiction",
"year"
],
"properties": {
"year": {
"type": "integer",
"maximum": 3000,
"minimum": 1600,
"description": "Calendar year to list, e.g. 2027"
},
"jurisdiction": {
"type": "string",
"maxLength": 8,
"description": "Holiday jurisdiction id: US, GB, GB-SCT, GB-NIR, IE, FR, CA, AU, UG (alias UK for GB)."
}
},
"additionalProperties": false
}Due date for Net-N payment terms (calendar days, invoice date = day 0). Optional roll-forward past weekends and, with a jurisdiction or custom calendar, public holidays.
| Argument | Type | Description |
|---|---|---|
| tz | string | IANA timezone that defines "today" (e.g. Africa/Kampala). Default UTC. |
| net* | integer | Net-N payment terms in calendar days (Net 30 = 30). |
| roll | boolean | Roll a weekend or holiday due date forward to the next business day. Default false. |
| workweek | string | Working week. Default mon-fri (Sat+Sun weekend). |
| invoiceDate | string | ISO date YYYY-MM-DD, or "today" (resolved in tz) |
| jurisdiction | string | Holiday jurisdiction id: US, GB, GB-SCT, GB-NIR, IE, FR, CA, AU, UG (alias UK for GB). No default: omit for no holiday calendar. |
| customHolidays | array | Custom organizational holiday calendar as ISO dates (mutually exclusive with jurisdiction) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"net"
],
"properties": {
"tz": {
"type": "string",
"default": "UTC",
"maxLength": 64,
"description": "IANA timezone that defines \"today\" (e.g. Africa/Kampala). Default UTC."
},
"net": {
"type": "integer",
"maximum": 3650,
"minimum": 0,
"description": "Net-N payment terms in calendar days (Net 30 = 30)."
},
"roll": {
"type": "boolean",
"description": "Roll a weekend or holiday due date forward to the next business day. Default false."
},
"workweek": {
"enum": [
"mon-fri",
"sun-thu",
"mon-sat"
],
"type": "string",
"description": "Working week. Default mon-fri (Sat+Sun weekend)."
},
"invoiceDate": {
"type": "string",
"default": "today",
"pattern": "^(\\d{4}-\\d{2}-\\d{2}|today)$",
"description": "ISO date YYYY-MM-DD, or \"today\" (resolved in tz)"
},
"jurisdiction": {
"type": "string",
"maxLength": 8,
"description": "Holiday jurisdiction id: US, GB, GB-SCT, GB-NIR, IE, FR, CA, AU, UG (alias UK for GB). No default: omit for no holiday calendar."
},
"customHolidays": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 1000,
"description": "Custom organizational holiday calendar as ISO dates (mutually exclusive with jurisdiction)"
}
},
"additionalProperties": false
}The next occurrence strictly after the base date (default today) of either a tracked event slug (e.g. "christmas") or a weekday (0 = Sunday .. 6 = Saturday). Provide exactly one of event/weekday.
| Argument | Type | Description |
|---|---|---|
| tz | string | IANA timezone that defines "today" (e.g. Africa/Kampala). Default UTC. |
| from | string | ISO date YYYY-MM-DD, or "today" (resolved in tz) |
| event | string | Event slug (e.g. christmas). Exactly one of event/weekday. |
| weekday | integer | 0 = Sunday .. 6 = Saturday. Exactly one of event/weekday. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"tz": {
"type": "string",
"default": "UTC",
"maxLength": 64,
"description": "IANA timezone that defines \"today\" (e.g. Africa/Kampala). Default UTC."
},
"from": {
"type": "string",
"pattern": "^(\\d{4}-\\d{2}-\\d{2}|today)$",
"description": "ISO date YYYY-MM-DD, or \"today\" (resolved in tz)"
},
"event": {
"type": "string",
"maxLength": 40,
"description": "Event slug (e.g. christmas). Exactly one of event/weekday."
},
"weekday": {
"type": "integer",
"maximum": 6,
"minimum": 0,
"description": "0 = Sunday .. 6 = Saturday. Exactly one of event/weekday."
}
},
"additionalProperties": false
}Parses queries like "90 business days from today in uganda" into a normalized operation, answers it, and returns the auditable receipt. Ambiguous dates (03/04/2027) return needsClarification instead of a guess.
| Argument | Type | Description |
|---|---|---|
| q* | string | The date question in plain language. Pass the user's wording rather than a date you computed. |
| tz | string | IANA timezone that defines "today" (e.g. Africa/Kampala). Default UTC. |
| locale | string | Resolves ambiguous slash dates; omit to receive clarification choices |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The date question in plain language. Pass the user's wording rather than a date you computed."
},
"tz": {
"type": "string",
"default": "UTC",
"maxLength": 64,
"description": "IANA timezone that defines \"today\" (e.g. Africa/Kampala). Default UTC."
},
"locale": {
"enum": [
"mdy",
"dmy"
],
"type": "string",
"description": "Resolves ambiguous slash dates; omit to receive clarification choices"
}
},
"additionalProperties": false
}The date N whole calendar days before a date (exclusive counting: the start date is day 0). Omit date for today in tz. For working days use business_days; for the gap between two dates use days_between.
| Argument | Type | Description |
|---|---|---|
| tz | string | IANA timezone that defines "today" (e.g. Africa/Kampala). Default UTC. |
| date | string | ISO date YYYY-MM-DD, or "today" (resolved in tz) |
| days* | integer | Whole calendar days to subtract. Negative counts forwards. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"days"
],
"properties": {
"tz": {
"type": "string",
"default": "UTC",
"maxLength": 64,
"description": "IANA timezone that defines \"today\" (e.g. Africa/Kampala). Default UTC."
},
"date": {
"type": "string",
"default": "today",
"pattern": "^(\\d{4}-\\d{2}-\\d{2}|today)$",
"description": "ISO date YYYY-MM-DD, or \"today\" (resolved in tz)"
},
"days": {
"type": "integer",
"maximum": 100000,
"minimum": -100000,
"description": "Whole calendar days to subtract. Negative counts forwards."
}
},
"additionalProperties": false
}| customHolidays |
| array |
| Custom organizational holiday calendar as ISO dates (mutually exclusive with jurisdiction) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"to": {
"type": "string",
"pattern": "^(\\d{4}-\\d{2}-\\d{2}|today)$",
"description": "ISO date YYYY-MM-DD, or \"today\" (resolved in tz)"
},
"tz": {
"type": "string",
"default": "UTC",
"maxLength": 64,
"description": "IANA timezone that defines \"today\" (e.g. Africa/Kampala). Default UTC."
},
"date": {
"type": "string",
"pattern": "^(\\d{4}-\\d{2}-\\d{2}|today)$",
"description": "ISO date YYYY-MM-DD, or \"today\" (resolved in tz)"
},
"days": {
"type": "integer",
"maximum": 100000,
"minimum": -100000,
"description": "Add mode: business days to move. Negative counts backwards."
},
"from": {
"type": "string",
"pattern": "^(\\d{4}-\\d{2}-\\d{2}|today)$",
"description": "ISO date YYYY-MM-DD, or \"today\" (resolved in tz)"
},
"workweek": {
"enum": [
"mon-fri",
"sun-thu",
"mon-sat"
],
"type": "string",
"description": "Working week. Default mon-fri (Sat+Sun weekend)."
},
"jurisdiction": {
"type": "string",
"maxLength": 8,
"description": "Holiday jurisdiction id: US, GB, GB-SCT, GB-NIR, IE, FR, CA, AU, UG (alias UK for GB). No default: omit for no holiday calendar."
},
"customHolidays": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 1000,
"description": "Custom organizational holiday calendar as ISO dates (mutually exclusive with jurisdiction)"
}
},
"additionalProperties": false
}| integer |
| Calendar year for holiday_lookup, e.g. 2027 |
| event | string | Event slug (e.g. christmas). Exactly one of event/weekday. |
| weekday | integer | 0 = Sunday .. 6 = Saturday. Exactly one of event/weekday. |
| workweek | string | Working week. Default mon-fri (Sat+Sun weekend). |
| invoiceDate | string | ISO date YYYY-MM-DD, or "today" (resolved in tz) |
| jurisdiction | string | Holiday jurisdiction id: US, GB, GB-SCT, GB-NIR, IE, FR, CA, AU, UG (alias UK for GB). No default: omit for no holiday calendar. |
| customHolidays | array | Custom organizational holiday calendar as ISO dates (mutually exclusive with jurisdiction) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"op"
],
"properties": {
"op": {
"enum": [
"add_days",
"subtract_days",
"days_between",
"business_days",
"invoice_due",
"next_occurrence",
"holiday_lookup"
],
"type": "string",
"description": "Operation to explain. holiday_lookup is the holidays tool; the others share their tool's name."
},
"to": {
"type": "string",
"pattern": "^(\\d{4}-\\d{2}-\\d{2}|today)$",
"description": "ISO date YYYY-MM-DD, or \"today\" (resolved in tz)"
},
"tz": {
"type": "string",
"default": "UTC",
"maxLength": 64,
"description": "IANA timezone that defines \"today\" (e.g. Africa/Kampala). Default UTC."
},
"net": {
"type": "integer",
"maximum": 3650,
"minimum": 0,
"description": "Net-N payment terms in calendar days (Net 30 = 30)."
},
"date": {
"type": "string",
"pattern": "^(\\d{4}-\\d{2}-\\d{2}|today)$",
"description": "ISO date YYYY-MM-DD, or \"today\" (resolved in tz)"
},
"days": {
"type": "integer",
"maximum": 100000,
"minimum": -100000,
"description": "Day count for add_days, subtract_days and business_days add mode."
},
"from": {
"type": "string",
"pattern": "^(\\d{4}-\\d{2}-\\d{2}|today)$",
"description": "ISO date YYYY-MM-DD, or \"today\" (resolved in tz)"
},
"roll": {
"type": "boolean",
"description": "Roll a weekend or holiday due date forward to the next business day. Default false."
},
"year": {
"type": "integer",
"maximum": 3000,
"minimum": 1600,
"description": "Calendar year for holiday_lookup, e.g. 2027"
},
"event": {
"type": "string",
"maxLength": 40,
"description": "Event slug (e.g. christmas). Exactly one of event/weekday."
},
"weekday": {
"type": "integer",
"maximum": 6,
"minimum": 0,
"description": "0 = Sunday .. 6 = Saturday. Exactly one of event/weekday."
},
"workweek": {
"enum": [
"mon-fri",
"sun-thu",
"mon-sat"
],
"type": "string",
"description": "Working week. Default mon-fri (Sat+Sun weekend)."
},
"invoiceDate": {
"type": "string",
"pattern": "^(\\d{4}-\\d{2}-\\d{2}|today)$",
"description": "ISO date YYYY-MM-DD, or \"today\" (resolved in tz)"
},
"jurisdiction": {
"type": "string",
"maxLength": 8,
"description": "Holiday jurisdiction id: US, GB, GB-SCT, GB-NIR, IE, FR, CA, AU, UG (alias UK for GB). No default: omit for no holiday calendar."
},
"customHolidays": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 1000,
"description": "Custom organizational holiday calendar as ISO dates (mutually exclusive with jurisdiction)"
}
},
"additionalProperties": false
}