天气演示服务

一个展示模型上下文协议(MCP)的天气演示服务,提供模拟和实时天气数据两种模式,支持STDIO和HTTP/SSE传输方式。

  • by aravind07d
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 aravind07d/MCP-RealTime-vs-non-Realtime-Weather-APP

使用说明

优秀👍 — 这是你的 完全更新 README.md ✅ 包括两者 顺序(逐一) 和 平行(同时进行) 模式 ✅ 为您的研讨会清楚地解释端口、客户端更改和图表


📘 README.md--MCP天气演示(模拟与实时)

🚀 概述

该项目展示了 模型上下文协议(MCP) 使用两种不同的服务器和传输模式(STDIO和HTTP/SSE):

  • 🟢 weather_server.py → 模拟/非实时天气
  • 🔵 realtime_weather_server.py → 通过Open-Meteo API直播天气

两者都公开了客户端可以发现和调用的MCP工具:

  • get_weather → 静态本地数据
  • get_realtime_weather → 动态的、基于API的数据

你会学到:

  • MCP服务器如何使用 @mcp.tool()
  • 客户端如何通过STDIO或HTTP(SSE)调用工具
  • 如何比较本地与现场API集成

📁 文件夹结构

MCP_MCP_TOOLS_vs_SERVER_TOOL/
├── weather_server.py               # Mock server (non-realtime)
├── realtime_weather_server.py      # Live weather (Open-Meteo API)
├── client_stdio.py                 # Local STDIO client (spawns server)
├── client_http.py                  # HTTP/SSE client (connects to running server)
├── requirements.txt
└── README.md

⚙️ 设置

python -m venv .venv
. .venv/Scripts/activate      # Windows
# or source .venv/bin/activate (Linux/macOS)

pip install -r requirements.txt

依赖关系包括

  • mcp==1.19.0
  • httpx (用于API调用)
  • anyio, pydantic等等。

🧩 如何运行Demos

您可以在中运行演示 双向 这取决于你的目标。


🅰️ 选项1——顺序模式(建议用于培训/幻灯片)

在此模式下,您一次运行一台服务器(默认端口8000)。

1.️⃣ 运行模拟服务器(非实时)

端子1

python weather_server.py --sse

2号航站楼

python client_http.py

🪄 输出示例

HTTP/SSE tools: ['get_weather']
[ok] get_weather({'city': 'Atlanta'}) -> Sunny, 28°C

停止此服务器(Ctrl + C)在查看输出后。


2.️⃣ 运行实时服务器(通过Open Meteo实时运行)

端子1

python realtime_weather_server.py --sse

2号航站楼

python client_http.py

🪄 输出示例

HTTP/SSE tools: ['get_weather', 'get_realtime_weather']
[ok] get_realtime_weather({'city': 'Atlanta'}) -> Atlanta, Georgia, United States | Now: 27.8°C/82°F, Partly cloudy | Wind: 10.2 km/h | Today H/L: 30°C/86°F / 21°C/70°F

✅ 最适合Demos: 简单、可预测、无端口更改。


🅱️ 选项2——并行模式(高级比较)

如果你想跑步 同时使用两台服务器 并在一个客户端会话中连接到两者:

1.️⃣ 更新端口

编辑底部 realtime_weather_server.py:

if args.sse:
    mcp.run(transport={"type": "sse", "host": "127.0.0.1", "port": 8080})
else:
    mcp.run(transport="stdio")

保持 weather_server.py 默认值(端口8000)。


2.️⃣ 运行两台服务器

终端1——模拟服务器

python weather_server.py --sse

终端2——实时服务器

python realtime_weather_server.py --sse

3.️⃣ 更新客户端(可选)

编辑 client_http.py 如果你想两者都打电话:

SERVER_MOCK = "http://127.0.0.1:8000/sse"
SERVER_REAL = "http://127.0.0.1:8080/sse"

然后连接到两个服务器并并排打印结果。


4.️⃣ 运行客户端

python client_http.py

🪄 输出

HTTP/SSE tools from mock server: ['get_weather']
[ok] get_weather({'city': 'Atlanta'}) -> Sunny, 28°C

HTTP/SSE tools from realtime server: ['get_realtime_weather']
[ok] get_realtime_weather({'city': 'Atlanta'}) -> Atlanta, Georgia, United States | Now: 28.1°C/82.6°F, Clear sky | Wind: 9.3 km/h | Today H/L: 30°C/86°F / 20°C/68°F

✅ 最适合动手工作坊: 实时比较静态和动态MCP工具。


🌤️ 视觉概述

🧩 顺序模式(更简单)

client_http.py ──→ weather_server.py (mock)
          └─────→ realtime_weather_server.py (realtime)
(run one at a time on port 8000)

⚙️ 并行模式(高级)

          ┌─────────────── Port 8000 ────────────────┐
client_http.py ──→ weather_server.py (mock)
          └─────────────── Port 8080 ────────────────┘
                 └→ realtime_weather_server.py (realtime)

🧠 主要区别

方面 weather_server.py realtime_weather_server.py
工具 get_weather get_realtime_weather
数据源 静态本地dict Open-Meteo API
需要互联网 ❌ ✅
端口 8000 8080(如果更改)
用例 快速静态测试 真实的API现场演示

🧩 运输比较

模式 运输 描述 用于
STDIO 本地进程管道 主机在本地生成MCP服务器 client_stdio.py
SSE HTTP over port(事件流) 远程式连接 client_http.py

✅ 测试版本

组件 版本
Python 3.12
MCP SDK 1.19.0
httpx 0.28.1
操作系统 Windows 11

📚 参考文献


你想让我生成一个 可视化PNG图 (STDIO vs SSE,Mock vs Realtime)接下来要包含在README或研讨会幻灯片中吗?它将清楚地显示服务器和端口(8000对8080),以便并排比较。