当前位置: 首页 > article >正文

别再手动查天气了!用Python和MCP给Claude做个专属天气助手(附完整代码)

打造智能天气助手Python与MCP的无缝集成实战每次出门前都要打开天气应用查看预报在不同工具间反复切换查询天气信息这种低效操作已经成为过去式。今天我们将用Python和MCP协议为Claude打造一个专属天气助手让你直接通过对话获取精准天气信息。这个项目不仅适合Python中级开发者练手更能让你深入理解AI助手的扩展机制。1. 环境准备与项目初始化在开始编码前我们需要搭建好开发环境。这个天气助手项目基于Python 3.10使用MCP 1.2.0协议实现与Claude的通信。核心依赖工具Python 3.10推荐使用pyenv管理多版本UV包管理器替代pip的现代工具FastMCP框架简化MCP服务器开发HTTPX库异步HTTP客户端# 创建项目目录并初始化虚拟环境 mkdir weather_assistant cd weather_assistant python -m venv .venv source .venv/bin/activate # Linux/Mac # .venv\Scripts\activate # Windows # 安装核心依赖 uv install mcp[cli] httpx python-dotenv提示建议使用.env文件管理API密钥等敏感信息避免硬编码在代码中项目结构设计遵循模块化原则weather_assistant/ ├── .env # 环境变量配置 ├── config.py # 配置文件 ├── services/ # 服务模块 │ ├── weather.py # 天气数据获取 │ └── mcp_server.py # MCP服务主文件 └── tools/ # 辅助工具 └── formatters.py # 数据格式化2. MCP服务器核心架构设计MCPModel Context Protocol协议的核心价值在于标准化AI模型与外部服务的交互方式。我们的天气服务器需要实现两个核心功能天气预报查询根据经纬度获取未来5天预报天气警报查询按地区代码获取极端天气预警# services/mcp_server.py from typing import Optional import httpx from mcp.server.fastmcp import FastMCP from config import settings from tools.formatters import format_forecast mcp FastMCP(weather_assistant) mcp.tool() async def get_forecast(lat: float, lon: float) - str: 获取指定位置的天气预报 async with httpx.AsyncClient() as client: try: response await client.get( f{settings.WEATHER_API}/forecast, params{lat: lat, lon: lon}, timeout10.0 ) return format_forecast(response.json()) except httpx.RequestError: return 无法获取天气预报数据关键设计考量异步IO处理避免阻塞主线程完善的错误处理机制数据格式化提升可读性类型注解增强代码可维护性3. 天气数据获取与处理我们选择心知天气API作为数据源它提供全球范围的天气数据且支持中文响应。相比美国国家气象局(NWS)API更适合国内开发者使用。API响应示例{ results: [{ location: {name: 北京}, daily: [{ date: 2023-07-15, text_day: 多云, high: 32, low: 25, wind_direction: 东南风 }] }] }数据处理函数需要将原始JSON转换为易读的自然语言# tools/formatters.py def format_forecast(data: dict) - str: 格式化天气预报数据 if not data.get(results): return 未找到该位置的天气信息 location data[results][0][location][name] daily data[results][0][daily][:5] # 取最近5天 forecast_lines [f{location}未来5天天气预报] for day in daily: forecast_lines.append( f{day[date]}: {day[text_day]}, f气温{day[low]}~{day[high]}℃, f{day[wind_direction]} ) return \n.join(forecast_lines)4. Claude客户端集成实战完成服务器开发后需要配置Claude桌面客户端识别我们的天气服务。不同操作系统的配置路径有所差异操作系统配置文件路径macOS~/Library/Application Support/Claude/config.jsonWindows%APPDATA%\Claude\config.jsonLinux~/.config/claude/config.json配置文件示例{ mcpServers: { weather: { command: python, args: [ -m, uvicorn, services.mcp_server:mcp, --reload ], environment: { WEATHER_API_KEY: your_api_key_here } } } }常见集成问题排查服务未显示检查配置文件路径是否正确确认Claude版本支持MCP插件查看服务启动日志是否有错误权限问题chmod x services/mcp_server.py # 确保文件有执行权限网络连接问题# 测试API连通性 async def test_connection(): async with httpx.AsyncClient() as client: try: await client.get(https://api.seniverse.com/v3) return True except httpx.ConnectError: return False5. 功能扩展与优化思路基础功能实现后可以考虑以下增强功能5.1 多数据源容灾async def get_weather_multi_sources(lat, lon): 从多个数据源获取天气提高可靠性 sources [SeniverseAPI(), OpenWeatherMap(), AccuWeather()] for source in sources: try: return await source.get_forecast(lat, lon) except APIError: continue raise AllAPIsDownError()5.2 天气缓存机制from datetime import datetime, timedelta from cachetools import TTLCache weather_cache TTLCache(maxsize1000, ttltimedelta(minutes30)) async def get_forecast_with_cache(lat, lon): cache_key f{lat},{lon} if cache_key in weather_cache: return weather_cache[cache_key] data await get_weather(lat, lon) weather_cache[cache_key] data return data5.3 用户偏好记忆user_preferences { user123: { location: (39.9042, 116.4074), units: metric, alerts_threshold: orange } } async def get_personalized_weather(user_id): prefs user_preferences.get(user_id, {}) forecast await get_forecast(*prefs.get(location, (0,0))) return adjust_units(forecast, prefs.get(units))6. 性能监控与日志记录生产环境部署需要完善的监控体系# 监控装饰器示例 def monitor_performance(func): async def wrapper(*args, **kwargs): start time.time() try: result await func(*args, **kwargs) duration time.time() - start log_metric(func.__name__, success, duration) return result except Exception as e: log_metric(func.__name__, failure, 0) raise e return wrapper # 应用监控 monitor_performance mcp.tool() async def get_alerts(region: str): # 原有实现...日志配置建议import logging from logging.handlers import RotatingFileHandler logging.basicConfig( handlers[ RotatingFileHandler(weather.log, maxBytes1e6, backupCount3), logging.StreamHandler() ], levellogging.INFO, format%(asctime)s - %(name)s - %(levelname)s - %(message)s )7. 安全加固措施对外提供服务必须考虑安全性7.1 输入验证from pydantic import BaseModel, confloat class Coordinates(BaseModel): lat: confloat(ge-90, le90) lon: confloat(ge-180, le180) mcp.tool() async def get_forecast(lat: float, lon: float): coords Coordinates(latlat, lonlon) # 处理逻辑...7.2 API限流from fastapi import Request from slowapi import Limiter from slowapi.util import get_remote_address limiter Limiter(key_funcget_remote_address) mcp.tool() limiter.limit(10/minute) async def get_alerts(request: Request, region: str): # 实现...7.3 敏感数据保护import ssl from httpx import AsyncClient async with AsyncClient( verifyssl.CERT_REQUIRED, timeout10.0, limitshttpx.Limits(max_connections100) ) as client: # 安全请求...8. 实际应用场景演示完成所有开发后让我们看看如何在Claude中使用这个天气助手用户上海明天会下雨吗 Claude: [调用天气助手] 上海明日天气预报 2023-07-16: 雷阵雨转多云, 气温26~32℃, 东南风3-4级 建议携带雨具出门高级查询示例用户对比北京和广州未来三天的天气 Claude: [并行调用两地天气接口] 北京 vs 广州未来3天天气预报 北京 7/16: 晴, 28~35℃ 7/17: 多云, 27~34℃ 7/18: 雷阵雨, 26~32℃ 广州 7/16: 暴雨, 25~29℃ 7/17: 中雨, 26~30℃ 7/18: 阵雨, 27~31℃企业级应用场景物流公司整合到运输调度系统外卖平台为骑手提供实时天气预警旅游APP的行程推荐引擎智能家居的自动化控制条件开发这类AI扩展服务时最常遇到的坑是异步IO的异常处理不完善导致服务假死。我在初期版本中就遇到过因为未设置HTTP超时导致整个服务卡在某个外部API调用上的情况。现在所有外部调用都明确设置了超时限制并添加了熔断机制当连续失败达到阈值时会自动切换备用数据源。

