一、编写mcp工具并提供出来

1.1 第一步:获取高德地图 API 密钥 (Key)

  1. 访问高德开放平台官网,注册一个开发者账号。
  2. 进入控制台,点击“应用管理” -> “我的应用” -> “创建新应用”。
  3. 创建好应用后,点击“添加 Key”,服务平台选择 Web服务。
  4. 复制生成的那串 Key(一串字母和数字的组合),待会儿代码里要用。

1.2 第二步:编写天气 MCP 服务端代码

在你的电脑上创建一个文件夹(比如叫 weather-mcp),在里面新建一个 weather.py 文件,把下面的代码复制进去,记得把 你的_高德_API_KEY 替换成你刚才申请的真实 Key:

import os
import httpx
from mcp.server.fastmcp import FastMCP

# 替换为你自己的高德地图 API Key
AMAP_KEY = "你的_高德_API_KEY"
mcp = FastMCP("AmapWeather")

@mcp.tool()
async def get_weather(city: str) -> str:
    """
    查询指定城市的实时天气情况
    Args:
        city: 城市名称(例如:宁波、北京)或城市编码(adcode)
    """
    # 高德天气API接口
    url = "https://restapi.amap.com/v3/weather/weatherInfo"
    params = {
        "key": AMAP_KEY,
        "city": city,
        "extensions": "base"  # base返回实况天气,all返回预报天气
    }
    
    async with httpx.AsyncClient() as client:
        resp = await client.get(url, params=params)
        data = resp.json()
        
        if data.get("status") == "1" and data.get("lives"):
            live = data["lives"][0]
            return (
                f"📍 城市:{live['province']}{live['city']}\n"
                f"🌤️ 天气:{live['weather']}\n"
                f"🌡️ 温度:{live['temperature']}°C\n"
                f"💨 风向:{live['winddirection']}{live['windpower']}级\n"
                f"💧 湿度:{live['humidity']}%\n"
                f"🕒 发布时间:{live['reporttime']}"
            )
        else:
            return f"❌ 查询失败:{data.get('info', '未知错误,请检查城市名或API Key')}"

if __name__ == "__main__":
    mcp.run()

注:运行前请确保你安装了必要的依赖库,可以在终端执行:pip install mcp httpx

1.3 第三步:将天气服务接入 Claude Code

代码写好后,打开你的 Claude Code 终端,直接对它说下面这句话(把路径换成你 weather.py 所在的真实绝对路径):

“帮我添加一个本地 MCP 服务器,名字叫 weather,执行命令是 python 你的文件夹绝对路径/weather.py。”

Claude Code 会自动帮你修改配置文件。配置完成后,重启一下 Claude Code 或者重新开启一个对话,就可以开始验收成果了!

你可以直接问它:

  • “宁波现在的天气怎么样?”
  • “北京今天冷不冷?”

二、执行步骤

  1. 启动vscode,mcp程序;

  2. 在weather_gd路径创建.mcp.json文件,并设置mcpServiers:在这里插入图片描述

  3. 你的claude目录,新增.mcp.json文件(这一步我不知道是不是必须的,等我下次验证后,再来改):在这里插入图片描述

  4. 重启claude,并询问当前mcp工具:在这里插入图片描述

  5. 在claude code里问:在这里插入图片描述

我的疑问,为啥我vscode控制台没有打印日志:
在这里插入图片描述

三、问题与解决

3.1 python环境问题

基于mac环境,升级python环境问题解决

3.2 安装pip3 install httpx "fastmcp[all]" 出错问题解决

执行下面命令:

pip3 install httpx "fastmcp[all]"

在这里插入图片描述
在这里插入图片描述

3.2.1 报错原因:

这个报错是 Python 3.11+ 版本引入的一种保护机制(PEP 668)。它的意思是:“这是一个由外部(Homebrew)管理的 Python 环境,为了防止把你的 Python 环境搞乱,我不允许你直接用 pip 往里面强行安装包。”
既然你是在做开发(写 .py 文件),最标准、最推荐的做法是使用“虚拟环境”

3.2.2 解决方法

请在终端中依次运行以下三行命令:

  1. 创建虚拟环境
    在你的项目文件夹(weather_gd)里创建一个独立的“小环境”
python3 -m venv .venv
  1. 激活虚拟环境
    告诉终端“我现在要用这个小环境”:
source .venv/bin/activate

行完这一步后,你会看到终端提示符前面多了一个 (.venv),说明激活成功了。

  1. 再次安装库
    现在你可以随意安装库了,不会再报错:
pip install httpx "fastmcp[all]"

3.2.3 后续开发注意事项

  1. 每次打开终端都要激活
    以后每次你关闭终端再重新打开,或者重启电脑后,如果要继续写代码,都需要先运行第 2 步的激活命令:
source .venv/bin/activate
  1. VS Code 设置(如果你用 VS Code)
  • 按下 Cmd + Shift + P 打开命令面板。
  • 输入 Python: Select Interpreter 并回车。
  • 选择那个带有 .venv 字样的解释器。
  • 这样 VS Code 就能识别你安装的库,代码里的红线也会消失。

3.2.3 为什么不推荐其他方法?

  • 不推荐 --break-system-packages:虽然加上这个参数能强行安装,但这会污染你的 Python 全局环境,可能导致 Homebrew 管理的其他 Python 工具出问题。
  • 不推荐 --user:这会把包安装到用户目录下,虽然不报错,但不利于项目管理和环境隔离。

3.2 执行【1.2】的python脚步出现错误

在这里插入图片描述
看报错信息 Invalid JSON: expected value at line 1 column 2input_value='source ...',原因非常明确:MCP 服务器把虚拟环境的激活命令输出了,导致 Claude 读到了非 JSON 格式的乱码
MCP 的 stdio 模式要求服务端 只能 输出标准的 JSON 通信数据,任何 printsource 命令的输出或日志都会破坏协议。

解决方法

请按照以下步骤修改你的配置或启动方式:

  1. 新增.mcp.json配置文件,文件内容如下:
{
  "mcpServers": {
    "weather": {
      "command": "/Users/qian/Document_Management/Test_Space/weather_gd/.venv/bin/python",
      "args": [
        "/Users/qian/Document_Management/Test_Space/weather_gd/weather.py"
      ]
    }
  }
}

在这里插入图片描述

  1. 启动vscode,mcp程序

重启成功。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