Kshana PNT-resilience simulator について
Kshana PNT-resilience simulatorは、検証済みの測位・航法・時刻同期シミュレーションを実行するMCPサーバーです。モデルの推測ではなく、計算結果や出典、VALIDATEDまたはMODELLEDの表示が必要なAIアシスタント利用者向けです。
主な機能
- 01TOMLシナリオの実行と検証
- 02レポートとアニメーションの生成
- 03GNSS受信機・船舶ログの評価
- 04相互運用・軌道形式へのエクスポート
- 05署名付き証拠パックの作成と検証
- 06干渉マップとIQ記録の分析
活用シーン
- 01GNSSレジリエンスシナリオを実行して評価指標を確認
- 02受信機ログから信頼性の低下を調査
- 03船舶ログの一部から再現可能な証拠を作成
- 04外部ツール向けにシナリオデータを出力
MCP 対応
stdio経由でKshanaのシミュレーション、評価、レポート、エクスポート用ツールをMCPクライアントに提供します。エンジンを実行し、JSON結果や任意のチャート・ファイルを返します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y kshana-mcpKSHANA_MCP_IQ_DIRFolder the GNSS IQ tools (iq_scene, iq_acquire, iq_track, iq_frontend, iq_info, iq_campaign, iq_campaign_status) may read and write; every IQ path argument is relative to it. Unset leaves the IQ file tools off; the other tools are unaffected. In a container, mount a volume and point this at it.KSHANA_MCP_IQ_MAX_SAMPLESMost complex samples one IQ call may generate or process (default 50000000).ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
kshana-mcp:AI アシスタントに質問すると、エンジンが答えます
kshana-mcp は、PNT(測位、航法、時刻同期)のレジリエンスをシミュレーションするオープンソースソフトウェアであるKshanaのModel Context Protocol(MCP)サーバーです。AI(人工知能)アシスタントから実際のエンジンを実行して、その JSON(JavaScript Object Notation)出力を読み取れるため、数式を推測する必要はありません。stdio(標準入力および標準出力)経由で通信し、Cursor や JetBrains AI Assistant / Junie など、MCP 対応のクライアントで利用できます。
Kshana が検証している数理モデルは、LLM が誤った推測をしやすい分野そのものです。SGP4(簡易一般摂動 4)軌道伝播、IAU(国際天文学連合)の座標系、アラン偏差、GNSS(全球測位衛星システム)の可用性と DOP(精度低下率)、ARAIM(高度受信機自律完全性監視)の保護レベル、GNSS と INS(慣性航法システム)の融合、量子センサーモデルなどが含まれます。質問すると、アシスタントが実際のシナリオを実行し、根拠情報と VALIDATED または MODELLED のラベルが付いた評価指標を取得します。
ツール
| ツール | 機能 |
|---|---|
run_scenario | TOML(Tom's Obvious, Minimal Language)定義からシナリオを実行し、概要と完全な結果 JSON(JavaScript Object Notation:評価指標、曲線)を返します。include_chart を指定すると、チャートを SVG(Scalable Vector Graphics)で返します。 |
list_scenario_kinds | 組み込みの 87 種類のシナリオと、その説明、必須/任意フィールドを一覧表示します。これにより、エージェントは有効なシナリオを作成できます。 |
validate_scenario | 事前チェックとして、TOML を解析し、実行せずに種類を検出します。 |
list_example_scenarios | 同梱の参照シナリオを JSON で表示します。各項目には name、kind、および内容を示す 1 文の説明が含まれます。任意で kind による絞り込みができます。すべてのサンプルはそのまま実行できるため、種類に応じた有効な TOML を作成する最も手早い方法です。 |
get_example_scenario | 同梱の参照シナリオ 1 件の TOML テキストを、scenarios/ 内のファイルとバイト単位で完全に一致する形で返します。 |
report_scenario | シナリオを実行し、レポートを返します。経営陣向け概要、入力、単位と VALIDATED または MODELLED のラベルが付いたすべての指標、イベント、実行された機能、および再現性記録が含まれます。format は json(既定)または html(印刷可能な単一ファイルのページ)です。 |
animate_scenario | シナリオを実行し、時系列をアニメーションとして返します。形式は svg(既定)、html(自己完結型プレーヤー)、または frames(返信あたり最大 120 フレーム)です。最初のコンテンツ項目は描画内容の JSON 概要で、その後にファイルが続きます。サンプリングされた時間軸がない種類は、理由を示して拒否されます。 |
list_export_formats | シナリオで利用できる相互運用形式(czml、kml、geojson、stk、sigmf)、利用できない場合の理由、および各書き出し機能が準拠する仕様を表示します。シナリオは実行しません。 |
export_interop | シナリオを CZML(Cesium Language)、KML(Keyhole Markup Language)、GeoJSON、STK(Systems Tool Kit)エフェメリス .e、または SigMF(Signal Metadata Format)で書き出します([iq] ブロックを持つ spectrum シナリオの場合)。最初のコンテンツ項目はファイルの JSON インデックス(接尾辞、サイズ、エンコーディング、SHA-256 ダイジェスト(256-bit Secure Hash Algorithm))で、その後にファイルが続きます。バイナリの SigMF サンプルファイルは base64 形式です。 |
import_route | GeoJSON LineString ルートを、ウェイポイント軌跡を飛行するシナリオ(terrain-nav、terrain-slam、gravity-map、combined-altpnt)に書き込み、新しい TOML を返します。 |
export_sp3 | orbit シナリオのコンステレーションを、SP3-c(Standard Product 3、revision c)精密エフェメリスとして書き出します。 |
export_omm | orbit シナリオの要素を、CCSDS(Consultative Committee for Space Data Systems)502.0-B-2 OMM(Orbit Mean-elements Message)カタログとして書き出します。 |
export_oem | orbit シナリオの状態系列を CCSDS OEM(Orbit Ephemeris Message)2.0 エフェメリスとして書き出します。飛行力学ツール(GMAT(General Mission Analysis Tool)、Orekit、STK(Systems Tool Kit))が読み取る TEME(true equator, mean equinox)の位置 および 速度の系列です。位置のみの export_sp3 を補完する、速度を含む形式です。 |
export_table_csv | シナリオを実行し、再現性テーブルを CSV(comma-separated values)として返します。CLI(command-line interface)が <scenario>.table.csv に書き出すものとバイト単位で安定したテーブルです。realtime-frame-eop、lunar-time-budget、lunar-jamming、telecom-timing、leo-navmsg(kepler16 または kepler-rac メッセージモデルでの encode-decode 解析)、および export_site_lat_deg と export_site_lon_deg が設定された moonlight-service-volume のみがテーブルを出力します。それ以外の種類では、これらの種類を示すエラーを返します。 |
sky_geometry | 方位角に応じたスカイラインの下での天空ジオメトリを返します。地点、時刻、コンステレーションのプリセット、2 行軌道要素セット(tle。SGP4 で UTC epoch に伝播)、または方位角/仰角や ECEF で指定した衛星を入力できます。表示される衛星とスカイラインに隠れる衛星、gnss_lib_py で検証された DOP カーネルによる GDOP/PDOP/HDOP/VDOP/TDOP、東・北・上方向の余因子と共分散(システムごとに 1 つのクロック、または共通の 1 つのクロック)、および水平誤差楕円を返します。request の代わりに skyline_preset を指定すると、出典情報と 1 度ごとのカットを含む REPRESENTATIVE プリセットを返します。MODELLED。注意事項を含みます。MCP 上でのモンテカルロ計算は行いません。docs/SKYLINE.md を参照してください。 |
assess_receiver_log | 実際の GNSS(global navigation satellite system)受信機ログの信頼性を評価します。TOML でログの format(ubx、rinex、android、nmea、sbf)を指定し、バイト列を text または base64 としてインラインで渡します。このツールは信頼性モニター(搬送波対雑音密度の低下、ロック喪失、AGC(automatic gain control)、妨害指標、位置ジャンプ、および RINEX と放送航法データを使用する場合は RAIM(receiver autonomous integrity monitoring)とクロック補助モニター)を実行し、いつ、なぜ測位結果が信頼できなくなったかを返します。任意の [[events]] セクションと [compare] セクションを使い、指定されたイベントと予測 C/N0 低下を、指定された許容範囲に照らして採点できます。[platform] kind = "vessel" テーブルを指定すると、海事用モニターが選択され、各エポックの 0~100 の信頼スコアと、減点したモニターが追加されます(注意事項あり、MODELLED)。ログは text または base64 としてインラインで渡します(最大 4 MiB)。要求に応じてチャートとエポックごとの CSV を返します。docs/RECEIVER-TRUST.md を参照してください。 |
assess_vessel_stream | 上限付きの NMEA 0183 抜粋(最大 2 MiB、20,000 エポック。較正ウィンドウを含む必要があります)を、kshana receiver-trust live と同じ方法で評価します。エポックごとの信頼状態と 0~100 のスコア、減点したモニター、概要、および最後の $PKSHT を返します。ライブコマンドの上限付き形式であり、ソケットは開かず、ポートにも何も書き込みません。ゲート、--listen、およびテレメトリー書き出し機能(Prometheus、OTLP、syslog)はコマンドライン専用です。注意事項のみ、MODELLED。docs/MARITIME-TRUST.md を参照してください。 |
assess_vessel_log | 船舶の NMEA 0183 ログ(最大 4 MiB)をバッチ処理で評価します。セッション TOML で船舶の制限値を指定します。スコアモデルと、各エポックの 0~100 のスコアおよび減点内容を返します(返信には状態ごとの件数と、劣化または信頼できない最初の 200 エポックが含まれます)。注意事項のみ、MODELLED。 |
jammertest_import | 公開されている Jammertest のテストカタログと送信計画(NPRA/jammertest-plan、MIT)を、スケジュール上の真値として読み込みます(kshana jammertest import)。1 つのテストエリアの時間枠を receiver-trust イベントに変換し、各ラベルにカタログ ID と年を含めます。記録されたオンエア時刻ではなく、予定された時間枠です。計画に含まれる連絡先フィールドは読み取りません。MODELLED。docs/JAMMERTEST.md を参照してください。 |
jammertest_score | receiver-trust ログをそのスケジュールに照らして採点します(kshana jammertest score)。各テストについて、検出レイテンシ、アラームの見逃し、回復までの時間、およびすべての時間枠外での誤警報を返します。テキストログは log、バイナリ(ubx、sbf)は log_base64 として渡します。署名付きパックにはキーが必要です(コマンドラインのみ)。注意事項のみ、MODELLED。 |
create_evidence_pack | 船舶ログの時間範囲について、署名付き証拠パックを作成します(kshana receiver-trust evidence)。対象範囲の生ログバイト列、設定、エポックごとの結果と理由、概要ページ、およびすべての SHA-256 とハッシュチェーンを含むマニフェストを含み、Ed25519 で署名します。署名用シードは返却もログ出力もされません。シードがない場合は一度限りのキーが使われるため、このパックが証明するのは完全性であり、身元ではありません。法的見解ではなく、技術記録です。docs/EVIDENCE-PACKS.md を参照してください。 |
attach_evidence_timestamp | RFC 3161 タイムスタンプトークン(.tsr バイト列の base64)をパックにメモリー上で紐付けます(kshana evidence attach-timestamp)。トークンを含むパックは、引き続き検証に合格する必要があります。タイムスタンプ機関の署名は検証しません。openssl ts -verify を使用してください。 |
verify_evidence_pack | パックを検証します(kshana evidence verify)。すべてのハッシュ、チェーン、署名を確認し、署名者の公開鍵とログ全体がある場合は、署名者と対象範囲がそのログに由来することも確認します。すべての失敗とファイル名を示します。verdict は verified(署名者を固定済み)、intact-signer-not-pinned(すべての検査に合格したものの公開鍵が与えられていないため、署名者が確定していない)、または failed です。require_timestamp を指定すると、タイムスタンプトークンがないパックは失敗します。 |
generate_training_nmea | nmea-scenario TOML(妨害、位置のドラッグオフ、時刻のスプーフィング、再生遅延)から、乗組員訓練用の合成ブリッジ NMEA 0183 と教官ログ(kshana-nmea-training/1)を生成します。シードごとに決定的です。テキストのみです。RF または IQ で合成することはなく、送信もしません。船舶の航行中のシステムには絶対に使用しないでください。返信には最初の 2000 行が含まれます。 |
build_interference_map | ADS-B または AIS 位置レポートを CSV テキストとして受け取り(最大 4 MiB)、GNSS 干渉マップを作成します。UTC 日ごとに 1 つの kshana-interference-map/v1 GeoJSON を生成します。集約データのみを出力し(識別子は含まず、異なる航空機または船舶が 5 未満のセルは非公開)、データセットのライセンスを埋め込みます。劣化セルがあっても、原因が干渉だと特定できるわけではありません。予測ではありません。MODELLED。docs/INTERFERENCE-MAP.md を参照してください。 |
export_test_bench | シナリオの車両動態とイベントを、実験室の GNSS シミュレーター用に書き出します(kshana bench-export)。動態 CSV と JSON、NMEA、ウェイポイント、イベントをテキストとして返します。ディスクには何も書き込みません。対象の種類は gnss-ins、jamming、gnss-sim です。信号は出力しません。書き出される内容は、無線周波数信号またはベースバンド信号を表現、モデル化、駆動するものではありません。信号はシミュレーターとそのオペレーターが用意します。docs/TEST-BENCH.md を参照してください。 |
create_round_trip_pack | 署名付き実験室往復パック(kshana evidence round-trip)を作成します。シナリオ、実験室の kshana.test-conditions/1 ドキュメント、受信機ログ、および指定イベントに対するその採点結果を、ハッシュで関連付けます。条件と採点イベントが一致しない場合は拒否します。信号は出力しません。認証ではなく、技術記録です。 |
iq_sweep | 作業ディレクトリ内の IQ 記録を複数のトラッキングループ設計で再生します(kshana iq sweep)。設計と PRN ごとに、定常状態の位相ジッターとコードジッター、ロック率、平均 C/N0 を返します。呼び出しあたりの(設計、PRN)チャネルは最大 256 個です。処理範囲はサンプル予算内に収まる必要があります。 |
iq_monitor | 作業ディレクトリ内の IQ 記録に対して、干渉およびスプーフィング検出モニターを実行します(kshana iq monitor)。広帯域電力およびスペクトルのモニターと、学習済みベースラインと照合する衛星ごとの C/N0 および信号品質モニターを実行します。返信には系列名と長さ、および最大 200 件のイベントが含まれます。要求に応じて、レポート全体をファイルとして返します。イベントが示すのは測定値がベースラインから外れたことであり、その理由ではありません。MODELLED。 |
iq_labfit | インラインで渡されたログ(text または base64、path は拒否)を含む iq-labfit シナリオから、ラボ実行データにトラッキングループのロック喪失モデルを適合させます(kshana iq labfit)。ファイルの読み書きは行いません。MODELLED。 |
iq_test_conditions | テキストとして渡された kshana.test-conditions/1 ファイルを検証し、ハッシュ付きの解決済み条件を返します。インライン入力のみです。 |
compliance_report | テキストとして渡された結果ドキュメントをもとに、公開フレームワークとの対応付けを埋めます(kshana compliance-report)。6 つのレジリエンス・フレームワークおよび規格(US DHS Resilient PNT framework v2.0、IMO ships、EASA aviation、NIS2 Article 21、EN 16803、NIST IR 8323r1)のどの項目について実行結果が証拠を裏付けるか、裏付けないか、および各項目の不足事項を示します。runs は {label, result, scenario?} の配列で、最大 64 件、合計 4 MiB までです。ステータスは、その項目の機能に関する証拠を実行結果が裏付けることを示すものであり、フレームワークへの適合を認定するものでも、製品の評価や承認でもありません。statement はすべてのレポートとともに返されます。原文のまま表示してください。MODELLED。docs/compliance/ を参照してください。 |
compliance_mapping | 対応付けの静的テーブルを Markdown で返します。sources を指定すると、バージョンと URL を含む、参照先のソースドキュメントも返します。どちらの場合も同じ声明が先頭に付きます。実行結果は不要です。 |
trust_telemetry | 信頼ストリーム(JSON 行)または receiver-trust の結果を、Prometheus テキスト、CEF または LEEF の syslog 行、OTLP JSON ペイロード、あるいは Home Assistant MQTT のディスカバリーおよび状態行として、kshana trust-telemetry エンコーダーで出力します。返信はテキストです。送信や配信は行わず、クロックも読み取りません。注意事項のみ。 |
fit_imu_log | 定置 IMU ログ(CSV または EuRoC)から、アラン偏差を用いて hybrid および fusion シナリオの加速度計とジャイロのパラメーターを適合させます。貼り付けてすぐに使える [accel_classical] テーブルと、ログの SHA-256 を返します(kshana imu-fit)。入力はテキスト、出力は JSON です。MODELLED。 |
list_standards_packs | 規格パック(kshana standards-pack list)を一覧表示します。DHS Resilient PNT framework のテストプロファイル(レベル 1~4)、IMO MSC.1/Circ.1575、ICAO Doc 9849 Appendix F の採点済みシナリオセットです。 |
run_standards_pack | 実行前に定められた基準に照らして、1 つのパックを実行します(kshana standards-pack run)。各テストについて、測定値と期待値とともに MET、NOT MET、または NEEDS INPUT を返します。項目を確認するには、レポートを compliance_report に渡してください。MODELLED。製品の評価は行いません。 |
lunanet_afs_check | LunaNet Augmented Forward Signal を LNIS V5 AD1 Volume A(LSIS-AFS V1.0、29 January 2025)に照らして検証します。spec(ドキュメントに掲載されたコードテーブルと実例を用いた実装の検証)、symbols(シンボルストリーム:同期パターン、SB1、FID、TOI の連続性)、または generate(テストストリーム)を指定します。サブフレーム 2~4 の LDPC と CRC-24Q は検証しません。信号は書き出しません。 |
score_benchmark | kshana-bench の提出物を、真値ファイルに照らして採点します。両方とも JSON テキストです(kshana bench score、bench/SPEC.md)。仕様バージョン、分割、入力ハッシュ、タスクの指標を含む結果ファイルを返します。MODELLED。ログまたはコーパスについて記述するものであり、製品を評価するものではありません。 |
render_leaderboard | kshana-bench の結果ファイルをそれぞれ先に検証し、静的なリーダーボードページ(HTML テキスト)として表示します。 |
trust_telemetry | 信頼ストリーム(JSON 行)または receiver-trust の結果を、kshana trust-telemetry エンコーダーで Prometheus テキスト、CEF または LEEF の syslog 行、あるいは OTLP JSON ペイロードとして出力します。返信はテキストです。送信や配信は行わず、クロックも読み取りません。注意事項のみ。 |
route_exposure | 1 つ以上の干渉マップ内にある、劣化、非劣化、未評価、未観測の各セルにルートの全長の何割が含まれるかを返します。任意で日付範囲を指定できます。未観測のセルは、ルートに問題がないことの証拠ではありません。 |
iq_signals | GNSS IQ レイヤーの設定を返します。IQ ツールが受け付ける信号名、IQ ファイルツールが有効かどうか、作業ディレクトリ、呼び出しごとのサンプル予算を確認できます。最初に呼び出してください。 |
iq_info | 作業ディレクトリ内にある 1 つの IQ(in-phase and quadrature)記録について、処理を行わずに説明を返します。形式、サンプルレート、中心周波数、サンプル数、継続時間、データファイル、サイズが含まれます(kshana iq info)。 |
iq_scene | 作業ディレクトリに複数衛星の GNSS IQ シーンを生成します(kshana iq scene)。指定されたドップラー/C/N0 プロファイル、または RINEX 航法ファイルからの実際の放送エフェメリスによるジオメトリを用い、任意で信号レベルの伝搬チャネルを追加できます。書き込まれたファイルとそのバイト数、および衛星ごとの真値の最初のエポックを返信します。 |
iq_acquire | 記録に対して 1 つ以上の PRN(pseudo-random noise codes)を FFT(fast Fourier transform)で捕捉します(kshana iq acquire)。必要に応じてフロントエンド段の後段で実行できます。PRN ごとに、捕捉の成否、ドップラー、コード位相、ピーク統計量、しきい値を返します。surface_out(PRN 1 件)を指定すると、ドップラーの微調整を含むドップラー × コード位相の相関面全体を保持します。 |
iq_track | 捕捉後、DLL/PLL/FLL(delay-, phase- and frequency-locked loop)バンクでトラッキングします(kshana iq track)。作業ディレクトリ内の kshana.loop-design/1 TOML ファイルのループ(design)または組み込み設計を使用し、任意で再捕捉(reacquire)も実行できます。チャネルごとに、エポック数、最終ドップラー、最終および平均 C/N0、位相ロック率とコードロック率、終了時のロック状態、最終ロック状態、誤ロック、再捕捉に加えて、設計名とハッシュを返します。トラッキングはメモリー使用量を制限してストリーミング処理します。エポックごとの出力はファイルにのみ書き込まれます(epochs_out:E/P/L、判別器、ループ状態、C/N0、ロック状態を含む .csv/.jsonl/.bin、events_out)。 |
iq_frontend | 受信機フロントエンドと干渉軽減 DSP(digital signal processing:バンドパス、ノッチ、ブランキング、除去、AGC、量子化器)を記録に適用し、新しい記録を書き出します(kshana iq frontend)。 |
iq_campaign | ラボ再生キャンペーンを実行します(kshana iq campaign)。既知のラボ真値を記載したテスト条件ファイルをそれぞれに指定した記録を、フロントエンドチェーンとループ設計の組み合わせで処理します。各組み合わせは、ロック喪失までの時間、再捕捉時間、指定された J/S に対する C/N0 の劣化(MODELLED とラベル付けされた解析的な参照値と併記)、誤ロック率、PLL/DLL ジッター、可用性について採点されます。段階的に実行でき、再開も可能です。各呼び出しで、サンプル予算(または max_cells)に収まる保留中の組み合わせを実行します。 |
iq_campaign_status | キャンペーン出力フォルダーの進捗を返します。完了済みおよび保留中の組み合わせ、完了後のダイジェストが含まれます。ファイルの読み取りのみを行います。 |
各ツールは、kshana ライブラリの公開関数を忠実に薄くラップしたものです。新しいシミュレーションロジックはここにはないため、エージェントは検証済みのエンジンをそのまま実行します。 |
GNSS IQ ツール:ファイルを入力し、簡潔な JSON を出力
IQ 録音ファイルは数ギガバイトに及ぶため、iq_* ツールがサンプルをプロトコル経由で渡すことはありません。すべて同じ契約に従います。
- 作業ディレクトリ。 サーバーが IQ ファイルを読み書きするのは、
KSHANA_MCP_IQ_DIRで指定されたフォルダー内だけです。すべてのパス引数はこのフォルダーを基準とします(絶対パスの場合も、このフォルダー内を指す必要があります)。入力はチェック前にシンボリックリンクを解決し、出力先のフォルダーはこのフォルダー内にすでに存在している必要があります。また、既存の出力を置き換えるのはoverwrite: trueの場合に限られます。変数が設定されていない場合、IQ ファイルツールは無効になり、有効化する方法が表示されます。それ以外のツールには影響しません。 - サンプル上限。 1 回の呼び出しで生成または処理できるのは、最大
KSHANA_MCP_IQ_MAX_SAMPLES個の複素サンプルです(デフォルトは 50 000 000)。バイト数に換算すると、cf32_leでは 400 MB(複素サンプル 1 個あたり 8 バイト)、ci16_leでは 200 MB(4 バイト)、ci8では 100 MB(2 バイト)です。formatで別の形式を指定しない限り、シーンはcf32_le形式で書き込まれます。チェックは処理の前に行われ、拒否された場合は、上限に収まる時間またはmax_secondsが示されます。 - 簡潔な応答。 各ツールは、取得時のピーク値、C/N0、ロック状態、および書き込まれたすべてのファイルのパスとバイト数を含む JSON の要約を 1 つ返します。エポックごとのテーブルは、指定した
json_out/csv_outファイルに出力されます。 - 不明な引数は無視せず拒否されるため、オプション名のスペルミスはエラーになります。
各ツールは、コマンドラインの kshana iq と同じコードパスをプロセス内で実行します。このレイヤーはソフトウェアのみであり、ソフトウェア受信機向けのファイルを書き込みますが、無線ハードウェアは制御しません。IQ レイヤーは干渉やスプーファーの合成を追加せず、送信も一切行いません。(別のシナリオ種別 spectrum では、解析的なジャマー IQ スナップショットをファイルに書き込めます。)
{
"mcpServers": {
"kshana": {
"command": "/Users/you/.cargo/bin/kshana-mcp",
"env": { "KSHANA_MCP_IQ_DIR": "/Users/you/iq" }
}
}
}
Docker イメージを使う場合は、フォルダーをマウントし、変数にそのパスを設定します。
docker run --rm -i -v "$PWD/iq:/iq" -e KSHANA_MCP_IQ_DIR=/iq ghcr.io/ashfordeou/kshana-mcp。
すべての種別を実行できます
run_scenario はシナリオの kind に応じて処理を振り分けるため、list_scenario_kinds が示すすべての種別を実行できます。これには新しいファミリーも含まれ、それぞれにエージェントが取得できる同梱サンプルがあります。
| 機能 | 種別 | 開始点となるサンプル |
|---|---|---|
| スペクトルとウォーターフォール | spectrum | l-band-waterfall-jamming |
| 太陽系 | solar-system | solar-system-tour |
| 任意の天体を周回するコンステレーション | constellation-design, body-pnt | lunar-relay-constellation, europa-surface-pnt |
| キャンペーン:フェーズ連鎖、スイープ、モンテカルロ(シード指定のランダムアンサンブル)、合成 | campaign | campaign-sweep-jammer-power |
| 低軌道(LEO)航法:信号設計 | leo-signal | leo-band-trade |
| LEO 航法:パスのリンクバジェット | leo-pass | leo-pass-iridium |
| LEO 航法:航法メッセージ | leo-navmsg | leo-navmsg-encode-decode |
| LEO 航法:統合測位と時刻同期 | leo-pvt, leo-ppp, ntn-positioning, leo-pnt-chain | leo-doppler-positioning, leo-pnt-end-to-end |
kind を指定して list_example_scenarios を呼び出すと、その種別に同梱されているすべてのサンプルが表示されます。
アニメーション、レポート、相互運用性エクスポートは種別ではなく、実行結果のビューです。animate_scenario、report_scenario、export_interop は、適用可能な任意のシナリオについてそれらを返します。
提供対象外:スタディスイート(kshana --study <suite.toml>)。スイートはディスク上の別個のシナリオファイルを指定しますが、シナリオツールはファイルを読み込まないためです。各メンバーを run_scenario で実行してください。(IQ ツールはファイルを読み書きしますが、作業ディレクトリ内に限られます。)
MCP サーバーをインストールする
注意:型式承認済みの航行機器ではありません。航行の責任は引き続き運航者が負います。 サーバーはお使いのコンピューター上で実行されます。Ashforde OÜ にデータが送信されることはありません。
どのチャンネルを選んでもかまいません。すべて同じサーバーを実行します。クライアントごとの設定例(Claude Desktop、Claude Code、Cursor、 VS Code、Windsurf、Zed、Goose、Codex CLI、Gemini CLI、Continue)は docs/MCP-INSTALL.mdにあります。
| チャンネル | コマンドまたはボタン | 必要なもの | 固定バージョン |
|---|---|---|---|
| Claude Desktop 拡張機能 | お使いのシステム用の .mcpb をダブルクリックします:macOS(Apple シリコン) · macOS(Intel) · Windows | なし | v0.39.0 の kshana-mcp-<target>.mcpb |
| Cursor(ワンクリック) | npx(Node) · Docker | Node または Docker | [email protected] / ghcr.io/ashfordeou/kshana-mcp:0.39.0 |
| VS Code(ワンクリック) | npx(Node) · Docker · Insiders(npx) | Node または Docker | [email protected] / ghcr.io/ashfordeou/kshana-mcp:0.39.0 |
| Claude Code | claude mcp add kshana -- npx -y [email protected] · プラグイン:/plugin marketplace add ashfordeOU/kshana の後に /plugin install kshana@ashforde | Node(または Docker) | [email protected] |
| npx | npx -y [email protected] | Node 18+ | [email protected] |
| uvx / pipx | uvx kshana-mcp==0.39.0 · pipx run kshana-mcp==0.39.0 | uv または pipx を使う Python 3.9+ | kshana-mcp==0.39.0 |
| Docker | docker run -i --rm ghcr.io/ashfordeou/kshana-mcp:0.39.0 | Docker | ghcr.io/ashfordeou/kshana-mcp:0.39.0 |
| Homebrew | brew install ashfordeOU/tap/kshana-mcp | brew | v0.39.0 用のフォーミュラ |
| Scoop | scoop bucket add ashforde https://github.com/ashfordeOU/scoop-bucket の後に scoop install kshana-mcp | Scoop(Windows) | v0.39.0 用のマニフェスト |
| winget | winget install AshfordeOU.KshanaMcp | winget(Windows) | --version 0.39.0 |
| cargo | cargo install kshana-mcp --version 0.39.0 | Rust 1.88+ | kshana-mcp 0.39.0 |
| ビルド済みバイナリ | リリースページ:kshana-mcp(Linux x86-64)、kshana-mcp-<target>[.exe]。SHA256SUMS と gh attestation verify で検証済み | なし | v0.39.0 |
| MCP レジストリ | io.github.ashfordeOU/kshana-mcp(レジストリ対応クライアントから検索可能) | レジストリ対応クライアント | 0.39.0 |
| リモート(ストリーミング可能な HTTP) | kshana-mcp --http 127.0.0.1:8080、セルフホストする場合はこちらを参照してください | ご自身のホスト | v0.39.0 |
チェックアウトまたは git から実行する場合(開発用):
cd mcp/kshana-mcp && cargo install --path .
cargo install --git https://github.com/AshfordeOU/kshana kshana-mcp
HTTP モード(セルフホスト)
kshana-mcp --http 127.0.0.1:8080 を実行すると、同じツールが /mcp でストリーミング可能な HTTP 経由で提供されます。ループバックアドレスのみで待ち受けます。ループバック以外のアドレスを使うには、--allow-remote と KSHANA_MCP_HTTP_TOKEN に設定したベアラートークンが必要です。IQ ファイルツールは無効になり、リクエストサイズ、時間、同時実行数には上限が設定されます。CORS ヘッダーは送信されません。Kshana はエンドポイントをホストしません。ご自身でセルフホストしてください。詳しくは
docs/deploy/mcp-http.md を参照してください。
cargo install を実行すると、kshana-mcp が PATH に追加されます(通常は ~/.cargo/bin/kshana-mcp)。
サーバーは stdio 経由で JSON-RPC(JSON リモートプロシージャコール)を使用します。ログは stderr に出力されます。ソースからビルドするには Rust
ツールチェーン ≥ 1.88 が必要です(パッチ適用済みの rmcp 2.x SDK に必要です。kshana ライブラリ自体に必要なのは
1.85 のみです)。Docker イメージには何も必要ありません。
クライアントに登録する
ほぼすべての MCP クライアントで同じ mcpServers 設定ブロックを使用します。kshana-mcp バイナリを絶対パスで登録してください。
{
"mcpServers": {
"kshana": {
"command": "/Users/you/.cargo/bin/kshana-mcp",
"args": [],
"env": {}
}
}
}
ローカルバイナリの代わりに Docker イメージを使う場合(PATH は不要です):
{
"mcpServers": {
"kshana": {
"command": "docker",
"args": ["run", "--rm", "-i", "ghcr.io/ashfordeou/kshana-mcp"]
}
}
}
設定ブロックの場所はクライアントによって異なります。
- Cursor —
~/.cursor/mcp.json(グローバル)または.cursor/mcp.json(プロジェクトごと)。 - JetBrains AI Assistant / Junie — Settings → Tools → AI Assistant → Model Context Protocol → Add → As JSON を選択してブロックを貼り付け、IDE(統合開発環境)を完全に再起動します。
- デスクトップアシスタント — ほとんどの場合、同じ
mcpServers形式の…_config.jsonを使います。 ファイルの場所はクライアントのドキュメントで確認してください。 - CLI エージェント — 多くは
mcp add/mcp.jsonの仕組みを使って同じ JSON を受け付けます。
バイナリには必ず絶対パスを指定してください。問題の診断には env に RUST_LOG=debug を設定します
(診断情報は stderr に出力されます。stdout は JSON-RPC プロトコル専用です)。
試してみる
登録したら、アシスタントに次のようなことを尋ねてみてください。
- 「Kshana のシナリオ種別を一覧表示して。」 →
list_scenario_kinds - 「Kshana のスペクトルの例を表示して、実行して。」 →
list_example_scenarios、get_example_scenario、run_scenario - 「Kshana のクロックホールドオーバーシナリオを、しきい値 20 ns、GNSS の停止時間 2 時間で実行して。量子方式と古典方式のホールドオーバーを比較するとどうなる?」 →
run_scenario - 「その GPS(Global Positioning System)コンステレーションを SP3 形式でエクスポートして。」 →
export_sp3 - 「realtime-frame-eop テーブルを CSV で出力して。」 →
export_table_csv - 「その Iridium の通過を Cesium の地球儀に表示して。」 →
list_export_formats、export_interop - 「妨害キャンペーンをアニメーションにして。」 →
animate_scenario - 「その実行の再現性記録付きレポートを作成して。」 →
report_scenario - 「PRN 3 と 17 を使った 1 秒の GPS L1 シーンを作成してから、捕捉して追跡して。」 →
iq_signals、iq_scene、iq_acquire、iq_track
設計メモ — 独立したクレートにする理由
このサーバーは、独自の Cargo.lock を持つ独立したワークスペース除外クレートです。そのため、公式 Rust MCP SDK(ソフトウェア開発キット)の rmcp とその非同期ランタイムが、公開されている kshana
クレートの依存関係グラフに含まれることはありません。ライブラリや Python のユーザーが、実行しないサーバーをコンパイルする必要はありません。(最初に分離した理由は、rmcp がエディション 2024で、rustc ≥ 1.85 が必要だった一方、当時のメインクレートは 1.75 を約束していたためです。ライブラリは現在 1.85 を宣言し、このサーバーはセキュリティパッチ適用済みの rmcp 2.x の最低バージョンである 1.88 を宣言しています。)継続的インテグレーション(CI)では、このクレートを独立してチェックします。テストと、そのロックファイルを対象とする cargo deny が含まれます。rmcp のライセンスツリーには問題がありません
(Apache-2.0/MIT/BSD)。そのため、別途クロスバリデーションを行う xval/anise-frames クレートとは異なり、ライセンス上の理由で分離したわけではありません。
ライセンス:AGPL-3.0-only(GNU Affero General Public License バージョン 3 のみ)、または Ashforde OÜ の商用ライセンス(リポジトリの LICENSING.md を参照)。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。