Ocean Insight Spectrometer について
Ocean Insight Spectrometerは、python-seabreezeを使ってOcean Insight分光器を操作するMCPサーバーです。スペクトル取得、暗スペクトルと参照スペクトルの保存、吸光度・透過率の分析に対応し、ハードウェアでの検証はまだ報告されていません。
主な機能
- 01強度スペクトルの取得と保存
- 02積分時間の手動・自動調整
- 03暗スペクトルと参照スペクトルの保存
- 04吸光度と透過率の測定
- 05スペクトルピークと半値全幅の検出
活用シーン
- 01平均スペクトルを取得してピークを特定
- 02標準試料系列の吸光度を測定
- 03波長ごとにフィルターの透過率を比較
- 04検出器の飽和を避ける露光調整
MCP 対応
分光器の検出、取得、設定、参照スペクトルの記録、スペクトル分析ツールをMCPクライアントに公開します。読み取り専用モードでは取得と測定が可能ですが、一部の設定や参照操作は無効になります。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx labmcp-ocean-spectrometerLABMCP_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 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
16掲載時のツール一覧 · 2 週間前に更新
このツールにパラメーターはありません。
詳細
Ocean Insight Spectrometer — MCP サーバー
AI エージェントを使ってスペクトルを取得し、積分時間の設定や自動調整を行い、暗スペクトルと参照スペクトルを保存して、ピーク位置と FWHM を含む吸光度と透過率を測定できます。Ocean Insight(Ocean Optics)の分光器で動作します。オープンソースの python-seabreeze ライブラリを使用します。
| パッケージ | labmcp-ocean-spectrometer |
| 測定器 | python-seabreeze がサポートするすべてのモデル:USB2000+、USB2000、USB4000、USB650、Flame-S、Flame-NIR/X、HR2000/HR2000+、HR4000、Maya2000/Pro/LSL、QE65000、QE Pro、STS、NIRQuest256/512、Jaz、Torus、Spark、Apex、Ventana、HDX、ADC1000-USB、HR2/4/6、SR2/4/6、ST-VIS(サポート対象デバイス一覧。一部のモデルでは特定のバックエンドが必要です) |
| インターフェース | USB |
| プロトコル | python-seabreeze 2.x(ドキュメント、ソース。Ocean の SeaBreeze(OOI / OBP USB プロトコル)を実装しています)。TEC の詳細については、Ocean QE Pro Installation and Operation Manual, MNL-0000をご覧ください。 |
| ステータス | 🧪 シミュレーション済み:seabreeze の Spectrometer インターフェースを備えた物理モデルに基づく仮想分光器でテスト済みですが、ハードウェアでは未検証です。ハードウェアテストを報告する |
ハードウェアなしで試す
uvx labmcp-ocean-spectrometer --simulate --check
uvx labmcp-ocean-spectrometer --simulate --option sim_source=hg-ar --check # Hg-Ar calibration lamp
uvx labmcp-ocean-spectrometer --simulate --option sim_model=QE-PRO --check # TE-cooled, 1044 pixels
シミュレーターは、タングステンハロゲンランプ、白色 LED、または Hg-Ar ランプを測定する USB2000+(または QE Pro)をモデル化します。ショットノイズと読み出しノイズ、暗オフセットと暗電流、電気的ダークピクセル、検出器の非線形性、飽和、積分時間変更後に発生する古いスペクトルを再現します。シミュレーションでは、「仮想ユーザー」が store_dark_reference の前にビームを遮り、store_reference の前にブランクを挿入し、measure_absorbance/measure_transmittance の前に色素サンプル(520 nm に吸光度帯、0.8 AU)を挿入します。実際のハードウェアでは、こうした操作を担当の科学者が行います。
分光器を接続する
- python-seabreeze のドキュメントに従って、コンピューターごとに一度だけドライバー/アクセス許可を設定します。
uvx --from seabreeze seabreeze_os_setup # or, inside the environment: seabreeze_os_setup- **Linux:**これにより udev ルールがインストールされます(
/etc/udev/rules.d/10-oceanoptics.rules。sudo が必要です)。その後、分光器を接続し直してください。 - **Windows:**USB ドライバーファイルがインストールされます。
pyseabreezeバックエンドにはlibusb-1.0.dllも必要です(seabreeze の README を参照してください)。 - **macOS:**追加設定なしで動作します。
- **Linux:**これにより udev ルールがインストールされます(
- OceanView(または分光器を使用している他のプログラム)を終了します。同時に開けるプログラムは1つだけです。
- 接続をテストします。
uvx labmcp-ocean-spectrometer --check # the only connected spectrometer uvx labmcp-ocean-spectrometer --address USB2+H01234 --check # choose by serial number uvx labmcp-ocean-spectrometer --option backend=pyseabreeze --check--addressは分光器のシリアル番号です。複数の分光器が接続されている場合にのみ必要です(list_spectrometersで確認できます)。デフォルトのバックエンドはcseabreeze(コンパイル済みの libseabreeze)です。読み込めない場合、seabreeze は純 Python 製のpyseabreeze(pyusb)にフォールバックします。
接続時に、サーバーは積分時間を 10 ms に設定します(--option integration_ms=…)。設定値はデバイスの範囲内に調整されます。seabreeze では積分時間を読み戻せないため、設定が必要です。
MCP クライアントに追加する
Claude Code
claude mcp add spectrometer -- uvx labmcp-ocean-spectrometer
Claude Desktop / Cursor / Windsurf(claude_desktop_config.json、.cursor/mcp.json、…)
{
"mcpServers": {
"spectrometer": {
"command": "uvx",
"args": ["labmcp-ocean-spectrometer", "--address", "USB2+H01234"]
}
}
}
--read-only を追加すると、現在の設定でのデータ取得と吸光度測定を許可しつつ、積分時間の変更、参照スペクトルの保存、TEC の制御をブロックします。他のクライアントの場合は、uvx labmcp config ocean-spectrometer --client vscode を実行して設定スニペットを生成してください(cursor、codex、claude-code も指定できます)。
ツール
| ツール | 種類 | 説明 |
|---|---|---|
acquire_spectrum | 👁 読み取り | 強度スペクトル(生カウント値)を取得します。オプションで平均化、ボックスカー平滑化、補正を適用できます。ダウンサンプリングされた(波長、カウント値)、要約統計、FWHM を含む最も顕著なピーク、および飽和チェックを返します。save_path を指定すると、全スペクトルを新しい .csv ファイルに書き込みます(既存のファイルは上書きされません)。 |
auto_integration_time | 🎛 制御 | 最も明るい生ピクセルが(必要に応じて波長範囲内で)飽和の目標範囲内(デフォルトでは 70-85 %)に入るまで、積分時間を調整します。デバイスの制限と max_integration_time_ms の安全上限を超えないようにします。その後、暗スペクトル/参照スペクトルを再取得してください。 |
detector_cooling_off | 🛑 安全 | 検出器の熱電クーラーをオフにします(検出器は周囲温度まで温まります)。TEC を搭載していない分光器では何も行いません。 |
find_peaks | 👁 読み取り | 最新のスペクトル(強度、吸光度、または透過率)から、位置、高さ、顕著度、FWHM を含むピーク(またはディップ)を検出します。スペクトルがまだ取得されていない場合は、新しい強度スペクトルを取得します。 |
get_command_log | 👁 読み取り | 機器に送信された最新の生コマンドと、機器から受信した応答を返します(新しいものが末尾)。デバッグや実行内容の記録に役立ちます。 |
get_connection_info | 👁 読み取り | 接続されている機器(識別情報、アドレス、シミュレーションか実機か)、サーバーが読み取り専用かどうか、有効な安全制限を報告します。最初に呼び出してください。 |
get_device_info | 👁 読み取り | モデル、シリアル番号、ピクセル数、波長範囲、積分時間の制限、飽和レベル、対応する補正、TEC の有無、保存されている暗スペクトル/参照スペクトルを返します。 |
list_spectrometers | 👁 読み取り | seabreeze が検出できる Ocean の分光器(モデル、シリアル番号、オープン状態)と、このサーバーが接続されている機器を一覧表示します。機器を選択するには、シリアル番号を --address に指定してください。 |
measure_absorbance | 👁 読み取り | 保存されている暗スペクトル D と参照スペクトル R(同じ設定)を使い、現在光路内にあるサンプルの吸光度スペクトル A = -log10((S - D) / (R - D)) を測定します。まずサンプルを挿入するようユーザーに依頼してください。wavelengths_nm で指定した波長の値と、吸光度の最大値も返します。 |
measure_transmittance | 👁 読み取り | 保存されている暗スペクトルと参照スペクトルを使い、現在光路内にあるサンプルの透過率スペクトル %T = 100 (S - D) / (R - D) を測定します。まずサンプルを挿入するようユーザーに依頼してください。wavelengths_nm で指定した波長の値と、最も深い透過率ディップも返します。 |
read_detector_temperature | 👁 読み取り | 熱電クーラーから検出器の温度を読み取ります(QE Pro など、seabreeze が熱電機能を公開している熱電冷却モデルの場合)。 |
reconnect | 🛑 安全 | 機器との接続を閉じて再度開きます(電源を入れ直した場合や、ケーブルを再接続した場合など)。 |
set_detector_cooling | ⚠️ 危険 | setpoint_c で指定した設定温度まで検出器の熱電クーラーを有効にします(熱電冷却モデルのみ)。検出器が安定するまで数分かかります。冷却に伴い暗電流(およびノイズ)が低下します。TEC が冷却できる温度は、周囲温度よりおよそ 15-40 °C 低い温度までです(QE Pro のマニュアル)。min_tec_setpoint_c に照らしてチェックされます。 |
set_integration_time | 🎛 制御 | get_device_info で確認できるデバイスの制限内で、検出器の積分時間(ms)を設定します。新しい時間で再取得するまで、保存済みの暗スペクトル/参照スペクトルは使用できなくなります。 |
store_dark_reference | 🎛 制御 | 吸光度/透過率測定用の暗スペクトルを記録してメモリーに保存します。呼び出す前に、ユーザーに光路を遮断(シャッターを閉じる、ランプを消す、またはファイバーにキャップをする)するよう依頼し、確認を待ってください。現在の積分時間を使用します。 |
store_reference | 🎛 制御 | 参照スペクトル(100 % 透過率)を記録してメモリーに保存します。呼び出す前に、ユーザーにブランク(溶媒を入れた、または空のキュベット)を光路に入れ、ライトを点灯した状態にするよう依頼し、確認を待ってください。暗スペクトルと同じ設定を使用してください。 |
get_connection_info、get_command_log、reconnectは、すべてのLabMCPサーバーに組み込まれています。 |
安全制限
| 制限 | デフォルト | 意味 |
|---|---|---|
max_integration_time_ms | 10000 ms | エージェントが設定できる最長の積分時間(auto_integration_timeにも上限として適用されます) |
max_acquisition_duration_s | 300 s | 1回の取得(スキャン数 × 積分時間)の最長時間 |
min_tec_setpoint_c | −20 °C | TEC設定値の最低温度(TE冷却モデル)。QE Proの温度読み取り値は−20…40 °Cの範囲で線形化されています |
起動時に上書きできます:--limit max_integration_time_ms=60000。制限値にかかわらず、1回の取得(スキャン数 × 積分時間に加え、積分時間変更後に破棄されるスペクトル)は、1回のツール呼び出しにかけられる時間である540秒以内に収める必要があります。同じ理由でauto_integration_timeは早めに停止し、その旨を伝えます。
プロンプトの例
- 「ランプの積分時間を自動調整してから、20スキャン平均スペクトルを取得し、ピークの位置と幅を教えてください。」
- 「Beer–Lambert系列を測定します。暗電流、ブランク、5つの標準液それぞれの測定を順に案内し、各標準液の520 nmでの吸光度を報告してください。」
- 「Hg-Arランプです。400~600 nmの輝線を見つけ、404.66、435.83、546.07 nmとの差を教えてください。」
- 「このフィルターの400~700 nmでの透過率を測定し、~/data/filter_T.csvに保存してください。」
- 「QE Proを−10 °Cまで冷却し、検出器温度が安定したら教えてください。」
補足事項
- 生カウント値。 強度は照度ではなく検出器のカウント値です。放射測定の校正は対象外です。
- 飽和は、平均化した各スキャンの生 ADC カウント値で判定します。ピクセルの値が
max_intensityの 98 % 以上の場合、そのピクセルは飽和しています。飽和したピクセルにはフラグが付けられ、吸光度/透過率の計算から除外されます(ボックスカー平滑化を行うため、ボックスカーの半幅内にあるピクセルも除外されます)。seabreeze の説明によると、一部の検出器はmax_intensityより低い値で飽和するため、ピークは 70–85 % に抑えてください。 - 補正。
correct_dark_countsは光学的にマスクされた電気的ダークピクセルの平均値を差し引き、correct_nonlinearityは EEPROM の多項式を適用します。ドライバーは生スペクトルを読み取り、seabreeze.spectrometers.Spectrometer.intensitiesと同じ式で両方の補正を適用するため、生データに基づく飽和検出は引き続き可能です。吸光度の計算には、保存済みのダーク(store_dark_reference)が引き続き必要です。電気的ダーク補正では固定パターンのダーク信号が除去されないためです。 - 吸光度は A = −log10((S − D)/(R − D)) です。リファレンスのダークを超えるピーク信号が 0.5 % 未満のピクセル、またはリファレンスかサンプルが飽和しているピクセルは、
nullとして返されます。ダーク、リファレンス、サンプルでは、積分時間、ボックスカー、補正設定を一致させる必要があります。サーバーはこれらを適用し、設定が異なる場合はリファレンスの再取得を求めます。 - 積分時間の変更後に取得される最初のスペクトルは破棄されます。 古い設定で一部が積分されている可能性があります。QE Pro のマニュアルによると、返されるのは直近の完了済みスペクトルです。
- ボックスカーは OceanView の規約に従います。
boxcar_half_widthは両側で平均化するピクセル数です。ピークはフル解像度のスペクトルで検出されます。返される曲線は、max_pointsまでビン平均化されます。 - TEC ツールは seabreeze の
thermo_electric機能(enable_tec、set_temperature_setpoint_degrees_celsius、read_temperature_degrees_celsius)を使用します。お使いのモデルでバックエンドがこの機能を公開している場合にのみ動作します。pyseabreeze 2.11 では、NIRQuest512 のみが対応しています。QE Pro での対応状況は libseabreeze(cseabreeze)に依存し、ハードウェアでは未検証です。QE Pro のマニュアルによると、TEC は周囲温度より約 15–40 °C 低く冷却します。 - 公開されていない機能: シャッターとランプの制御(
light_source/strobe_lamp)、トリガーモード、照度校正です。seabreeze のドキュメントにはこれらの機能が記載されていますが、デバイスの対応状況は明示されておらず、pyseabreeze で実装されていないものもいくつかあるため、検証できませんでした。 - 無効なピクセルに隣接するピーク。 無効な(
null)ピクセルは不明値として扱われます。その隣のピクセルはピークとして報告されず、プロミネンスと FWHM はそのピクセルをまたいで計算されません。無効なピクセルが指定範囲内にある場合(たとえば、測定できないほど強いバンドの中心部)、吸光度/透過率の結果に警告が付加されます。 - ダークスペクトルとリファレンススペクトルはサーバーのメモリ上に保存され、
reconnectまたは再起動時に失われます。データを保存するにはsave_pathを指定してください。末尾は.csvである必要があり、存在しないフォルダーは作成されます。既存のファイルが上書きされることはありません(新しい名前を選んでください)。パスはスペクトルの取得前に検証されます。
ハードウェア検証
| モデル | ファームウェア | インターフェース | 検証者 | 日付 |
|---|---|---|---|---|
| まだありません:最初に検証する |
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。