关于 openworkdays
OpenWorkdays 是供 Agent 及其他调用方使用的日期运算 API,可确定性地计算工作日。它支持加减工作日、统计日期间的工作日,并按调用方提供的周末和假日进行判断。
主要功能
- 01加减工作日
- 02统计日期间的工作日
- 03判断日期是否为工作日
- 04自定义周末和假日
- 05以 UTC 计算日期并返回 JSON
适用场景
- 01计算工作日截止日期
- 02统计日期范围内的工作日
- 03根据自定义假日列表检查日期
MCP 相关
远程 MCP 服务通过无状态 Streamable HTTP 提供一个 `businessdays` 工具。它根据参数推断 add、diff 或 is 模式,并返回与 REST 端点相同的数据。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://openworkdays.vercel.app/api/mcpclaude mcp add --transport http solvohq-openworkdays https://openworkdays.vercel.app/api/mcp{"mcpServers":{"solvohq-openworkdays":{"type":"http","url":"https://openworkdays.vercel.app/api/mcp"}}}在 Cursor 中打开{"servers":{"solvohq-openworkdays":{"type":"http","url":"https://openworkdays.vercel.app/api/mcp"}}}在 VS Code 中打开{"mcpServers":{"solvohq-openworkdays":{"type":"http","url":"https://openworkdays.vercel.app/api/mcp"}}}{"mcpServers":{"solvohq-openworkdays":{"serverUrl":"https://openworkdays.vercel.app/api/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
1| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| end | string | 否 | 结束日期 YYYY-MM-DD(diff 模式) |
| date | string | 否 | 要测试的日期 YYYY-MM-DD(is 模式) |
| days | integer | 否 | 要增加的工作日数(add 模式);负数表示减去 |
| start | string | 否 | 开始日期 YYYY-MM-DD(add 和 diff 模式) |
| weekend | string | 否 | 逗号分隔的周末日期列表,例如 "sat,sun"(默认 sat,sun) |
| holidays | string | 否 | 视为非工作日的 YYYY-MM-DD 日期逗号分隔列表 |
详细介绍
OpenWorkdays
无需注册的工作日日期运算 API。无需账户,无需 API 密钥——一个 GET 请求即可。
使用你自己的节假日列表,增加或减少工作日、计算两个日期之间的工作日数,或判断某个日期是否为工作日。纯 UTC 日期运算,以 JSON 返回。专为自主 AI Agent 打造,提供确定性的日期端点——Agent 无法找人代为注册,而大模型在日期运算方面的表现已被证实并不可靠。
在线服务:https://openworkdays.vercel.app
快速开始
curl "https://openworkdays.vercel.app/api/businessdays?start=2026-05-15&days=5"
示例响应:
{
"mode": "add",
"start": "2026-05-15",
"days": 5,
"result": "2026-05-22",
"resultWeekday": "fri",
"startIsBusinessDay": true,
"weekend": ["sat", "sun"],
"holidaysApplied": 0,
"engine": "date-utc-v0.1",
"computedAt": "2026-05-17T00:00:00.000Z"
}
任何错误都会以 JSON 返回,包含 error 键和相应的 HTTP 状态码(400 参数错误,429 请求频率受限,405 请求方法错误)。
三种模式
端点始终为 GET /api/businessdays。模式根据传入的参数推断。
add — 增加/减少工作日
参数:start=YYYY-MM-DD、days=N(整数,可用 +/-,|N| <= 10000),可选的 weekend=、可选的 holidays=。
curl "https://openworkdays.vercel.app/api/businessdays?start=2026-05-15&days=5"
N=0 时会原样返回 start(即使 start 本身不是工作日)。
diff — 计算两个日期之间的工作日数
参数:start=YYYY-MM-DD、end=YYYY-MM-DD,可选的 weekend=、可选的 holidays=。包含两个端点。如果 end < start,结果为负数。
curl "https://openworkdays.vercel.app/api/businessdays?start=2026-05-15&end=2026-06-15&holidays=2026-05-25"
is — 此日期是否为工作日?
参数:date=YYYY-MM-DD,可选的 weekend=、可选的 holidays=。
curl "https://openworkdays.vercel.app/api/businessdays?date=2026-05-16"
返回 isBusinessDay,以及值为 "weekend"、"holiday" 或 null 的 reason。
通用参数
weekend(默认为sat,sun)——逗号分隔的列表。标记不区分大小写,可使用{sun,mon,tue,wed,thu,fri,sat}中的值,也可使用0-6数字,其中0=Sunday…6=Saturday(与 JSgetUTCDay()一致)。不能将全部 7 天都设为周末。holidays——以逗号分隔的YYYY-MM-DD日期列表,这些日期将视为非工作日(最多 1000 个)。严格校验。
错误
错误以 JSON 返回,并包含 error 键:
400—— 参数无效/缺失(missing start、invalid days (must be integer)、invalid weekend token、invalid holiday date、invalid date、specify a mode(包含usage对象)等)429—— 请求频率受限(包含Retry-After标头和retryAfterSec)405—— HTTP 请求方法错误(仅允许GET/OPTIONS)
JavaScript
const base = "https://openworkdays.vercel.app";
const r = await fetch(
base + "/api/businessdays?start=2026-05-15&days=5"
);
const out = await r.json(); // { mode:"add", result:"2026-05-22", resultWeekday:"fri", ... }
用作 MCP 工具(AI Agent / Claude / Cursor / 大模型客户端)
OpenWorkdays 也是一个远程 MCP 服务,因此 Agent 无需注册、API 密钥或 OAuth,即可将其作为工具调用。
- 端点:
https://openworkdays.vercel.app/api/mcp - 传输方式:无状态 Streamable HTTP(发送 POST JSON-RPC 2.0,接收单个
application/json响应——无会话、无 SSE) - 仅提供一个工具:
businessdays——根据传入的参数推断模式(add/diff/is),返回与 REST 端点相同的 JSON(也会作为structuredContent返回)
将以下内容添加到任意 MCP 客户端配置中(Claude Desktop、Cursor 或任何支持 Streamable HTTP 传输方式的客户端):
{ "mcpServers": { "openworkdays": { "url": "https://openworkdays.vercel.app/api/mcp" } } }
快速冒烟测试:
curl -s -X POST https://openworkdays.vercel.app/api/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"businessdays","arguments":{"start":"2026-05-15","days":5}}}'
通过 MCP 调用时,上游错误会作为包含 isError: true 的工具结果返回。
为什么
所有公开的工作日 API 都要求注册账户或提供 API 密钥:workingdays.org 仅供测试/需要订阅;API Ninjas 和 Holiday API 需要密钥;timeanddate 是一款售价 $299 的产品;RapidAPI 上的工作日 API 需要 RapidAPI 密钥;Microsoft 的 “Calculate Working Day” 连接器受 Power Platform 框架限制,且仅支持英国银行假日。OpenWorkdays 只需发送匿名 GET 请求——无需注册,无需密钥。这对自主 Agent 尤其有用,因为它们无法让人代为完成注册。而且,大模型在日期运算方面的表现已被证实并不可靠,因此 Agent 需要一个确定性的端点,而不是自行猜测。
局限
- 仅支持日期级别的纯 UTC 运算——不支持时分秒、夏令时或时区 (这些属于重复规则的范畴,特意不纳入 v0.1 的范围)。
- 仅支持调用方提供的节假日——没有内置的国家节假日
数据库。这是有意为之:我们不会在由资金雄厚的现有企业胜出的
7000 节假日数据库赛道上假装竞争。你可以传入
所需的
holidays=列表。 - 尽力而为的实例级 IP 速率限制——这是防止滥用的软性措施,不作保证 (无服务器实例是临时的,且彼此不共享)。
- 采用 MIT 许可,可自托管——见下文。
自托管——无需依赖文件
整个 API 由两个独立、零依赖的 Node 无服务器函数构成:
api/businessdays.js(REST)和 api/mcp.js
(远程 MCP)。无需执行 npm install,完全没有依赖。将文件夹部署到 Vercel
(自动检测 /api,无需配置),或将处理程序放入任何 Node 无服务器运行时。
git clone https://github.com/SolvoHQ/openworkdays
cd openworkdays
npx vercel --prod
许可证
MIT——见 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。