第4篇:教你用 Python 写一个 Claude 插件:MCP Server + 天气 API 实战教程(附完整代码)

第4篇:教你用 Python 写一个 Claude 插件:MCP Server + 天气 API 实战教程(附完整代码)本文是我 MCP 系列的第 4 篇文章 如果你对 Claude 模型的 USB 接口 MCP Server 的底层原理感兴趣 强烈推荐先阅读前三篇内容 打好基础之后再来动手实践效果更佳 第 1 篇 用 Claude Desktop 玩转 MCP Server 打造你的 AI 超能力引擎 第 2 篇 MCP 是 AI 世界的 USB C Claude 背后的超级协议你了解了吗 第 3 篇 MCP

大家好,我是讯享网,很高兴认识大家。



本文是我 MCP 系列的第 4 篇文章。如果你对 Claude 模型的USB接口(MCP Server)的底层原理感兴趣,强烈推荐先阅读前三篇内容,打好基础之后再来动手实践效果更佳 ✅

第1篇:用 Claude Desktop 玩转 MCP Server!打造你的 AI 超能力引擎

第2篇:MCP 是 AI 世界的 USB-C?Claude 背后的超级协议你了解了吗?

第3篇:MCP Server 合集大全|Claude 模型的“USB-C 接口”能做什么?我来给你总…


讯享网

Claude 是一个语言模型,默认只能“说话”。但通过 MCP Server,我们可以让它:

  • 访问 API 数据
  • 读取本地文件
  • 发送 Slack 消息
  • 查日历、看天气、连数据库……

MCP Server 有三种能力:

能力类型 谁控制 用法
Tool 模型调用 执行动作(如查天气)
Resource 客户端请求 暴露被动数据(如一本书)
Prompt 用户触发 自定义对话流程(如一键问候)

今天我们将从 0 开始,用 Python 编写一个 MCP Server 插件,调用 Open-Meteo 免费天气 API,让 Claude 能主动查询任意地点的实时天气和未来预报数据。

你将学习:

  • 如何初始化并运行一个本地 MCP Server
  • 如何封装 API 请求为 Claude 可调用的 Tool
  • 如何通过 MCP Inspector 测试工具联调
  • 如何扩展多个 Tool 以增强插件功能

下面,我们一步步来做!

Open-Meteo 是一个免费开放的天气 API,无需注册、不限速、无 Key,参数灵活。

我们要用它的 /forecast 接口获取以下数据:

  • 当前气温
  • 云量
  • 风速风向
  • 相对湿度
  • 体感温度
  • 降水、降雪
  • 日夜状态等

你需要准备:

  • Claude Desktop(支持 MCP)
  • Python 环境(推荐 3.10+)
  • 终端 + 编辑器(如 VS Code)
  • uv:Rust 写的新版 Python 包管理器
    • macOS 安装:brew install uv
    • Windows 安装:winget install –id=astral-sh.uv -e
bash CopyEdit mkdir mcp-server-weather cd mcp-server-weather uv init uv venv source .venv/bin/activate # 激活虚拟环境 

讯享网

在 Windows PowerShell 中激活虚拟环境的方法如下:

. .venv\Scripts\Activate.ps1

虚拟环境可以是一个 “项目级的 Python 环境”,让你放心安装自己想要的包,不怕影响其他项目。

讯享网bash CopyEdit uv add “mcp[cli]” httpx 

这是 MCP Server 的推荐命名。

python CopyEdit

server.py

from typing import Any import httpx from mcp.server.fastmcp import FastMCP

初始化 MCP 服务

mcp = FastMCP(“weather”)

API 常量

OPENMETEO_API_BASE = “https://api.open-meteo.com/v1" USER_AGENT = ”weather-app/1.0“

调用天气 API 的封装方法

async def make_openmeteo_request(url: str) -> dict[str, Any] | None:

讯享网headers = { "User-Agent": USER_AGENT, "Accept": "application/json" } async with httpx.AsyncClient() as client: try: response = await client.get(url, headers=headers, timeout=30.0) response.raise_for_status() return response.json() except Exception: return None 

MCP 工具:获取当前天气

@mcp.tool() async def get_current_weather(latitude: float, longitude: float) -> str:

