tinysa-mcp について
tinysa-mcpは、シリアルポート経由でTinySAを操作する実験的なMCPサーバーです。MCPツールを通じてコマンド送信、バージョン情報の取得、画面キャプチャを行いたいユーザー向けです。
主な機能
- 01シリアルポート経由のTinySA接続
- 02コマンド送信と応答取得
- 03ファームウェアとハードウェアのバージョン取得
- 04画面キャプチャと任意の保存
活用シーン
- 01TinySAのデバイス情報とバージョンの確認
- 02接続したTinySAへのコマンド送信
- 03確認用のTinySA画面キャプチャ
MCP 対応
MCPクライアントに、TinySAへの接続、コマンド実行、デバイス情報取得、画面キャプチャのツールを提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
tinysa-mcp
シリアルポート経由で TinySA を操作する MCP サーバー
申し訳ありません。現在試験中のため、正常に動作することを保証できません。
概要
このプロジェクトは、シリアルポート経由で TinySA デバイスを操作するために設計された MCP サーバーです。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 サーバーはバックグラウンドスレッドで実行します:
Python のthreading.Threadを使用して、MCP サーバーを別のスレッドで起動します。これにより、サーバーは GUI と並行してリクエストを処理できます。 -
キューを介したスレッドセーフな通信:
MCP サーバー(またはほかのバックグラウンドスレッド)からのログメッセージやその他のデータは、queue.Queueを使って GUI に送信します。GUI はroot.afterを使って定期的にこのキューを確認し、安全に表示を更新します。 -
正常なシャットダウン:
MCP サーバーが停止すると、root.after(0, root.destroy)を使って GUI の終了をスケジュールし、すべての Tkinter 操作がメインスレッドで実行されるようにします。
例(main 関数):
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を使用してください。 - この設計により、Tkinter のスレッド要件に違反することなく、MCP サーバーと GUI を並行して実行できます。
機能
- デバイスにコマンドを送信し、応答を取得します。
- ファームウェアおよびハードウェアのバージョン情報を取得します。
- ほかのシステムと連携するための 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 interface.txt」ファイルを AI のナレッジとして追加するとよいでしょう。
ライセンス
このプロジェクトは MIT License の下でライセンスされています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。