通过串口操作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()
root.after进行线程安全通信。可用的MCP工具如下:
使用MCP客户端调用MCP工具。例如,要获取设备版本:
mcp call get_version --args '{"port": "COM4"}'
参考material目录中的附加文档,建议添加文件“USB接口.txt”作为AI知识。
本项目采用MIT许可证。