内容
<div align="center">
<img src="docs/logo.svg" width="96" height="96" alt="秦易索" />
# 营业日工具
**为 AI 代理提供经过验证的营业日计算 — 节假日 + 各国周末,不再靠猜测。**
*为 AI 代理提供可信赖的数据工具。“Qiniso”在祖鲁语中意为“真相”。*
[官网](https://qinisolabs.github.io/bizdays/) · [npm](https://www.npmjs.com/package/@qinisolabs/bizdays) · [MCP 端点](https://bizdays.qinisolabs.workers.dev/mcp) · [MCP 注册表](https://registry.modelcontextprotocol.io/v0/servers?search=bizdays)
</div>
---
大型语言模型(LLM)会自信地回答“12 月 22 日后 5 个营业日是英国的哪一天?”,“这个月有多少个工作日?”,以及“星期五在沙特阿拉伯是否是工作日?” — 但往往会**回答错误** — 错误计算,忘记公共假日,并假设每个国家的周末都是星期六/星期日。**bizdays** 为代理提供确定性的答案,基于真实的假日日历和各国的周末规则,显示周末规则和跳过的确切假日。
两个问题会破坏简单的营业日计算,而 bizdays 可以解决这两个问题:**周末并非在所有地方都是星期六/星期日**(沙特阿拉伯、埃及和以色列为星期五/星期六;伊朗为星期五;印度为星期日;自 2022 年起,阿联酋为星期六/星期日),以及**“假日”必须是指真正的休息日** — 商用数据会将类似情人节和圣诞节前夕的纪念日算作假日,但这些并不是休息日。
> 在没有工具的前沿 LLM 中,计算一个月的营业日,**错误率高达 63%**,而且是冷启动 — 而在所有营业日问题中,错误率**高达 23%**。**bizdays: 0%**。
## 添加到 Claude
设置 → 连接器 → **添加自定义连接器**,然后粘贴 — 无需登录,无需密钥:
```
https://bizdays.qinisolabs.workers.dev/mcp
```
无状态,不读取用户数据,无需密钥。更喜欢通过标准输入/输出在本地运行?在客户端配置中,在 `mcpServers` 下添加 `{ "command": "npx", "args": ["-y", "@qinisolabs/bizdays"] }`。
## 作为库使用
每个工具也是一个类型化的函数 — 无需 MCP:
```bash
npm i @qinisolabs/bizdays
```
```ts
import { addBusinessDays, countBusinessDays, isBusinessDay } from "@qinisolabs/bizdays";
addBusinessDays("2025-12-22", 5, "GB").result; // "2025-12-31"(跳过圣诞节和节礼日)
countBusinessDays("2025-12-01", "2025-12-31", "US"); // { businessDays: 22, ... }
isBusinessDay("2025-06-13", "SA").isBusinessDay; // false — 星期五在沙特阿拉伯是周末
isBusinessDay("2025-02-14", "US").isBusinessDay; // true — 情人节不是公共假日
```
每个函数返回一个丰富的结果:答案、星期几、跳过的周末和命名假日、周末规则及其来源,以及置信度标志。
## 它能做什么 — 6 个工具
| 工具 | 回答的问题 |
| --- | --- |
| **添加营业日** | 从开始日期算起 N 个营业日是哪一天?(N 可以为负) |
| **计算营业日** | 两个日期之间有多少个营业日?(默认情况下端点包含在内) |
| **是否为营业日** | 给定日期是否为营业日?如果不是,为什么(周末 / 公共假日及其名称)? |
| **下一个营业日** | 给定日期之后的第一个营业日 |
| **前一个营业日** | 给定日期之前的最后一个营业日 |
| **国家规则** | 周末规则 + 其来源,假日是否适用,以及置信度标志 |
来自 [`date-holidays`](https://github.com/commenthol/date-holidays) 的 **206 个国家**(和地区)的公共假日经过筛选,类型为 `"public"`。周末来自 **Unicode CLDR**,通过运行时 `Intl` API,以及一个精选的 `data/weekend-overrides.json` 校正层(例如孟加拉国星期五/星期六,尼泊尔仅星期六)— 维护的数据是护城河。
## 它不是什么
- **不是所有假日**。它只计算周末和**公共**假日 — 不是地区或可选的纪念日。可以通过 `extraHolidays` 传递公司停工日或地区假日。
- **不是统一验证的**。一组大约 65 个国家的 Tier-1 验证;其他国家/地区有效但标记为 `unverified`。在没有假日日历的国家/地区(例如卡塔尔、科威特、阿曼),正确的周末仍然适用,响应会说明这一点(`holidaysApplied: false`)。
- **不是实时服务依赖**。库不进行网络调用;日期为 UTC 的 `YYYY-MM-DD`。
## 架构
一个 TypeScript 包,通过两个传输层暴露一个 MCP 服务器 — **stdio**(本地 / `npx`)和 **Cloudflare Worker**(托管的边缘端点)— 两个传输层都由相同的 `core.ts` 工具定义驱动,这些工具定义也为可导入的库提供支持。
```bash
npm install
npm run build
npm test
```
## 隐私
该工具在您的机器上本地运行,设计时不收集、存储或传输您的数据 — 无分析,无遥测,无帐户。所有参考数据都已捆绑 — 无网络调用,设备上没有任何数据离开。完整政策:<https://qinisolabs.github.io/privacy.html>.
## 许可证
Apache-2.0。捆绑的假日数据来自 `date-holidays`(ISC 和 CC-BY-3.0);请参见 `NOTICE`。