mcpField
S
SiLA 2 Bridge

SiLA 2 Bridge

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

SiLA 2 Bridge について

SiLA 2 Bridgeは、SiLA 2対応の実験装置やミドルウェアをAIエージェントから扱うためのMCPサーバーです。各サーバーのFeature Definitionsを読み取り、コマンド引数を検証し、長時間実行される処理を追跡・キャンセルします。

主な機能

  1. 01mDNSによるSiLA 2サーバーの検出
  2. 02FDLから機能と型制約を取得
  3. 03送信前のコマンド引数検証
  4. 04監視可能なコマンドの追跡とキャンセル
  5. 05読み取り専用モードと許可リスト

活用シーン

  1. 01装置のコマンドとプロパティの確認
  2. 02長時間の装置操作の実行と監視
  3. 03温度などのプロパティ変化の観測
  4. 04ローカルネットワーク上のSiLA 2サーバーの検索

MCP 対応

サーバー検出、機能・プロパティの確認、コマンド実行、状態・結果の取得、キャンセル、接続管理のツールをMCPクライアントに公開します。読み取り専用モードや許可リストでコマンドを制限できます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"k-dense-ai-labmcp-sila2": {
"command": "uvx",
"args": [
"labmcp-sila2"
],
"env": {
"LABMCP_ADDRESS": "<LABMCP_ADDRESS>",
"LABMCP_SIMULATE": "<LABMCP_SIMULATE>",
"LABMCP_READ_ONLY": "<LABMCP_READ_ONLY>",
"LABMCP_LIMITS": "<LABMCP_LIMITS>"
}
}
}
}
起動コマンドuvx labmcp-sila2
設定が必要な環境変数
LABMCP_ADDRESSInstrument address, e.g. serial:///dev/ttyUSB0 or tcp://192.168.1.50:5025
LABMCP_SIMULATESet to 1 to use the built-in simulator (no hardware)
LABMCP_READ_ONLYSet to 1 to disable all state-changing tools
LABMCP_LIMITSSafety limit overrides, e.g. max_temperature_c=80

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypilabmcp-sila20.1.2

ツール

13

掲載時のツール一覧 · 2 週間前に更新

このツールにパラメーターはありません。

詳細

SiLA 2 Bridge — MCP Server

AI エージェントが、液体ハンドラー、インキュベーター、プレートリーダー、ロボットアーム、天秤、スケジューリングミドルウェアなど、オープンなSiLA 2ラボ自動化標準を実装したあらゆる SiLA 2 サーバーを操作できるようにします。このブリッジは、サーバー独自の Feature Definitions(FDL)を読み取るため、すべてのコマンド、プロパティ、パラメーター型、単位、制約を把握できます。送信前にFDLに照らしてパラメーターを検証し、長時間実行される(監視可能な)コマンドを実行・追跡し、SiLAのCancelControllerを通じてキャンセルします。

パッケージlabmcp-sila2
機器あらゆるSiLA 2サーバー:SiLA 2インターフェースを備えた装置およびミドルウェア、ならびにsila_python、sila_java、sila_csharp、sila_cppで構築されたサーバー
インターフェースイーサネット:TLSを使用したHTTP/2上のgRPC(または暗号化されていないテストサーバー)、mDNSによるサーバー検出
プロトコルSiLA 2 v1.x(Part A & Part B仕様、FDLスキーマとコア機能、クライアントライブラリsila2(ドキュメント))
ステータス🧪 シミュレーション済み:実際のプロセス内SiLA 2サーバー(sila2ライブラリ、localhost上のgRPC)でテスト済みですが、ベンダーサーバーでの検証はまだです。ハードウェアテストを報告

ハードウェアなしで試す

uvx labmcp-sila2 --simulate --check

