你有没有想过AI系统是如何实时获取数据并执行动态任务而无需人工干预的?想象一下一个可以提供即时天气更新、预测未来的天气,或只需轻轻一点就能查询过去的天气数据的AI。这听起来像是未来的科技。现在,这一切已经通过MCP(模型上下文协议)成为可能,这是一个强大而灵活的框架,能够无缝地连接AI模型到外部API和数据源。
在这份教程中,我们将一步步指导你建立一个简单的MCP服务器,该服务器能够抓取实时天气数据,并提供最新的预报,让你能够探索历史天气模式。通过这份指南,你将了解如何设置自己的MCP服务器,并通过集成实时数据来增强AI系统的功能。
模型上下文协议(Model Context Protocol,MCP)就像是AI的USB接口。它使语言模型能够轻松连接到现实世界的工具和API。不论是获取天气数据、提取财务记录,还是管理任务自动化,MCP规范了LLM与这些工具之间的交互方式。
让我们来建一个简单的MCP服务器在这节课或这个教程中,我们将做什么。
- 使用 MCP 设置一个 Python 环境
- 连接到天气 API
- 提供有用的工具,例如当前天气、预报和历史数据
- 使用 MCP Inspector 测试并检查服务器
这会帮助希望使用现代AI整合进行实际操作以构建代理型工具的新手,或希望了解如何将外部数据整合进AI项目中的人。
一. 先来设置一下环境吧.首先,你需要为你的MCP服务器创建一个项目文件夹。在这个文件夹里,创建一个名为“weather_server.py
”的Python文件。这个文件将存放我们的MCP服务器代码。
运行以下命令:
mkdir weather_mcp
cd weather_mcp
touch weather_server.py
2. 编写MCP服务器端代码
现在,我们来建立一个天气MCP服务器。这个服务器会提供获取当前天气、天气预报以及历史天气数据的工具。
from mcp.server.fastmcp import FastMCP
import requests
import json
# OpenWeatherMap API 密钥(请用自己的密钥替换)
API_KEY = "your_openweathermap_api_key"
BASE_URL = "http://api.openweathermap.org/data/2.5"
# 创建一个带有自定义名称的 MCP 服务器
mcp = FastMCP("Weather Data Server")
# 获取给定城市的当前天气的函数
@mcp.tool()
def get_current_weather(city: str) -> str:
"""
获取给定城市的当前天气。
"""
try:
url = f"{BASE_URL}/weather?q={city}&appid={API_KEY}&units=metric"
response = requests.get(url)
data = response.json()
if data.get("cod") != 200:
return f"错误: {data.get('message')},请检查您的输入或API密钥是否正确"
main_data = data["main"]
weather = data["weather"][0]["description"]
temperature = main_data["temp"]
humidity = main_data["humidity"]
return f"{city} 当前温度为 {temperature}°C,湿度为 {humidity}%。"
except Exception as e:
return f"获取天气数据时出错: {str(e)}"
# 获取给定城市的未来5天的天气预报的函数
@mcp.tool()
def get_weather_forecast(city: str) -> str:
"""
获取给定城市的未来5天的天气预报。
"""
try:
url = f"{BASE_URL}/forecast?q={city}&appid={API_KEY}&units=metric"
response = requests.get(url)
data = response.json()
if data.get("cod") != 200:
return f"错误: {data.get('message')},请检查您的输入或API密钥是否正确"
forecast = ""
for entry in data["list"]:
time = entry["dt_txt"]
weather = entry["weather"][0]["description"]
temperature = entry["main"]["temp"]
forecast += f"{time} 天气预报为 {weather},温度为 {temperature}°C。"
return forecast
except Exception as e:
return f"获取预报数据时出错: {str(e)}"
# 获取给定城市的最近5天的天气历史数据的函数
@mcp.tool()
def get_historical_weather(city: str) -> str:
"""
获取给定城市的最近5天的天气历史数据。
"""
try:
url = f"{BASE_URL}/weather?q={city}&appid={API_KEY}&units=metric"
response = requests.get(url)
data = response.json()
if data.get("cod") != 200:
return f"错误: {data.get('message')},请检查您的输入或API密钥是否正确"
historical_data = data["current"]
temperature = historical_data["temp"]
weather = historical_data["weather"][0]["description"]
return f"历史天气数据:{weather},温度为 {temperature}°C。"
except Exception as e:
return f"获取历史数据时出错: {str(e)},请确保输入的城市经纬度和时间戳正确"
# 启动 MCP 服务器并运行
if __name__ == "__main__":
mcp.run()
3. 把工具当资源来展示
在上面的例子中,我们已经列出了三个主要的工具:
get_current_weather
: 获取指定城市的当前天气。get_weather_forecast
: 获取指定城市的5天天气预报。get_historical_weather
: 获取指定城市的天气历史数据,包括温度和天气情况。
代码配置完成后,可以运行MCP服务器,可以按照以下步骤操作:打开终端,进入你的项目文件夹并输入命令:然后运行:
在终端中输入以下命令:```
$ mcp dev weather_server.py
天气服务器的Python脚本
这将启动服务器并使其通过MCP接口可用。该命令将生成一个URL,以便用该MCP Inspector测试您的MCP服务器。
# 5. 检查MCP服务器情况
使用MCP Inspector提供的URL来打开网页控制台。你会看到一个选项,可以与你在服务器中定义的工具进行交互。例如,你在输入一个城市名后,可以观察`get_current_weather`工具的输出结果。
#6 测试MCP服务器
我们来用一些示例指令测试服务器。
1. **查一下现在的天气怎么样?**
“你能告诉我纽约现在的天气怎么样吗?”
**2\. 查询未来5天的天气预报**
未来5天巴黎的天气预报怎么样?
**3\. 查询历史天气数据。**
“你能给我东京过去几年的天气情况吗?”
这些指令会触发相应的MCP工具并直接输出结果。
# 7\. 与Claude Desktop集成:
一旦你满意了服务器,你就可以通过运行命令将其与Claude Desktop(或其他界面)集成。
$ mcp 安装:weather_server.py --name "天气数据服务端"
重启并打开 Claude Desktop 后,新的天气相关工具就可以用了。
# MCP服务器的工作方式是这样的
+--------------------+ +-------------------------+
| Claude Desktop | <-----> | MCP 天气服务 |
| (LLM 接口) | | (工具:天气、预报) |
+--------------------+ +-------------------------+
|
v
+----------------------+
| Open-Meteo API |
+----------------------+
这个过程展示了Claude怎样调用你的服务器上的工具从天气API获取实时信息。
模型上下文协议(MCP)使连接AI系统与外部数据源变得简单。你可以引入实时天气更新、财务数据或任何公共API,创建更智能且响应更快的应用程序。这个实际操作项目展示了如何使用MCP来搭建一个基本的天气服务器,该服务器可以轻松扩展,例如用于天气警报或定制的预测工具。
随着大型语言模型领域的增长,像MCP这样的框架将成为构建依赖实时信息的AI系统中不可或缺的工具。如果你想了解更多关于LLM和工具集成的真实世界项目,像[ProjectPro](https://www.projectpro.io/)这样的平台可以帮助你以引导和实用的方式练习和应用这些AI技能。
共同學習,寫下你的評論
評論加載中...
作者其他優(yōu)質文章