天气数据服务

一个基于OpenWeatherMap API的天气数据服务,提供实时天气信息查询和比较功能。

  • by yashraj-dudhe
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 yashraj-dudhe/custom-mcp-server

使用说明

气象MCP服务器

模型上下文协议(MCP)服务器,使用OpenWeatherMap API提供当前天气信息。

特性

资源

  • 天气://{city_name}:公开任何城市的当前天气数据
    • 返回:城市名称、温度(°C和°F)、天气状况、描述和湿度

工具

  • get_current天气:以编程方式获取指定城市的天气数据
    • 输入:城市名称(字符串)
    • 输出:JSON格式的天气数据

鼓励

  • 天气_查询_提示:查询天气信息模板
  • 天气比较提示:用于比较两个城市天气的模板

设置

先决条件

  • Python 3.8+
  • OpenWeatherMap API密钥(免费https://openweathermap.org/api)

安装

  1. 使用uv安装依赖项(推荐):

    uv add mcp httpx
    

    或者使用pip:

    pip install -r requirements.txt
    
  2. 配置API密钥:

    # Copy the example environment file
    copy .env.example .env
    
    # Edit .env and add your OpenWeatherMap API key
    # OPENWEATHER_API_KEY=your_actual_api_key_here
    

    或者直接设置环境变量:

    # Windows (PowerShell)
    $env:OPENWEATHER_API_KEY="your_actual_api_key_here"
    
    # Windows (Command Prompt)
    set OPENWEATHER_API_KEY=your_actual_api_key_here
    
    # Linux/Mac
    export OPENWEATHER_API_KEY="your_actual_api_key_here"
    

运行服务器

发展模式

# Using uv (recommended)
uv run mcp dev weather_server.py

# Using Python directly
python weather_server.py

SSE运输的生产模式

# The server runs with SSE transport by default
python weather_server.py

MCP检验员测试

# Install and run the MCP Inspector for testing
uv run mcp dev weather_server.py

使用示例

使用资源

一旦连接到MCP客户端(如Claude Desktop),您就可以通过资源访问天气数据:

weather://London
weather://New York
weather://Tokyo

使用工具

这 get_current_weather 工具可以通过编程方式调用:

{
  "tool": "get_current_weather",
  "arguments": {
    "city": "London"
  }
}

使用提示

天气提示有助于构建LLM交互:

  • weather_query_prompt(city="London") → “请提供伦敦目前的天气信息……”
  • weather_comparison_prompt(city1="London", city2="Paris") → 结构化比较提示

API响应格式

天气数据遵循以下模式:

{
  "city_name": "London",
  "temperature_celsius": 15.5,
  "temperature_fahrenheit": 59.9,
  "condition": "Clouds",
  "humidity": 78,
  "description": "broken clouds"
}

与Claude Desktop集成

将此服务器添加到您的Claude Desktop配置中:

  1. 打开克劳德桌面设置
  2. 导航到MCP服务器配置
  3. 添加新服务器:
{
  "weather-server": {
    "command": "python",
    "args": ["path/to/weather_server.py"],
    "env": {
      "OPENWEATHER_API_KEY": "your_api_key_here"
    }
  }
}

错误处理

服务器包括全面的错误处理:

  • 城市名称无效:返回“未找到城市”错误
  • API故障:返回HTTP错误详细信息
  • 缺少API密钥:返回到带有警告的模拟数据
  • 网络问题:返回连接错误详细信息

模拟数据模式

如果没有配置API密钥,服务器将以模拟数据模式运行以进行测试:

# This will use mock weather data
python weather_server.py

模拟数据包括用于演示目的的真实天气信息。

发展

编码结构

  • fetch_weather_data():核心API交互逻辑
  • get_weather_resource():MCP资源处理程序
  • get_current_weather():MCP工具处理程序
  • weather_query_prompt():简单提示模板
  • weather_comparison_prompt():高级提示模板

测试

# Run the server in development mode
uv run mcp dev weather_server.py

# Test with different cities
# Use the MCP Inspector to test resources and tools

扩展服务器

您可以使用其他功能轻松扩展此服务器:

  • 历史天气数据
  • 天气预报
  • 天气警报
  • 多个天气提供商
  • 缓存响应

故障排除

常见问题

  1. “未找到城市”错误

    • 确保城市名称拼写正确
    • 尝试使用完整的城市名称(例如,“纽约市”而不是“NYC”)
  2. API关键错误

    • 验证您的OpenWeatherMap API密钥是否处于活动状态
    • 检查环境变量是否设置正确
  3. 网络错误

    • 确保互联网连接
    • 检查OpenWeatherMap API是否可以从您的网络访问

调试模式

运行调试日志:

# Add debug output
python weather_server.py --debug

许可证

这个项目是开源的。请确保您遵守OpenWeatherMap的API服务条款。

贡献

请随时提交问题和拉取请求,以改善此天气MCP服务器!