一个提供全球任何沿海地点全面冲浪预报的 MCP 服务器。获取当前条件及未来五天的预测,包括波高、周期、方向、风况以及智能冲浪质量评估。
pip install -r requirements.txt
python server.py
几分钟内部署到 fastmcp 云:
此服务器提供三个 MCP 原语:
get_surf_forecast - 获取任何地点的全面冲浪预报
# MCP 工具调用
get_surf_forecast("Livorno")
# 返回经过验证的 SurfForecast 对象,包含:
# - 地点和坐标
# - 当前的波浪、风和温度条件
# - 5 天每日预报
# - 冲浪质量评估
surf://info - 提供服务器信息,包括功能、数据来源和使用指南
analyze_surf_conditions - 生成一个结构化的提示,用于分析特定地点的冲浪条件,引导 LLM 提供可操作的建议,包括质量评估、时间、趋势和技能水平指导
清晰地分离关注点,采用模块化设计:
surf-forecast-mcp/
├── server.py # 包含工具定义的 MCP 服务器
├── models/
│ └── __init__.py # 包含验证规则的数据结构
├── api/
│ ├── __init__.py # API 客户端导出
│ ├── geocoding.py # 地理编码 API 客户端(Nominatim)
│ ├── marine.py # 海洋天气 API 客户端(Open-Meteo)
│ └── weather.py # 天气预报 API 客户端(Open-Meteo)
├── services/
│ ├── __init__.py # 服务导出
│ └── forecast.py # 冲浪预报业务逻辑
├── example.py # 使用示例
└── requirements.txt # 依赖项
关注点分离:
models/ - 数据结构和验证规则api/ - 外部集成,API 客户端services/ - 业务逻辑,数据转换server.py - MCP 接口,仅工具定义获取任何地点的全面冲浪预报。
参数:
city_name (str): 沿海城市/地点的名称(例如,“利沃诺”,“比亚里茨”,“圣迭戈”)返回结构化的预报,包含:
对于每一天:
工具返回优化后的文本,适合 LLM 上下文消费:
# 冲浪预报:意大利托斯卡纳利沃诺
位置:43.5484, 10.3116
## 当前条件
波浪:1.2 米(周期 9 秒)
- 肿波:来自西面的 0.9 米
- 风波:0.3 米
风:来自西面的 9 节(阵风 12 节)
温度:19°C
## 下几小时
03:00: 1.3 米波浪(肿波 1.0 米来自西面),西面的 10 节风
06:00: 1.4 米波浪(肿波 1.1 米来自西面),西面的 11 节风
09:00: 1.5 米波浪(肿波 1.2 米来自西南西面),北西面的 12 节风
12:00: 1.6 米波浪(肿波 1.2 米来自西南西面),北西面的 11 节风
## 5 天预报
2025-11-10:
波浪:最大 1.5 米(肿波 1.1 米来自西面)
风:西面的 12 节
温度:16-22°C
2025-11-11:
波浪:最大 1.8 米(肿波 1.4 米来自西南西面)
风:北西面的 10 节
温度:15-21°C
2025-11-12:
波浪:最大 1.6 米(肿波 1.2 米来自西面)
风:北面的 8 节
温度:14-20°C
2025-11-13:
波浪:最大 1.4 米(肿波 1.0 米来自西北西面)
风:东北面的 11 节
温度:15-19°C
2025-11-14:
波浪:最大 1.7 米(肿波 1.3 米来自西面)
风:东面的 13 节
温度:16-21°C
## 冲浪质量
大多数冲浪者的良好波高 | 轻微的微风 - 良好的条件 | 中等周期 - 不错的波浪质量 | 肿波主导 - 更干净的条件
为什么这种格式?
所有数据均使用 Pydantic 模型进行验证。
此服务器结合了两个 Open-Meteo API 的数据:
两个 API 在非商业用途下免费使用。
由 FastMCP 构建,并由 Open-Meteo 提供支持