mcp天气poc
一个概念证明MCP(模型上下文协议)服务器 FastMCP, 作为我的GSoC提案的一部分创建 API Dash-创意#1:MCP测试.
这不仅仅是一个hello world服务器——它记录了真正的bug点击、应用的修复、, 以及失败的MCP客户端集成,这直接推动了为什么API Dash 需要建立测试基础设施。
______________________________________________________________________
这表明了什么
- MCP服务器内置
FastMCP(官方Python SDK) - 两个工具通过自动注册
@mcp.tool()装饰器 - 从Python类型提示+文档字符串自动生成JSON模式
- 正确的STDIO传输
stderr-仅日志记录(无stdout污染) - 在不使用LLM的情况下发现并修复了HTTP级别的错误
- 通过MCP Inspector v0.15.0和OpenAI Codex CLI进行测试
______________________________________________________________________
工具
| 工具 | 说明 |
|---|---|
get_alerts | 获取美国某州的NWS天气警报 |
get_forecast | 获取美国纬度/经度坐标的7天预测 |
______________________________________________________________________
如何跑步
先决条件: Python 3.10+, 紫外线,Node.js 20+
git clone https://github.com/Gaurav5189/mcp-weather-poc
cd mcp-weather-poc
uv add "mcp[cli]" httpx
uv run mcp dev weather.py
# Opens MCP Inspector at http://localhost:5173______________________________________________________________________
截图
MCP Inspector showing successful tool call
______________________________________________________________________
Bug命中与修复(真正的学习)
Bug 1-- httpx 默认情况下不遵循重定向
NWS API返回 301 Moved Permanently 转换为四舍五入的坐标URL (例如。 20.593683 → 20.5937). httpx 默认情况下将其视为终端错误, 不像 requests.修复:一个参数-- follow_redirects=True.
# Before
r = await client.get(url, headers=headers, timeout=10.0)
# After
r = await client.get(url, headers=headers, timeout=10.0, follow_redirects=True)Bug 2——非美国坐标返回了原始Python回溯
NWS API仅适用于美国。传递覆盖区域外的坐标会导致未处理的 直接向调用者显示的异常——一种破碎的开发人员体验。 修复了显式边界框复选框返回干净、可操作的错误消息的问题。
longitude_ok = -125.0 *“此聊天界面不会将自定义MCP工具作为一流工具公开
> 可调用工具,所以我通过当地气象MCP项目获取了它
> NWS支持本次会议的实时通话。"*
**这是API Dash MCP测试功能解决的核心问题。**
现有的AI CLIs对MCP工具调用的处理不一致。开发商大楼
如今,MCP服务器没有可靠、确定的方法来验证其工具是否
正确调用-无需燃烧LLM API信用,无需猜测是否
客户端默默地后退,没有通读模糊的模型输出
推断实际发生了什么。
此PoC中的每个错误都是使用 **MCP检查器的手动JSON有效载荷
测试员** --不涉及LLM,没有歧义,直接结构化输入→ 结构化的
输出。这正是API Dash提案第三阶段给开发者带来的
用于他们自己的MCP服务器。
______________________________________________________________________
## GSoC提案架构
此PoC映射到 **阶段4** API Dash MCP测试功能的建议:
|阶段|建造什么|
|-------|----------------|
| **第一阶段** |Node.js协议适配器使用 `@modelcontextprotocol/sdk`,通过以下方式生成MCP服务器进程 `child_process`,管理JSON-RPC stdio连接|
| **第2阶段** |API Dash中的React仪表板用于服务器配置,通过 `tools/list` 和 `resources/list`,呈现实时工具模式|
| **第三期** |手动JSON有效负载测试引擎——手动构造工具调用,捕获响应和错误堆栈跟踪,在没有LLM的情况下进行调试|
| **阶段4** |作为API Dash自己的CI/CD管道的自动化测试目标的伪Python MCP服务器(如此服务器)|
______________________________________________________________________
*堆栈:Python 3.13·uv·FastMCP 1.26.0·httpx·MCP Inspector v0.15.0·OpenAI Codex CLI·Parrot OS*