Python MCPInspector调试思路详解

Written by

in

文章目录
  • 使用FastMCP开发MCPServer,熟悉【McpServer编码过程】+【MCPInspector调试方法】-> 可以这样理解:只编写一个McpServer,然后使用MCPInspector作为McpClient进行McpServer的调试
  • 目录
    • Python-MCPInspector调试
      • 1-核心知识点
      • 2-思路整理
        • 1-核心思路
        • 2-核心代码
      • 3-参考网址
        • 4-上手实操
          • 1-空工程初始化环境
          • 2-激活环境
          • 3-添加依赖
          • 4-项目结构
          • 5-创建Python城市服务
          • 6-暴露Python城市MCPServer服务
          • 7-MCP Inspector调试

      使用FastMCP开发MCPServer,熟悉【McpServer编码过程】+【MCPInspector调试方法】-> 可以这样理解:只编写一个McpServer,然后使用MCPInspector作为McpClient进行McpServer的调试

      • 1-熟悉【McpServer编码过程】
      • 2-熟悉【McpServer调试方法-MCP Inspector】

      • 1-编写传统的Service业务代码
      • 2-在Service业务代码头上添加@tool装饰器,即可实现FastMCP的Tool功能
      • 3-在Service业务代码头上添加@mcp.tool()装饰器,即可实现FastMCP的McpServer功能
      • 4-主程序指定运行方法-stdio进程启动(但是不要自己去启动)
      • 5-使用MCPInspector调试McpServer(2个步骤)
        • 【mcp dev city_02_mcp_server.py】是启动mcpInspector并指定mcpServer的路径,
        • 然后在Inspector中启动city_02_mcp_server.py->【uv run –with mcp mcp run city_02_mcp_server.py】

      1-在Service业务代码头上添加@tool装饰器,即可实现FastMCP的Tool功能

      # 假设 mcp 已经正确导入
      try:
          from mcp import tool
      except ImportError:
          # 如果 mcp 未找到,模拟一个 tool 装饰器
          def tool(func):
              return func
      
      # 在 Service 业务代码头上添加 @tool 装饰器
      @tool
      async def get_city_list(self) -> list:
          """获取所有的城市信息。
          返回:
          str: 所有的城市信息列表
          """
          logging.info(f"获取所有的城市信息")
          city_list = []
          for city in self.CITY_WEATHER_DATA:
              city_list.append(city)
          return city_list
      
      

      2-在Service业务代码头上添加@mcp.tool()装饰器,即可实现FastMCP的McpServer功能

      from mcp.server.fastmcp import FastMCP
      from city_01_service import CityDataServer
      # 1-初始化 MCP 服务器
      mcp = FastMCP("CityDataServer")
      # 2-初始化城市信息服务器(业务代码+@tool装饰器)
      city_server = CityDataServer()
      # 3-在 Service 业务代码头上添加@mcp.tool()装饰器
      @mcp.tool()
      # 获取所有城市列表
      async def get_city_list():
          """获取所有城市列表。
          返回:
          str: 所有城市列表
          """
          city_list = await city_server.get_city_list()
          return city_list
      # 4-主程序指定运行方法-stdio进程启动
      if __name__ == "__main__":
          mcp.run(transport='stdio')

      个人代码实现仓库:https://gitee.com/enzoism/python_mcp_01_inspector

      mkdir my_project
      cd my_project
      python -m venv .venv

      # Windows
      source .venv/Scripts/activate
      # Mac
      source .venv/bin/activate

      对应的依赖是在激活的环境中

      # uv用于后续MCP Inspector的连接
      pip install uv httpx mcp

      • city_01_service.py:城市服务脚本
      • city_02_mcp_server.py:MCP 服务器脚本

      city_01_service.py:城市服务脚本

      import logging
      # 假设 mcp 已经正确导入
      try:
          from mcp import tool
      except ImportError:
          # 如果 mcp 未找到,模拟一个 tool 装饰器
          def tool(func):
              return func
      # 配置日志打印级别
      logger = logging.getLogger(__name__)
      logging.basicConfig(level=logging.INFO)
      # 定义城市服务
      class CityDataServer:
          # 模拟城市的天气数据
          CITY_WEATHER_DATA = {
              "北京": {"condition": "晴", "temperature": 25, "humidity": 40},
              "上海": {"condition": "多云", "temperature": 27, "humidity": 60},
              "广州": {"condition": "雨", "temperature": 30, "humidity": 80},
              "深圳": {"condition": "多云", "temperature": 29, "humidity": 70},
              "杭州": {"condition": "晴", "temperature": 26, "humidity": 50},
          }
          @tool
          async def get_city_weather(self, city: str) -> str:
              """获取指定城市的天气信息。
              参数:
              city (str): 城市名称
              返回:
              str: 天气信息描述
              """
              logging.info(f"获取天气信息: {city}")
              if city in self.CITY_WEATHER_DATA:
                  weather = self.CITY_WEATHER_DATA[city]
                  return f"{city} : {weather['condition']} , {weather['temperature']} °C,湿度 {weather['humidity']} %"
              else:
                  return f"抱歉,未找到 {city} 的天气信息"
          @tool
          async def get_city_list(self) -> list:
              """获取所有的城市信息。
              返回:
              str: 所有的城市信息列表
              """
              logging.info(f"获取所有的城市信息")
              city_list = []
              for city in self.CITY_WEATHER_DATA:
                  city_list.append(city)
              return city_list
          @tool
          async def get_city_detail(self, city: str) -> str:
              """获取指定城市的信息。
              参数:
              city (str): 城市名称
              返回:
              str: 城市信息
              """
              logging.info(f"获取指定城市的信息: {city}")
              if city in await self.get_city_list():
                  return f"{city} : 一个风景秀丽的城市,你值得去玩一把"
              else:
                  return f"抱歉,未找到 {city} 的城市信息"

      city_02_mcp_server.py:MCP 服务器脚本

      from mcp.server.fastmcp import FastMCP
      from city_01_service import CityDataServer
      # 初始化 MCP 服务器
      mcp = FastMCP("CityDataServer")
      # 初始化城市信息服务器
      city_server = CityDataServer()
      # 获取天气信息的工具
      @mcp.tool()
      async def get_city_weather(city: str) -> str:
          """获取指定城市的天气信息。
          参数:
          city (str): 城市名称
          返回:
          str: 天气信息描述
          """
          city_weather_info = await city_server.get_city_weather(city)
          return city_weather_info
      @mcp.tool()
      # 获取所有城市列表
      async def get_city_list():
          """获取所有城市列表。
          返回:
          str: 所有城市列表
          """
          city_list = await city_server.get_city_list()
          return city_list
      @mcp.tool()
      # 获取指定城市的信息
      async def get_city_detail(city: str):
          """获取指定城市的信息。
          参数:
          city (str): 城市名称
          返回:
          str: 指定城市的信息
          """
          city_info = await city_server.get_city_detail(city)
          return city_info
      # 主程序
      if __name__ == "__main__":
          mcp.run(transport='stdio')

      1-安装MCP Inspector

      运行机制:先运行【MCPInspector】再运行【uv run –with mcp mcp run city_02_mcp_server.py】

      # 1-安装MCP Inspector
      pip install mcp[cli]

      2-运行MCP Inspector服务

      # 2-运行MCP Inspector
      mcp dev city_02_mcp_server.py

      3-访问MCP Inspector网页

      再运行【uv run –with mcp mcp run city_02_mcp_server.py】

      http://127.0.0.1:6274

      到此这篇关于Python MCPInspector调试的文章就介绍到这了,更多相关Python MCPInspector调试内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

      您可能感兴趣的文章:

      • Python代码调试的方法集锦
      • 使用Python IDLE进行Debug调试的图文步骤
      • 基于Python编写一个串口调试工具
      • Python代码调试Debug的实用技巧分享
      • Python工具PDB调试器的使用方法详解
      • pycharm python代码调试跳出for循环问题
      • VSCode运行或调试python文件无反应的问题解决
      • python在命令行中使用 pdb 实现断点调试功能

      站内搜索