# 中国节假日MCP服务器
一个基于模型上下文协议(MCP)的中国节假日和农历信息服务器,为AI助手提供准确的法定节假日、调休安排、中国传统节日、农历转换、二十四节气和八字计算功能。西方节日都是固定公历日期,不需要查询工具。
## 🌟 功能特性
- **节假日查询**: 查询中国法定节假日、传统节日和调休安排
- **农历转换**: 公历与农历日期相互转换
- **农历信息**: 获取详细的农历日期描述,包括生肖、干支等
- **二十四节气**: 查询二十四节气信息和季节划分
- **八字计算**: 根据出生日期时间计算四柱八字和五行属性
- **FastMCP架构**: 基于官方推荐的FastMCP框架,提供更好的性能和稳定性
## 🏗️ 技术架构
本项目基于官方推荐的FastMCP框架开发,具有以下特性:
- **简化的工具注册**: 使用 `@mcp.tool()` 装饰器
- **自动类型验证**: 自动处理参数验证和类型转换
- **标准化接口**: 完全符合MCP协议最佳实践
## 📦 安装
### 环境要求
- Python 3.8+
- 支持MCP协议的AI客户端(如Claude Desktop)
### 使用uvx安装(推荐)
```bash
# 直接从PyPI安装并运行
uvx china-festival-mcp
```
### 本地开发安装
```bash
# 克隆项目
git clone https://github.com/your-username/china-festival-mcp.git
cd china-festival-mcp
# 使用uvx运行(会自动安装依赖)
uvx --from . python -m src.server_fastmcp
```
## 🚀 使用方法
```bash
# 从PyPI直接运行
uvx china-festival-mcp
# 或本地开发运行
uvx --from . python -m src.server_fastmcp
```
## ⚙️ MCP客户端配置
### Claude Desktop配置
编辑 `~/Library/Application Support/Claude/claude_desktop_config.json`:
#### 从PyPI安装(推荐)
```json
{
"mcpServers": {
"china-festival-mcp": {
"command": "uvx",
"args": ["china-festival-mcp"]
}
}
}
```
#### 本地开发
```json
{
"mcpServers": {
"china-festival-mcp": {
"command": "uvx",
"args": ["--from", ".", "python", "-m", "src.server_fastmcp"],
"cwd": "/path/to/china-festival-mcp"
}
}
}
```
### 其他MCP客户端
对于其他支持MCP协议的客户端,使用相同的uvx配置方式:
```json
{
"mcpServers": {
"china-festival-mcp": {
"command": "uvx",
"args": ["china-festival-mcp"]
}
}
}
```
## 📚 API文档
### 节假日工具
#### `holiday_info`
查询指定日期的节假日信息,包含是否为节假日的判断
**参数:**
- `date` (string, 可选): 日期,格式为 YYYY-MM-DD,不指定则查询当前日期
**返回:**
```json
{
"date": "2024-01-01",
"name": "元旦",
"type": "holiday",
"is_holiday": true,
"is_work_day": false,
"note": "法定节假日",
"weekday_name_en": "Monday"
}
```
#### `next_holiday`
获取下一个节假日
**参数:**
无
**返回:**
```json
{
"name": "春节",
"date": "2024-02-10",
"days_until": 40,
"note": "法定节假日",
"weekday_name_en": "Saturday"
}
```
#### `current_year_holidays`
获取当前年份所有节假日
**参数:**
无
**返回:**
```json
{
"year": 2024,
"holidays": [
{
"date": "2024-01-01",
"name": "元旦",
"note": "法定节假日"
}
],
"total_count": 1
}
```
#### `current_year_work_days`
获取当前年份调休工作日安排
**参数:**
无
**返回:**
```json
{
"year": 2024,
"work_days": [
{
"date": "2024-02-04",
"name": "春节调休",
"note": "调休工作日"
}
],
"total_count": 1
}
```
### 农历工具
#### `gregorian_to_lunar`
公历转农历
**参数:**
- `date` (string): 公历日期,格式为 YYYY-MM-DD
**返回:**
```json
{
"gregorian_date": "2024-01-01",
"lunar_year": 2023,
"lunar_month": 11,
"lunar_day": 20,
"is_leap_month": false,
"zodiac": "兔"
}
```
#### `lunar_to_gregorian`
农历转公历
**参数:**
- `year` (integer): 农历年份
- `month` (integer): 农历月份
- `day` (integer): 农历日期
- `is_leap` (boolean, 可选): 是否闰月,默认false
**返回:**
```json
{
"lunar_date": "2023年十一月二十",
"gregorian_year": 2024,
"gregorian_month": 1,
"gregorian_day": 1,
"gregorian_date": "2024-01-01"
}
```
#### `get_lunar_string`
获取农历日期的详细中文描述
**参数:**
- `date` (string): 公历日期,格式为 YYYY-MM-DD
**返回:**
```json
{
"gregorian_date": "2024-01-01",
"lunar_year": 2023,
"lunar_month": 11,
"lunar_day": 20,
"is_leap_month": false,
"zodiac": "兔",
"year_gan_zhi": "癸卯",
"tian_gan": "癸",
"di_zhi": "卯",
"lunar_month_name": "十一月",
"lunar_day_name": "二十",
"lunar_string": "癸卯年 十一月 二十"
}
```
#### `get_24_lunar_feast`
获取二十四节气信息
**参数:**
- `date` (string): 日期,格式为 YYYY-MM-DD
**返回:**
```json
{
"year": 2024,
"month": 1,
"solar_terms": [
{
"name": "小寒",
"date": "2024-01-06",
"days_until": 5,
"season": "冬季"
},
{
"name": "大寒",
"date": "2024-01-20",
"days_until": 19,
"season": "冬季"
}
]
}
```
#### `get_8zi`
计算八字(四柱)
**参数:**
- `date` (string): 日期,格式为 YYYY-MM-DD
- `hour` (integer, 可选): 小时,0-23,默认12
- `minute` (integer, 可选): 分钟,0-59,默认0
**返回:**
```json
{
"eight_characters": "甲辰 丙寅 甲子 庚午"
}
```
### 日期工具
#### `get_weekday`
根据公历日期计算星期几
**参数:**
- `date` (string): 日期,格式为 YYYY-MM-DD,如:2024-01-01
**返回:**
```json
{
"weekday_number": 1,
"weekday_name_zh": "星期一",
"weekday_name_en": "Monday",
"date": "2024-01-01"
}
```
## 🧪 测试
运行太阳历节气测试:
```bash
python test_solar_terms.py
```
## 📁 项目结构
```
china-festival-mcp/
├── src/ # 核心源代码
│ ├── __init__.py
│ ├── server_fastmcp.py # FastMCP服务器主程序
│ ├── data/ # 数据模块
│ │ ├── bazi_calculator.py # 八字计算模块
│ │ └── solar_terms.py # 二十四节气数据
│ ├── tools/ # 工具模块
│ │ ├── __init__.py
│ │ ├── holiday.py # 节假日查询工具
│ │ ├── lunar.py # 农历转换工具
│ │ └── weekday.py # 星期计算工具
│ └── utils/ # 工具函数
│ ├── __init__.py
│ ├── date_utils.py # 日期工具
│ └── logger.py # 日志管理
├── scripts/ # 发布脚本
│ └── publish.py # 自动发布脚本
├── test_solar_terms.py # 节气测试脚本
├── .gitignore # Git忽略文件
├── pyproject.toml # 项目配置和依赖
├── README.md # 项目说明
├── LICENSE # 许可证
├── PUBLISH_GUIDE.md # 发布指南
└── publish.sh # 发布脚本
```
## 🙏 致谢
本项目基于 [PyLunar](https://github.com/swordzjj/PyLunar/tree/master) 项目和 [holiday-cn](https://github.com/NateScarlet/holiday-cn)项目开发,感谢原作者的贡献。
- 感谢所有贡献者
- 基于传统农历算法和现代计算方法
- 参考了多个开源农历转换项目
Raw data
{
"_id": null,
"home_page": null,
"name": "china-festival-mcp",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "mcp, china, festival, holiday, lunar, calendar, solar-terms",
"author": null,
"author_email": "China Festival MCP <china-festival-mcp@example.com>",
"download_url": "https://files.pythonhosted.org/packages/ce/47/ef5dae3f9cbdebf1e20e01dbc3331e570bdbaaf558bc9ffab313b340d821/china_festival_mcp-0.1.5.tar.gz",
"platform": null,
"description": "# \u4e2d\u56fd\u8282\u5047\u65e5MCP\u670d\u52a1\u5668\n\n\u4e00\u4e2a\u57fa\u4e8e\u6a21\u578b\u4e0a\u4e0b\u6587\u534f\u8bae\uff08MCP\uff09\u7684\u4e2d\u56fd\u8282\u5047\u65e5\u548c\u519c\u5386\u4fe1\u606f\u670d\u52a1\u5668\uff0c\u4e3aAI\u52a9\u624b\u63d0\u4f9b\u51c6\u786e\u7684\u6cd5\u5b9a\u8282\u5047\u65e5\u3001\u8c03\u4f11\u5b89\u6392\u3001\u4e2d\u56fd\u4f20\u7edf\u8282\u65e5\u3001\u519c\u5386\u8f6c\u6362\u3001\u4e8c\u5341\u56db\u8282\u6c14\u548c\u516b\u5b57\u8ba1\u7b97\u529f\u80fd\u3002\u897f\u65b9\u8282\u65e5\u90fd\u662f\u56fa\u5b9a\u516c\u5386\u65e5\u671f\uff0c\u4e0d\u9700\u8981\u67e5\u8be2\u5de5\u5177\u3002\n\n## \ud83c\udf1f \u529f\u80fd\u7279\u6027\n\n- **\u8282\u5047\u65e5\u67e5\u8be2**: \u67e5\u8be2\u4e2d\u56fd\u6cd5\u5b9a\u8282\u5047\u65e5\u3001\u4f20\u7edf\u8282\u65e5\u548c\u8c03\u4f11\u5b89\u6392\n- **\u519c\u5386\u8f6c\u6362**: \u516c\u5386\u4e0e\u519c\u5386\u65e5\u671f\u76f8\u4e92\u8f6c\u6362\n- **\u519c\u5386\u4fe1\u606f**: \u83b7\u53d6\u8be6\u7ec6\u7684\u519c\u5386\u65e5\u671f\u63cf\u8ff0\uff0c\u5305\u62ec\u751f\u8096\u3001\u5e72\u652f\u7b49\n- **\u4e8c\u5341\u56db\u8282\u6c14**: \u67e5\u8be2\u4e8c\u5341\u56db\u8282\u6c14\u4fe1\u606f\u548c\u5b63\u8282\u5212\u5206\n- **\u516b\u5b57\u8ba1\u7b97**: \u6839\u636e\u51fa\u751f\u65e5\u671f\u65f6\u95f4\u8ba1\u7b97\u56db\u67f1\u516b\u5b57\u548c\u4e94\u884c\u5c5e\u6027\n- **FastMCP\u67b6\u6784**: \u57fa\u4e8e\u5b98\u65b9\u63a8\u8350\u7684FastMCP\u6846\u67b6\uff0c\u63d0\u4f9b\u66f4\u597d\u7684\u6027\u80fd\u548c\u7a33\u5b9a\u6027\n\n## \ud83c\udfd7\ufe0f \u6280\u672f\u67b6\u6784\n\n\u672c\u9879\u76ee\u57fa\u4e8e\u5b98\u65b9\u63a8\u8350\u7684FastMCP\u6846\u67b6\u5f00\u53d1\uff0c\u5177\u6709\u4ee5\u4e0b\u7279\u6027\uff1a\n\n- **\u7b80\u5316\u7684\u5de5\u5177\u6ce8\u518c**: \u4f7f\u7528 `@mcp.tool()` \u88c5\u9970\u5668\n- **\u81ea\u52a8\u7c7b\u578b\u9a8c\u8bc1**: \u81ea\u52a8\u5904\u7406\u53c2\u6570\u9a8c\u8bc1\u548c\u7c7b\u578b\u8f6c\u6362\n- **\u6807\u51c6\u5316\u63a5\u53e3**: \u5b8c\u5168\u7b26\u5408MCP\u534f\u8bae\u6700\u4f73\u5b9e\u8df5\n\n## \ud83d\udce6 \u5b89\u88c5\n\n### \u73af\u5883\u8981\u6c42\n\n- Python 3.8+\n- \u652f\u6301MCP\u534f\u8bae\u7684AI\u5ba2\u6237\u7aef\uff08\u5982Claude Desktop\uff09\n\n### \u4f7f\u7528uvx\u5b89\u88c5\uff08\u63a8\u8350\uff09\n\n```bash\n# \u76f4\u63a5\u4ecePyPI\u5b89\u88c5\u5e76\u8fd0\u884c\nuvx china-festival-mcp\n```\n\n### \u672c\u5730\u5f00\u53d1\u5b89\u88c5\n\n```bash\n# \u514b\u9686\u9879\u76ee\ngit clone https://github.com/your-username/china-festival-mcp.git\ncd china-festival-mcp\n\n# \u4f7f\u7528uvx\u8fd0\u884c\uff08\u4f1a\u81ea\u52a8\u5b89\u88c5\u4f9d\u8d56\uff09\nuvx --from . python -m src.server_fastmcp\n```\n\n## \ud83d\ude80 \u4f7f\u7528\u65b9\u6cd5\n\n```bash\n# \u4ecePyPI\u76f4\u63a5\u8fd0\u884c\nuvx china-festival-mcp\n\n# \u6216\u672c\u5730\u5f00\u53d1\u8fd0\u884c\nuvx --from . python -m src.server_fastmcp\n```\n\n## \u2699\ufe0f MCP\u5ba2\u6237\u7aef\u914d\u7f6e\n\n### Claude Desktop\u914d\u7f6e\n\n\u7f16\u8f91 `~/Library/Application Support/Claude/claude_desktop_config.json`\uff1a\n\n#### \u4ecePyPI\u5b89\u88c5\uff08\u63a8\u8350\uff09\n\n```json\n{\n \"mcpServers\": {\n \"china-festival-mcp\": {\n \"command\": \"uvx\",\n \"args\": [\"china-festival-mcp\"]\n }\n }\n}\n```\n\n#### \u672c\u5730\u5f00\u53d1\n\n```json\n{\n \"mcpServers\": {\n \"china-festival-mcp\": {\n \"command\": \"uvx\",\n \"args\": [\"--from\", \".\", \"python\", \"-m\", \"src.server_fastmcp\"],\n \"cwd\": \"/path/to/china-festival-mcp\"\n }\n }\n}\n```\n\n### \u5176\u4ed6MCP\u5ba2\u6237\u7aef\n\n\u5bf9\u4e8e\u5176\u4ed6\u652f\u6301MCP\u534f\u8bae\u7684\u5ba2\u6237\u7aef\uff0c\u4f7f\u7528\u76f8\u540c\u7684uvx\u914d\u7f6e\u65b9\u5f0f\uff1a\n\n```json\n{\n \"mcpServers\": {\n \"china-festival-mcp\": {\n \"command\": \"uvx\",\n \"args\": [\"china-festival-mcp\"]\n }\n }\n}\n```\n\n## \ud83d\udcda API\u6587\u6863\n\n### \u8282\u5047\u65e5\u5de5\u5177\n\n#### `holiday_info`\n\u67e5\u8be2\u6307\u5b9a\u65e5\u671f\u7684\u8282\u5047\u65e5\u4fe1\u606f\uff0c\u5305\u542b\u662f\u5426\u4e3a\u8282\u5047\u65e5\u7684\u5224\u65ad\n\n**\u53c2\u6570:**\n- `date` (string, \u53ef\u9009): \u65e5\u671f\uff0c\u683c\u5f0f\u4e3a YYYY-MM-DD\uff0c\u4e0d\u6307\u5b9a\u5219\u67e5\u8be2\u5f53\u524d\u65e5\u671f\n\n**\u8fd4\u56de:**\n```json\n{\n \"date\": \"2024-01-01\",\n \"name\": \"\u5143\u65e6\",\n \"type\": \"holiday\",\n \"is_holiday\": true,\n \"is_work_day\": false,\n \"note\": \"\u6cd5\u5b9a\u8282\u5047\u65e5\",\n \"weekday_name_en\": \"Monday\"\n}\n```\n\n#### `next_holiday`\n\u83b7\u53d6\u4e0b\u4e00\u4e2a\u8282\u5047\u65e5\n\n**\u53c2\u6570:**\n\u65e0\n\n**\u8fd4\u56de:**\n```json\n{\n \"name\": \"\u6625\u8282\",\n \"date\": \"2024-02-10\",\n \"days_until\": 40,\n \"note\": \"\u6cd5\u5b9a\u8282\u5047\u65e5\",\n \"weekday_name_en\": \"Saturday\"\n}\n```\n\n#### `current_year_holidays`\n\u83b7\u53d6\u5f53\u524d\u5e74\u4efd\u6240\u6709\u8282\u5047\u65e5\n\n**\u53c2\u6570:**\n\u65e0\n\n**\u8fd4\u56de:**\n```json\n{\n \"year\": 2024,\n \"holidays\": [\n {\n \"date\": \"2024-01-01\",\n \"name\": \"\u5143\u65e6\",\n \"note\": \"\u6cd5\u5b9a\u8282\u5047\u65e5\"\n }\n ],\n \"total_count\": 1\n}\n```\n\n#### `current_year_work_days`\n\u83b7\u53d6\u5f53\u524d\u5e74\u4efd\u8c03\u4f11\u5de5\u4f5c\u65e5\u5b89\u6392\n\n**\u53c2\u6570:**\n\u65e0\n\n**\u8fd4\u56de:**\n```json\n{\n \"year\": 2024,\n \"work_days\": [\n {\n \"date\": \"2024-02-04\",\n \"name\": \"\u6625\u8282\u8c03\u4f11\",\n \"note\": \"\u8c03\u4f11\u5de5\u4f5c\u65e5\"\n }\n ],\n \"total_count\": 1\n}\n```\n\n### \u519c\u5386\u5de5\u5177\n\n#### `gregorian_to_lunar`\n\u516c\u5386\u8f6c\u519c\u5386\n\n**\u53c2\u6570:**\n- `date` (string): \u516c\u5386\u65e5\u671f\uff0c\u683c\u5f0f\u4e3a YYYY-MM-DD\n\n**\u8fd4\u56de:**\n```json\n{\n \"gregorian_date\": \"2024-01-01\",\n \"lunar_year\": 2023,\n \"lunar_month\": 11,\n \"lunar_day\": 20,\n \"is_leap_month\": false,\n \"zodiac\": \"\u5154\"\n}\n```\n\n#### `lunar_to_gregorian`\n\u519c\u5386\u8f6c\u516c\u5386\n\n**\u53c2\u6570:**\n- `year` (integer): \u519c\u5386\u5e74\u4efd\n- `month` (integer): \u519c\u5386\u6708\u4efd\n- `day` (integer): \u519c\u5386\u65e5\u671f\n- `is_leap` (boolean, \u53ef\u9009): \u662f\u5426\u95f0\u6708\uff0c\u9ed8\u8ba4false\n\n**\u8fd4\u56de:**\n```json\n{\n \"lunar_date\": \"2023\u5e74\u5341\u4e00\u6708\u4e8c\u5341\",\n \"gregorian_year\": 2024,\n \"gregorian_month\": 1,\n \"gregorian_day\": 1,\n \"gregorian_date\": \"2024-01-01\"\n}\n```\n\n#### `get_lunar_string`\n\u83b7\u53d6\u519c\u5386\u65e5\u671f\u7684\u8be6\u7ec6\u4e2d\u6587\u63cf\u8ff0\n\n**\u53c2\u6570:**\n- `date` (string): \u516c\u5386\u65e5\u671f\uff0c\u683c\u5f0f\u4e3a YYYY-MM-DD\n\n**\u8fd4\u56de:**\n```json\n{\n \"gregorian_date\": \"2024-01-01\",\n \"lunar_year\": 2023,\n \"lunar_month\": 11,\n \"lunar_day\": 20,\n \"is_leap_month\": false,\n \"zodiac\": \"\u5154\",\n \"year_gan_zhi\": \"\u7678\u536f\",\n \"tian_gan\": \"\u7678\",\n \"di_zhi\": \"\u536f\",\n \"lunar_month_name\": \"\u5341\u4e00\u6708\",\n \"lunar_day_name\": \"\u4e8c\u5341\",\n \"lunar_string\": \"\u7678\u536f\u5e74 \u5341\u4e00\u6708 \u4e8c\u5341\"\n}\n```\n\n#### `get_24_lunar_feast`\n\u83b7\u53d6\u4e8c\u5341\u56db\u8282\u6c14\u4fe1\u606f\n\n**\u53c2\u6570:**\n- `date` (string): \u65e5\u671f\uff0c\u683c\u5f0f\u4e3a YYYY-MM-DD\n\n**\u8fd4\u56de:**\n```json\n{\n \"year\": 2024,\n \"month\": 1,\n \"solar_terms\": [\n {\n \"name\": \"\u5c0f\u5bd2\",\n \"date\": \"2024-01-06\",\n \"days_until\": 5,\n \"season\": \"\u51ac\u5b63\"\n },\n {\n \"name\": \"\u5927\u5bd2\",\n \"date\": \"2024-01-20\",\n \"days_until\": 19,\n \"season\": \"\u51ac\u5b63\"\n }\n ]\n}\n```\n\n#### `get_8zi`\n\u8ba1\u7b97\u516b\u5b57\uff08\u56db\u67f1\uff09\n\n**\u53c2\u6570:**\n- `date` (string): \u65e5\u671f\uff0c\u683c\u5f0f\u4e3a YYYY-MM-DD\n- `hour` (integer, \u53ef\u9009): \u5c0f\u65f6\uff0c0-23\uff0c\u9ed8\u8ba412\n- `minute` (integer, \u53ef\u9009): \u5206\u949f\uff0c0-59\uff0c\u9ed8\u8ba40\n\n**\u8fd4\u56de:**\n```json\n{\n \"eight_characters\": \"\u7532\u8fb0 \u4e19\u5bc5 \u7532\u5b50 \u5e9a\u5348\"\n}\n```\n\n### \u65e5\u671f\u5de5\u5177\n\n#### `get_weekday`\n\u6839\u636e\u516c\u5386\u65e5\u671f\u8ba1\u7b97\u661f\u671f\u51e0\n\n**\u53c2\u6570:**\n- `date` (string): \u65e5\u671f\uff0c\u683c\u5f0f\u4e3a YYYY-MM-DD\uff0c\u5982\uff1a2024-01-01\n\n**\u8fd4\u56de:**\n```json\n{\n \"weekday_number\": 1,\n \"weekday_name_zh\": \"\u661f\u671f\u4e00\",\n \"weekday_name_en\": \"Monday\",\n \"date\": \"2024-01-01\"\n}\n```\n\n## \ud83e\uddea \u6d4b\u8bd5\n\n\u8fd0\u884c\u592a\u9633\u5386\u8282\u6c14\u6d4b\u8bd5\uff1a\n```bash\npython test_solar_terms.py\n```\n\n## \ud83d\udcc1 \u9879\u76ee\u7ed3\u6784\n\n```\nchina-festival-mcp/\n\u251c\u2500\u2500 src/ # \u6838\u5fc3\u6e90\u4ee3\u7801\n\u2502 \u251c\u2500\u2500 __init__.py\n\u2502 \u251c\u2500\u2500 server_fastmcp.py # FastMCP\u670d\u52a1\u5668\u4e3b\u7a0b\u5e8f\n\u2502 \u251c\u2500\u2500 data/ # \u6570\u636e\u6a21\u5757\n\u2502 \u2502 \u251c\u2500\u2500 bazi_calculator.py # \u516b\u5b57\u8ba1\u7b97\u6a21\u5757\n\u2502 \u2502 \u2514\u2500\u2500 solar_terms.py # \u4e8c\u5341\u56db\u8282\u6c14\u6570\u636e\n\u2502 \u251c\u2500\u2500 tools/ # \u5de5\u5177\u6a21\u5757\n\u2502 \u2502 \u251c\u2500\u2500 __init__.py\n\u2502 \u2502 \u251c\u2500\u2500 holiday.py # \u8282\u5047\u65e5\u67e5\u8be2\u5de5\u5177\n\u2502 \u2502 \u251c\u2500\u2500 lunar.py # \u519c\u5386\u8f6c\u6362\u5de5\u5177\n\u2502 \u2502 \u2514\u2500\u2500 weekday.py # \u661f\u671f\u8ba1\u7b97\u5de5\u5177\n\u2502 \u2514\u2500\u2500 utils/ # \u5de5\u5177\u51fd\u6570\n\u2502 \u251c\u2500\u2500 __init__.py\n\u2502 \u251c\u2500\u2500 date_utils.py # \u65e5\u671f\u5de5\u5177\n\u2502 \u2514\u2500\u2500 logger.py # \u65e5\u5fd7\u7ba1\u7406\n\u251c\u2500\u2500 scripts/ # \u53d1\u5e03\u811a\u672c\n\u2502 \u2514\u2500\u2500 publish.py # \u81ea\u52a8\u53d1\u5e03\u811a\u672c\n\u251c\u2500\u2500 test_solar_terms.py # \u8282\u6c14\u6d4b\u8bd5\u811a\u672c\n\u251c\u2500\u2500 .gitignore # Git\u5ffd\u7565\u6587\u4ef6\n\u251c\u2500\u2500 pyproject.toml # \u9879\u76ee\u914d\u7f6e\u548c\u4f9d\u8d56\n\u251c\u2500\u2500 README.md # \u9879\u76ee\u8bf4\u660e\n\u251c\u2500\u2500 LICENSE # \u8bb8\u53ef\u8bc1\n\u251c\u2500\u2500 PUBLISH_GUIDE.md # \u53d1\u5e03\u6307\u5357\n\u2514\u2500\u2500 publish.sh # \u53d1\u5e03\u811a\u672c\n```\n\n\n\n\n## \ud83d\ude4f \u81f4\u8c22\n\n\u672c\u9879\u76ee\u57fa\u4e8e [PyLunar](https://github.com/swordzjj/PyLunar/tree/master) \u9879\u76ee\u548c [holiday-cn](https://github.com/NateScarlet/holiday-cn)\u9879\u76ee\u5f00\u53d1\uff0c\u611f\u8c22\u539f\u4f5c\u8005\u7684\u8d21\u732e\u3002\n\n- \u611f\u8c22\u6240\u6709\u8d21\u732e\u8005\n- \u57fa\u4e8e\u4f20\u7edf\u519c\u5386\u7b97\u6cd5\u548c\u73b0\u4ee3\u8ba1\u7b97\u65b9\u6cd5\n- \u53c2\u8003\u4e86\u591a\u4e2a\u5f00\u6e90\u519c\u5386\u8f6c\u6362\u9879\u76ee\n",
"bugtrack_url": null,
"license": "Apache-2.0",
"summary": "\u4e2d\u56fd\u8282\u5047\u65e5\u548c\u519c\u5386\u8f6c\u6362MCP\u670d\u52a1\u5668",
"version": "0.1.5",
"project_urls": {
"Documentation": "https://github.com/your-username/china-festival-mcp#readme",
"Homepage": "https://github.com/your-username/china-festival-mcp",
"Issues": "https://github.com/your-username/china-festival-mcp/issues",
"Repository": "https://github.com/your-username/china-festival-mcp"
},
"split_keywords": [
"mcp",
" china",
" festival",
" holiday",
" lunar",
" calendar",
" solar-terms"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "3540610c175fa6944a74083b8524068237ff2ead4f52a28fc13fac1ec2ddda75",
"md5": "f920e261366aad03b6cbc18ab5698d82",
"sha256": "dcc5f0c1e28104b896087f2c6f2d172d7ad816aafdf366de96993b994473f6a2"
},
"downloads": -1,
"filename": "china_festival_mcp-0.1.5-py3-none-any.whl",
"has_sig": false,
"md5_digest": "f920e261366aad03b6cbc18ab5698d82",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 34206,
"upload_time": "2025-08-27T13:15:13",
"upload_time_iso_8601": "2025-08-27T13:15:13.007935Z",
"url": "https://files.pythonhosted.org/packages/35/40/610c175fa6944a74083b8524068237ff2ead4f52a28fc13fac1ec2ddda75/china_festival_mcp-0.1.5-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ce47ef5dae3f9cbdebf1e20e01dbc3331e570bdbaaf558bc9ffab313b340d821",
"md5": "11ed8d55621054039c557f4d8ffd471a",
"sha256": "6750fedf2ffb2c18299fbdff437f16663123c03d88388564d805bce3e2309703"
},
"downloads": -1,
"filename": "china_festival_mcp-0.1.5.tar.gz",
"has_sig": false,
"md5_digest": "11ed8d55621054039c557f4d8ffd471a",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 32247,
"upload_time": "2025-08-27T13:15:15",
"upload_time_iso_8601": "2025-08-27T13:15:15.791525Z",
"url": "https://files.pythonhosted.org/packages/ce/47/ef5dae3f9cbdebf1e20e01dbc3331e570bdbaaf558bc9ffab313b340d821/china_festival_mcp-0.1.5.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-27 13:15:15",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "your-username",
"github_project": "china-festival-mcp#readme",
"github_not_found": true,
"lcname": "china-festival-mcp"
}