Tinysa Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Tinysa Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
MCP server for operating TinySA through serial port
Sorry, I'm currently experimenting and cannot guarantee that it will work properly.
This project is an MCP server designed to operate a TinySA device via a serial port. It leverages Python libraries such as pyserial, httpx, numpy, Pillow, and FastMCP to provide a tool-based interface for connecting to the device, executing commands, and retrieving device version information.
This project uses both a Tkinter-based GUI and an MCP server. Due to Tkinter's requirement to run in the main thread, the following design is used:
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)]The main thread initializes the Tkinter root window and starts the main event loop. All GUI operations are performed in this thread.
The MCP server is started in a separate thread using Python's threading.Thread. This allows the server to handle requests concurrently with the GUI.
Log messages and other data from the MCP server (or other background threads) are sent to the GUI using a queue.Queue. The GUI periodically polls this queue using root.after to update the display safely.
When the MCP server stops, it schedules the GUI to close using root.after(0, root.destroy), ensuring all Tkinter operations remain in the main thread.
#### Example (main function):
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()#### Notes
Always use the provided queue and root.after for thread-safe communication.
The following MCP tools are available:
Invoke the MCP tools using an MCP client. For example, to get the device version:
mcp call get_version --args '{"port": "COM4"}'Refer to the material directory for additional documentation, it will be good to add the file "USB interface.txt" as a AI knowledge.
This project is licensed under the MIT License.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.