相关文章:

别再手动查天气了!用Python和MCP给Claude做个专属天气助手(附完整代码)

打造智能天气助手:Python与MCP的无缝集成实战 每次出门前都要打开天气应用查看预报?在不同工具间反复切换查询天气信息?这种低效操作已经成为过去式。今天我们将用Python和MCP协议为Claude打造一个专属天气助手,让你直接通过对话获…...

【技术突破】通过进程优先级调控解决ACE-Guard资源占用问题的完整指南

【技术突破】通过进程优先级调控解决ACE-Guard资源占用问题的完整指南 【免费下载链接】sguard_limit 限制ACE-Guard Client EXE占用系统资源,支持各种腾讯游戏 项目地址: https://gitcode.com/gh_mirrors/sg/sguard_limit 如何精准定位资源占用异常&#xf…...

Qwen3跨平台GUI开发:基于Qt框架打造桌面级字幕工具

Qwen3跨平台GUI开发:基于Qt框架打造桌面级字幕工具 最近有不少朋友在问,有没有那种既好用又能在自己电脑上离线运行的字幕生成工具?毕竟现在很多在线服务要么有隐私顾虑,要么网络不稳定,处理个长视频还得提心吊胆。正…...

SJTUThesis终极实战:3种高效集成方案深度解析

SJTUThesis终极实战:3种高效集成方案深度解析 【免费下载链接】SJTUThesis 上海交通大学 LaTeX 论文模板 | Shanghai Jiao Tong University LaTeX Thesis Template 项目地址: https://gitcode.com/gh_mirrors/sj/SJTUThesis 作为上海交通大学官方LaTeX论文模…...

终极免费视频播放器:MPC-BE让你体验专业级影音享受

终极免费视频播放器:MPC-BE让你体验专业级影音享受 【免费下载链接】MPC-BE MPC-BE – универсальный проигрыватель аудио и видеофайлов для операционной системы Windows. 项目地址: https…...

Larastan集合操作优化终极指南:避免不必要的toArray调用提升性能

Larastan集合操作优化终极指南:避免不必要的toArray调用提升性能 【免费下载链接】larastan ⚗️ Adds code analysis to Laravel improving developer productivity and code quality. 项目地址: https://gitcode.com/gh_mirrors/la/larastan Larastan为Lar…...

AI项目从0到1:制造业企业如何用大模型+微调搞定质检与物流(附实战模板)

AI项目从0到1:制造业企业如何用大模型微调搞定质检与物流(附实战模板) 在东莞一家电子元件厂的质检车间里,质检员王师傅每天需要检查超过2000个精密连接器的外观缺陷。这种高强度工作不仅容易导致视觉疲劳,漏检率也长…...

gh_mirrors/bb/bbs-go数据库索引设计:查询性能提升指南

gh_mirrors/bb/bbs-go数据库索引设计:查询性能提升指南 【免费下载链接】bbs-go 基于Golang的开源社区系统。 项目地址: https://gitcode.com/gh_mirrors/bb/bbs-go gh_mirrors/bb/bbs-go是基于Golang的开源社区系统,提供文章、话题、用户互动等核…...

这个Qt通讯组件库有点东西。咱们先从底层通讯开始盘——TCP、UDP、Serial三大件全齐活。拿UDP举个栗子,发送报文简单到像发短信

纯qt编写的通讯组件,包含tcp,udp,serial;plc客户端有mudbustcp,modbusrtu,finstcp,finsudp;plc服务端有modbustcp和modbusrtu。 实现其他的plc通信可集成原有基类,已封装…...

AmbaSat SHT31航天级温湿度驱动库设计与实现

1. AmbaSat SHT31库概述:面向近地轨道卫星的高可靠性温湿度传感方案AmbaSat SHT31库是专为AmbaSat-1近地轨道(LEO)微型卫星平台设计的SHT31数字温湿度传感器驱动程序。该库并非通用型Arduino或STM32 HAL封装,而是深度适配空间环境…...

