Physbound について
Physboundは、RFや物理計算を物理限界に照らして検証する、エンジニア向けのMCPサーバーです。6種類の計算ツールが、該当する限界値や説明を含む構造化された違反情報を返します。
主な機能
- 01RFリンクバジェットとアンテナの検証
- 02シャノン容量の検証
- 03熱雑音と受信感度の計算
- 04レーダー距離と曖昧性の検証
- 05LaTeX説明付きの構造化違反情報
活用シーン
- 01無線スループットの主張の確認
- 02アンテナ利得の推定値の検証
- 03レーダーの距離と速度の主張の評価
MCP 対応
Physboundは、MCP対応クライアントに6種類の検証済み物理計算ツールを提供します。stdioで通信し、HTTPでのサーバー実行にも対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
6掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| distance_m | number | はい | リンク距離(メートル、> 0) |
| frequency_hz | number | はい | 搬送波周波数(Hz、> 0) |
| rx_losses_db | number | いいえ | 受信側のその他の損失(dB、デフォルト:0) |
| tx_losses_db | number | いいえ | 送信側のその他の損失(dB、デフォルト:0) |
| tx_power_dbm | number | はい | 送信電力(dBm) |
| aperture_efficiency | number | いいえ | 標準利得の警告しきい値に用いる効率 (デフォルト:パラボラアンテナでは 0.55。ハードリミットは max(eta = 1 の開口値、Harrington 限界)) |
| rx_antenna_gain_dbi | number | はい | 受信アンテナ利得(dBi) |
| tx_antenna_gain_dbi | number | はい | 送信アンテナ利得(dBi) |
| rx_antenna_diameter_m | any | いいえ | 受信アンテナの直径(メートル、開口チェックを有効化) |
| tx_antenna_diameter_m | any | いいえ | 送信アンテナの直径(メートル、開口チェックを有効化) |
詳細
PhysBound
物理層リンター — 工学ワークフローにおける AI の幻覚を検出するため、RF および物理計算を厳密な物理限界と照合して検証するMCP サーバーです。
LLM はもっともらしく聞こえる RF の数値を生成しますが、それらは基本的な物理法則に反していることがあります。たとえば、シャノン限界を超えるスループット、アンテナ開口から実現できない利得、レーダー方程式が許さない探知距離などです。PhysBound は、CODATA 定数(SciPy 経由)と次元解析(Pint 経由)に基づいて検証された 6 つの計算ツールを、MCP 互換の AI アシスタントに提供します。不可能な主張に対しては、違反した法則、計算された限界、LaTeX による説明を含む構造化された PhysicalViolationError 応答を返し、失敗を黙って見過ごすことはありません。
| ツール | 検証内容 |
|---|---|
rf_link_budget | Friis のリンクバジェット:FSPL、受信電力、開口限界/Harrington 限界に対するアンテナ利得 |
shannon_hartley | チャネル容量 C = B log2(1 + SNR) に照らしたスループットの主張 |
noise_floor | 熱雑音 kTB、Friis の雑音指数カスケード、受信機感度 |
radar_range | 単基地レーダー方程式に照らした探知距離の主張 |
antenna_gain | 単一アンテナの利得限界、ビーム幅、遠方界距離 |
radar_ambiguity | パルスドップラーの不確定範囲/速度、ドップラーエイリアシング、距離分解能 |
インストール
PhysBound は、PyPI で公開されている標準的な stdio MCP サーバーです。推奨される起動コマンドは uvx physbound です。分離された環境で最新リリースを取得して実行するため、手動でインストールする必要はありません。
初回起動: 初回は
uvxが約 60 MB の依存関係(SciPy、NumPy)をダウンロードします。ターミナルで一度uvx physboundを実行して事前にキャッシュしてください(終了するには Ctrl-C を押します)。以降の起動は瞬時です。
Claude Code
claude mcp add physbound -- uvx physbound
Claude Desktop
claude_desktop_config.json に追加します(macOS:~/Library/Application Support/Claude/、Windows:%APPDATA%\Claude\)。
{
"mcpServers": {
"physbound": {
"command": "uvx",
"args": ["physbound"]
}
}
}
Cursor、Windsurf、その他の MCP クライアント
上記と同じ JSON サーバーエントリを、クライアントの MCP 設定ファイルに追加します(Cursor:~/.cursor/mcp.json、Windsurf:~/.codeium/windsurf/mcp_config.json)。
uv を使用しない場合
通常の Python インストールを希望する場合(Python 3.12 以降が必要です):
pip install physbound
その後、クライアントの設定で "command": "physbound"(args は指定しません)を設定します。
設定が完了したら、アシスタントに RF に関する質問をしてみてください — 「帯域幅 20 MHz、SNR 15 dB のチャネルで 500 Mbps をサポートできますか?」 — 物理法則で検証された数値で回答します。
コマンドラインの使用方法
同じ検証機能をターミナルから直接利用できます。物理法則への違反があると終了コード 1 が返されるため、スクリプトや CI パイプラインで役立ちます。
$ physbound check shannon --bandwidth-hz 20e6 --snr-db 15 --claimed-throughput-bps 500e6
PHYSICS VIOLATION [Shannon-Hartley Theorem]
Claimed throughput 500000000.0 bps exceeds Shannon limit of 100556153.5 bps by 397.2%
Computed limit: 1.00556e+08 bps
Claimed value: 5e+08 bps
$ echo $?
1
$ physbound check shannon --bandwidth-hz 20e6 --snr-db 15 --claimed-throughput-bps 100e6
Shannon-Hartley Capacity: ... # exit code 0
利用可能なサブコマンド:check {link-budget, shannon, noise, radar-range, antenna, radar-ambiguity}(フラグは MCP ツールのパラメーターに対応します。完全な構造化結果を出力するには --json を追加します)、および MCP サーバーを HTTP 経由で実行するための serve --transport {stdio,http} です。詳細は physbound check --help を参照してください。
LLM が間違えること
PhysBound のテストスイートで検出される、実際に起きた 16 種類のハルシネーションパターン:
| # | カテゴリー | LLM のハルシネーション | PhysBound による検証結果 | 判定 |
|---|---|---|---|---|
| 1 | シャノン=ハートレー | SNR 15 dB の 20 MHz 802.11n チャネルは 500 Mbps を達成できる | シャノン限界:100.6 Mbps(500 Mbps ではありません) | 検出 |
| 2 | シャノン=ハートレー | SNR 20 dB の 100 MHz 5G チャネルは 2 Gbps を実現する | シャノン限界:665.8 Mbps(2000 Mbps ではありません) | 検出 |
| 3 | アンテナ開口 | 1 GHz の 30 cm パラボラアンテナは 45 dBi の利得を持つ | 物理的限界:12.1 dBi(ハリントン);開口効率 η=1:9.9 dBi;一般的なパラボラアンテナ:7.4 dBi(η=0.55)(45 dBi ではありません) | 検出 |
| 4 | 熱雑音 | 室温での受信機雑音指数は -180 dBm/Hz | 熱雑音指数:290K で -174.0 dBm/Hz(-180 dBm/Hz ではありません) | 検出 |
| 5 | リンクバジェット/FSPL | 2.4 GHz の Wi-Fi は、送信電力 20 dBm で 10 km 先に -40 dBm の受信電力を届けられる | 10 km での実際の受信電力:-94.1 dBm(-40 dBm ではありません) | 検出 |
| 6 | リンクバジェット/FSPL | アンテナ利得 0 dBi の 12 GHz、1W 送信機は、GEO に -80 dBm で到達する | GEO での実際の受信電力:-175.1 dBm(-80 dBm ではありません) | 検出 |
| 7 | リンクバジェット/FSPL | アンテナ利得 0 dBi、送信電力 0 dBm の 2.4 GHz Bluetooth は、1 km 先に -60 dBm で到達する | 1 km での実際の受信電力:-100.1 dBm(-60 dBm ではありません) | 検出 |
| 8 | シャノン=ハートレー | SNR 10 dB の 10 MHz LTE チャネルは 1 Gbps をサポートする | シャノン限界:34.6 Mbps(1000 Mbps ではありません) | 検出 |
| 9 | 雑音カスケード | 受信機の NF は段の順序によらず同じ:LNA(20dB/1.5dB) + Mixer(10dB/8dB) | LNA が先:1.66 dB、Mixer が先:8.03 dB(損失:6.4 dB) | 検出 |
| 10 | アンテナ開口 | 900 MHz の 10 cm パッチアンテナは 20 dBi の利得を持つ | 物理的限界:4.4 dBi(ハリントン、D < lambda);開口効率 η=1:-0.5 dBi;一般的な値:-3.1 dBi(η=0.55)(20 dBi ではありません) | 検出 |
| 11 | レーダー方程式 | 送信電力を 2 倍にすると、レーダーの検出距離も 2 倍になる | 距離の増加率は 1.189(2^(1/4) = 1.189)であり、2.0 ではありません | 検出 |
| 12 | レーダー方程式 | 1 kW の X バンドレーダー(利得 30 dBi)は、小型ドローン(RCS 0.01 m^2)を 200 km 先で検出できる | RCS 0.01 m^2、1 kW の X バンドレーダーの最大距離:2.7 km(200 km ではありません) | 検出 |
| 13 | アンテナ利得 | 12 GHz の 0.5 m ユーザー端末用パラボラアンテナは 50 dBi の利得を持つ | 物理的限界:36.1 dBi(ハリントン);一般的なパラボラアンテナ:33.4 dBi(η=0.55)(50 dBi ではありません) | 検出 |
| 14 | アンテナ利得 | 10 GHz の 3 m パラボラアンテナは 10 m 先で遠方界にあるため、そこで利得を測定できる | 遠方界距離 2D^2/lambda = 600 m;10 m は近傍界です | 検出 |
| 15 | レーダー曖昧性 | PRF 10 kHz の 10 GHz レーダーは、500 m/s を曖昧さなく測定できる | v_ua = lambda*PRF/4 = +/-74.9 m/s(不感速度 149.9 m/s);500 m/s はエイリアシングします(500 m/s ではありません) | 検出 |
| 16 | レーダー曖昧性 | 10 GHz のパルスドップラーレーダーは、150 km と +/-300 m/s を同時に曖昧さなくカバーできる | R_uav_ua = clambda/8 = 1.123e+06 m^2/s(PRF に関係なく一定);主張された値は 4.5e+07 m^2/s(40 倍大きすぎます) | 検出 |
pytest tests/test_marketing.py -s により自動生成
ツール
すべての数式の詳細な導出、出典、計算例については、docs/formulas.md をご覧ください。
rf_link_budget
Friis伝送方程式を使用して完全なRFリンクバジェットを計算し、アンテナ利得が物理的な限界を超えていないか検証します。
例: 「送信電力20 dBm、送信アンテナ利得10 dBi、受信アンテナ利得3 dBiの2.4 GHzリンクで、100 m先の受信電力はいくらですか?」
FSPL、受信電力、波長を返します。また、アンテナの直径が指定された場合は、利得の上限チェックも行います。ハード上限 G_max = max((pi D / lambda)^2, (ka)^2 + 2ka)(η = 1の開口値、または電気的に小さなアンテナに対するハリントンの上限)を超える利得は拒否されます。一般的なパラボラアンテナの利得値(η = 0.55)を超える利得は、警告付きで受け付けられます。また、遠方界距離 2D^2/lambda 内であることを警告し、負の損失は拒否します。
shannon_hartley
シャノン・ハートレーのチャネル容量 C = B log2(1 + SNR) を計算し、スループットの主張を検証します。
例: 「SNRが15 dBの20 MHzチャネルで、500 Mbpsをサポートできますか?」
理論上の容量、スペクトル効率、その主張が物理的に可能かどうかを返します。シャノン限界を超える主張については、超過率も正確に示します。
noise_floor
熱雑音電力 N = k_B T B を計算し、Friisの雑音公式を使用して多段受信機の雑音指数をカスケード計算し、受信機感度を算出します。
例: 「290 K、1 MHzの受信機に2段のLNAチェーンがある場合、雑音フロアはいくらですか?」
dBmおよびワット単位の熱雑音、カスケード雑音指数、実効入力雑音温度 T_e = 290 K * (F - 1)、受信機感度を返します。
radar_range
単基地レーダーの距離方程式 R_max = [P_t G^2 lambda^2 sigma / ((4pi)^3 S_min L)]^(1/4) を計算し、探知距離の主張を検証します。
例: 「利得30 dBiの1 kW Xバンドレーダーで、レーダー断面積0.01 m^2のドローンを200 km先から探知できますか?」
最大探知距離、最小探知信号、波長、中間計算値を返します。電力を2倍にすると距離も2倍になるという、よくある4乗根の誤りを検出します。
antenna_gain
アンテナ1基について、直径または物理面積から利得の限界、ビーム幅、遠方界距離を解析します。利得の主張を任意で検証できます。
例: 「12 GHzで0.5 mのパラボラアンテナなら、本当に50 dBiの利得が得られますか? 想定されるビーム幅はいくらですか?」
物理的な利得上限(開口上限またはハリントンの上限と、どちらが適用されるか)、指定された効率での一般的な利得(デフォルトは0.55)、実効開口面積、半値幅の推定値、遠方界距離 2D^2/lambda を返します。また、利得の主張が指定されている場合は、そこから求めた開口効率と妥当性も返します。
radar_ambiguity
搬送周波数とPRFを指定して、パルス・ドップラーレーダーの曖昧性の限界を計算します。
例: 「PRFが10 kHzの10 GHzレーダーで、500 m/sの目標を150 km先まで曖昧さなく測定できますか?」
非曖昧距離 R_ua = c / (2 PRF)、非曖昧速度 v_ua = lambda PRF / 4、ブラインド速度、ドップラーシフトと見かけの速度(エイリアス後)、距離分解能(c tau / 2、パルス圧縮時は c / 2B)、最小距離、デューティ比、距離・ドップラーのジレンマを表す不変量 R_ua v_ua = c lambda / 8 を返します。PRFまたはパルスでは実現できない距離、速度、分解能の主張は拒否します。
物理法則による保証
すべての計算は、厳格な物理的限界に照らして検証されます。
- 光速:
c = 299,792,458 m/s— 例外はありません - 熱雑音の下限: 290 K における
N = -174 dBm/Hz— IEEE 標準の基準値です - シャノン限界:
C = B log2(1 + SNR)— この値を超えるスループットは主張できません - アンテナ利得の限界:
G_max = max((pi D / lambda)^2, (ka)^2 + 2ka)— 平面開口では eta = 1 の開口値、直径 D の球内にあるすべてのアンテナではハリントン限界です。eta = 0.55 は警告しきい値であり、限界値ではありません - レーダー方程式:
R_max = [P_t G^2 lambda^2 sigma / ((4pi)^3 S_min)]^(1/4)— 到達距離は4乗根の法則に従います - 受信機感度:
S_min = k (T_A + T_0 (F - 1)) B * SNR。T_e = T_0 (F - 1)は290 Kを基準とします - 非曖昧距離:
R_ua = c / (2 PRF)— これを超えるエコーは、後続のパルス間隔に折り返されます - 非曖昧速度:
v_ua = lambda PRF / 4— ドップラーはPRFでサンプリングされるため、|f_d| <= PRF/2です - 距離・ドップラーのジレンマ:
R_ua * v_ua = c lambda / 8— 搬送波が同じであれば、PRFをどのように選んでもこの限界は超えられません
違反がある場合、サイレントに失敗するのではなく、LaTeXによる説明を含む構造化された PhysicalViolationError 応答が返されます。
使用例とドキュメント
- ハルシネーションの検出 — 5つの実際のLLMの失敗パターンを、完全なJSON応答とともに解説します
- インタラクティブデモノートブック — 物理エンジンを直接呼び出すJupyterノートブックです
- 数式リファレンス — すべての数式、定数、検証ガードとその出典をまとめています
- 変更履歴 — リリース履歴
開発
uvとPython 3.12以降が必要です(CIでは3.12~3.14を対象としています)。
# Clone and install
git clone https://github.com/JonesRobM/physbound.git
cd physbound
uv sync --all-extras
# Run checks
uv run pytest tests/ -v
uv run ruff check src/ tests/
uv run mypy src/physbound/
# Regenerate the hallucination table above
uv run pytest tests/test_marketing.py -s
# Start the MCP server locally
uv run physbound
検証対象となる物理領域の拡充につながる貢献を歓迎します。アーキテクチャガイドと、新しいバリデーターを追加する手順については、CONTRIBUTING.mdをご覧ください。
ユースケース
- RFシステム設計レビュー — リンクバジェット、受信機感度、雑音カスケードを検証します
- 通信事業者向け提案の審査 — 実現不可能なスループットの主張を、顧客に提示される前に検出します
- レーダーシステムの設計 — 探知距離、PRFの選択、曖昧さに関するトレードオフを妥当性確認します
- 教育ツール — 検証済みの計算を通じて、シャノン・ハートレーの定理、フリース伝達公式、熱雑音を教えます
- 物理計算のCI/CD — エンジニアリングのパイプラインに検証ステップとして組み込みます
サポート
PhysBoundが業務に役立つ場合は、コーヒーをおごることをご検討ください。
ライセンス
MIT Licenseです。LICENSEをご覧ください。
関連情報
- Model Context Protocol — AIツール統合のためのオープン標準です
- MCP Server Registry — MCPサーバーの公式ディレクトリです
- FastMCP — MCPサーバーを構築するためのPythonフレームワークです
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。