mcpserver.lol
registry/almanack
Connection check verified live · 27h ago

almanack

Date math and SVG rendering for fictional and custom calendars. Exact, stateless and deterministic.

Tools 15
GitHub stars
Installs / wk
Licence
Transport streamable-http
Last checked 27h ago

Tools & capabilities

15 tools

Read from the running server on 27h ago.

add_to_date datedaystimestepsticksyears +4
Move a date by years, months, days and ticks. They are applied in that fixed order, which matters: a month then a day is not always the same landing as a day then a month. Adding d…
calendar_events endaftereventlimitquerystart +3
When recurring events fall, and whether they land on each other. query 'next' gives the first occurrence after the date in 'after' (or on it when inclusive is true). query 'occurre…
calendar_periods datedatescalendar*on_error
Which named periods of the year a date falls in — a season, a tide, a term. Answers with a list, not one: a calendar may declare several cycles of periods and a date sits in one of…
calendar_weekday datedatescalendar*on_error
Which weekday a date falls on, as a 0-based index into the calendar's own week plus its name. Exact; never estimates. Returns weekday null when the date is an intercalary day the w…
convert_date datetimedatescalendar*on_errorgregorian +3
Convert between a calendar date, its day number, and its Gregorian date. Give exactly one of date, day_number, gregorian or one of their plurals dates, day_numbers, gregorians; all…
date_interval end*start*calendar*end_timestart_time
The distance between two dates. 'days' is the exact signed count (negative when end precedes start) and is always reliable. 'calendar' breaks the same distance into whole years, th…
format_calendar_date datetimedatestimespattern*calendar* +1
Write a date out to a pattern. pattern is either a name from the calendar's own 'formats' (names win) or a pattern written out. Tokens: {day} {day-name} {month} {month-name} {year}…
moon_phases date*timecalendar*day_fraction
Every moon's phase on a date. 'fraction' is the exact position in the cycle, 0.0 at new and 0.5 at full, and is the number to compute with. 'phase' is only which named bucket that…
nth_weekday_of_month n*year*month*weekday*calendar*
The nth given weekday of a month: the 3rd Tuesday, the last Friday. n is 1-based from the start of the month, or negative from the end (-1 is the last). Only days the week counts a…
parse_calendar_date text*pattern*calendar*
Read a written date back into a date. Strict, with no fuzzy matching of any kind: literal characters must match character for character, month, weekday, era and period names must b…
render_calendar_page year*monththemeeventscalendar*
Draw one month of a calendar as an SVG grid, or a whole year on one sheet, and return the SVG itself. Columns come from the calendar's own week, so a ten-day week gets ten columns.…
render_timeline end*start*themeeventscalendar*
Draw a date range as a horizontal SVG timeline and return the SVG itself. Both ends of the range are included. Axis ticks choose their own granularity from the span — days, months…
scatter_dates end*seed*count*start*uniquecalendar*
Scatter a number of dates across a span, for generating events. The seed is required and the draw is fully deterministic: the same calendar, span, count, seed and unique flag alway…
sun_daylight datedatescalendar*on_error
How long each sun is up on a date, and between which times of day. THE CURVE IS DECLARED BY THE SPEC, NEVER INFERRED, and that is the point of this tool: a shortest day, a longest…
validate_calendar_spec calendar*
Check a calendar spec and list everything wrong with it. Returns structured errors and warnings; it never throws and never partially accepts a spec. Errors mean the spec is unusabl…