Python中使用MCPInspector进行调试指南

Python-MCPInspector调试

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


1-核心知识点

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

  • 2-思路整理

    1-核心思路

  • 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】

  • 2-核心代码

  • 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')
    
    

    3-参考网址

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

  • 4-上手实操

    1-空工程初始化环境

    mkdir my_project
    cd my_project
    python -m venv .venv
    

    2-激活环境

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

    3-添加依赖

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

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

    4-项目结构

  • city_01_service.py:城市服务脚本
  • city_02_mcp_server.py:MCP 服务器脚本
  • 5-创建Python城市服务

    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} 的城市信息"
    
    
    

    6-暴露Python城市MCPServer服务

    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')
    
    
    

    7-MCP Inspector调试

    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
  • 作者:坐吃山猪

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python中使用MCPInspector进行调试指南

    发表回复