#!/usr/bin/env python3
"""
Serial port tools for the FastMCP Server
"""
import serial.tools.list_ports
from core.config import mcp
# 存储选定的串口设备
selected_port = None
@mcp.tool
def list_serial_ports() -> list:
"""List serial ports with valid descriptions (not n/a)."""
ports = []
# 获取所有串口设备
for port in serial.tools.list_ports.comports():
# 只列出包含有效description的串口设备(非n/a)
if port.description and port.description.lower() != 'n/a':
ports.append({
'device': port.device,
'description': port.description,
'hwid': port.hwid
})
return ports
@mcp.tool
def select_serial_port(port_device: str) -> str:
"""Select a target serial port for ESP-IDF operations."""
global selected_port
# 验证端口是否存在
available_ports = list_serial_ports()
port_devices = [port['device'] for port in available_ports]
if port_device not in port_devices:
raise ValueError(f"Port {port_device} not found in available ports")
selected_port = port_device
return f"Selected serial port: {selected_port}"
@mcp.tool
def get_selected_serial_port() -> str:
"""Get the currently selected serial port."""
global selected_port
return selected_port if selected_port else "No port selected"