Skip to main content
Glama
jiushan-test

Weather MCP Server

by jiushan-test
README.md
# 天气查询MCP服务器

基于百度地图API提供天气查询功能的MCP(Model Context Protocol)工具。

## 服务配置

```json
{
  "mcpServers": {
    "weather-mcp": {
      "command": "python",
      "args": ["-m", "weather_mcp.server"]
    }
  }
}
```

**环境变量配置**:
请在系统环境变量中设置:
```bash
BAIDU_AK=your_baidu_ak_here
```

## 功能特性

- 🌤️ **实时天气查询** - 获取当前天气状况、温度、湿度、风向等信息
- 📅 **天气预报** - 提供未来5天的详细天气预报
- 📊 **生活指数** - 包含晨练、洗车、感冒、紫外线、穿衣、运动等生活指数
- ⚠️ **气象预警** - 实时获取气象预警信息
- ⏰ **逐小时预报** - 24小时逐小时天气预报
- 🗺️ **多种查询方式** - 支持行政区划代码和经纬度坐标查询

## 安装依赖

```bash
pip install -r requirements.txt
```

## 配置

设置系统环境变量:

**Windows**:
```cmd
set BAIDU_AK=your_baidu_ak_here
```

**Linux/macOS**:
```bash
export BAIDU_AK=your_baidu_ak_here
```

或者在系统环境变量中永久设置 `BAIDU_AK`。

### 获取百度地图API密钥

1. 访问 [百度地图开放平台](https://lbsyun.baidu.com/)
2. 注册并登录账号
3. 创建应用并获取AK(API Key)
4. 确保开通天气服务权限

## 使用方法

### 启动MCP服务器

```bash
python server.py
```

### 工具说明

#### get_weather

获取指定地区的天气信息,支持多种数据类型和查询方式。

**参数:**

- `district_id` (可选): 区县的行政区划编码,例如:'110101'(北京东城区)
- `location` (可选): 经纬度坐标,格式:'经度,纬度',例如:'116.404,39.915'
- `data_type` (可选): 请求数据类型
  - `now`: 实时天气
  - `fc`: 天气预报
  - `index`: 生活指数
  - `alert`: 气象预警
  - `fc_hour`: 逐小时预报
  - `all`: 所有数据(默认)
- `coordtype` (可选): 坐标类型,仅在使用location时有效
  - `wgs84`: WGS84坐标系(默认)
  - `bd09ll`: 百度经纬度坐标系
  - `bd09mc`: 百度墨卡托坐标系
  - `gcj02`: 国测局坐标系

**注意:** `district_id` 和 `location` 必须提供其中一个。

### 使用示例

#### 1. 使用行政区划代码查询北京东城区天气

```json
{
  "name": "get_weather",
  "arguments": {
    "district_id": "110101",
    "data_type": "all"
  }
}
```

#### 2. 使用经纬度查询天安门广场天气

```json
{
  "name": "get_weather",
  "arguments": {
    "location": "116.404,39.915",
    "data_type": "all",
    "coordtype": "wgs84"
  }
}
```

#### 3. 只查询实时天气

```json
{
  "name": "get_weather",
  "arguments": {
    "district_id": "110101",
    "data_type": "now"
  }
}
```

## 测试

### 测试百度地图API连接

```bash
python test_baidu_api.py
```

### 测试MCP服务器功能

```bash
python test_mcp_server.py
```

## 项目结构

```
weather_query/
├── server.py              # MCP服务器主文件
├── requirements.txt        # Python依赖
├── .env                   # 环境变量配置
├── .env.example          # 环境变量模板
├── test_baidu_api.py     # API测试脚本
├── test_mcp_server.py    # MCP服务器测试脚本
├── pyproject.toml        # 项目配置
├── setup.py              # 安装脚本
├── __init__.py           # 包初始化文件
└── README.md             # 项目说明文档
```

## 常见问题

### Q: 如何获取行政区划代码?

A: 行政区划代码是中国标准的区县编码。常见的代码包括:
- 110101: 北京市东城区
- 110102: 北京市西城区
- 310101: 上海市黄浦区
- 440101: 广州市荔湾区

您可以通过百度地图API的其他接口或相关文档获取完整的行政区划代码列表。

### Q: 支持哪些坐标系?

A: 支持以下坐标系:
- WGS84: 国际标准坐标系
- BD09LL: 百度经纬度坐标系
- BD09MC: 百度墨卡托坐标系
- GCJ02: 国测局坐标系(火星坐标系)

### Q: API调用频率限制?

A: 请参考百度地图开放平台的API调用频率限制说明。建议合理使用API,避免频繁调用。

## MCP服务配置

### 本地使用配置

```json
{
  "mcpServers": {
    "weather-mcp": {
      "command": "python",
      "args": ["-m", "weather_mcp.server"]
    }
  }
}
```

### 托管部署配置

```json
{
  "mcpServers": {
    "weather-mcp": {
      "command": "python",
      "args": ["-m", "weather_mcp.server"]
    }
  }
}
```

**注意**:使用前请确保已在系统环境变量中设置 `BAIDU_AK`。

## 许可证

MIT License

## 贡献

欢迎提交Issue和Pull Request来改进这个项目!