天气信息服务器

一个基于Model Context Protocol (MCP)的天气信息服务器,提供天气警报和预报服务,并可集成到MCP客户端如Claude Desktop中。

  • by jalateras
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 jalateras/weather

使用说明

气象MCP服务器

概述

该项目实现了一个提供天气信息服务的模型上下文协议(MCP)服务器。它利用美国国家气象局(NWS)API获取天气警报和预报,并将其公开为Claude等MCP客户可以使用的工具。

该服务器采用模块化架构构建,遵循Python项目的最佳实践,使其易于维护和扩展。

特性

  • 天气工具:获取各州的天气警报和特定坐标的预报
  • 系统工具:运行shell命令并查看系统进程信息
  • MCP集成:与Claude Desktop等MCP客户端无缝集成

安装

先决条件

  • Python 3.11或更高版本
  • 紫外线 包管理器

设置

  1. 克隆存储库:

    git clone https://github.com/yourusername/weather.git
    cd weather
    
  2. 使用uv安装依赖项:

    make install
    
  3. 对于开发,请安装其他依赖项:

    make dev
    

用法

运行服务器

要启动MCP服务器,请执行以下操作:

make run

或者直接使用紫外线:

uv run python -m main

连接到克劳德桌面

  1. 更新您的Claude Desktop配置以包括天气服务器:
{
  "mcpServers": {
    "weather": {
      "command": "python",
      "args": ["-m", "main"],
      "cwd": "/path/to/weather"
    }
  }
}
  1. 重新启动Claude Desktop以应用更改

  2. 在Claude Desktop中,您现在可以从MCP服务器下拉菜单中选择“天气”MCP服务器

Claude Desktop将使用天气MCP服务器,允许您在对话中直接与天气数据交互。

查询示例

连接后,您可以问Claude:

  • “加利福尼亚州目前的天气警报是什么?”
  • “纬度37.7749,经度-122.4194的预报是什么?”
  • “我的系统上哪些进程使用的CPU最多?”

项目结构

weather/
├── src/
│   └── weather/
│       ├── __init__.py          # Package initialization
│       ├── server.py            # Main server setup
│       ├── tools/               # Tool implementations
│       │   ├── __init__.py
│       │   ├── weather_tools.py
│       │   └── system_tools.py
│       ├── resources/           # Resource implementations
│       │   ├── __init__.py
│       │   └── system_resources.py
│       ├── services/            # External service integrations
│       │   ├── __init__.py
│       │   ├── weather_service.py
│       │   └── system_service.py
│       └── utils/               # Helper functions
│           ├── __init__.py
│           ├── http.py
│           └── formatting.py
├── tests/                       # Test suite
├── main.py                      # Entry point
├── pyproject.toml               # Dependencies and metadata
├── Makefile                     # Build commands
└── README.md                    # This file

制定目标

该项目包括几个简化开发的目标:

目标 描述
install 使用uv安装项目依赖项
lint 使用uv自动修复运行褶皱过梁
format 使用uv运行黑色格式化程序
format-check 检查文件是否会被重新格式化为黑色
lint-format 运行linter和格式化程序
test 使用pytest和uv运行测试
clean 删除构建工件和缓存文件
outdated 使用uv检查过时的依赖关系
upgrade-deps 使用uv升级所有过时的依赖项
run 使用uv启动MCP服务器
inspector 启动MCP检查器进行测试
hooks 安装git挂钩
dev-server 以开发模式启动MCP服务器
stop-server 停止MCP服务器和检查器
claude-install 在Claude Desktop中安装服务器
claude-uninstall 从Claude Desktop卸载服务器

跑 make help 查看所有可用目标。

与Claude Desktop一起使用

要将天气MCP服务器与Claude Desktop一起使用:

  1. 在Claude Desktop中安装服务器:
make claude-install

