Date context for agents: Chinese lunar calendar, solar terms, holidays for 12 regions. Offline.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent — or use 1-click editor setup below.
One-click editor setup isn’t available for this listing yet — we don’t have a confirmed install command, and we’d rather show nothing than point your editor at the wrong package or host. Follow the project’s own setup instructions, linked above.
Date context for AI agents and developers: lunar calendar, solar terms, holidays and "what does this day mean" — offline, verified, MIT. 给 AI Agent 和开发者的日期语义层:农历、节气、节假日、"这一天意味着什么"——离线、可验证、MIT。
Status: week 1. Lunar calendar, the 24 solar terms and the holiday layer (12 regions) are in; lunar & solar terms verified for 1900–2100, CN holidays for 2024–2026. 状态:第一周。农历、二十四节气、节假日层(12 个地区)均已落地;农历与节气 1900–2100 全量验证, 中国大陆节假日 2024–2026 逐天对拍。
One call:
Dates can be given as "2026-02-17", [2026, 2, 17], { year, month, day } or a Date (UTC fields). Every holiday
answer carries source (official / baseline / predicted), confidence (certain / likely / uncertain) and data
version metadata; a year we know nothing about comes back as { available: false, reason }, never a guess.
Pieces:
MAX_DATE; that last date falls inside lunar
2100 腊月, so monthLength for that month is null — the table ends mid-month and the real length is unknown)official / baseline / predicted — never silently guesseddayInfo, dateContext, holidays) never throw for missing data: they return { available: false, reason } or an empty list.isWorkday, addWorkdays, nextWorkday, workdayCount) throw RangeError when the region-year is not covered.nextLongWeekend, nextLunarDate) return null when nothing is found in range, and throw when data runs out.TypeError / RangeError.
Region codes are case-insensitive ("us-ca" = "US-CA"); a code with no data at all still throws.coverage(region).predictedFrom). Past uncovered years return
{ available: false } rather than a guess — extrapolating the current 《放假办法》 backwards would
invent history (清明/端午/中秋 became statutory only in 2008, 春节 runs 除夕..初三 only from 2025).tools/gen_fixtures.py and tools/gen_solar_terms.py generate fixtures/lunar-1900-2100.json (73,384 rows) from two independent reference
implementations (sxtwl, lunar_python). The test suite converts every row in both directions.
Anything the two references disagree on is written to fixtures/lunar-disagreements.json and adjudicated by hand
(see NOTES.md). A release is blocked unless 100% of rows pass.
The last step of npm run check verifies CN.json day-by-day against chinesecalendar. If that
package is missing it fails loudly rather than skipping — an unverified table must not look like a
passing gate.
chinesecalendar; later years → statutory days predicted from lunar/solar-term rules (forward-only; earlier years are never guessed)baseline (python-holidays rules), CNY dates cross-checked against our lunar tableUS-CA, DE-BY, GB-SCT, 70+ subdivisions as diffs); holiday kind (public/federal/bank/substitute); previousWorkday / addWorkdays / workdayCount / holidaysBetween / isHolidayEve / nextLongWeekend; month & hour 干支, nextLunarDate (lunar birthdays); describe() one-sentence zh/en output for MCPdateContext() one-call API, canonical date input, confidence levels, BCP-47 names with guaranteed en + zh-Hans, canonical festival ids across regions, data version metadata, graceful available: falseofficial year by year against gazettes (TW 補班, HK gazette, KR substitute days first)@icyn/date npm package (esbuild ESM, per-region entry points, d.ts) · @icyn/date-mcp MCP server (11 tools, stdio, smoke-tested end to end)icyndate pip package (same test vectors)MIT for code and the derived lunar / solar-term tables. The baseline holiday tables for the eleven
non-CN regions are derived from python-holidays (MIT) — its
licence is reproduced in THIRD-PARTY-LICENSES, and each generated file records the exact version in
baseline_note. Other third-party data (Wikipedia, government holiday notices) keeps its own licence
and is attributed per entry.
No reviews yet — be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/icyn-date)<a href="https://allmcps.com/mcp/icyn-date"><img src="https://allmcps.com/api/badge/icyn-date?style=directory" alt="Icyn Date on AllMCPs" /></a>