--simulate は、sila2 ライブラリで構築された実際のSiLA 2サーバーをプロセス内で起動します。空いているポートで 127.0.0.1 上に、暗号化なし、検出機能オフで実行されます。シミュレーション用サーモブロック機能(org.labmcp/simulation/TemperatureController/v1)と、公式の CancelController 機能を実装しています。

  • 監視可能な CurrentTemperature プロパティ、および TargetTemperature、RampRate、DeviceState
  • 進捗状況、中間応答、DeviceBusy 定義エラーを備えた監視可能なコマンド ControlTemperature
  • {TargetTemperature, HoldTime} 構造体のリストを受け取る RunProgram
  • 0 < rate ≤ 10 K/sの制約がある SetRampRate
  • SwitchOff

ブリッジ全体が、実際のgRPCおよびFDL経路で動作します。

SiLAサーバーに接続する

  1. 検出します。 discover_servers ツール(mDNS _sila._tcp)を使用するか、表示されたアドレスとポートを指定してサーバーを実行します。SiLAにはデフォルトのポートはありませんが、50052がよく使われます。
  2. TLS。 SiLA 2サーバーはデフォルトでTLSを使用し、多くのサーバーは起動時に自己署名証明書を生成します。その証明書のCAを --option root_cert=ca.pem として渡します。多くのサーバーは証明書をファイルに書き込むか、検出レコードで公開します。暗号化なしのテストモードで起動したサーバーには、--option insecure=true が必要です。相互TLSを使用する場合は、--option client_cert=… --option client_key=… を追加します。
  3. 接続をテストします:
    uvx labmcp-sila2 --address 192.168.1.40:50052 --option root_cert=~/sila/ca.pem --check
    uvx labmcp-sila2 --address sila://localhost:50052 --option insecure=true --check      # test server
    uvx labmcp-sila2 --option server_name="Liquid Handler 1" --option root_cert=ca.pem --check  # via discovery
    

MCPクライアントに追加する

Claude Code

claude mcp add sila -- uvx labmcp-sila2 --address 192.168.1.40:50052 --option root_cert=/path/ca.pem

Claude Desktop / Cursor / Windsurf(claude_desktop_config.json、.cursor/mcp.json、…)

{
  "mcpServers": {
    "sila": {
      "command": "uvx",
      "args": ["labmcp-sila2", "--address", "192.168.1.40:50052", "--option", "root_cert=/path/ca.pem",
               "--option", "command_allowlist=Incubator.*,PlateReader.ReadPlate"]
    }
  }
}

--read-only を指定すると、エージェントは機能の参照、プロパティの読み取りとサブスクライブ、コマンドのステータス確認ができますが、コマンドの呼び出しはできません。cancel_command は引き続き使用できます。実行できるコマンドを制限するには、--option command_allowlist=Feature.Command,Feature.* を使用します。エントリは ; またはスペースで区切ることもできます。これは LABMCP_OPTIONS=command_allowlist=A.B;C.* 内で便利です。

ツール

