china-festival-mcp 0.1.12
中国节假日和农历转换MCP服务器
License: Apache-2.0
Requires Python: >=3.8
Keywords: mcp, china, festival, holiday, lunar, calendar, solar-terms

# 中国节假日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`
查询指定日期的节假日信息，包含是否为节假日的判断

**返回:**
```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`
公历转农历

**返回:**
```json
{
  "gregorian_date": "2024-01-01",
  "lunar_year": 2023,
  "lunar_month": 11,
  "lunar_day": 20,
  "is_leap_month": false,
  "zodiac": "兔"
}
```

#### `lunar_to_gregorian`
农历转公历

**返回:**
```json
{
  "lunar_date": "2023年十一月二十",
  "gregorian_year": 2024,
  "gregorian_month": 1,
  "gregorian_day": 1,
  "gregorian_date": "2024-01-01"
}
```

#### `get_lunar_string`
获取农历日期的详细中文描述

**返回:**
```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`
获取二十四节气信息

**返回:**
```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`
计算八字（四柱）

**返回:**
```json
{
  "eight_characters": "甲辰 丙寅 甲子 庚午"
}
```

### 日期工具

#### `get_weekday`
根据公历日期计算星期几

**返回:**
```json
{
  "weekday_number": 1,
  "weekday_name_zh": "星期一",
  "weekday_name_en": "Monday",
  "date": "2024-01-01"
}
```

## 📁 项目结构

```
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)项目开发，感谢原作者的贡献。