lookup-holiday
lookup-holiday
Remote MCP server (Cloudflare Workers) with one tool that looks up real public holidays:
lookup_holiday— real holidays for a country (and optionally a state/subdivision and region) and year, from a rule-based calendar engine covering 206 countries. Moveable holidays (Easter, lunar calendars, "nth weekday of month" rules, etc.) are computed with real date arithmetic, not guessed by the model.
No database, no persistent state: each call builds a fresh McpServer (see createServer() in src/index.ts). The calendar engine is date-holidays, bundled directly into the Worker.
Data attribution
The holiday data (which dates are holidays, their names) comes from the date-holidays project and is licensed CC BY-SA 3.0, since it's compiled from Wikipedia articles — see NOTICE and their LICENSE file for the full per-country attribution list. Only the code in this repository is MIT; see LICENSE.
Related MCP server: PH Holidays MCP
Billing (x402)
Charges per call via x402 — real USDC payment on Base mainnet, against the Coinbase Developer Platform (CDP) facilitator. The payment travels inside the MCP JSON-RPC itself (_meta), not as an HTTP header; see src/payments.ts.
Tool | Price |
| $0.01 USDC |
An unpaid tools/call returns isError: true with the accepts (network, amount, payTo) the client needs to pay and retry — not an unexplained exception.
Structure
src/
index.ts # registers the tool in the McpServer and exposes the MCP HTTP handler
payments.ts # x402 billing on Base mainnet via the CDP facilitator
tools/
holiday.ts # pure logic for lookup_holiday (testable without Workers)
holiday.test.ts
scripts/
dev-node.ts # dev server that runs the handler in plain Node, no wranglerRunning it locally
⚠️ Note on wrangler dev: the real Cloudflare Workers runtime (workerd) requires macOS 13.5+. If your Mac has an older version, wrangler dev (and npm run dev) will fail. This project includes a plain-Node shim that runs the exact same fetch() handler without needing workerd.
1. Install dependencies
npm install2. Run the unit tests
npm test3a. If your wrangler dev works (macOS 13.5+, Linux, Windows)
npm run dev3b. If wrangler dev fails because of the macOS version
npm run dev:nodeStarts at http://localhost:8787/mcp, reading CDP credentials from ~/.mcp-tools-factory-credentials.env (shared across all tools in this factory).
4. Test with curl
# 1) initialize
curl -s -X POST http://localhost:8787/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl-test","version":"0.0.1"}}}'
# 2) tools/list
curl -s -X POST http://localhost:8787/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'
# 3) tools/call — lookup_holiday
curl -s -X POST http://localhost:8787/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"lookup_holiday","arguments":{"country":"US","state":"TX","year":2026}}}'Responses come as Server-Sent Events (event: message + data: {...}); the data: line is the usual JSON-RPC response.
Deploy and listings
Deployed at https://lookup-holiday.encodari.workers.dev/mcp (Cloudflare Workers). Published on the official MCP registry, Smithery, mcp.so, Glama, and with an open PR to awesome-mcp-servers.
What it doesn't do (yet)
Charges on Base mainnet with real money. To switch back to testnet (Base Sepolia,
eip155:84532) during development, changeNETWORKinsrc/payments.ts.No database or persistent state between calls (beyond the billing config, cached in memory per isolate — see
src/payments.ts).Doesn't model when a holiday was first introduced — a rule like "3rd Monday in January" is applied to any requested year even if the holiday didn't exist yet historically. Fine for scheduling near-term years; not a historical record.
This server cannot be installed
Maintenance
Related MCP Servers
- Flicense-qualityDmaintenanceProvides access to the Nager.Date Public Holiday API for querying global holiday information through the Model Context Protocol. It enables AI agents to interact with standardized tools for holiday-related date calculations and country-specific lookups.
- Alicense-qualityDmaintenanceProvides authoritative Philippine national holiday data sourced from official presidential proclamations, including regular, special, and Islamic holidays. It enables users to query specific dates, retrieve upcoming holidays, identify long weekends, and verify working day status.10MIT
- Alicense-qualityCmaintenancePublic holiday data for 30+ countries. Check holidays, working days, and full calendars via AI assistants like Claude and Cursor.MIT
- AlicenseAqualityBmaintenanceProvides deterministic business-day calculations for AI agents, correctly handling country-specific weekends and public holidays.6531Apache 2.0
Related MCP Connectors
Live financial data MCP: FX, crypto, stocks, news, URL reader. x402 on Base: $0.001/call.
Business-day, SLA, cron and recurrence calculations — offline, holiday-aware, no network.
Zero-signup business-day date-math API: add days, count days between dates, is-business-day.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/encodi/lookup-holiday'
If you have feedback or need assistance with the MCP directory API, please join our Discord server