kshana-mcp:AI アシスタントに尋ねれば、エンジンが答えます
kshana-mcpは、PNT(測位・航法・時刻)レジリエンスのオープンソースシミュレーターであるKshanaのための、Model Context Protocol(MCP)サーバーです。AI(人工知能)アシスタントが、計算を推測する代わりに実際のエンジンを実行し、その JSON(JavaScript Object Notation)を読み戻せるようにします。stdio(標準入出力)経由で、Cursor や JetBrains AI Assistant / Junie を含む、MCP に対応したあらゆるクライアントと通信します。
Kshana が独立した外部の参照と照合して確認している計算は、まさに言語モデルが推測を外しやすい領域です。SGP4(Simplified General Perturbations 4)による軌道伝播、IAU(International Astronomical Union)の座標系、アラン偏差、GNSS(全球測位衛星システム)の可用性と DOP(精度低下率)、ARAIM(advanced receiver autonomous integrity monitoring)の保護レベル、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 |
説明と必須・任意フィールドを付けた 92 種類の組み込みシナリオ種別。エージェントが有効なシナリオを組み立てられるようにします。 |
validate_scenario |
事前チェック:実行せずに、TOML を解析してその種別を検出します。 |
list_example_scenarios |
同梱の参照シナリオを JSON で返します。各name、そのkind、そして何を示すかの一文を含みます。任意でkindによるフィルターを指定できます。すべての例はそのまま実行できるため、ある種別の有効な TOML を得る最短の方法です。 |
get_example_scenario |
同梱の参照シナリオ一つの 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 ビットの 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、リビジョン 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 のエフェメリスとしてエクスポートします。TEME(true equator, mean equinox)の位置と速度の系列で、飛行力学ツール(GMAT(General Mission Analysis Tool)、Orekit、STK(Systems Tool Kit))が読み込みます。位置のみのexport_sp3を、速度も含めて補うものです。 |
export_table_csv |
シナリオを実行して、その再現性テーブルを CSV(カンマ区切り)で返します。CLI(コマンドラインインターフェース)が<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 |
方位角に依存するスカイラインの下での空のジオメトリ:地点、時刻、コンステレーションのプリセット、二行軌道要素(tle。SGP4 で UTC のepochまで伝播)、または方位角・仰角か ECEF で与えた衛星から、見えている衛星とスカイラインに隠れた衛星、gnss_lib_py で検証した DOP カーネルによる GDOP/PDOP/HDOP/VDOP/TDOP、東・北・上の補因子行列と共分散(システムごとに一つのクロック、または共通の一つのクロック)、水平誤差楕円を求めます。requestの代わりにskyline_presetを指定すると、出所と一度ごとの切り取りを備えた、REPRESENTATIVEなプリセットを返します。MODELLED。助言を付します。MCP 経由のモンテカルロはありません。docs/SKYLINE.mdを参照してください。 |
assess_receiver_log |
実際の GNSS(全球測位衛星システム)受信機のログの信頼性を評価します。TOML でログのformat(ubx、rinex、android、nmea、sbfのいずれか)を指定し、そのバイト列をtextまたはbase64としてインラインで渡します。ツールは信頼性モニター(搬送波電力対雑音密度の低下、ロックロス、AGC(自動利得制御)、ジャミング指標、位置のジャンプ、そして RINEX と放送航法データがあれば RAIM(受信機自律型インテグリティ監視)とクロック支援モニター)を実行し、測位解がいつ、なぜ信頼できなくなったかを返します。任意の[[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 件の degraded または untrusted のエポックが含まれます)。助言のみ。MODELLED。 |
jammertest_import |
公開されている Jammertest のテストカタログと送信計画(NPRA/jammertest-plan、MIT)を、予定された真値(kshana jammertest import)として読み込みます:一つのテストエリアのスロットが、各ラベルにカタログ ID と年を含む受信機信頼性のイベントになります。予定されたスロットであり、記録された実際の送信時刻ではありません。計画の連絡先フィールドは読みません。MODELLED。docs/JAMMERTEST.mdを参照してください。 |
jammertest_score |
受信機のログを、そのスケジュールに照らして採点します(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(ジャミング、位置のドラッグオフ、時刻のスプーフィング、リプレイ遅延)から、教官ログ(kshana-nmea-training/1)つきの合成のブリッジ NMEA 0183 を生成します。シードごとに決定的です。テキストのみ:RF や IQ では何も合成せず、何も送信しません。船舶のライブの航法システムには決して使わないでください。応答には最初の 2000 行が含まれます。 |
build_interference_map |
CSV テキスト(最大 4 MiB)の ADS-B または AIS の位置報告から作る GNSS の干渉マップ:UTC の日ごとに一つのkshana-interference-map/v1 GeoJSON で、集計のみ(識別子はなく、5 機または隻未満の異なる航空機・船舶のセルは保留)、データセットのライセンスを埋め込みます。degraded のセルは、干渉が原因であることを特定するものではありません。予報ではありません。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。一回の呼び出しで最大 256 の(設計、PRN)チャンネルまで。スパンはサンプルの予算に収まる必要があります。 |
iq_monitor |
作業ディレクトリ内の IQ 記録に対して、干渉とスプーフィングの検出モニターを実行します(kshana iq monitor):広帯域の電力とスペクトルのモニター、学習したベースラインに対する衛星ごとの C/N0 と信号品質のモニター。応答には系列の名前と長さ、最大 200 件のイベントが含まれ、レポート全体は要求に応じてファイルで返します。イベントが示すのは、測定量がベースラインから外れたということであり、その原因ではありません。MODELLED。 |
iq_labfit |
実験室の実行に対して追尾ループのロックロスモデルをフィットします(kshana iq labfit)。ログがインライン(textまたはbase64)のiq-labfitシナリオを使い、pathは拒否されます。ファイルの読み書きは行いません。MODELLED。 |
iq_test_conditions |
テキストとして与えられたkshana.test-conditions/1ファイルを検証し、解決された条件をそのハッシュとともに返します。インラインのみ。 |
compliance_report |
テキスト(kshana compliance-report)で与えられた結果ドキュメントから作成する、公開フレームワークとの対応付け:六つのレジリエンスのフレームワークと標準(US DHS Resilient PNT framework v2.0、IMO の船舶、EASA の航空、NIS2 Article 21、EN 16803、NIST IR 8323r1)の、どの行についてその実行が証拠を裏付けるか、どの行については裏付けないか、および各行のギャップ。{label, result, scenario?}のrunsを受け取ります(最大 64、合計 4 MiB)。ステータスが示すのは、実行がその行の機能の証拠を裏付けるということであり、フレームワークが満たされたという所見ではなく、いかなる製品の格付けや承認でもありません。statementはすべてのレポートに付いて返されます。そのまま表示してください。MODELLED。docs/compliance/を参照してください。 |
compliance_mapping |
静的な対応表(sourcesを指定すると、それらが引用するソースドキュメントをバージョンと URL つきで)を Markdown で返します。冒頭に同じステートメントが付きます。実行は不要です。 |
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 フレームワークのテストプロファイル(レベル 1 から 4)、IMO MSC.1/Circ.1575、ICAO Doc 9849 Appendix F の、採点されるシナリオ集合。 |
run_standards_pack |
実行前に明示された合格基準に照らした、一つのパックの実行(kshana standards-pack run):各テストはMET、NOT MET、NEEDS INPUTのいずれかで、測定値と期待値を添えます。行を見るには、レポートをcompliance_reportに渡します。MODELLED。いかなる製品も格付けしません。 |
lunanet_afs_check |
LNIS V5 AD1 Volume A(LSIS-AFS V1.0、29 January 2025)に照らして検査した LunaNet Augmented Forward Signal: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の結果を、Prometheus テキスト、CEF または LEEF の syslog 行、または OTLP の JSON ペイロードとして、kshana trust-telemetryのエンコーダーでレンダリングします。応答はテキストで、何も送信も提供もされず、クロックも読みません。助言のみ。 |
route_exposure |
一つ以上の干渉マップにおける、ルートの長さのうち、劣化したセル、劣化していないセル、未評価のセル、未観測のセルが占める割合。任意で日付範囲を指定できます。未観測のセルは、そのルートが問題ないことの証拠ではありません。 |
iq_signals |
GNSS IQ レイヤーの設定:IQ ツールが受け付ける信号の名前、IQ ファイルツールが有効かどうか、作業ディレクトリ、一回の呼び出しあたりのサンプル予算。最初に呼び出してください。 |
iq_info |
作業ディレクトリ内の一つの IQ(同相・直交)記録を、処理せずに記述します:フォーマット、サンプルレート、中心周波数、サンプル数、継続時間、データファイルとそのサイズ(kshana iq info)。 |
iq_scene |
作業ディレクトリ内に、複数衛星の GNSS IQ シーンを生成します(kshana iq scene):指定したドップラー/C/N0 のプロファイル、または RINEX 航法ファイルからの実際の放送エフェメリスのジオメトリ。任意で、信号レベルの伝搬チャンネルを加えられます。応答には、書き込んだファイルとそのバイト数、衛星ごとの真値の最初のエポックが含まれます。 |
iq_acquire |
記録に対する一つ以上の PRN(疑似ランダム雑音コード)の FFT(高速フーリエ変換)による捕捉(kshana iq acquire)。任意でフロントエンドの段を前置できます:PRN ごとに、捕捉できたかどうか、ドップラー、コード位相、ピーク統計量としきい値。surface_out(一つの PRN)は、ドップラー × コード位相の相関面全体を、精密なドップラーの再推定とともに保持します。 |
iq_track |
捕捉したうえで、DLL/PLL/FLL(遅延・位相・周波数ロックループ)のバンクで追尾します(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(デジタル信号処理:バンドパス、ノッチ、ブランキング、除去、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_*ツールは、サンプルをプロトコル経由で渡すことはありません。次の取り決めに従います。
- 作業ディレクトリ。サーバーは、
KSHANA_MCP_IQ_DIRで指定されたフォルダーの内側でのみ IQ ファイルを読み書きします。パスの引数はすべてそのフォルダーからの相対パスです(絶対パスは、その内側に解決されなければなりません)。入力はチェックの前にシンボリックリンクを解決し、出力先のフォルダーは、その内側にすでに存在していなければならず、既存の出力はoverwrite: trueを指定した場合にのみ置き換えられます。未設定の場合、IQ ファイルツールは無効になり、有効にする方法を示します。ほかのツールは影響を受けません。 - サンプル予算。一回の呼び出しで生成または処理できる複素サンプルは、最大で
KSHANA_MCP_IQ_MAX_SAMPLES(既定は 50,000,000)です。バイト数では、cf32_leで 400 MB(複素サンプル一つあたり 8 バイト)、ci16_leで 200 MB(4 バイト)、ci8で 100 MB(2 バイト)です。シーンは、formatが別の指定をしない限りcf32_leとして書き出されます。チェックは作業の前に行われ、拒否の際には、収まる継続時間またはmax_secondsが示されます。 - コンパクトな応答。各ツールは、一つの JSON 要約で応答します:捕捉のピーク、C/N0、ロック状態、そして書き込んだすべてのファイルとそのパスおよびバイト数です。エポックごとのテーブルは、指定した
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Ü には何も送信されません。
サードパーティの AI クライアントに触れた一節は、ここでは省いています。GitHub のmcp/kshana-mcp/README.mdにあります。
| チャンネル | コマンドまたはボタン | 必要なもの | 固定した形式 |
|---|---|---|---|
| Cursor(ワンクリック) | npx (Node) · Docker | Node、または Docker | kshana-mcp@0.40.0 / ghcr.io/ashfordeou/kshana-mcp:0.40.0 |
| VS Code(ワンクリック) | npx (Node) · Docker · Insiders (npx) | Node、または Docker | kshana-mcp@0.40.0 / ghcr.io/ashfordeou/kshana-mcp:0.40.0 |
| npx | npx -y kshana-mcp@0.40.0 |
Node 18+ | kshana-mcp@0.40.0 |
| uvx / pipx | uvx kshana-mcp==0.40.0 · pipx run kshana-mcp==0.40.0 |
Python 3.9+(uv または pipx を使用) | kshana-mcp==0.40.0 |
| Docker | docker run -i --rm ghcr.io/ashfordeou/kshana-mcp:0.40.0 |
Docker | ghcr.io/ashfordeou/kshana-mcp:0.40.0 |
| Homebrew | brew install ashfordeOU/tap/kshana-mcp |
brew | v0.40.0 用のフォーミュラ |
| Scoop | scoop bucket add ashforde https://github.com/ashfordeOU/scoop-bucket、続けてscoop install kshana-mcp |
Scoop(Windows) | v0.40.0 用のマニフェスト |
| winget | winget install AshfordeOU.KshanaMcp |
winget(Windows) | --version 0.40.0 |
| cargo | cargo install kshana-mcp --version 0.40.0 |
Rust 1.88+ | kshana-mcp 0.40.0 |
| ビルド済みバイナリ | リリースページ:kshana-mcp(Linux x86-64)、kshana-mcp-<target>[.exe]。SHA256SUMSとgh attestation verifyで検証します |
なし | v0.40.0 |
| MCP レジストリ | io.github.ashfordeOU/kshana-mcp(レジストリ対応のクライアントが検出) |
レジストリ対応のクライアント | 0.40.0 |
| リモート(ストリーム可能な HTTP) | kshana-mcp --http 127.0.0.1:8080、セルフホスト:https://github.com/ashfordeOU/kshana/blob/main/docs/deploy/mcp-http.mdを参照 |
ご自身のホスト | v0.40.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は、同じツールをストリーム可能な HTTP で/mcpに提供します。バインドするのはループバックのみで、ループバック以外のアドレスには--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 remote procedure call)で通信し、ログは stderr に出力されます。ソースからのビルドには、Rust ツールチェーン ≥ 1.88 が必要です(パッチ適用済みのrmcp 2.x SDK が必要とし、kshanaライブラリも必要とするため)。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 の spectrum の例を見せて、実行して」 →
list_example_scenarios、get_example_scenario、run_scenario - 「Kshana の時計のホールドオーバーのシナリオを、20 ns のしきい値と 2時間の GNSS 途絶で実行して。量子と従来方式のホールドオーバーはどう違う?」 →
run_scenario - 「その GPS(全地球測位システム)コンステレーションを SP3 でエクスポートして」 →
export_sp3 - 「realtime-frame-eop のテーブルを CSV でください」 →
export_table_csv - 「そのイリジウムのパスを Cesium の地球儀に載せて」 →
list_export_formats、export_interop - 「ジャミングのキャンペーンをアニメーションにして」 →
animate_scenario - 「その実行のレポートを、再現性の記録つきでください」 →
report_scenario - 「PRN 3 と 17 で、一秒の 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.88 を宣言しており、これはセキュリティパッチ適用済みのrmcp 2.x と、アップグレードされた RustCrypto クレートの下限です。)継続的インテグレーション(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を参照)。