mcp-server-weather-cuhksz

mcp-server-weather-cuhksz

A FastMCP server that provides weather-related tools using the QWeather API, enabling language models to query real-time weather, forecasts, warnings, and indices.

Category
Visit Server

README

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:6380http://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-serverunified-apiredis 服务,是完整的生产和测试部署方案。

a. 环境准备

  • 安装 DockerDocker 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 访问入口。

关键设计:运行时动态配置

为了确保配置的灵活性和可靠性,本项目采用以下策略:

  1. 集中化配置入口: 所有配置逻辑都集中在主入口 __main__.py 中,由它根据环境变量决定最终的操作模式和 API Host。
  2. 运行时动态解析: 核心逻辑模块 mcp_weather.py 中的工具函数在被调用时,才通过 os.getenv(...) 动态获取配置。这确保了工具总是使用最新的、由容器编排工具注入的正确配置,避免了因 Python 模块导入时序问题导致的配置固化。

这种设计确保了由 Docker Compose 注入的配置始终拥有最高优先级,使得服务行为在不同部署环境中一致且可靠。

🧪 测试说明

项目提供了一个自动化测试脚本 test/test.py,用于验证所有 MCP 工具的基本功能。

运行测试

  1. 启动服务: 确保服务已通过 docker-compose up -d (在项目根目录) 成功启动。
  2. 执行脚本: 在您的本地 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 文件。

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured