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

用python实现一个查询当天天气的MCP服务器

我们通过MCP通过模型去调用外部工具,那么外部工具如何设计,让MCP能够调用到呢

本文介绍了一个基于Python的MCP服务器实现,用于查询深圳当天天气。该服务器通过HTTP接口提供天气数据查询服务,主要特点包括:1) 使用Python标准库http.server实现;2) 集成OpenWeatherMap天气API;3) 返回JSON格式的天气数据,包含温度、湿度、风速等关键信息。实现步骤包括:配置API密钥、构建请求URL、处理API响应等。服务器运行后可通过/weather/shenzhen路径获取深圳天气数据,为MCP模型提供标准化的外部工具调用接口。

用python实现一个查询深圳当天天气的MCP服务器

import http.server import socketserver import json import urllib.request import urllib.parse # 天气API配置 API_KEY = "YOUR_API_KEY" # 请替换为实际的API密钥 WEATHER_API_URL = "http://api.openweathermap.org/data/2.5/weather" class WeatherHandler(http.server.BaseHTTPRequestHandler): def do_GET(self): # 解析请求路径 if self.path == "/weather/shenzhen": try: # 构建API请求URL params = { "q": "Shenzhen,CN", "appid": API_KEY, "units": "metric", # 使用摄氏度 "lang": "zh_cn" # 使用中文 } url = WEATHER_API_URL + "?" + urllib.parse.urlencode(params) # 发送API请求 with urllib.request.urlopen(url) as response: data = json.loads(response.read().decode()) # 处理天气数据 weather_info = { "city": data.get("name"), "temperature": data.get("main", {}).get("temp"), "humidity": data.get("main", {}).get("humidity"), "weather": data.get("weather", [{}])[0].get("description"), "wind_speed": data.get("wind", {}).get("speed"), "pressure": data.get("main", {}).get("pressure"), "timestamp": data.get("dt") } # 发送响应 self.send_response(200) self.send_header("Content-type", "application/json") self.end_headers() self.wfile.write(json.dumps(weather_info, ensure_ascii=False).encode("utf-8")) except Exception as e: # 处理错误 self.send_response(500) self.send_header("Content-type", "application/json") self.end_headers() error_info = {"error": str(e)} self.wfile.write(json.dumps(error_info).encode("utf-8")) else: # 处理其他路径 self.send_response(404) self.send_header("Content-type", "application/json") self.end_headers() error_info = {"error": "Not Found"} self.wfile.write(json.dumps(error_info).encode("utf-8")) def run_server(port=8000): """运行天气查询服务器""" handler = WeatherHandler with socketserver.TCPServer(("", port), handler) as httpd: print(f"天气查询服务器运行在 http://localhost:{port}") print(f"查询深圳天气: http://localhost:{port}/weather/shenzhen") httpd.serve_forever() if __name__ == "__main__": # 运行服务器,默认端口8000 run_server()

服务器功能

  • 基于Python标准库实现的HTTP服务器
  • 使用OpenWeatherMap API获取深圳天气数据
  • 提供RESTful API接口
  • 返回JSON格式的天气信息

使用步骤

  1. 获取API密钥

    • 访问 OpenWeatherMap官网 注册账号
    • 获取免费的API密钥
    • 将代码中的API_KEY = "YOUR_API_KEY"替换为实际的API密钥
http://www.jsqmd.com/news/529828/

相关文章:

  • 3大核心优势:为什么Snipe-IT能彻底改变你的IT资产管理混乱局面
  • 若依微服务框架中PDF文件上传与预览的实战配置与避坑指南
  • 【原创】ERTEC 系列 PROFINET 芯片级硬件过滤器分析
  • 数据可视化神器:Tableau在大数据分析中的应用全解
  • FireRedASR-AED-L模型开发环境配置终极指南:从Anaconda到PyCharm
  • GitHub 中文界面解决方案:让代码协作更高效
  • 深度学习中的多尺度与多粒度:别再傻傻分不清了!
  • 3DS文件传输革新:多设备无线管理的终极解决方案
  • ExtractorSharp:一站式游戏资源编辑工具,高效解锁游戏开发新境界
  • 家庭NAS玩家必备:用iperf精准诊断WiFi6路由器的真实传输性能(附安卓/PC端配置指南)
  • 用过才敢说!盘点2026年标杆级的AI论文写作软件
  • Ubuntu 22.04下Intel MKL FFTW接口配置全攻略(附避坑指南)
  • 基于深度学习的毕业设计:从选题到部署的完整技术路径解析
  • 测试四象限:构造支持团队的有效测试策略
  • 下载链接
  • Windows下用Rclone挂载阿里云OSS到本地盘符的完整指南(含自动挂载脚本)
  • 卷包设备工控机断电软关机时序控制系统设计
  • Modelsim10.5_se在Win11系统下的安装与破解全流程指南
  • OFA图像描述模型Mathtype公式识别探索:从截图到LaTeX代码的桥梁
  • Yuzu模拟器性能调优:从新手到高手的进阶之路
  • 如何快速检测存储设备真实容量:F3工具的完整使用指南
  • 图图的嗨丝造相-Z-Image-Turbo实战教程:结合IP-Adapter实现指定人物形象+渔网袜风格融合
  • 游戏自动化效率提升:ok-ww图像识别技术如何重构玩家体验
  • 别再复制粘贴了!用Python GMSSL v3.2.1实现SM4加密,这3个坑我帮你踩过了
  • STM32项目文档自动化分析:CasRel抽取硬件模块关联
  • WorkBuddy实测:小白也可以养虾啦!(附实操案例)
  • C99 vs C11 vs C23:手把手教你升级代码到最新标准
  • Alibaba DASD-4B Thinking 对话工具入门:Anaconda虚拟环境管理与依赖隔离
  • SpringBoot整合Lock4j:基于Redisson的分布式锁实战与深度定制
  • 卫星遥感海岸线分析:从太空视角重新定义海岸监测的三大技术突破