article
README
🚀 项目 tinysa-mcp
本项目是一个通过串口操作TinySA设备的MCP服务器,为连接设备、执行命令以及获取设备版本信息提供工具化接口。
🚀 快速开始
目前项目还在实验阶段,无法保证功能正常运行,请谨慎使用。
✨ 主要特性
- 可发送命令并从设备获取响应。
- 能够获取固件和硬件版本信息。
- 提供MCP工具以与其他系统集成。
- 支持从设备屏幕捕获图像,并可选地按时间戳保存文件。
📦 安装指南
文档未提及具体安装步骤,暂无法提供。
💻 使用示例
基础用法
# 示例代码:
print("设备版本:", get_version())
print("执行命令结果:", execute_command("command"))
connect(port)
获取设备信息()
captured_image = capture_image()
📚 详细文档
架构与线程模型
该项目同时使用了Tkinter图形界面和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图形界面在主线程中运行:
主线程初始化Tkinter根窗口并启动主事件循环。所有图形界面操作都在此线程中执行。 - MCP服务器在后台线程中运行:
MCP服务器在一个单独的线程中使用Python的threading.Thread启动。这使得服务器可以在处理请求的同时与图形界面并发运行。 - 通过队列实现线程间通信:
日志消息和其他数据从MCP服务器(或其他后台线程)通过一个queue.Queue发送到图形界面。图形界面使用root.after定期轮询此队列以安全地更新显示内容。 - 优雅关闭:
当MCP服务器停止时,它会安排图形界面关闭使用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服务器和图形界面可以并发运行,同时遵守Tkinter的线程要求。
MCP 工具
以下MCP工具可用:
- get_version:从TinySA设备获取版本信息。
- execute_command:向TinySA设备发送命令并获取响应。
- connect:在指定端口上连接到TinySA设备。
- disconnect:断开与TinySA设备的连接。
- get_device_info:获取有关已连接设备的详细信息。
- capture_image:捕获TinySA屏幕图像,并可选地按时间戳保存文件。
故障排除
- 连接问题:确保设备已正确连接且端口配置无误。
- 权限问题:以管理员权限运行脚本或检查设备权限设置。
- 日志记录:使用
log_monitor查看详细日志信息以排查错误。
材料
🔧 技术细节
该项目利用了pyserial、httpx、numpy、Pillow和FastMCP等Python库,提供了一种基于工具的接口,用于连接设备、执行命令以及获取设备版本信息。
📄 许可证
[许可证内容]
此项目旨在提供一个用于操作TinySA设备的高效工具,尽管目前还在实验阶段,但未来会持续改进和优化功能。
微信扫一扫