CUHK-SZ Weather MCP Server
Project description
MCP Weather 服务器 (mcp_server_weather_cuhksz)
该目录包含了基于和风天气 (QWeather) API、为 MCP 提供天气相关工具的 FastMCP 服务器实现。
一个基于和风天气 (QWeather) API、为语言模型提供天气相关工具的 FastMCP 服务器。
📋 目录
✨ 项目描述
本项目基于 FastMCP 框架,将多个和风天气 API 端点封装为标准的 MCP 工具,使语言模型能够轻松地查询实时天气、天气预报、灾害预警和生活指数等信息。
🎯 核心功能
- 丰富工具集: 提供从城市搜索到未来15天天气预报、逐小时预报、灾害预警等多种实用工具。
- 双重操作模式: 支持直连和风天气 API 或通过
unified-api代理服务运行,灵活适应不同部署需求。 - 动态配置: 通过环境变量在运行时动态决定连接目标,无需修改代码即可切换模式。
- 容器化设计: 提供完整的 Docker 和 Docker Compose 配置,实现一键部署和隔离环境。
- 内置缓存: 对 API 请求结果进行缓存,提高响应速度并减少不必要的 API 调用。
🛠️ 可用工具
1. get_location_id
调用和风天气城市搜索,返回含 Location ID 的详细地点列表。注意⚠️: 在调用其他需要地理位置的工具前,必须先调用此工具获取 Location ID。
- 参数说明:
location(string): 必须。查询关键字,可以是城市名称、经度,纬度、LocationID 或 Adcode(中国行政区划代码)。例如"北京"或"116.41,39.92"。adm(string): 可选。上级行政区过滤,如"beijing"或"江西省"。search_range(string): 可选。搜索范围,ISO 3166 国家/地区代码,如"cn"。number(int): 可选。返回数量,取值范围 1-20,默认为1。lang(string): 可选。语言设置,支持'zh'(默认) 或'en'。
2. get_daily_weather
获取指定地点未来多天的逐日天气预报。
- 参数说明:
days(string): 必须。预报天数,可选值为'3d','7d','10d','15d','30d'。location(string): 必须。地理位置参数,必须是get_location_id返回的 LocationID 或经度,纬度格式。例如"101010100"。lang(string): 可选。语言设置,支持'zh'(默认) 或'en'。unit(string): 可选。单位制,支持'm'(公制,默认) 或'i'(英制)。
3. get_hourly_weather
获取指定地点未来多小时的逐小时天气预报。
- 参数说明:
hours(string): 必须。预报小时数,可选值为'24h','72h','168h'。location(string): 必须。地理位置参数,同上。lang(string): 可选。语言设置,支持'zh'(默认) 或'en'。unit(string): 可选。单位制,支持'm'(公制,默认) 或'i'(英制)。
4. get_weather_warning_now
查询指定地点的实时气象灾害预警信息。
- 参数说明:
location(string): 必须。地理位置参数,同上。lang(string): 可选。语言设置,支持'zh'(默认) 或'en'。
5. get_weather_indices
查询指定地点的天气生活指数。
- 参数说明:
days(string): 必须。预报天数,可选值为'1d'或'3d'。location(string): 必须。地理位置参数,同上。lang(string): 可选。语言设置,支持'zh'(默认) 或'en'。
⚙️ 操作模式
服务器可在以下两种模式之一运行,由 IS_UNIFIED_API 环境变量控制。
1. 统一 API 代理模式 (Unified API Proxy Mode) - 推荐
- 描述: 在此模式下,服务器作为
unified-api代理服务的客户端。它将所有天气 API 请求转发到该代理,由代理负责账户选择、负载均衡和认证。这是生产环境或多账户部署场景下的推荐模式。 - 配置 (
IS_UNIFIED_API=true):IS_UNIFIED_API: 必须设置为true。UNIFIED_API_HOST:unified-api服务的 URL (例如http://unified-api:6380或http://host.docker.internal:6380)。
2. 直连 API 模式 (Direct API Mode)
- 描述: 在此模式下,服务器直接连接到和风天气 API,并使用本地配置的凭证生成 JWT 进行认证。此模式适用于本地开发和独立测试。
- 配置 (
IS_UNIFIED_API=false):IS_UNIFIED_API: 必须设置为false。WEATHER_API_HOST: 和风天气 API 的 URL (例如,https://api.qweather.com)。QWEATHER_KEY_ID,QWEATHER_PROJECT_ID,QWEATHER_PRIVATE_KEY: 您的和风天气凭证。
🚀 安装与部署
本项目设计为在 Docker 环境中运行。
1. 集成部署 (统一 API 代理模式) - 推荐
此方法会同时启动 mcp-server、unified-api 和 redis 服务,是完整的生产和测试部署方案。
a. 环境准备
- 安装 Docker 和 Docker Compose。
- 确保项目根目录下的
.env文件和unified_api/目录下的配置文件已准备就绪。
b. 启动服务
在项目根目录下执行:
# 构建并以守护进程模式启动所有服务
docker-compose up --build -d
# 查看 mcp-server 的实时日志
docker-compose logs -f mcp-server
# 停止所有服务
docker-compose down
服务启动后,将在 http://localhost:3003 上提供 MCP 接口。根 docker-compose.yml 会自动设置 IS_UNIFIED_API=true。
2. 独立部署 (直连 API 模式)
此方法仅用于单独运行和测试 mcp-server。
a. 配置凭证
在 src/mcp_server_weather_cuhksz/ 目录下创建一个 .env 文件,并填入“直连 API 模式”所需的 QWEATHER_* 变量。
b. 启动服务
从 src/mcp_server_weather_cuhksz/ 目录内部执行:
docker-compose up --build -d
🏗️ 项目架构
模块关系
本项目由两个核心服务组成:
mcp-server-weather(本项目): 作为 MCP 层,将业务逻辑(天气查询)封装为语言模型可调用的工具。unified-api: 作为代理和认证层,管理多个和风天气账户,实现负载均衡和统一的 API 访问入口。
关键设计:运行时动态配置
为了确保配置的灵活性和可靠性,本项目采用以下策略:
- 集中化配置入口: 所有配置逻辑都集中在主入口
__main__.py中,由它根据环境变量决定最终的操作模式和 API Host。 - 运行时动态解析: 核心逻辑模块
mcp_weather.py中的工具函数在被调用时,才通过os.getenv(...)动态获取配置。这确保了工具总是使用最新的、由容器编排工具注入的正确配置,避免了因 Python 模块导入时序问题导致的配置固化。
这种设计确保了由 Docker Compose 注入的配置始终拥有最高优先级,使得服务行为在不同部署环境中一致且可靠。
🧪 测试说明
项目提供了一个自动化测试脚本 test/test.py,用于验证所有 MCP 工具的基本功能。
运行测试
- 启动服务: 确保服务已通过
docker-compose up -d(在项目根目录) 成功启动。 - 执行脚本: 在您的本地 Python 环境中(需要安装
fastmcp客户端库),运行测试:# 建议在项目的虚拟环境中运行 python test/test.py
脚本会自动连接 http://localhost:3003 的服务,发现并调用所有可用工具,然后打印出结果或错误信息。
🔧 故障排除
常见问题
1. 工具调用时出现 Name or service not known 错误
- 症状:
test/test.py或其他客户端调用工具时,返回类似[Errno -2] Name or service not known的网络错误。 - 原因:
mcp-server容器无法通过其配置的UNIFIED_API_HOST地址连接到unified-api服务。 - 解决方案:
- 检查根
docker-compose.yml文件中mcp-server服务的UNIFIED_API_HOST环境变量。 - 对于 Docker for Mac/Windows,推荐使用
http://host.docker.internal:6380,它会指向宿主机的网络。 - 如果在 Linux 上,您可能需要配置
extra_hosts或确保两个服务在同一个自定义的 bridge network 中,并使用服务名http://unified-api:6380进行通信。
- 检查根
2. unified-api 服务健康检查失败
- 症状:
docker-compose up过程中mcp-server等待unified-api超时。 - 原因:
unified-api容器未能正常启动。可能是accounts.yaml配置错误、私钥文件缺失或路径不正确。 - 解决方案: 使用
docker-compose logs unified-api查看其详细日志,定位并修复问题。
📄 许可证
本项目采用 MIT 许可证。详见 LICENSE 文件。
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcp_server_weather_cuhksz-0.2.2.tar.gz.
File metadata
- Download URL: mcp_server_weather_cuhksz-0.2.2.tar.gz
- Upload date:
- Size: 24.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
08f634d4d99368c07c822e4f5b4444d1a87016fd067b6be79ff5cda6693f307a
|
|
| MD5 |
ede070b7f7b7092b8c9a33146ae36137
|
|
| BLAKE2b-256 |
0406201784aef1a0d1d5a5baa9895f70b247a6d03033b48b9fd7a868b5b74fd3
|
File details
Details for the file mcp_server_weather_cuhksz-0.2.2-py3-none-any.whl.
File metadata
- Download URL: mcp_server_weather_cuhksz-0.2.2-py3-none-any.whl
- Upload date:
- Size: 19.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
900a6761928688031b913eeba7e60b22566d5cf21b35014c41e7590b5d2135ce
|
|
| MD5 |
3c0848f5d794b7a5f87694893754b24f
|
|
| BLAKE2b-256 |
ac855683e23691ff7d099b814c5ed07ca3d412050d9e7f3d1601e4fed8d8a24b
|