Bluetooth LE Health Sensors について
Bluetooth SIG 標準のヘルス GATT プロファイルに対応する BLE センサーを読み取る MCP サーバーです。生理学、スポーツ科学、睡眠研究向けに心拍・HRV、SpO2、血圧、体温、体重を取得します。研究・ラボ運用専用で、医療用途ではありません。
主な機能
- 01近くの BLE ヘルスデバイスをスキャン
- 02心拍、RR 間隔、HRV の記録
- 03SpO2 と脈拍数の読み取り
- 04血圧、体温、体重測定値の受信
- 05デバイス情報とバッテリー残量の取得
活用シーン
- 01胸部ストラップの記録から HRV 指標を算出
- 02オキシメーターから SpO2 と脈拍を収集
- 03血圧計、体温計、体重計の測定値を待機
MCP 対応
標準ヘルス GATT サービスを読むツールを MCP クライアントに公開します。デバイスの検出、測定値の取得、機器情報の確認に対応し、デバイスへの制御データ書き込みは行いません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx labmcp-ble-healthLABMCP_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 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
11掲載時のツール一覧 · 2 週間前に更新
このツールにパラメーターはありません。
詳細
Bluetooth LE Health Sensors — MCP Server
AI エージェントが、標準の Bluetooth SIG ヘルスプロファイルを実装するあらゆる Bluetooth Low Energy センサーを読み取れるようにします。チェストストラップから心拍数を RR 間隔と HRV とともに記録し、オキシメーターから SpO2 と脈拍数を読み取り、モニター、体温計、体重計から血圧、体温、体重の測定値を取得できます。生理学研究室、スポーツ科学の研究、睡眠/HRV 研究、研究室の運用環境で利用できます。
警告
研究および研究室の運用用途に限ります。医療機器ではありません。 診断、患者のモニタリング、トリアージ、臨床上の意思決定を目的としておらず、規制当局による検証または認可も受けていません。一般向けセンサーの精度には限界がある場合があり、測定値は誤読する可能性のある AI エージェントを介して処理されます。このサーバーの出力を健康に関する意思決定に使用しないでください。個人の測定値は個人データです。倫理審査の承認およびデータ保護規則に従ってください。
| パッケージ | labmcp-ble-health |
| 機器 | Bluetooth SIG プロファイルを実装するあらゆるデバイス:心拍数ストラップ/アームバンド(Heart Rate Service 0x180D)、パルスオキシメーター(Pulse Oximeter Service 0x1822)、血圧計(0x1810)、体温計(Health Thermometer 0x1809)、体重計(Weight Scale 0x181D)、および Battery(0x180F)と Device Information(0x180A) |
| インターフェース | Bluetooth Low Energy。 bleak 経由(Linux/BlueZ、macOS/CoreBluetooth、Windows/WinRT) |
| プロトコル | Bluetooth SIG GATT:GATT Specification Supplement、HRS 1.0、PLXS 1.0.1、BLS 1.1.1、HTS 1.0、WSS 1.0.1;IEEE 11073-20601 SFLOAT/FLOAT は PHD Transcoding White Paper v16 に準拠 |
| ステータス | 🧪 シミュレーション済み:バイト単位で正確な GATT パケットを送出する BLE シミュレーションバックエンドでテスト済みですが、実機では未検証です。実機テストを報告 |
ハードウェアなしで試す
uvx labmcp-ble-health --simulate --check
シミュレーターには、IANA の文書用アドレス範囲から選んだ 6 台のデバイス(アドレス 00:00:5E:00:53:01–06)が用意されています。すべてのサービスを公開する複合型の「ヘルスキット」(デフォルト)と、個別の心拍数ストラップ、オキシメーター、血圧計、体温計、体重計です。たとえば --simulate --address 00:00:5E:00:53:04 のように指定して選択してください。
デバイスを接続する
- デバイスが標準プロファイルを使用していることを確認します。 上記の Bluetooth SIG サービスを実装しているデバイスのみ動作します。多くの一般向けウェアラブルデバイス(ほとんどのスマートウォッチ、多くのフィットネスバンド、複数の血圧計や体重計のブランド)は、代わりに独自のプロトコルを使用しており、標準プロファイルに対応していても、「ペアリング」/「データ転送」モードでのみ使用できるものがあります。心拍数サービスを公開している胸部ストラップが、HRV の測定に最も確実な選択肢です。
- デバイスを解放します。 BLE センサーは通常、一度に 1 つの接続しか受け付けません。接続する前に、メーカーのスマートフォンアプリを閉じるか、スマートフォンの Bluetooth をオフにしてください。
- アドレスを確認します。
--addressを指定せずにサーバーを起動して、エージェントにscan_devicesを実行するよう依頼するか、デバイスをアドバタイズモードにしてから(ストラップを装着する、血圧計の Bluetooth/開始ボタンを押すなど)、--checkを付けて実行します。Linux/Windows ではアドレスは MAC アドレス(AA:BB:CC:DD:EE:FF)です。macOS では、お使いのコンピューター固有の CoreBluetooth UUID です。 - 接続をテストします。
ボンディングが必要なデバイス(血圧計や体重計で一般的)の場合、Linux/Windows ではuvx labmcp-ble-health --address AA:BB:CC:DD:EE:FF --check # Linux / Windows uvx labmcp-ble-health --address 1A2B3C4D-1111-2222-3333-444455556666 --check # macOS--option pair=trueを追加してください。macOS ではシステムのペアリングプロンプトが自動的に表示されます。Linux でデフォルト以外のアダプターを選択するには--option adapter=hci1を指定します。デバイスの検出時間を延長するには--option connect_timeout_s=40を指定してください(最大 60 秒)。
macOS:サーバーを起動するターミナル(または MCP クライアントアプリ)に Bluetooth のアクセス許可が必要です(「システム設定」›「プライバシーとセキュリティ」›「Bluetooth」)。許可がないと、Bluetooth にアクセスした時点で macOS がプロセスを終了するため、エラーメッセージが表示される前に終了コード 134 で終了します。
MCP クライアントに追加する
Claude Code
claude mcp add hr-strap -- uvx labmcp-ble-health --address AA:BB:CC:DD:EE:FF
Claude Desktop/Cursor/Windsurf(claude_desktop_config.json、.cursor/mcp.json、…)
{
"mcpServers": {
"hr-strap": {
"command": "uvx",
"args": ["labmcp-ble-health", "--address", "AA:BB:CC:DD:EE:FF"]
}
}
}
すべてのツールは読み取り専用です(デバイスの状態は変更されず、制御ポイントへの書き込みも行われません)。そのため、--read-only を指定しても違いはありません。複数のセンサーを同時に使用する場合は、デバイスごとにサーバーエントリーを 1 つ実行してください。その他のクライアントでは、uvx labmcp config ble-health --address AA:BB:CC:DD:EE:FF --client vscode を実行して設定例を生成してください(cursor、codex、claude-code も指定できます)。
ツール
| ツール | 種類 | 説明 |
|---|---|---|
get_command_log | 👁 読み取り | 機器に送信したコマンドと、機器から受信した応答の最新の生データを返します(新しいものが末尾)。デバッグや操作記録に役立ちます。 |
get_connection_info | 👁 読み取り | 接続中の機器(識別情報、アドレス、シミュレーションか実機か)、サーバーが読み取り専用かどうか、有効な安全制限を報告します。最初に呼び出してください。 |
get_device_info | 👁 読み取り | デバイスの識別情報(メーカー、モデル、シリアル番号、ファームウェア)、公開している標準のヘルスサービス、および機能を読み取ります。 |
read_battery | 👁 読み取り | デバイスのバッテリー残量を読み取ります(Battery Service、0~100%)。 |
read_pulse_oximetry | 👁 読み取り | パルスオキシメーターから SpO2(%)と脈拍数を読み取ります。数秒間の平均値、または単回のスポット測定値を返します。 |
read_temperature | 👁 読み取り | 体温計から温度測定値が送信されるまで待ち、℃で返します。 |
read_weight | 👁 読み取り | 体重計から体重測定値(kg)が送信されるまで待ちます。体重計が送信する場合は、BMI と身長も返します。 |
reconnect | 🛑 安全 | 機器との接続を閉じて再度開きます(電源を入れ直した後やケーブルを抜き差しした後など)。 |
record_heart_rate | 👁 読み取り | duration_s の間、心拍数を記録します。bpm の系列、RR 間隔、および時間領域の HRV(平均心拍数、SDNN、RMSSD、pNN50)を返します。 |
scan_devices | 👁 読み取り | 周辺の Bluetooth LE デバイスをスキャンし、アドレス、名前、信号強度、およびアドバタイズされているヘルスサービスを返します。--address の設定がなくても動作します。 |
wait_for_blood_pressure | 👁 読み取り | 血圧計から測定値が送信されるまで待ちます。収縮期血圧、拡張期血圧、平均動脈圧(mmHg)、脈拍数を返します。 |
get_connection_info、get_command_log、reconnect は、すべての LabMCP サーバーに組み込まれています。
安全制限
| 制限 | デフォルト | 意味 |
|---|---|---|
max_record_duration_s | 600 s | エージェントが開始できる、心拍記録または連続酸素濃度測定の平均化ウィンドウの最長時間 |
max_wait_s | 300 s | ツールが血圧、体温、体重、またはスポットチェックの測定値を待てる最長時間 |
起動時に上書きします:--limit max_record_duration_s=1800。多くの MCP クライアントには、ツール呼び出しごとの独自のタイムアウトも設定されているため、長時間の記録では、こちらも延長が必要になる場合があります(例:Claude Code の MCP_TOOL_TIMEOUT)。
プロンプトの例
- 「胸部ストラップで心拍を5分間記録し、平均 HR、SDNN、RMSSD を教えてください。また、生の RR 間隔を ~/hrv/p07_baseline.csv に保存してください。」
- 「近くにある心拍ストラップをスキャンし、信号が最も強いものを教えてください。」
- 「血圧計の測定値を待ってください。今からカフを作動させます。収縮期血圧/拡張期血圧と、デバイスが体動または不整脈を検出したかどうかを報告してください。」
- 「オキシメーターで30秒間の SpO2 と脈拍数を平均し、使用できなかったサンプル数を教えてください。」
- 「参加者が体重計に乗ったら測定値を読み取り、デバイスのタイムスタンプとともに体重と BMI を記録してください。」
- 「セッションを始める前に、ストラップのバッテリー残量を教えてください。」
注意事項
- 測定機器はデータを送信するものであり、ポーリングには応答しません。 血圧計、体温計、体重計、スポットチェック用パルスオキシメーターは、測定が完了したときにのみ値を通知します(こうした特性は読み取れません)。まずツールを呼び出してから測定してください。多くのモニターは測定直後にしかアドバタイズしないため、ツールはタイムアウトまでスキャンと再接続を続けます(パルスオキシメーターでは
mode="spot_check"が必要です。デバイスが対応するモードを確認するには、まずautoで接続する必要があります)。 - 一度に測定できるのは1件です。 測定を開始すると、同じサーバーで実行中の測定(たとえば、ツール呼び出しが MCP クライアントでタイムアウトした記録)はキャンセルされます。
reconnectも実行中の測定をキャンセルし、キャンセルされた呼び出しはエラーを返します。 - 不正なパケットは記録全体を破棄せずにスキップされ、ログに記録されます(
get_command_log)。record_heart_rateとread_pulse_oximetryはmalformed_packetsでその件数を報告します。 save_path(record_heart_rate)には新しい.csvファイルを指定する必要があります。~は展開され、存在しないフォルダーは作成されます。既存のファイルが上書きされることはありません。記録開始前に確認されます。- 保存済みの測定値。 モニターは接続時に、未送信の保存済み測定値を古い順に連続して送信します。ツールは最初の測定値を受信してから1.5秒間リスニングを続け、最新の測定値を結果として返し、それより古い測定値は
other_measurementsに一覧表示します。デバイスの時計時刻はdevice_timestampに格納されます(デバイスの現地時刻です。時計が設定されていない場合は誤っていることがよくあります)。 - 特殊値(IEEE 11073 の NaN、NRes、±INF)は数値に変換されず、説明とともに
nullとして報告されます(special_values、unavailable_samples)。パルスオキシメーターは、取得中の最初の数秒間に NaN を送信することがよくあります。 - 単位: kPa 単位の血圧は mmHg に(1 kPa = 7.500617 mmHg)、°F は °C に、lb は kg に変換されます。
unit_reportedにはデバイスから送信された単位が示されます。重量の分解能は Weight Scale の仕様に基づき 0.005 kg / 0.01 lb です。0xFFFFは「測定失敗」を意味し、weight_kg: nullとして返されます。消費エネルギーの単位は kJ です(HRS 1.0)。 - HRV はセンサーが送信する RR 間隔(単位:1/1024 秒)から算出されます。指標は SDNN(標本標準偏差)、RMSSD、pNN50 です。0.3~2.0秒の範囲外にある RR 間隔はアーチファクトとして除外されます。それ以上のアーチファクト補正や異所性拍動の編集は行われません。無線で通知が失われた場合、そのギャップをまたぐ連続する差分は真の拍動間差ではありません。光学式の手首センサーは、RR 間隔をまったく送信しないことがよくあります。探索的研究以外の用途には、検証済みの ECG システムを使用してください。
- Enhanced Blood Pressure Measurement、Record Access Control Point(モニターのメモリー全体のダウンロード)、Current Time、User Data サービスは実装されていません。デバイスに何かを書き込むことはありません。
- Bluetooth のペアリング、ボンディングキー、OS の権限はオペレーティングシステムが管理します。サーバーが PIN を参照することはありません。
ハードウェア検証
| モデル | ファームウェア | インターフェース | 検証者 | 日付 |
|---|---|---|---|---|
| まだありません:最初の検証者になる |
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。