天气数据服务

一个使用MCP协议和OpenWeatherMap API提供实时天气数据的服务器,适用于AI代理交互。

  • by EmanManco
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 EmanManco/mcpPythonWeather

使用说明

Python 简易MCP教程

这个项目展示了一个使用(某技术/工具)构建的简单天气服务器 mcp 库。它提供了一个工具,该工具使用OpenWeatherMap API返回给定位置的实时天气数据。

MCP(模型上下文协议)是一种通用标准,使人工智能代理(大型语言模型)能够访问数据、工具和服务。在此情况下,我们将构建一个“服务器”,用于为大型语言模型获取实时天气数据以供其交互使用。

设置

这个项目使用 uv 用于包管理。如需更多信息,请点击此处 关于如何安装UV的说明。

uv venv

激活虚拟环境:

source .venv/bin/activate

安装依赖项。

uv sync

API密钥设置

这个项目使用OpenWeatherMap API来获取实时天气数据。您需要:

  1. 在(某网站/平台)注册一个免费账户 OpenWeatherMap(开放天气图)
  2. 从仪表板获取您的API密钥
  3. 设置环境变量:
export OPENWEATHER_API_KEY=your_api_key_here

如何跑步

要测试MCP服务器的天气功能,请执行以下命令:

mcp dev src/mcp_weather.py

然后等待一会儿以加载内容,并点击链接“使用预填充令牌打开检查器”。这将提供一个用户界面,您可以在浏览器中直接使用它来测试MCP服务器。

深入探究

我们的AI代理是如何知道如何使用这个MCP工具的呢?简而言之,它会被序列化成一个JSON模式。

FastMCP 自动将 `get_weather` 函数注册为工具,从函数签名和文档字符串中提取模式。

{
  "name": "get_weather",
  "description": "Get current weather for a location",
  "inputSchema": {
    "type": "object",
    "properties": {
      "location": { "type": "string" }
    },
    "required": ["location"]
  }
}

然后,我们使用的AI代理(例如Claude Desktop、Cursor或我们自己的实现)将了解这些工具,并知道如何通过提示工程来调用它们。它将被转换成一个类似的提示,如下所示:

You have access to these tools:
- get_weather: Get current weather for a location

To use: <tool_call>{"name": "get_weather", "parameters": {"location": "Tokyo"}}</tool_call>

MCP客户端:与MCP服务器交互

如果你想让你的人工智能代理与MCP服务器进行交互,你需要一个MCP客户端。一些用户界面工具(如Claude Desktop和Cursor)已经为你内置了这一功能。但你也可以通过编写代码来实现这一点。

通常,这归结于在配置文件中声明你的MCP服务器,并提供访问它的指令。在……的情况下 Claude Desktop(可译为“Claude桌面版”),它看起来大概是这样的:

{
  "mcpServers": {
    "weather": {
      "command": "uv",
      "args": ["run", "[...]", "/[PATH_TO_PROJECT]/src/mcp_weather.py"],
      "env": {
        "OPENWEATHER_API_KEY": "your_api_key_here"
      }
    }
  }
}

(此示例已简化——有关更多详细信息,请参阅https://modelcontextprotocol.io/quickstart/user)

并且这将存在于(或“这将被安置在”) claude_desktop_config.json 文件,您可以通过开发者设置访问该文件。但您也可以走捷径,直接运行此命令来安装它(该命令将为您在配置文件中创建相应的条目):

mcp install server.py

您需要重启Claude桌面版,才能在“搜索和工具”部分看到该工具。

关于在代码中实现MCP客户端的选项:

  • https://modelcontextprotocol.io/快速入门/客户端
  • https://github.com/mcp-use/mcp-use 翻译为中文可以是:“https://github.com/mcp-use/mcp-use(GitHub仓库地址,用于存储或分享mcp-use项目)”。不过,通常在中文语境下,我们不会直接翻译网址,而是直接说明其含义或用途,比如“这是一个GitHub上的仓库链接,用于托管mcp-use项目”。如果仅从网址本身翻译,上述翻译已经足够

使用第三方MCP服务器(以Google Sheets为例)

如果你的目标是构建强大且有用的AI代理,那么你可能更倾向于使用现有的MCP服务器,而不是自己创建。这里有一个由官方和第三方开发者提供的大量可用服务器列表:https://github.com/modelcontextprotocol/servers

在Claude Desktop中使用它也非常简单。以这个例子来说,让我们尝试集成Google Sheets的访问功能(不仅仅是读取,还包括创建和修改)。

  • 请遵循 https://github.com/xing5/mcp-google-sheets 上的说明。
  • 设置Google访问权限:
    • 创建一个Google Cloud账户和项目。
    • 创建一个服务角色,并将JSON保存到磁盘上的某个位置。
    • 在Google云端硬盘中创建一个文件夹,并将其权限共享给服务账户的电子邮件。
    • 在GCP项目中启用Drive和Sheets API。

然后在Claude桌面端设置MCP服务器(替换环境变量):

{
  "google-sheets": {
    "command": "uvx",
    "args": ["mcp-google-sheets@latest"],
    "env": {
      "SERVICE_ACCOUNT_PATH": "[...]/keys/service-account-xxx.json",
      "DRIVE_FOLDER_ID": "XXX"
    }
  }
}

这将使Google Sheets成为一个可用的工具 uvx 该命令还允许您在无需克隆GitHub项目或安装任何依赖项/环境的情况下运行它。

设置 uv 和 uvx 命令

在MacOS/Linux系统上,Claude桌面版可能会抱怨找不到 uv 或者 uvx 当你尝试启动服务器时,可能只需要创建一个指向该二进制文件的符号链接。

sudo ln -s ~/.local/bin/uv /usr/local/bin/uv
sudo ln -s ~/.local/bin/uvx /usr/local/bin/uvx