本文是我 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 页面,功能也完全一致。
- 注意使用token pre-filled的链接
- 点击 Connect
- 选择 Tools → List Tools
- 找到并运行
get_current_weather - 输入经纬度,如:
1.9222, 103.081 - 会看到返回的 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" ] }
} }
uv runstarts up uv ( 使用 uv run 启动虚拟环境)–with mcp[cli]adds themcp[cli]dependency to uvmcp 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 会帮你自动识别
推荐这几个资源继续进阶:
| 平台 | 描述 |
|---|---|
| http://modelcontextprotocol.io | 官方教程和工具 |
| GitHub - modelcontextprotocol/servers | 官方插件源码 |
| mcp.so | 社区 MCP 插件市场 |
| awesome-mcp-servers | 超强集合项目 |
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/210012.html