Business days, T+N settlement dates and holidays for FX, banks, payments and exchanges.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Optional: 'Bearer YOUR_API_KEY'. Without it the server runs a short keyless trial. Free key: https://tradingcalendars.com/signup?ref=mcp-registry
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.
Date that is N business days after (or before, with negative days) a start date: settlement and value dates (T+1 = 1, T+2 = 2), payment due dates, deadlines. days = 0 rolls a non-business start forward to the next business day. Lists every non-business day skipped and why. calendars: one or more calendar codes from list_calendars, e.g. ["USD.FX", "EUR.FX"] for a EUR/USD FX trade, ["XNYS.SETTLE"] for NYSE settlement, ["TARGET2.PAY"] for euro payments, ["GBLON.BANK"] for London banks. A date counts as a business day only when it is open in every calendar given. date defaults to today.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http holidays https://api.tradingcalendars.com/mcp
Headers
Authorization (optional, not in the config above): Optional: 'Bearer YOUR_API_KEY'. Without it the server runs a short keyless trial. Free key: https://tradingcalendars.com/signup?ref=mcp-registryDate that is N business days after (or before, with negative days) a start date: settlement and value dates (T+1 = 1, T+2 = 2), payment due dates, deadlines. days = 0 rolls a non-business start forward to the next business day. Lists every non-business day skipped and why. calendars: one or more calendar codes from list_calendars, e.g. ["USD.FX", "EUR.FX"] for a EUR/USD FX trade, ["XNYS.SETTLE"] for NYSE settlement, ["TARGET2.PAY"] for euro payments, ["GBLON.BANK"] for London banks. A date counts as a business day only when it is open in every calendar given. date defaults to today.
| Argument | Type | Description |
|---|---|---|
| date | any | |
| days* | integer | |
| calendars* | array |
{
"type": "object",
"title": "add_business_daysArguments",
"required": [
"calendars",
"days"
],
"properties": {
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"title": "Date",
"default": null
},
"days": {
"type": "integer",
"title": "Days"
},
"calendars": {
"type": "array",
"items": {
"type": "string"
},
"title": "Calendars"
}
}
}Bank holidays for a financial centre (UN/LOCODE, e.g. USNYC): days retail and commercial banks are closed. start defaults to today.
| Argument | Type | Description |
|---|---|---|
| end | any | |
| start | any | |
| financial_centre* | string |
{
"type": "object",
"title": "bank_holidaysArguments",
"required": [
"financial_centre"
],
"properties": {
"end": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"title": "End",
"default": null
},
"start": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"title": "Start",
"default": null
},
"financial_centre": {
"type": "string",
"title": "Financial Centre"
}
}
}Number of business days between two dates (start counted, end not counted, like numpy.busday_count), with the non-business days in between and why. calendars: one or more calendar codes from list_calendars, e.g. ["USD.FX", "EUR.FX"] for a EUR/USD FX trade, ["XNYS.SETTLE"] for NYSE settlement, ["TARGET2.PAY"] for euro payments, ["GBLON.BANK"] for London banks. A date counts as a business day only when it is open in every calendar given.
| Argument | Type | Description |
|---|---|---|
| end* | string | |
| start* | string | |
| calendars* | array |
{
"type": "object",
"title": "business_days_betweenArguments",
"required": [
"calendars",
"start",
"end"
],
"properties": {
"end": {
"type": "string",
"title": "End",
"format": "date"
},
"start": {
"type": "string",
"title": "Start",
"format": "date"
},
"calendars": {
"type": "array",
"items": {
"type": "string"
},
"title": "Calendars"
}
}
}Currency non-clearing days (ISO 4217, e.g. USD): days the currency cannot clear or settle. Use to validate FX value dates. start defaults to today.
| Argument | Type | Description |
|---|---|---|
| end | any | |
| start | any | |
| currency* | string |
{
"type": "object",
"title": "currency_non_clearing_daysArguments",
"required": [
"currency"
],
"properties": {
"end": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"title": "End",
"default": null
},
"start": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"title": "Start",
"default": null
},
"currency": {
"type": "string",
"title": "Currency"
}
}
}FX market holidays for a currency (ISO 4217, e.g. USD): days the FX market for that currency does not trade. start defaults to today.
| Argument | Type | Description |
|---|---|---|
| end | any | |
| start | any | |
| currency* | string |
{
"type": "object",
"title": "fx_market_holidaysArguments",
"required": [
"currency"
],
"properties": {
"end": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"title": "End",
"default": null
},
"start": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"title": "Start",
"default": null
},
"currency": {
"type": "string",
"title": "Currency"
}
}
}Holidays for one calendar by code (e.g. USD.FX). start defaults to today; pass an earlier start for historical holidays, end to bound forward dates. Rows carry original_date when a holiday is observed on a shifted date, plus half-day and early-close details.
| Argument | Type | Description |
|---|---|---|
| end | any | |
| start | any | |
| calendar* | string |
{
"type": "object",
"title": "get_holidaysArguments",
"required": [
"calendar"
],
"properties": {
"end": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"title": "End",
"default": null
},
"start": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"title": "Start",
"default": null
},
"calendar": {
"type": "string",
"title": "Calendar"
}
}
}Weekend definitions and working weekends for one calendar code (e.g. USD.FX). weekend_days is the definition in force today (ISO weekday numbers); weekend_definitions carries the full history.
| Argument | Type | Description |
|---|---|---|
| calendar* | string |
{
"type": "object",
"title": "get_weekendsArguments",
"required": [
"calendar"
],
"properties": {
"calendar": {
"type": "string",
"title": "Calendar"
}
}
}Is a date a business day? Answers for one or several calendars at once and says why not (holiday name, weekend) or flags a half day / early close. calendars: one or more calendar codes from list_calendars, e.g. ["USD.FX", "EUR.FX"] for a EUR/USD FX trade, ["XNYS.SETTLE"] for NYSE settlement, ["TARGET2.PAY"] for euro payments, ["GBLON.BANK"] for London banks. A date counts as a business day only when it is open in every calendar given. date defaults to today (yyyy-mm-dd).
| Argument | Type | Description |
|---|---|---|
| date | any | |
| calendars* | array |
{
"type": "object",
"title": "is_business_dayArguments",
"required": [
"calendars"
],
"properties": {
"date": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"title": "Date",
"default": null
},
"calendars": {
"type": "array",
"items": {
"type": "string"
},
"title": "Calendars"
}
}
}List published holiday calendars available to your plan. Optional calendar_type filters by family (CURRENCY_FX, CURRENCY_NON_CLEARING, FINANCIAL_CENTRE, PAYMENT_SYSTEM, EXCHANGE_TRADING, EXCHANGE_SETTLEMENT).
| Argument | Type | Description |
|---|---|---|
| calendar_type | any |
{
"type": "object",
"$defs": {
"CalendarType": {
"enum": [
"CURRENCY_FX",
"CURRENCY_NON_CLEARING",
"FINANCIAL_CENTRE",
"PAYMENT_SYSTEM",
"EXCHANGE_TRADING",
"EXCHANGE_SETTLEMENT"
],
"type": "string",
"title": "CalendarType"
}
},
"title": "list_calendarsArguments",
"properties": {
"calendar_type": {
"anyOf": [
{
"$ref": "#/$defs/CalendarType"
},
{
"type": "null"
}
],
"default": null
}
}
}List covered currencies (ISO 4217) with issuing country and issuer.
No arguments.
{
"type": "object",
"title": "list_currenciesArguments",
"properties": {}
}List covered exchanges (ISO 10383 MIC) with country, city, and timezone.
No arguments.
{
"type": "object",
"title": "list_exchangesArguments",
"properties": {}
}List covered financial centres (UN/LOCODE) with country and timezone.
No arguments.
{
"type": "object",
"title": "list_financial_centresArguments",
"properties": {}
}List covered payment systems with operator, type, currency, and country.
No arguments.
{
"type": "object",
"title": "list_payment_systemsArguments",
"properties": {}
}Live open/half/closed status for exchanges, evaluated against real trading hours and today's trading holidays in each exchange's timezone. Includes next_open_at and next_close_at timestamps. Pass a MIC (e.g. XNYS) for one market or omit it for all. Requires a plan with exchange trading data (Free, Exchange, or All-in-one).
| Argument | Type | Description |
|---|---|---|
| market | any |
{
"type": "object",
"title": "market_statusArguments",
"properties": {
"market": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Market",
"default": null
}
}
}Payment system holidays (e.g. TARGET2, FEDWIRE): days the system does not process or settle. start defaults to today.
| Argument | Type | Description |
|---|---|---|
| end | any | |
| start | any | |
| payment_system* | string |
{
"type": "object",
"title": "payment_system_holidaysArguments",
"required": [
"payment_system"
],
"properties": {
"end": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"title": "End",
"default": null
},
"start": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"title": "Start",
"default": null
},
"payment_system": {
"type": "string",
"title": "Payment System"
}
}
}Exchange settlement holidays for a market (ISO 10383 MIC, e.g. XNYS): days clearing and settlement cannot take place. start defaults to today.
| Argument | Type | Description |
|---|---|---|
| end | any | |
| start | any | |
| market* | string |
{
"type": "object",
"title": "settlement_holidaysArguments",
"required": [
"market"
],
"properties": {
"end": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"title": "End",
"default": null
},
"start": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"title": "Start",
"default": null
},
"market": {
"type": "string",
"title": "Market"
}
}
}Exchange trading holidays for a market (ISO 10383 MIC, e.g. XNYS): days the exchange is closed for trading, including shortened sessions (half_day and early_close_time fields). start defaults to today.
| Argument | Type | Description |
|---|---|---|
| end | any | |
| start | any | |
| market* | string |
{
"type": "object",
"title": "trading_holidaysArguments",
"required": [
"market"
],
"properties": {
"end": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"title": "End",
"default": null
},
"start": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"title": "Start",
"default": null
},
"market": {
"type": "string",
"title": "Market"
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 3, 2026.
No readOnlyHint / destructiveHint annotations, so clients can't tell a read from a write without asking.
Fix: Add annotations to each tool, e.g. { readOnlyHint: true } for tools that only read.