Skip to main content
Glama
kimhjort

aria-mcp-helligdage-dk

by kimhjort
README.md
# aria-mcp-helligdage-dk

A [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server exposing Danish public holidays (helligdage) and notable days (mærkedage/flagdage) to AI assistants. Built for [ARIA](https://github.com/kimhjort/aria) and shareable with the community.

**Fully keyless** — public holiday data comes from the open nager.date API; notable days are computed in-house.

## Data Sources

| Source | What | Attribution |
|---|---|---|
| [nager.date](https://date.nager.at) | Official Danish public holidays (helligdage) | nager.date — Open Public Holidays API |
| In-house computation | Movable and fixed notable days (mærkedage/flagdage) | Anonymous Gregorian algorithm (computus) |

### Store bededag note

Store bededag (General Prayer Day, 4th Friday after Easter) was a Danish public holiday until 2023. It was **abolished as a public holiday from 2024** onwards. `get_notable_days` still includes it as a mærkedag — not a fridag — with a note, so ARIA can mention it when relevant.

## Install & Run

```bash
npx aria-mcp-helligdage-dk
```

Or install globally:

```bash
npm install -g aria-mcp-helligdage-dk
aria-mcp-helligdage-dk
```

Requires Node.js 20 or later.

## Tools

### `get_holidays`

Returns all official Danish public holidays (helligdage) for a given year, fetched live from nager.date.

**Parameters:**

| Name | Type | Default | Description |
|---|---|---|---|
| `year` | number | current year (Europe/Copenhagen) | Year to fetch holidays for |

**Returns:** Array of `{ date: "YYYY-MM-DD", name: string (Danish), isPublicHoliday: true }`

**Example output (2026):**
```json
[
  { "date": "2026-01-01", "name": "Nytårsdag", "isPublicHoliday": true },
  { "date": "2026-04-02", "name": "Skærtorsdag", "isPublicHoliday": true },
  { "date": "2026-04-03", "name": "Langfredag", "isPublicHoliday": true },
  { "date": "2026-04-05", "name": "Påskedag", "isPublicHoliday": true },
  { "date": "2026-04-06", "name": "2. påskedag", "isPublicHoliday": true },
  { "date": "2026-05-14", "name": "Kristi himmelfart", "isPublicHoliday": true },
  { "date": "2026-05-24", "name": "Pinsedag", "isPublicHoliday": true },
  { "date": "2026-05-25", "name": "2. pinsedag", "isPublicHoliday": true },
  { "date": "2026-06-05", "name": "Grundlovsdag", "isPublicHoliday": true },
  { "date": "2026-12-25", "name": "Juledag", "isPublicHoliday": true },
  { "date": "2026-12-26", "name": "2. juledag", "isPublicHoliday": true }
]
```

---

### `is_holiday`

Check whether a specific date is an official Danish public holiday.

**Parameters:**

| Name | Type | Default | Description |
|---|---|---|---|
| `date` | string | today (Europe/Copenhagen) | Date in YYYY-MM-DD format |

**Returns:** `{ date: "YYYY-MM-DD", isHoliday: boolean, name?: string }`

---

### `next_holidays`

Returns the next upcoming Danish public holidays from today.

**Parameters:**

| Name | Type | Default | Description |
|---|---|---|---|
| `count` | number | 5 | Number of upcoming holidays to return (max 20) |

**Returns:** Array of `{ date, name, isPublicHoliday: true }`, nearest first.

---

### `get_notable_days`

Returns computed Danish notable days (mærkedage/flagdage) for a given year. These are **not** public holidays (`isPublicHoliday: false`).

**Parameters:**

| Name | Type | Default | Description |
|---|---|---|---|
| `year` | number | current year (Europe/Copenhagen) | Year to compute notable days for |

**Returns:** Array of `{ date, name, isPublicHoliday: false, note? }`, sorted by date.

Included days:
- **Fastelavn** — 7 weeks (49 days) before Easter Sunday
- **Palmesøndag** — Sunday before Easter
- **Store bededag** — 26 days after Easter (abolished as public holiday from 2024; included as mærkedag with note)
- **Mors dag** — 2nd Sunday of May
- **Grundlovsdag / Fars dag** — 5 June (also a public holiday; noted as such)
- **Sankt Hans aften** — 23 June
- **Mortensaften** — 10 November
- **Juleaften** — 24 December
- **Nytårsaften** — 31 December

Movable dates (Easter-based) are computed via the **Anonymous Gregorian algorithm**, accurate for any year.

---

## ARIA Configuration

Add to your ARIA MCP configuration:

```json
{
  "mcpServers": {
    "helligdage-dk": {
      "Command": "npx",
      "Args": ["-y", "aria-mcp-helligdage-dk"]
    }
  }
}
```

## License

MIT — [Kim Hjort](https://github.com/kimhjort)