返回市场
小巧sa_mcp

小巧sa_mcp

作者:manahiyo8310 星标更新:2025-04-21

项目介绍

tinysa-mcp

通过串口操作TinySA设备的MCP服务器

抱歉,我目前正在实验阶段,无法保证其正常工作。

概述

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

架构与线程模型

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

flowchart TD
    subgraph 主线程
        A[main()] --> B[tk.Tk() & TinySALogMonitor]
        B --> C[root.mainloop()]
    end
    subgraph MCP线程
        D[run_mcp_server(mcp_server)]
        D --> E[mcp_server.run()]
    end
    E -- 日志回调 --> F[log_monitor.log_queue]
    F -- 使用root.after定期轮询 --> B
    D -- 服务器关闭时 --> G[root.after(0, root.destroy)]
  • Tkinter GUI在主线程中运行
    主线程初始化Tkinter根窗口并启动主事件循环。所有GUI操作都在此线程中进行。

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

  • 通过队列实现线程安全通信
    来自MCP服务器(或其他后台线程)的日志消息和其他数据通过queue.Queue发送到GUI。GUI使用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工具如下:

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

使用示例

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

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

故障排除

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

资料

参考material目录中的附加文档,建议添加文件“USB接口.txt”作为AI知识。

许可证

本项目采用MIT许可证。