TinySA串口控制服务器

一个通过串口操作TinySA设备的MCP服务器,提供命令执行、版本查询和屏幕截图功能。

  • by manahiyo831
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 manahiyo831/tinysa_mcp

使用说明

tinysa mcp

用于通过串行端口操作TinySA的MCP服务器

抱歉,我目前正在进行实验,无法保证它能正常工作。

概述

该项目是一个MCP服务器,旨在通过串行端口操作TinySA设备。它利用pyserial、httpx、numpy、Pillow和FastMCP等Python库提供基于工具的接口,用于连接设备、执行命令和检索设备版本信息。

体系结构和线程模型

该项目使用基于Tkinter的GUI和MCP服务器。由于Tkinter要求在主线程中运行,因此使用了以下设计:

flowchart TD
    subgraph MainThread
        A[main()] --> B[tk.Tk() & TinySALogMonitor]
        B --> C[root.mainloop()]
    end
    subgraph MCPThread
        D[run_mcp_server(mcp_server)]
        D --> E[mcp_server.run()]
    end
    E -- log_callback --> F[log_monitor.log_queue]
    F -- root.afterで定期ポーリング --> B
    D -- サーバー終了時 --> G[root.after(0, root.destroy)]
  • Tkinter GUI在主线程中运行:
    主线程初始化Tkinter根窗口并启动主事件循环。所有GUI操作都在此线程中执行。

  • MCP服务器在后台线程中运行:
    MCP服务器使用Python在单独的线程中启动 threading.Thread这允许服务器与GUI同时处理请求。

  • 通过队列进行线程安全通信:
    来自MCP服务器(或其他后台线程)的日志消息和其他数据使用 queue.QueueGUI使用以下命令定期轮询此队列 root.after 以安全地更新显示。

  • 平滑关闭:
    当MCP服务器停止时,它会使用以下命令安排GUI关闭 root.after(0, root.destroy),确保所有Tkinter操作都保留在主线程中。

示例(主要功能):

def main():
    root = tk.Tk()
    log_monitor = TinySALogMonitor(root)
    mcp_server = create_mcp_server(log_monitor.add_log)
    mcp_thread = threading.Thread(target=run_mcp_server, args=(mcp_server,), daemon=True)
    mcp_thread.start()
    root.mainloop()

备注

  • 不要从后台线程访问Tkinter对象。
    始终使用提供的队列 root.after 用于线程安全通信。
  • 这种设计确保了MCP服务器和GUI可以同时运行,而不会违反Tkinter的线程要求。

特性

  • 发送命令并从设备检索响应。
  • 检索固件和硬件版本信息。
  • 展示MCP工具,以便与其他系统集成。
  • 支持从设备屏幕捕获图像,以及可选的带时间戳的文件保存。

MCP工具

以下MCP工具可用:

  • 获取版本:从TinySA设备检索版本信息。
  • execute_命令:向TinySA设备发送命令并获取响应。
  • 连接:连接到指定端口上的TinySA设备。
  • 断开:断开TinySA设备。
  • get_device_info:检索有关连接设备的详细信息。
  • capture_image:捕获TinySA屏幕图像,并可选择将其保存到带有时间戳的文件中。

用法示例

使用MCP客户端调用MCP工具。例如,要获取设备版本:

mcp call get_version --args '{"port": "COM4"}'

故障排除

  • 连接问题: 确保指定的串行端口正确,并且您的用户具有适当的权限。
  • 命令失败: 检查MCP服务器日志(如果可用)中的错误消息。
  • 图像捕获: 验证设备在图像捕获期间是否返回了足够的数据(307200字节)。
  • 请参阅 模型上下文协议文档 有关MCP集成的更多信息。

材料

请参阅 material 目录中的附加文档,最好添加文件“USB interface.txt”作为AI知识。

许可证

该项目根据MIT许可证获得许可。