""" 获取指定位置的当前天气 参数: - latitude:纬度 - longitude:经度 """ url = f"{OPENMETEO_API_BASE}/forecast?latitude={latitude}&longitude={longitude}&current=temperature_2m,is_day,showers,cloud_cover,wind_speed_10m,wind_direction_10m,pressure_msl,snowfall,precipitation,relative_humidity_2m,apparent_temperature,rain,weather_code,surface_pressure,wind_gusts_10m" data = await make_openmeteo_request(url) if not data: return "无法获取天气数据。" return data # 返回原始数据给 LLM,让它自己理解 

启动服务

if name == ”main“:

讯享网mcp.run(transport='stdio') 

bash CopyEdit mcp dev server.py 

在开发自己的 MCP Server 时,你需要一个调试工具,来确认 Server 的功能是否如你所预期。这就是 MCP Inspector 的用武之地。

它可以帮你:

  • 列出所有注册的工具(Tools)
  • 手动运行这些工具进行测试
  • 查看请求与响应数据
  • 模拟 MCP 客户端调用行为

这是你在开发阶段最常用的方式。

使用步骤如下:

  • 激活虚拟环境:
讯享网bash CopyEdit source .venv/bin/activate 
  • 启动 MCP 开发服务:
bash CopyEdit mcp dev server.py 

优点:

  • 直接在你本地环境里运行
  • 所有模块、依赖都与你当前项目一致
  • 调试速度快,适合高频测试

⚠️ 注意:
如果你没有激活虚拟环境,会报错:

讯享网bash CopyEdit command not found: mcp 

因为 MCP CLI 安装在你项目的虚拟环境里,脱离它就无法调用。


这个方式更贴近“真实部署”后的运行环境,尤其适合:

  • 测试打包部署后的 MCP Server
  • 确认服务是否能在远程环境正确运行

命令如下:

bash CopyEdit npx @modelcontextprotocol/inspector uv run server.py 
uv run 会自动启用虚拟环境并运行 server.py,非常适合跨平台操作。

效果一样!你会在浏览器看到和 mcp dev 一样的 Inspector 页面,功能也完全一致。

  1. 注意使用token pre-filled的链接
  2. 点击 Connect
  3. 选择 Tools → List Tools
  4. 找到并运行 get_current_weather
  5. 输入经纬度,如:1.9222, 103.081
  6. 会看到返回的 JSON 天气数据!

参考第一篇文章,编辑 claude_desktop_config.json 文件,添加:

第1篇:用 Claude Desktop 玩转 MCP Server!打造你的 AI 超能力引擎

讯享网json CopyEdit { ”mcpServers“: {

"weather": { "command": "/Users/your-username/.local/bin/uv", "args": [ "run", "--with", "mcp[cli]", "mcp", "run", "/Users/your-username/path/to/mcp-server-weather/server.py" ] } 

} }

  1. uv run starts up uv ( 使用 uv run 启动虚拟环境)
  2. –with mcp[cli] adds the mcp[cli] dependency to uv
  3. mcp run <path-to-file> uses the mcp cli to run the specified file

注意:如果报错显示无法找到uv的正确路径,那么我们可以尝试打开 PowerShell,运行:

讯享网powershell CopyEdit Get-ChildItem -Recurse -Filter uv.exe -Path ”$env:LOCALAPPDATA“ -ErrorAction SilentlyContinue

当你在 Claude 中对话时,比如输入:

“请告诉我上海现在的天气,顺便推荐一下穿什么。”

Claude 会自动调用你刚才定义的 get_current_weather 工具,实时获取 API 数据,然后用自然语言进行回答。

你可以在此基础上继续添加更多工具:

支持传入预测范围(如 3 小时、1 天等)

让 Claude 可以通过“城市名”自动转换为经纬度,更智能!

  • MCP 工具的注释非常重要,它就是提示词,LLM 会根据它决定是否调用
  • 返回原始 JSON 比格式化更好,模型会自己处理、总结
  • 不用担心界面复杂,Claude Desktop 会帮你自动识别

推荐这几个资源继续进阶:

平台 描述
modelcontextprotocol.io 官方教程和工具
GitHub - modelcontextprotocol/servers 官方插件源码
mcp.so 社区 MCP 插件市场
awesome-mcp-servers 超强集合项目

小讯
上一篇 2026-03-09 20:28
下一篇 2026-03-09 20:30

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/210012.html