ツール種類説明
call_command⚠️ 危険SiLA コマンドを実行します。デバイスが物理的に動作する可能性があります(移動、分注、加熱、振とう、ドアの開放など)。まず、何が起こるかをユーザーに伝えてください。パラメーターは送信前に Feature Definition に照らして検証され、許可リストが設定されている場合は、コマンドがそのリストに含まれている必要があります。観測不可能なコマンドは応答を返し、観測可能なコマンドは execution_id を返します。
cancel_command🛑 安全SiLA の CancelController 機能を使って、実行中の観測可能なコマンド、またはすべてのコマンドをキャンセルします。常に利用できます(読み取り専用の場合も含む)。サーバーに CancelController がない場合は、その旨を説明し、デバイス独自の停止コマンドを案内します。
discover_servers👁 読み取りSiLA Server Discovery(mDNS _sila._tcp)を使って、ローカルネットワーク上の SiLA 2 サーバーを検索します。各サーバーの名前、UUID、アドレス、ポートを、接続せずに一覧表示します。サーバーの設定は不要です。
get_command_log👁 読み取り装置に送信した最新の生コマンドと、装置から受信した応答を返します(新しいものが末尾)。デバッグや実行内容の記録に役立ちます。
get_command_result👁 読み取り完了した観測可能なコマンドの応答、またはコマンドが完了した際の SiLA 実行エラーを返します。コマンドがまだ実行中の場合は、明確なメッセージを表示して失敗します。
get_command_status👁 読み取りcall_command で開始した観測可能なコマンドのステータス(waiting / running / finishedSuccessfully / finishedWithError)、進捗状況、推定残り時間、最新の中間応答を返します。
get_connection_info👁 読み取り接続中の装置(識別情報、アドレス、シミュレーションか実機か)、サーバーが読み取り専用かどうか、有効な安全制限を報告します。最初に呼び出してください。
get_property👁 読み取りSiLA プロパティの現在値を読み取ります(観測可能なプロパティの場合は、サブスクリプションの最初の値)。
get_server_info👁 読み取り接続中の SiLA サーバー(名前、種類、UUID、バージョン、ベンダー、説明)を識別し、その機能の一覧、コマンドをキャンセルできるかどうか、このブリッジが呼び出せるコマンドを表示します。
list_executions👁 読み取りこのセッションで開始したすべての観測可能なコマンド実行を、ステータスとともに一覧表示します(新しいものが末尾)。
list_features👁 読み取りFeature Definition に基づいてサーバーの機能を説明します。すべてのコマンド(観測可能かどうか、パラメーター、応答、中間応答、定義済みエラー、許可リストによって呼び出しが許可されているかどうか)とすべてのプロパティを、単位や制約を含む JSON スキーマ風の辞書で型を示して一覧表示します。
reconnect🛑 安全装置との接続を閉じて再度開きます(電源を入れ直した場合や、ケーブルを再接続した場合など)。
subscribe_property👁 読み取りduration_s 秒間、プロパティの値を収集し(観測可能なプロパティでは SiLA サブスクリプション、それ以外ではポーリング)、要約します(例:温度が安定するまで監視する)。

安全制限

制限デフォルト意味
max_command_wait_s300 scall_command が、状態を確認できるコマンドの実行を待つ際にブロックする最長時間
max_subscription_duration_s120 ssubscribe_property による収集の最長時間
max_discovery_s30 smDNS 検出スキャンの最長時間

起動時に上書きできます。例:--limit max_command_wait_s=60。コマンドには、次のような主なガードが適用されます。

ガード方法
危険性の注記call_command は破壊的操作としてマークされるため、MCP クライアントは実行前に確認を求めます
許可リスト--option command_allowlist=Feature.Command,... を指定すると、他のコマンドは送信前に拒否され、それらのコマンドについて list_features は callable: false を表示します
FDL 検証パラメーター名は完全に一致する必要があります。型、範囲(最小値/最大値、包含または排他)、集合、長さ、パターン、要素数、完全修飾識別子、構造体のフィールドは、送信前にサーバーの FDL に照らして検証されます
読み取り専用モード--read-only は call_command を非表示にします
キャンセルcancel_command(SAFETY)は、サーバーがその機能を実装している場合、CancelController.CancelCommand/CancelAll を使用します。実装されていない場合はその旨を伝え、デバイス固有の停止コマンドを案内します
期限状態を確認できないコマンドとプロパティ読み取りは、停止し続けるのではなく、call_timeout_s(デフォルト 30 s、最大 300 s)を過ぎるとタイムアウトします。タイムアウトした読み取りのために開始したサブスクリプションはキャンセルされます。また、期限後にサーバーが受け付けた状態を確認できるコマンドも list_executions に表示されるため、キャンセルできます

サーバーでも常に再検証が行われるため、そこで拒否されたパラメーターは SiLA 検証エラーとして返されます。

