使用说明
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
截图
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 <= longitude <= -66.0
latitude_ok = 24.0 <= latitude <= 50.0
if not (latitude_ok and longitude_ok):
return (
f"Error: Coordinates ({latitude}, {longitude}) are outside the contiguous United States (lower 48). "
"This PoC uses a simple bounding box check; the NWS API is US-covered, but not all US regions "
"(e.g. Alaska/Hawaii) fall within these bounds. "
"Try New York (40.7128, -74.0060) or Los Angeles (34.0522, -118.2437)."
)
观察结果——stderr日志在检查器中显示为“红色错误”
MCP检查器将所有stderr输出标记为“错误输出”,而不管日志级别如何。
这些日志是 INFO: 水平,完全正确。这就是 STDIO陷阱:
stdout 为JSON-RPC流保留。一个 print() 通话腐败
协议并导致客户端连接崩溃。始终登录到 sys.stderr.
Codex实验-为什么需要API Dash的MCP测试仪
在验证了Inspector中的服务器是否正常工作后,我尝试将其连接到 OpenAI Codex命令行界面 作为现实世界的MCP客户端测试。
正确配置后 ~/.codex/config.toml:
[mcp_servers.weather-poc]
command = "uv"
args = ["run", "--with", "mcp", "mcp", "run", "/path/to/weather.py"]
Codex仍然没有将MCP工具作为一级函数调用来调用。相反,
它读到 weather.py 源代码,并使用复制NWS API调用本身
curl 和 node该模型甚至承认了这一点:
“此聊天界面不会将自定义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