mcpField
T
tinysa-mcp

tinysa-mcp

ローカル
github.com/manahiyo831科学・教育079 週間前に更新

tinysa-mcp について

tinysa-mcpは、シリアルポート経由でTinySAを操作する実験的なMCPサーバーです。MCPツールを通じてコマンド送信、バージョン情報の取得、画面キャプチャを行いたいユーザー向けです。

主な機能

  1. 01シリアルポート経由のTinySA接続
  2. 02コマンド送信と応答取得
  3. 03ファームウェアとハードウェアのバージョン取得
  4. 04画面キャプチャと任意の保存

活用シーン

  1. 01TinySAのデバイス情報とバージョンの確認
  2. 02接続したTinySAへのコマンド送信
  3. 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 の下でライセンスされています。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。