WaveDrom皮肤系统详解:自定义时序图外观的终极方案

WaveDrom皮肤系统详解:自定义时序图外观的终极方案 【免费下载链接】wavedrom :ocean: Digital timing diagram rendering engine 项目地址: https://gitcode.com/gh_mirrors/wa/wavedrom WaveDrom是一款强大的数字时序图渲染引擎,它允许开发者通…...

PyTorch 2.8镜像多场景落地:智能硬件厂商嵌入式AI模型蒸馏与部署方案

PyTorch 2.8镜像多场景落地:智能硬件厂商嵌入式AI模型蒸馏与部署方案 1. 开篇:为什么选择PyTorch 2.8镜像 对于智能硬件厂商而言,将AI模型部署到嵌入式设备面临三大挑战:模型体积过大、推理速度慢、硬件适配复杂。PyTorch 2.8镜…...

RWKV7-1.5B-g1a开源模型优势:完全离线、无token限制、无商用授权约束

RWKV7-1.5B-g1a开源模型优势:完全离线、无token限制、无商用授权约束 1. 模型概述 rwkv7-1.5B-g1a 是基于新一代 RWKV-7 架构开发的多语言文本生成模型,特别适合中文场景下的轻量级应用。这个1.5B参数的模型在保持高性能的同时,对硬件要求相…...

Dify Rerank算法选型决策树(含LlamaIndex兼容性矩阵、Token消耗成本表与QPS吞吐拐点图)——限内部技术白皮书节选

第一章:Dify Rerank算法选型决策树概览在构建高质量RAG(检索增强生成)系统时,重排序(Rerank)环节直接影响最终答案的相关性与准确性。Dify平台支持多种Rerank模型集成,但不同场景下模型性能、延…...

如何通过5个核心功能将剧本创作效率提升60%

如何通过5个核心功能将剧本创作效率提升60% 【免费下载链接】trelby The free, multiplatform, feature-rich screenwriting program! 项目地址: https://gitcode.com/gh_mirrors/tr/trelby 你是否曾因剧本格式调整耗费大量时间?是否在寻找一款真正懂编剧需求…...

5分钟快速集成Material CalendarView:终极入门指南

5分钟快速集成Material CalendarView:终极入门指南 【免费下载链接】material-calendarview A Material design back port of Androids CalendarView 项目地址: https://gitcode.com/gh_mirrors/ma/material-calendarview Material CalendarView是一个遵循Ma…...

Git版本控制与CYBER-VISION零号协议结合:智能提交信息生成与代码审查

Git版本控制与CYBER-VISION零号协议结合:智能提交信息生成与代码审查 你有没有过这样的经历?项目赶进度,代码写完后,在提交时对着那个空白的提交信息框发呆,不知道该写什么。最后可能就随手敲了个“fix bug”或者“up…...

【云原生监控】PushGateway:打通监控数据“最后一公里”的桥梁

1. 为什么需要PushGateway? 在云原生监控体系中,Prometheus的拉取模式(Pull)是主流设计。但实际生产环境中,我们经常会遇到这些头疼的场景:某台服务器躲在防火墙后面出不来,某个临时任务运行5分…...

nomic-embed-text-v2-moe参数详解:MoE专家数、路由机制、token-level稀疏激活原理

nomic-embed-text-v2-moe参数详解:MoE专家数、路由机制、token-level稀疏激活原理 1. 引言:为什么你需要了解这个嵌入模型? 如果你正在寻找一个既强大又高效的文本嵌入模型,特别是需要处理多语言任务时,nomic-embed-…...

终极Ghostty终端配置指南:5步打造专业级开发环境

终极Ghostty终端配置指南:5步打造专业级开发环境 【免费下载链接】ghostty-config A beautiful config generator for Ghostty terminal. 项目地址: https://gitcode.com/gh_mirrors/gh/ghostty-config Ghostty-config是一款专为Ghostty终端设计的可视化配置…...

