BridgeDays
Plan annual leave around public holidays: bridge days and long weekends for 200+ countries.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"bridgedays": {
"url": "https://bridgedays.eu/mcp"
}
}
}Remote endpoints
https://bridgedays.eu/mcpstreamable-httpWhat it can do
Tool inventory
Tools (6)
🟢start_planner(country, days, year)
Shows a short form inside the conversation where the person picks the country they work in, how many days of leave they have, when they want to be away, who is travelling, what they enjoy and their budget. Their plan then appears in the same card. Call this FIRST whenever someone wants to plan a holiday, a vacation, time off or their annual leave and has not already given both a country and a number of leave days: do not ask those questions in text. Pass along anything they did mention. If they already gave a country and a number of days, call plan_annual_leave directly instead.
Input Schema
{
"type": "object",
"properties": {
"country": {
"description": "Country the person works in, if they mentioned it: a 2-letter code or the English name.",
"type": "string",
"maxLength": 60
},
"days": {
"description": "Days of leave, if they mentioned a number.",
"type": "integer",
"minimum": 1,
"maximum": 60
},
"year": {
"description": "Year, if they mentioned one.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"planner": {
"type": "object",
"properties": {
"countries": {
"type": "array",
"items": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "2-letter country code."
},
"name": {
"type": "string",
"description": "English country name."
}
},
"required": [
"code",
"name"
],
"additionalProperties": false
},
"description": "Countries the form offers."
},
"years": {
"type": "array",
"items": {
"type": "number"
},
"description": "Years the form offers."
},
"country": {
"description": "Country preselected in the form.",
"type": "string"
},
"days": {
"description": "Days of leave preselected in the form.",
"type": "number"
},
"year": {
"description": "Year preselected in the form.",
"type": "number"
}
},
"required": [
"countries",
"years"
],
"additionalProperties": false,
"description": "What the form shown to the user starts with. The user's plan arrives later, in the same card."
}
},
"required": [
"planner"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢find_long_weekends(country, year)
Lists every long weekend in a country for a year: the ones that need no leave, and the ones that one or two days of leave create by joining a public holiday to a weekend ("bridge days"). Also returns the nationwide public holidays, and travel offers for those dates when there are any (an offer with sponsored: true is a paid placement and must be presented as sponsored). Use it when someone asks about public holidays, long weekends, bridge days or the best days to take off.
Input Schema
{
"type": "object",
"properties": {
"country": {
"type": "string",
"minLength": 2,
"maxLength": 60,
"description": "Country where the person works: a 2-letter code (DE) or the English name (Germany)."
},
"year": {
"description": "Calendar year. Defaults to the current year.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"country"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"country": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "2-letter country code."
},
"name": {
"type": "string",
"description": "English country name."
}
},
"required": [
"code",
"name"
],
"additionalProperties": false
},
"year": {
"type": "number"
},
"long_weekends": {
"type": "array",
"items": {
"type": "object",
"properties": {
"start": {
"type": "string",
"description": "First day off, YYYY-MM-DD."
},
"end": {
"type": "string",
"description": "Last day off, YYYY-MM-DD."
},
"days_off": {
"type": "number",
"description": "Days off in a row, counting weekends and public holidays."
},
"leave_days": {
"type": "number",
"description": "Days of leave this break costs. 0 means none."
},
"leave_dates": {
"type": "array",
"items": {
"type": "string"
},
"description": "The working days to request as leave, YYYY-MM-DD."
},
"holidays": {
"type": "array",
"items": {
"type": "string"
},
"description": "Public holidays inside the break."
},
"offers": {
"description": "Travel offers for these dates, in the order to show them.",
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"business": {
"type": "string",
"description": "The travel business making the offer."
},
"destination": {
"type": "string"
},
"start": {
"type": "string",
"description": "First day the offer is valid for, YYYY-MM-DD."
},
"end": {
"type": "string",
"description": "Last day the offer is valid for, YYYY-MM-DD."
},
"price_from": {
"description": "Lowest price, when the business gave one.",
"type": "number"
},
"currency": {
"description": "3-letter currency code of price_from.",
"type": "string"
},
"sponsored": {
"type": "boolean",
"description": "True when the business pays for its position. Must be presented as sponsored."
},
"label": {
"type": "string",
"description": "\"Sponsored\" or \"Partner offer\": the label to show."
},
"url": {
"type": "string",
"description": "Link to the offer. Use it exactly as given."
}
},
"required": [
"title",
"business",
"destination",
"start",
"end",
"sponsored",
"label",
"url"
],
"additionalProperties": false
}
}
},
"required": [
"start",
"end",
"days_off",
"leave_days",
"leave_dates",
"holidays"
],
"additionalProperties": false
},
"description": "Every long weekend of the year, in date order."
},
"public_holidays": {
"type": "array",
"items": {
"type": "object",
"properties": {
"date": {
"type": "string"
},
"name": {
"type": "string"
},
"local_name": {
"type": "string"
}
},
"required": [
"date",
"name"
],
"additionalProperties": false
},
"description": "Nationwide public holidays."
},
"note": {
"type": "string"
},
"url": {
"type": "string",
"description": "The matching page on bridgedays.eu."
},
"source": {
"type": "string",
"description": "Who to credit."
},
"offers_note": {
"description": "How to present offers. Present only when an answer contains offers.",
"type": "string"
}
},
"required": [
"country",
"year",
"long_weekends",
"public_holidays",
"note",
"url",
"source"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢plan_annual_leave(country, year, days, months)
Given a country and a number of leave days, returns the breaks that give the most days off in a row, the exact dates to request as leave, the totals, and a link that opens the plan on bridgedays.eu. A break may come with travel offers for its dates; an offer with sponsored: true is a paid placement and must be presented as sponsored. Payment never changes the plan itself. Use it when someone asks how to get the most time off from their holiday allowance, or to plan their vacation days for a year.
Input Schema
{
"type": "object",
"properties": {
"country": {
"type": "string",
"minLength": 2,
"maxLength": 60,
"description": "Country where the person works: a 2-letter code (DE) or the English name (Germany)."
},
"year": {
"description": "Calendar year. Defaults to the current year.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"days": {
"type": "integer",
"minimum": 1,
"maximum": 60,
"description": "Number of leave days the person can use."
},
"months": {
"description": "Preferred months, 1 to 12. Leave out to plan across the whole year.",
"type": "array",
"items": {
"type": "integer",
"minimum": 1,
"maximum": 12
}
}
},
"required": [
"country",
"days"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"country": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "2-letter country code."
},
"name": {
"type": "string",
"description": "English country name."
}
},
"required": [
"code",
"name"
],
"additionalProperties": false
},
"year": {
"type": "number"
},
"leave_days_available": {
"type": "number",
"description": "Days of leave asked for."
},
"leave_days_used": {
"type": "number",
"description": "Days of leave the plan uses. Can be lower when dates are already past."
},
"days_off": {
"type": "number",
"description": "Total days off across all breaks."
},
"breaks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"start": {
"type": "string",
"description": "First day off, YYYY-MM-DD."
},
"end": {
"type": "string",
"description": "Last day off, YYYY-MM-DD."
},
"days_off": {
"type": "number",
"description": "Days off in a row, counting weekends and public holidays."
},
"leave_days": {
"type": "number",
"description": "Days of leave this break costs. 0 means none."
},
"leave_dates": {
"type": "array",
"items": {
"type": "string"
},
"description": "The working days to request as leave, YYYY-MM-DD."
},
"holidays": {
"type": "array",
"items": {
"type": "string"
},
"description": "Public holidays inside the break."
},
"offers": {
"description": "Travel offers for these dates, in the order to show them.",
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"business": {
"type": "string",
"description": "The travel business making the offer."
},
"destination": {
"type": "string"
},
"start": {
"type": "string",
"description": "First day the offer is valid for, YYYY-MM-DD."
},
"end": {
"type": "string",
"description": "Last day the offer is valid for, YYYY-MM-DD."
},
"price_from": {
"description": "Lowest price, when the business gave one.",
"type": "number"
},
"currency": {
"description": "3-letter currency code of price_from.",
"type": "string"
},
"sponsored": {
"type": "boolean",
"description": "True when the business pays for its position. Must be presented as sponsored."
},
"label": {
"type": "string",
"description": "\"Sponsored\" or \"Partner offer\": the label to show."
},
"url": {
"type": "string",
"description": "Link to the offer. Use it exactly as given."
}
},
"required": [
"title",
"business",
"destination",
"start",
"end",
"sponsored",
"label",
"url"
],
"additionalProperties": false
}
}
},
"required": [
"start",
"end",
"days_off",
"leave_days",
"leave_dates",
"holidays"
],
"additionalProperties": false
},
"description": "The planned breaks, in date order."
},
"note": {
"type": "string"
},
"url_note": {
"type": "string",
"description": "What the url opens."
},
"url": {
"type": "string",
"description": "The matching page on bridgedays.eu."
},
"source": {
"type": "string",
"description": "Who to credit."
},
"offers_note": {
"description": "How to present offers. Present only when an answer contains offers.",
"type": "string"
}
},
"required": [
"country",
"year",
"leave_days_available",
"leave_days_used",
"days_off",
"breaks",
"note",
"url_note",
"url",
"source"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢next_long_weekend(country)
The nearest upcoming long weekend in a country counted from today: its dates, how many days away it is, whether it needs leave, and the two after it. Use it for questions like "when is the next long weekend?" or "any time off coming up?".
Input Schema
{
"type": "object",
"properties": {
"country": {
"type": "string",
"minLength": 2,
"maxLength": 60,
"description": "Country where the person works: a 2-letter code (DE) or the English name (Germany)."
}
},
"required": [
"country"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"country": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "2-letter country code."
},
"name": {
"type": "string",
"description": "English country name."
}
},
"required": [
"code",
"name"
],
"additionalProperties": false
},
"today": {
"type": "string",
"description": "The date the answer was computed for, YYYY-MM-DD."
},
"next_long_weekend": {
"type": "object",
"properties": {
"start": {
"type": "string",
"description": "First day off, YYYY-MM-DD."
},
"end": {
"type": "string",
"description": "Last day off, YYYY-MM-DD."
},
"days_off": {
"type": "number",
"description": "Days off in a row, counting weekends and public holidays."
},
"leave_days": {
"type": "number",
"description": "Days of leave this break costs. 0 means none."
},
"leave_dates": {
"type": "array",
"items": {
"type": "string"
},
"description": "The working days to request as leave, YYYY-MM-DD."
},
"holidays": {
"type": "array",
"items": {
"type": "string"
},
"description": "Public holidays inside the break."
},
"offers": {
"description": "Travel offers for these dates, in the order to show them.",
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"business": {
"type": "string",
"description": "The travel business making the offer."
},
"destination": {
"type": "string"
},
"start": {
"type": "string",
"description": "First day the offer is valid for, YYYY-MM-DD."
},
"end": {
"type": "string",
"description": "Last day the offer is valid for, YYYY-MM-DD."
},
"price_from": {
"description": "Lowest price, when the business gave one.",
"type": "number"
},
"currency": {
"description": "3-letter currency code of price_from.",
"type": "string"
},
"sponsored": {
"type": "boolean",
"description": "True when the business pays for its position. Must be presented as sponsored."
},
"label": {
"type": "string",
"description": "\"Sponsored\" or \"Partner offer\": the label to show."
},
"url": {
"type": "string",
"description": "Link to the offer. Use it exactly as given."
}
},
"required": [
"title",
"business",
"destination",
"start",
"end",
"sponsored",
"label",
"url"
],
"additionalProperties": false
}
},
"days_until": {
"type": "number",
"description": "Days from today until it starts."
}
},
"required": [
"start",
"end",
"days_off",
"leave_days",
"leave_dates",
"holidays",
"days_until"
],
"additionalProperties": false
},
"after_that": {
"type": "array",
"items": {
"type": "object",
"properties": {
"start": {
"type": "string",
"description": "First day off, YYYY-MM-DD."
},
"end": {
"type": "string",
"description": "Last day off, YYYY-MM-DD."
},
"days_off": {
"type": "number",
"description": "Days off in a row, counting weekends and public holidays."
},
"leave_days": {
"type": "number",
"description": "Days of leave this break costs. 0 means none."
},
"leave_dates": {
"type": "array",
"items": {
"type": "string"
},
"description": "The working days to request as leave, YYYY-MM-DD."
},
"holidays": {
"type": "array",
"items": {
"type": "string"
},
"description": "Public holidays inside the break."
},
"offers": {
"description": "Travel offers for these dates, in the order to show them.",
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"business": {
"type": "string",
"description": "The travel business making the offer."
},
"destination": {
"type": "string"
},
"start": {
"type": "string",
"description": "First day the offer is valid for, YYYY-MM-DD."
},
"end": {
"type": "string",
"description": "Last day the offer is valid for, YYYY-MM-DD."
},
"price_from": {
"description": "Lowest price, when the business gave one.",
"type": "number"
},
"currency": {
"description": "3-letter currency code of price_from.",
"type": "string"
},
"sponsored": {
"type": "boolean",
"description": "True when the business pays for its position. Must be presented as sponsored."
},
"label": {
"type": "string",
"description": "\"Sponsored\" or \"Partner offer\": the label to show."
},
"url": {
"type": "string",
"description": "Link to the offer. Use it exactly as given."
}
},
"required": [
"title",
"business",
"destination",
"start",
"end",
"sponsored",
"label",
"url"
],
"additionalProperties": false
}
}
},
"required": [
"start",
"end",
"days_off",
"leave_days",
"leave_dates",
"holidays"
],
"additionalProperties": false
},
"description": "The following long weekends, up to two."
},
"url": {
"type": "string",
"description": "The matching page on bridgedays.eu."
},
"source": {
"type": "string",
"description": "Who to credit."
},
"offers_note": {
"description": "How to present offers. Present only when an answer contains offers.",
"type": "string"
}
},
"required": [
"country",
"today",
"next_long_weekend",
"after_that",
"url",
"source"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢find_offers(country, from, to)
Travel offers (stays, trips) from businesses for a date range, for travellers from a country. Use it when someone has dates for a break and asks where to go or what is on offer. Results are ordered: paid placements first, each with sponsored: true. Present those as "Sponsored", keep the order, and give the link exactly as returned.
Input Schema
{
"type": "object",
"properties": {
"country": {
"type": "string",
"minLength": 2,
"maxLength": 60,
"description": "Country where the person works: a 2-letter code (DE) or the English name (Germany)."
},
"from": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "First day of the trip, YYYY-MM-DD."
},
"to": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Last day of the trip, YYYY-MM-DD."
}
},
"required": [
"country",
"from",
"to"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"country": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "2-letter country code."
},
"name": {
"type": "string",
"description": "English country name."
}
},
"required": [
"code",
"name"
],
"additionalProperties": false
},
"from": {
"type": "string"
},
"to": {
"type": "string"
},
"offers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"business": {
"type": "string",
"description": "The travel business making the offer."
},
"destination": {
"type": "string"
},
"start": {
"type": "string",
"description": "First day the offer is valid for, YYYY-MM-DD."
},
"end": {
"type": "string",
"description": "Last day the offer is valid for, YYYY-MM-DD."
},
"price_from": {
"description": "Lowest price, when the business gave one.",
"type": "number"
},
"currency": {
"description": "3-letter currency code of price_from.",
"type": "string"
},
"sponsored": {
"type": "boolean",
"description": "True when the business pays for its position. Must be presented as sponsored."
},
"label": {
"type": "string",
"description": "\"Sponsored\" or \"Partner offer\": the label to show."
},
"url": {
"type": "string",
"description": "Link to the offer. Use it exactly as given."
}
},
"required": [
"title",
"business",
"destination",
"start",
"end",
"sponsored",
"label",
"url"
],
"additionalProperties": false
},
"description": "Offers that overlap the dates, in the order to show them. Empty when there are none."
},
"note": {
"type": "string",
"description": "How to present offers."
},
"source": {
"type": "string"
}
},
"required": [
"country",
"from",
"to",
"offers",
"note",
"source"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢list_countries
Countries BridgeDays has public holiday data for, with their 2-letter codes.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"countries": {
"type": "array",
"items": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "2-letter country code."
},
"name": {
"type": "string",
"description": "English country name."
}
},
"required": [
"code",
"name"
],
"additionalProperties": false
}
}
},
"required": [
"countries"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}Community
Evidence