这将:

  • 使用MCP CLI在Claude Desktop中安装服务器
  • 以可编辑模式安装项目(-e .)
  • 使用名称“weather”注册服务器
  • 将服务器配置为从项目目录运行
  1. 重新启动Claude Desktop以应用更改

  2. 在Claude Desktop中,您现在可以从MCP服务器下拉菜单中选择“天气”MCP服务器

Claude Desktop将使用天气MCP服务器,允许您在对话中直接与天气数据交互。

要从Claude Desktop卸载服务器,请执行以下操作:

make claude-uninstall

这将从Claude Desktop中删除气象MCP服务器配置。您需要重新启动Claude以应用更改。

发展模式

对于代码更改时自动重新加载的主动开发:

# Start the server in development mode with the MCP Inspector
make dev-server

这将:

  1. 使用启动MCP服务器 mcp dev 命令
  2. 以可编辑模式安装项目(-e .)
  3. 自动启动MCP检查器
  4. 启用代码更改时的自动重新加载

MCP检查员将在http://localhost:5173在您的网络浏览器中。

要停止服务器和检查器,请执行以下操作:

make stop-server

这种设置非常适合迭代开发,因为当您对代码进行更改时,服务器会自动重新加载。

检查器功能

MCP检查器允许您:

  1. 探索工具:查看所有可用工具、其参数和文档。
  2. 呼叫工具:使用自定义参数执行工具并查看结果。
  3. 浏览资源:查看所有可用资源及其当前值。
  4. 测试提示:如果您的服务器提供提示模板,则可以使用不同的输入对其进行测试。
  5. 查看日志:查看检查器和服务器之间所有交互的详细日志。

测试天气工具

使用Inspector,您可以轻松测试天气工具:

  1. 查找 get_weather_alerts 检查器界面中的工具
  2. 在参数字段中输入状态代码(例如“CA”、“NY”、“FL”)
  3. 执行工具并查看结果

同样,您可以测试 get_forecast 该工具通过提供纬度和经度坐标。

测试系统工具

Inspector还可以轻松测试系统工具:

  1. 查找 run_shell_command 工具
  2. 在参数字段中输入安全命令(例如“ls-la”、“echo hello”)
  3. 执行工具并查看结果

使用检查器进行调试

检查器对于调试特别有用:

  1. 如果工具调用失败,它将显示详细的错误消息
  2. 您可以看到确切的请求和响应有效载荷
  3. 它有助于识别参数验证或工具实现的问题

有关MCP检查器的更多信息,请访问 模型上下文协议文档.

本地测试

您可以使用附带的MCP CLI工具在本地测试MCP服务器 mcp[cli] 包裹:

  1. 启动服务器:

    make run
    
  2. 在单独的终端中,使用MCP CLI与服务器交互:

    # List all available tools
    make inspector
    
    # Call a specific weather tool
    mcp call-tool http://localhost:8000 get_weather_alerts --args '{"state": "CA"}'
    
    # Get a weather forecast
    mcp call-tool http://localhost:8000 get_forecast --args '{"latitude": 37.7749, "longitude": -122.4194}'
    
    # List system resources
    mcp list-resources http://localhost:8000
    
    # Get system processes
    mcp get-resource http://localhost:8000 top_processes
    

如果您直接使用uv,则可以使用以下命令运行MCP CLI:

uv run mcp list-tools http://localhost:8000

发展

添加新工具

要向服务器添加新工具,请执行以下操作:

  1. 在相应的工具模块中创建函数
  2. 向注册 @server.tool() 装饰器
  3. 更新中的工具注册 tools/__init__.py

例子:

@server.tool()
async def my_new_tool(param1: str, param2: int) -> str:
    """
    Tool description.
    
    Args:
        param1: Description of param1
        param2: Description of param2
        
    Returns:
        Description of return value
    """
    # Implementation
    return result

添加新资源

要添加新资源,请执行以下操作:

  1. 在相应的资源模块中创建函数
  2. 向注册 @server.resource() 装饰器
  3. 更新中的资源注册 resources/__init__.py

许可证

此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。

致谢