SiLA 2 Bridge について
SiLA 2 Bridgeは、SiLA 2対応の実験装置やミドルウェアをAIエージェントから扱うためのMCPサーバーです。各サーバーのFeature Definitionsを読み取り、コマンド引数を検証し、長時間実行される処理を追跡・キャンセルします。
主な機能
- 01mDNSによるSiLA 2サーバーの検出
- 02FDLから機能と型制約を取得
- 03送信前のコマンド引数検証
- 04監視可能なコマンドの追跡とキャンセル
- 05読み取り専用モードと許可リスト
活用シーン
- 01装置のコマンドとプロパティの確認
- 02長時間の装置操作の実行と監視
- 03温度などのプロパティ変化の観測
- 04ローカルネットワーク上のSiLA 2サーバーの検索
MCP 対応
サーバー検出、機能・プロパティの確認、コマンド実行、状態・結果の取得、キャンセル、接続管理のツールをMCPクライアントに公開します。読み取り専用モードや許可リストでコマンドを制限できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx labmcp-sila2LABMCP_ADDRESSInstrument address, e.g. serial:///dev/ttyUSB0 or tcp://192.168.1.50:5025LABMCP_SIMULATESet to 1 to use the built-in simulator (no hardware)LABMCP_READ_ONLYSet to 1 to disable all state-changing toolsLABMCP_LIMITSSafety limit overrides, e.g. max_temperature_c=80ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
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サーバーに接続する
- 検出します。
discover_serversツール(mDNS_sila._tcp)を使用するか、表示されたアドレスとポートを指定してサーバーを実行します。SiLAにはデフォルトのポートはありませんが、50052がよく使われます。 - TLS。 SiLA 2サーバーはデフォルトでTLSを使用し、多くのサーバーは起動時に自己署名証明書を生成します。その証明書のCAを
--option root_cert=ca.pemとして渡します。多くのサーバーは証明書をファイルに書き込むか、検出レコードで公開します。暗号化なしのテストモードで起動したサーバーには、--option insecure=trueが必要です。相互TLSを使用する場合は、--option client_cert=… --option client_key=…を追加します。 - 接続をテストします:
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_s | 300 s | call_command が、状態を確認できるコマンドの実行を待つ際にブロックする最長時間 |
max_subscription_duration_s | 120 s | subscribe_property による収集の最長時間 |
max_discovery_s | 30 s | mDNS 検出スキャンの最長時間 |
起動時に上書きできます。例:--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。オフセットが指定されていない場合は UTCAny:{"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 サーバー(デバイス/ソフトウェア) | サーバーのバージョン | インターフェース | 検証者 | 日付 |
|---|---|---|---|---|
| まだありません:最初の検証者になる |
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。