内容
# Python 天气 MCP 服务器
一个使用官方 Python SDK 构建的[模型上下文协议](https://modelcontextprotocol.io/)服务器示例。它使用 Open-Meteo 的地理编码和预报 API,因此不需要 API 密钥。
服务器公开了两个工具,都接受一个可选的 `location`:
- `get_current_weather` 返回结构化数据,并在 ChatGPT 中显示一个响应式天气卡片。
- `get_current_weather_text` 返回相同的结构化数据,但不附带小部件,允许 ChatGPT 提供传统的文本响应。
MCP 客户端可以从用户的提示中填写位置(例如,“东京的天气怎么样?”)。当没有提供地点时,服务器使用配置的默认位置。
## 安装和运行
依赖项已经记录在 `pyproject.toml` 中:
```shell
uv sync
uv run main.py
```
服务器在 `http://127.0.0.1:8000/mcp` 使用 Streamable HTTP,这是与 ChatGPT 连接所需的传输协议。
用于 MCP Inspector 的交互式开发:
```shell
uv run mcp dev main.py
```
要更改固定的备用位置:
```powershell
$env:DEFAULT_WEATHER_LOCATION = "马里博尔, 斯洛文尼亚"
uv run main.py
```
## 从 ChatGPT 连接
ChatGPT 必须能够通过公共 HTTPS URL 访问服务器。对于本地开发,请使用 Cloudflare Tunnel 暴露端口 8000。
### 安装 Cloudflared
在 Windows 上,使用 WinGet 安装 Cloudflared:
```powershell
winget install --id Cloudflare.cloudflared
```
安装后打开新的终端并验证其可用性:
```powershell
cloudflared --version
```
### 启动服务器和隧道
在第一个终端中启动 MCP 服务器:
```shell
uv run main.py
```
在第二个终端中,运行附带的隧道脚本:
```powershell
.\scripts\make_tunnel.ps1
```
Cloudflared 打印一个临时的公共 URL,类似于:
```text
https://example-name.trycloudflare.com
```
保持两个终端运行。使用带有 `/mcp` 的公共 URL 在 ChatGPT 中创建一个开发者模式的应用:
```text
https://example-name.trycloudflare.com/mcp
```
更改小部件标记后,重新连接或刷新连接器。版本化的 `ui://widget/weather-v1.html` URI 防止重用较旧的小部件包。
## 其他 MCP 客户端
将任何支持 Streamable HTTP 的客户端连接到 `http://127.0.0.1:8000/mcp`。
示例提示:
- “显示 Celje 的天气小部件。” — 使用 `get_current_weather`。
- “给我一份雷克雅未克的纯文本天气报告。” — 使用 `get_current_weather_text`。
天气数据由 [Open-Meteo](https://open-meteo.com/) 提供。