Skip to main content
Glama

send_data

Transmit data to serial port devices through text or binary modes for communication with UART hardware.

Instructions

向已打开的串口发送数据,支持文本和二进制模式

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
portYes串口路径,如 /dev/ttyUSB0 或 COM1
dataYes要发送的数据(文本为UTF-8,二进制为Base64)
is_binaryNo是否为二进制模式,True 时 data 为 Base64 编码

Implementation Reference

  • Main handler function for the 'send_data' MCP tool. Handles input validation, data encoding (text or base64 binary), and delegates to SerialManager.send_data.
    def send_data( port: str, data: str, is_binary: bool = False, ) -> dict[str, Any]: """发送数据到串口 Args: port: 串口路径 data: 要发送的数据(文本模式为 UTF-8 字符串,二进制模式为 Base64 编码) is_binary: 是否为二进制模式 Returns: 发送结果,包含发送的字节数 """ manager = get_serial_manager() # 编码转换 if is_binary: try: raw_data = base64.b64decode(data) except Exception as e: raise InvalidParamError("data", data, f"Base64 解码失败:{e}") else: raw_data = data.encode("utf-8") bytes_written = manager.send_data(port, raw_data) return {"success": True, "bytes_written": bytes_written}
  • JSON schema definition for the 'send_data' tool inputs, used for MCP tool registration.
    SEND_DATA_TOOL: dict[str, Any] = { "name": "send_data", "description": "向已打开的串口发送数据,支持文本和二进制模式", "inputSchema": { "type": "object", "properties": { "port": { "type": "string", "description": "串口路径,如 /dev/ttyUSB0 或 COM1", }, "data": { "type": "string", "description": "要发送的数据(文本为UTF-8,二进制为Base64)", }, "is_binary": { "type": "boolean", "description": "是否为二进制模式,True 时 data 为 Base64 编码", "default": False, }, }, "required": ["port", "data"], }, }
  • Registration of the 'send_data' tool in the MCP server's list_tools handler.
    types.Tool( name=SEND_DATA_TOOL["name"], description=SEND_DATA_TOOL["description"], inputSchema=SEND_DATA_TOOL["inputSchema"], ),
  • Dispatch logic in the MCP call_tool handler that invokes the send_data function.
    elif name == "send_data": result = send_data(**arguments)
  • Low-level helper method in SerialManager that performs the actual serial.write to send bytes to the port.
    def send_data(self, port: str, data: bytes) -> int: """发送原始字节数据 Args: port: 串口路径 data: 要发送的字节数据 Returns: 发送的字节数 Raises: PortClosedError: 串口未打开 WriteFailedError: 写入失败 """ with self._lock: if port not in self._ports: raise PortClosedError(port) managed = self._ports[port] try: result = managed.serial.write(data) bytes_written: int = result if result is not None else 0 logger.debug("发送数据到串口 %s:%d 字节", port, bytes_written) return bytes_written except SerialException as e: logger.error("串口写入失败:%s - %s", port, e) raise WriteFailedError(port, str(e)) from e

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/donnel666/uart-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server