30分钟开发你的第一个 MCP Server:让 Claude 实时查询天气
从零到一,手把手带你打造一个真实可用的 MCP Server
🎯 想象这样一个场景
你在终端中启动 Claude Code,输入:“北京今天天气怎么样?” Claude 立刻回复你:“北京今天多云,气温 15-25℃,空气质量良好,适合外出。” 等等! Claude 不是只能回答它训练数据中的内容吗?它怎么知道今天的天气? 答案就是:MCP Server(Model Context Protocol Server)。 这篇文章会手把手教你,在 30 分钟内开发一个真实可用的天气查询 MCP Server,让 Claude 拥有获取实时信息的能力。 本文承诺:- ✅ 零基础也能看懂
- ✅ 所有代码都有详细注释
- ✅ 配图说明每个关键概念
- ✅ 最终能在 Claude Code 中实际使用
📚 什么是 MCP?(3分钟科普)
MCP 的全称
MCP = Model Context Protocol(模型上下文协议) 这是 Anthropic(Claude 的开发公司)推出的一个标准协议,用于让 AI 模型(如 Claude)与外部工具和数据源进行交互。为什么需要 MCP?
Claude 本身是一个语言模型,它的能力来自于训练数据。但它有几个天然的局限:- 知识截止日期:训练数据只到某个时间点,无法知道”今天”的信息
- 无法执行操作:不能帮你发邮件、操作数据库、调用 API
- 无法访问私有数据:不知道你公司的内部文档、客户数据
MCP 架构一览
MCP 的核心是三层架构:- Claude Code(客户端):命令行界面,你与 Claude 对话的工具
- MCP Server(中间层):你开发的程序,负责连接 Claude 和外部服务
- 外部 API/数据源:真正提供实时数据的地方(如天气 API、数据库等)
- 用户问问题 → Claude 识别需要调用工具 → 调用 MCP Server → MCP Server 调用外部 API → 数据返回 → Claude 整理后展示给用户
MCP 的核心概念
MCP 主要包含三个核心概念:- Server:你的 MCP 程序,运行在本地
- Tool:Server 提供的具体功能(如
query_weather) - Client:调用 Server 的应用(如 Claude Code CLI)
🎨 我们要做什么?
项目目标
开发一个天气查询 MCP Server,实现以下功能:- 📍 输入任意中国城市名称
- 🌤️ 返回该城市的实时天气信息
- 💬 在 Claude Code CLI 中无缝使用
技术选型
- 编程语言:Python 3.13+
- MCP 框架:FastMCP(Anthropic 官方推荐)
- HTTP 库:httpx(异步 HTTP 客户端)
- 外部 API:高德地图天气 API(免费,国内速度快)
- 包管理器:uv(比 pip 快 10-100 倍)
完整流程
如上图所示,从用户提问到返回结果,经历了 6 个步骤:
- 用户提问:“北京天气怎么样?”
- Claude 理解:识别需要调用天气查询工具
- 调用 MCP Server:执行
query_weather("北京") - 请求高德 API:先获取地理编码,再获取天气数据
- 数据返回:天气信息返回给 MCP Server
- 展示结果:Claude 整理数据并展示给用户
🛠️ 准备工作(10分钟)
1. 安装 Python 3.13+
检查你的 Python 版本:2. 安装 uv 包管理器
uv 是一个超快的 Python 包管理器,比 pip 快 10-100 倍。3. 注册高德地图 API Key
- 访问 高德开放平台
- 注册账号并登录
- 进入控制台 → 应用管理 → 创建新应用
- 添加 Key,选择 Web服务
- 复制生成的 Key(后面会用到)
4. 安装 Claude Code
Claude Code 是 Anthropic 官方的 CLI 工具,安装方法:当然也可以使用中转,这里有一个中转站收集的站点:https://awesome-cc.com/ 里面有各种中转站,可以自行选择。 或者选择国产的模型:
GLM-4.6或者 MiniMax-M2不仅便宜而且在代码上也是非常好用的
- GLM Code Plan:https://www.bigmodel.cn/claude-code?ic=2MS3XWKPCF
- MiniMax-M2 Code Plan:https://platform.minimaxi.com/subscribe/coding-plan
💻 核心开发步骤
第一步:创建项目骨架
打开终端,创建项目:第二步:配置环境变量(安全第一!)
为什么要使用环境变量?
如上图所示,硬编码 API Key 会导致:
- ❌ API Key 被提交到 Git 仓库
- ❌ 如果推送到 GitHub,Key 会公开暴露
- ❌ 任何人都能看到并滥用你的 Key
- ✅ Key 保存在本地
.env文件 - ✅
.env文件被 Git 忽略,不会上传 - ✅ 即使代码公开,Key 也是安全的
- 创建
.env.example文件(上传到 Git,作为模板):
- 创建
.env文件(不上传 Git,包含真实 Key):
- 在
.gitignore中添加:
第三步:编写核心代码
创建main.py 文件,写入以下代码:
load_dotenv():加载.env文件中的环境变量FastMCP("weather-mcp-server"):创建 MCP Server 实例@app.tool(...):装饰器,将函数注册为 MCP 工具async def query_weather(...):异步函数,调用外部 APIapp.run(transport="stdio"):以标准输入输出模式运行(Claude Code CLI 通过 stdio 与 MCP Server 通信)
- 地理编码:
address(如”北京”) →adcode(城市代码) - 天气查询:
adcode→ 天气数据
第四步:本地测试
在开发过程中,我们需要测试 MCP Server 是否正常工作。 使用mcp dev 命令:
- 查看 MCP Server 提供的工具
- 测试
query_weather功能 - 查看返回的数据
- 输入:
{"address": "北京"} - 预期输出:包含北京天气信息的 JSON 数据
第五步:集成到 Claude Code
测试通过后,我们需要将 MCP Server 集成到 Claude Code。 配置文件位置:- macOS/Linux:
~/.claude.json - Windows:
%USERPROFILE%\.claude.json(或C:\Users\你的用户名\.claude.json)
- 将
/你的项目路径/weather-mcp-server替换为你实际的项目路径 - macOS 示例:
/Users/yourname/projects/weather-mcp-server - Windows 示例:
C:\\Users\\yourname\\projects\\weather-mcp-server
http://0.0.0.0:8080/sse的链接
有的时候根据你对应的代码,可能还会在 sse后面添加一些参数
第六步:实际使用
启动 Claude Code 并测试:🚀 进阶优化
如果你想让 MCP Server 更强大,可以尝试以下优化:1. 格式化天气数据
目前返回的是原始 JSON,可以解析后返回更友好的格式:2. 添加错误处理
3. 添加日志记录
4. 支持多城市批量查询
🙋 常见问题 FAQ
Q1: MCP Server 启动失败怎么办?
检查清单:- ✅ Python 版本是否 >= 3.13
- ✅ 依赖是否正确安装(
uv sync) - ✅
.env文件是否存在且配置正确 - ✅ 配置文件路径是否正确
Q2: Claude Code 找不到工具?
可能原因:.claude.json配置文件格式错误- 配置文件路径不正确
- MCP Server 启动失败
- 检查
.claude.json配置文件格式是否正确 - 确认项目路径是绝对路径
- 尝试直接运行 MCP Server 查看错误信息:
uv run python main.py - 检查 Claude Code 的输出日志
Q3: API Key 无效?
检查步骤:- 确认 Key 已在高德平台生成
- 确认 Key 类型是 Web服务
- 确认
.env文件中 Key 正确无误 - 尝试直接访问 API 测试
Q4: 返回数据格式不对?
高德 API 注意事项:status字段是字符串"1"而非数字1- 需要先调用地理编码 API 获取
adcode - 天气数据在
lives数组中
Q5: 能查询国外城市吗?
高德地图 API 主要支持中国城市。如需查询国外城市,可以:- 使用 OpenWeatherMap API
- 使用 WeatherAPI
- 使用 AccuWeather API
📝 总结
恭喜你完成了第一个 MCP Server 的开发!让我们回顾一下学到的内容:核心知识点
- MCP 架构:Client ↔ Server ↔ External API
- 环境变量管理:保护敏感信息的正确姿势
- FastMCP 框架:快速搭建 MCP Server
- 异步编程:使用
async/await调用外部 API - Claude Code CLI 集成:通过
.claude.json配置 MCP Server
MCP 的更多可能性
MCP Server 不仅可以查询天气,还可以实现:- 📧 发送邮件:集成 SMTP 服务
- 📊 数据库查询:连接 MySQL、PostgreSQL
- 📁 文件操作:读写本地文件
- 🌐 网页抓取:获取网页内容
- 🤖 自动化任务:执行系统命令
- 🔐 私有数据访问:查询公司内部系统
下一步行动
- 优化代码:添加更多错误处理和日志
- 扩展功能:支持更多天气查询参数
- 开发新 Server:尝试其他类型的 MCP Server
- 分享经验:写博客、发 GitHub 让更多人学习
📚 参考资源