プロンプトの例

  • 「ネットワーク上にある SiLA サーバーと、インキュベーターでできることを教えてください。」
  • 「インキュベーターを 37 °C に設定し、温度に達したら教えてください。」
  • 「プレートリーダーのチャンバー温度を 1 分間監視し、安定しているか教えてください。」
  • 「サーマルサイクラーで「PCR-short」プログラムを実行し、30 秒ごとに進捗を確認して、結果を報告してください。」
  • 「問題が発生しました。液体ハンドラーで実行中の処理をすべてキャンセルしてください。」
  • 「ロボットの MovePlate コマンドのパラメーター(型、単位、許容範囲)を表示してください。」

補足事項

  • JSON としての型。 list_features は、各 SiLA 型を JSON Schema のような辞書として表示します。Real は number、Integer は integer、List は array、Structure は object になります。SiLA の単位は x-unit(ラベル)と x-unit-si(SI 基本単位への変換、SI = value × factor + offset)として表示されます。その他の SiLA の詳細には x-sila-* キーが使用されます。値は JSON として渡します。
    • Binary:Base64 文字列
    • Date:YYYY-MM-DD[±HH:MM]
    • Time:HH:MM:SS[±HH:MM]
    • Timestamp:ISO 8601。オフセットが指定されていない場合は UTC
    • Any:{"type": "Real", "value": 1.5}。基本型のみ
  • 監視可能なコマンドは、すぐに execution_id を返します。get_command_status は、SiLA の実行ステータス(waiting、running、finishedSuccessfully、finishedWithError)、進捗状況、推定残り時間、最新の中間応答を報告します。get_command_result は、応答を返すか、定義済みまたは未定義の実行エラーと、FDL に記載されたエラーの説明を返します。短時間で完了する実行では、call_command に wait_s を渡してください。実行はこのセッション中のみ追跡され、reconnect 時に破棄されます。
  • キャンセルは SiLA コアの機能ではありません。 サーバーが org.silastandard/core.commands/CancelController/v1 を実装している必要があり、実装の有無は get_server_info で確認できます。ベンダーによっては、独自の Stop/Abort コマンドを提供しており、これらは list_features に表示されます。
  • SiLA クライアントのメタデータ(LockController のロック識別子や AuthorizationService のアクセストークンなど)は、call_command、get_property、subscribe_property に metadata={"LockController.LockIdentifier": "…"} として渡せます。値はメタデータの FDL 型に照らして検証されます。
  • Feature Definitions は、DOCTYPE/エンティティ宣言を拒否した後にのみ解析されます(SiLA FDL ではこれらを使用しません)。そのため、悪意のあるサーバーが XML エンティティ展開を引き起こすことはありません。sila2 ライブラリが無効と判断したフィーチャーは list_features から除外されます(理由はコマンドログに記録されます)。
  • ローカルでは検証されません: Schema と ContentType の制約、および情報提供のみを目的とする Unit 制約です。これらはサーバー側で適用されます。2 MB を超える大きなバイナリには SiLA バイナリ転送が使用され、sila2 ライブラリが処理します。
  • ライブラリの制限(sila2 ≤ 0.14): コマンドのパラメーターまたは応答として直接使われる Constrained List は展開できません。sila2 で構築されたサーバーではパラメーターに影響するため、シミュレーターの RunProgram では通常のリストを使い、1~10 個のステップかどうかを独自に確認しています。このブリッジでは、その形式の応答にも影響します。サーバーはコマンドを実行しますが、応答をデコードできません。ブリッジはこれを "WAS EXECUTED … could not be decoded" と報告するため、コマンドがむやみに再実行されることはありません。この形式のプロパティは正常にデコードされます。制約のない通常のリストには影響しません。
  • 検出では、指定された時間だけ mDNS を検索し、サーバーが公開している情報(UUID、名前、バージョン、アドレス、CA 証明書が公開されているかどうか)を、サーバーに接続せずに返します。--simulate モードでは、シミュレーション用サーバーのみを返し、ネットワークには何も送信しません。

ハードウェア検証

SiLA サーバー(デバイス/ソフトウェア)サーバーのバージョンインターフェース検証者日付
まだありません:最初の検証者になる

コメント

MCP は初めてですか?

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

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