开箱即用!ClearerVoice-Studio语音增强实战,让电话录音清晰如面对面

开箱即用!ClearerVoice-Studio语音增强实战,让电话录音清晰如面对面 1. 为什么我们需要专业语音增强工具? 在日常工作中,我们经常遇到这些令人头疼的语音场景: 重要客户电话录音中夹杂着交通噪音和信号干扰远程会议…...

用Arduino Uno给ESP-01烧录AT固件的隐藏技巧(附低成本配件清单)

用Arduino Uno给ESP-01烧录AT固件的隐藏技巧(附低成本配件清单) 当手边没有专用USB-TTL工具时,许多创客会陷入两难:要么等待快递送达,要么放弃项目进度。其实你抽屉里的Arduino Uno开发板就是现成的解决方案——它不仅…...

KLayout Python集成:突破DRC自动化的三大技术瓶颈

KLayout Python集成:突破DRC自动化的三大技术瓶颈 【免费下载链接】klayout KLayout Main Sources 项目地址: https://gitcode.com/gh_mirrors/kl/klayout 问题定位:传统DRC流程的自动化困境 如何解决集成电路设计中DRC检查与现代开发流程脱节的…...

Buildroot系统屏蔽fbcon后如何正确显示内核启动Logo?

Buildroot系统中fbcon与DRM显示框架冲突的深度解析与解决方案 当你在嵌入式系统中使用Buildroot构建内核时,可能会遇到一个棘手的问题:禁用FrameBuffer Console(fbcon)后,内核启动Logo无法正常显示。这背后涉及到Linux显示子系统中多个组件的…...

180+算法编程技巧:从入门到精通的完整指南

180算法编程技巧:从入门到精通的完整指南 【免费下载链接】algorithms_and_data_structures 180 Algorithm & Data Structure Problems using C 项目地址: https://gitcode.com/gh_mirrors/al/algorithms_and_data_structures GitHub 加速计划 / al / al…...

从炸管到稳定调试:一个硬件工程师的十年Jlink隔离器避坑史(附V3.3.0通用版实测)

嵌入式调试隔离技术十年演进:从基础防护到高速兼容的实战之路 当我在2013年第一次目睹价值六位数的劳德巴赫仿真器因高压反冲变成"电子砖块"时,才真正理解调试隔离器在嵌入式开发中的分量。这不是简单的信号中转站,而是横亘在昂贵设…...

Coqui TTS Docker部署实战:从环境配置到生产级优化

最近在做一个智能客服项目,需要集成语音合成能力。调研了一圈,Coqui TTS以其出色的开源模型和灵活性进入了视野。然而,从官方仓库 git clone 下来准备大干一场时,现实给了我一记重拳:复杂的Python依赖、特定版本的CUDA…...

释放创意:用SPIRAN ART SUMMONER的“晶球盘”微调你的专属画风

释放创意:用SPIRAN ART SUMMONER的"晶球盘"微调你的专属画风 1. 认识SPIRAN ART SUMMONER SPIRAN ART SUMMONER是一款融合了顶尖图像生成技术与《最终幻想10》美学风格的视觉创作平台。它基于Flux.1-Dev模型构建,通过独特的"晶球盘&quo…...

告别Qt和MFC:为什么我选择用wxWidgets给C++ GUI项目‘减负’?

为什么wxWidgets成为现代C GUI开发的轻量化首选? 在桌面应用开发领域,Qt和MFC长期占据主导地位,但近年来,越来越多的开发者开始转向wxWidgets——这个诞生于1992年却始终保持活力的框架。当我们需要开发一个跨平台的内部工具时&am…...

终极NPOI扩展开发指南:从零开始自定义Office格式支持

终极NPOI扩展开发指南:从零开始自定义Office格式支持 【免费下载链接】npoi a .NET library that can read/write Office formats without Microsoft Office installed. No COM, no interop. 项目地址: https://gitcode.com/gh_mirrors/np/npoi NPOI是一个强…...