Tłumaczenie maszynowe, niezweryfikowane przez osobę, dla której polski jest językiem ojczystym. Wzorcem jest wersja angielska.

API i integracjeEdytuj na GitHubieŹródło: mcp/kshana-mcp/README.md

Kshana: znak, celownik kompasu wyznaczający precyzyjny moment, obok logotypu słownego kshanaKshana: znak, celownik kompasu wyznaczający precyzyjny moment, obok logotypu słownego kshana

kshana-mcp: zapytaj swojego asystenta AI, a silnik odpowie

kshana-mcp to serwer Model Context Protocol (MCP) dla Kshana, otwartoźródłowego symulatora odporności PNT (pozycjonowanie, nawigacja i czas). Pozwala asystentowi AI (sztucznej inteligencji) uruchomić prawdziwy silnik i odczytać jego JSON (JavaScript Object Notation) zamiast zgadywać obliczenia. Komunikuje się przez stdio (standardowe wejście i wyjście) z dowolnym klientem zgodnym z MCP, w tym z Cursorem i JetBrains AI Assistant / Junie.

Obliczenia, dla których Kshana jest sprawdzona względem niezależnego wzorca, to dokładnie te, w których model językowy zgaduje najgorzej: propagacja orbit SGP4 (Simplified General Perturbations 4), układy odniesienia IAU (Międzynarodowa Unia Astronomiczna), odchylenia Allana, dostępność GNSS (globalny system nawigacji satelitarnej) i współczynnik DOP (rozmycie dokładności), poziomy ochrony ARAIM (zaawansowane autonomiczne monitorowanie integralności w odbiorniku), fuzja GNSS i INS (inercyjny system nawigacji) oraz modele czujników kwantowych. Zadaj pytanie; asystent uruchamia prawdziwy scenariusz i otrzymuje wskaźniki jakości wraz z ich pochodzeniem i etykietą VALIDATED lub MODELLED.

Jeden otwarty silnik pośrodku, a serwer MCP jako jedna z jego powierzchni obok wiersza poleceń, biblioteki Rust, Pythona, WebAssembly i Kshana Studio, obrazu Docker i wtyczki JetBrains; każda powierzchnia uruchamia ten sam silnik, a Kshana Pro opiera się na nim bez rozwidlaniaJeden otwarty silnik pośrodku, a serwer MCP jako jedna z jego powierzchni obok wiersza poleceń, biblioteki Rust, Pythona, WebAssembly i Kshana Studio, obrazu Docker i wtyczki JetBrains; każda powierzchnia uruchamia ten sam silnik, a Kshana Pro opiera się na nim bez rozwidlania

Narzędzia#

Narzędzie Co robi
run_scenario Uruchamia scenariusz z definicji TOML (Tom's Obvious, Minimal Language); zwraca podsumowanie + pełny wynik JSON (JavaScript Object Notation: wskaźniki jakości, krzywe). Opcjonalny include_chart zwraca wykres jako SVG (Scalable Vector Graphics).
list_scenario_kinds 92 wbudowanych rodzajów scenariuszy z opisami + polami wymaganymi/opcjonalnymi — aby agent mógł zbudować poprawny scenariusz.
validate_scenario Kontrola wstępna: analizuje TOML i wykrywa jego rodzaj, bez uruchamiania.
list_example_scenarios Dołączone scenariusze wzorcowe jako JSON: każdy z name, swoim kind i jednym zdaniem o tym, co pokazuje. Opcjonalny filtr kind. Każdy przykład działa w takiej postaci, jaka jest, więc to najszybsza droga do poprawnego TOML dla danego rodzaju.
get_example_scenario Tekst TOML jednego dołączonego scenariusza wzorcowego, bajt w bajt taki jak plik w scenarios/.
report_scenario Uruchamia scenariusz i zwraca jego raport: podsumowanie wykonawcze, dane wejściowe, każdą wartość z jednostką i etykietą VALIDATED lub MODELLED, zdarzenia, wykorzystane możliwości i zapis odtwarzalności. format to json (domyślnie) lub html (drukowalna strona w jednym pliku).
animate_scenario Uruchamia scenariusz i zwraca jego szereg czasowy jako animację: svg (domyślnie), html (samodzielny odtwarzacz) lub frames (najwyżej 120 w odpowiedzi). Pierwszy element treści to podsumowanie JSON tego, co narysowano; pliki następują potem. Rodzaj bez próbkowanej osi czasu jest odrzucany z podaniem powodu.
list_export_formats Które formaty interoperacyjne mają zastosowanie do scenariusza (czml, kml, geojson, stk, sigmf), powód, gdy któryś nie ma, oraz specyfikacja, którą stosuje każdy zapis. Nie uruchamia scenariusza.
export_interop Eksportuje scenariusz jako CZML (Cesium Language), KML (Keyhole Markup Language), GeoJSON, efemerydy STK (Systems Tool Kit) .e albo SigMF (Signal Metadata Format, dla scenariusza spectrum z blokiem [iq]). Pierwszy element treści to indeks JSON plików (przyrostek, rozmiar, kodowanie oraz skrót SHA-256, 256-bitowy Secure Hash Algorithm); pliki następują potem, binarny plik próbek SigMF jako base64.
import_route Zapisuje trasę GeoJSON LineString w scenariuszu, który prowadzi po śladzie z punktów trasy (terrain-nav, terrain-slam, gravity-map, combined-altpnt), i zwraca nowy TOML.
export_sp3 Eksportuje konstelację scenariusza orbit jako precyzyjne efemerydy SP3-c (Standard Product 3, wersja c).
export_omm Eksportuje elementy scenariusza orbit jako katalog CCSDS (Consultative Committee for Space Data Systems) 502.0-B-2 OMM (Orbit Mean-elements Message).
export_oem Eksportuje szereg stanów scenariusza orbit jako efemerydy CCSDS OEM (Orbit Ephemeris Message) 2,0 — szereg położenia i prędkości w TEME (prawdziwy równik, średnie równonoc), który odczytują narzędzia dynamiki lotu (GMAT, General Mission Analysis Tool; Orekit; STK, Systems Tool Kit); uzupełnienie niosące prędkość dla zawierającego tylko położenie export_sp3.
export_table_csv Uruchamia scenariusz i zwraca jego tabelę odtwarzalności jako CSV (wartości rozdzielone przecinkami) — stabilną bajtowo tabelę, którą CLI (interfejs wiersza poleceń) zapisuje jako <scenario>.table.csv. Tylko realtime-frame-eop, lunar-time-budget, lunar-jamming, telecom-timing, leo-navmsg (jego analiza encode-decode na modelu komunikatu kepler16 lub kepler-rac) oraz moonlight-service-volume z ustawionymi export_site_lat_deg + export_site_lon_deg ją emitują; każdy inny rodzaj zwraca błąd wskazujący te rodzaje.
sky_geometry Geometria nieba pod horyzontem zależnym od azymutu: z miejsca, czasu i ustawień wstępnych konstelacji, dwuwierszowych zestawów elementów orbity (tle, propagowanych przez SGP4 do epoch w UTC) albo satelitów podanych jako azymut/elewacja lub ECEF, widoczne satelity i te zasłonięte przez horyzont, GDOP/PDOP/HDOP/VDOP/TDOP z jądra DOP sprawdzonego względem gnss_lib_py, kofaktor i kowariancja we współrzędnych wschód-północ-góra (jeden zegar na system lub jeden wspólny) oraz elipsa błędu poziomego; z skyline_preset zamiast request ustawienie wstępne REPRESENTATIVE z jego pochodzeniem i wycięciem co stopień. MODELLED; niesie informację doradczą; bez Monte Carlo przez MCP. Zob. docs/SKYLINE.md.
assess_receiver_log Ocenia zaufanie do rzeczywistego dziennika odbiornika GNSS (globalnego systemu nawigacji satelitarnej). TOML wskazuje format dziennika (ubx, rinex, android, nmea lub sbf) i podaje jego bajty w treści jako text lub base64; narzędzie uruchamia monitory zaufania (spadek stosunku nośnej do szumu, utrata synchronizacji, AGC (automatyczna regulacja wzmocnienia), wskaźnik zagłuszania, skok pozycji oraz, przy RINEX z nawigacyjnymi danymi rozgłaszanymi, RAIM (autonomiczne monitorowanie integralności w odbiorniku) i monitor wspomagany zegarem) i zwraca, kiedy i dlaczego rozwiązanie pozycji przestało być wiarygodne. Opcjonalne sekcje [[events]] i [compare] oceniają wskazane zdarzenia i przewidywane spadki C/N0 względem wskazanych tolerancji. Tabela [platform] kind = "vessel" wybiera monitory morskie i dodaje wskaźnik zaufania 0-100 na epokę wraz z monitorami, które go obniżyły (doradczo; MODELLED). Dziennik trafia w treści jako text lub base64 (najwyżej 4 MiB). Wykres i CSV dla każdej epoki na żądanie. Zob. docs/RECEIVER-TRUST.md.
assess_vessel_stream Ocenia ograniczony fragment NMEA 0183 (najwyżej 2 MiB i 20 000 epok; musi zawierać okno kalibracji) tak, jak robi to kshana receiver-trust live: stan zaufania dla każdej epoki i wynik 0-100 wraz z monitorami, które go obniżyły, podsumowanie i ostatnie $PKSHT. Ograniczona postać polecenia live: nie otwiera się gniazdo i nic nie jest zapisywane na port; bramka, --listen i eksportery telemetrii (Prometheus, OTLP, syslog) są dostępne tylko z wiersza poleceń. Wyłącznie doradczo; MODELLED. Zob. docs/MARITIME-TRUST.md.
assess_vessel_log Dziennik NMEA 0183 statku (najwyżej 4 MiB) jako przebieg wsadowy, z TOML sesji określającym limity statku: model wyniku oraz wynik 0-100 każdej epoki wraz z odjęciami (odpowiedź zachowuje liczby według stanów i pierwszych 200 epok zdegradowanych lub niegodnych zaufania). Wyłącznie doradczo; MODELLED.
jammertest_import Odczytuje opublikowany katalog testów Jammertest i plan nadawania (NPRA/jammertest-plan, MIT) jako zaplanowaną prawdę odniesienia (kshana jammertest import): przedziały jednego obszaru testowego stają się zdarzeniami zaufania do odbiornika z identyfikatorem katalogowym i rokiem w każdej etykiecie. Przedziały planowane, a nie zarejestrowane czasy emisji; żadne pole kontaktowe planu nie jest odczytywane. MODELLED. Zob. docs/JAMMERTEST.md.
jammertest_score Ocenia dziennik odbiornika względem tego harmonogramu (kshana jammertest score): dla każdego testu opóźnienie detekcji, pominięte alarmy i czas powrotu do normy oraz fałszywe alarmy poza każdym przedziałem. Dzienniki tekstowe jako log, binarne (ubx, sbf) jako log_base64. Podpisany pakiet wymaga klucza: wiersz poleceń. Wyłącznie doradczo; MODELLED.
create_evidence_pack Podpisany pakiet dowodowy dla okna dziennika statku (kshana receiver-trust evidence): surowe bajty dziennika dla okna, konfiguracja, wyniki i przyczyny dla każdej epoki, strona podsumowania oraz manifest z każdym SHA-256 i łańcuchem skrótów, podpisany Ed25519. Ziarno podpisu nigdy nie jest zwracane ani zapisywane w dzienniku; bez niego używany jest klucz jednorazowy, więc pakiet dowodzi integralności, a nie tożsamości. Zapis techniczny, a nie opinia prawna. Zob. docs/EVIDENCE-PACKS.md.
attach_evidence_timestamp Wiąże token znacznika czasu RFC 3161 (base64 bajtów .tsr) z pakietem, w pamięci (kshana evidence attach-timestamp); pakiet z tokenem musi nadal się weryfikować. Podpis urzędu znakowania czasem nie jest sprawdzany: użyj openssl ts -verify.
verify_evidence_pack Weryfikuje pakiet (kshana evidence verify): każdy skrót, łańcuch, podpis oraz, z kluczem publicznym podpisującego i pełnym dziennikiem, kto go podpisał i że fragment pochodzi z tego dziennika. Wskazuje każdy błąd i plik. verdict to verified (podpisujący przypięty), intact-signer-not-pinned (wszystko się zgadza, ale nie podano klucza publicznego, więc podpisujący nie jest ustalony) lub failed; require_timestamp odrzuca pakiet bez tokenu znacznika czasu.
generate_training_nmea Syntetyczne NMEA 0183 mostka do szkolenia załogi z TOML nmea-scenario (zagłuszanie, odciąganie pozycji, fałszowanie czasu, opóźnienie powtórki) z dziennikiem instruktora (kshana-nmea-training/1); deterministyczne dla danego ziarna. Tylko tekst: nic nie jest syntezowane na poziomie RF ani IQ i nic nie jest nadawane; nigdy dla żywych systemów nawigacyjnych statku. Odpowiedź zawiera pierwsze 2000 wierszy.
build_interference_map Mapa zakłóceń GNSS z raportów pozycji ADS-B lub AIS jako tekst CSV (najwyżej 4 MiB): jeden kshana-interference-map/v1 GeoJSON na dobę UTC, tylko zbiorczo (bez identyfikatorów, komórki z mniej niż 5 różnymi statkami powietrznymi lub statkami są wstrzymywane), z osadzoną licencją zbioru danych. Zdegradowana komórka nie wskazuje zakłóceń jako przyczyny; to nie jest prognoza. MODELLED. Zob. docs/INTERFERENCE-MAP.md.
export_test_bench Ruch pojazdu i zdarzenia scenariusza dla laboratoryjnego symulatora GNSS (kshana bench-export): ruch jako CSV i JSON, NMEA, punkty trasy i zdarzenia jako tekst, nic nie jest zapisywane na dysk. Rodzaje gnss-ins, jamming, gnss-sim. Bez sygnału: nic z eksportowanego nie jest sygnałem radiowym ani pasma podstawowego, nie jest jego modelem ani go nie steruje; sygnały dostarczają symulator i jego operator. Zob. docs/TEST-BENCH.md.
create_round_trip_pack Podpisany laboratoryjny pakiet round-trip (kshana evidence round-trip): scenariusz, dokument laboratorium kshana.test-conditions/1, dziennik odbiornika i jego ocena względem wskazanych zdarzeń, powiązane skrótem. Odrzuca warunki i zdarzenia oceny, które się różnią. Bez sygnału; zapis techniczny, a nie certyfikacja.
iq_sweep Odtwarza jedno nagranie IQ z katalogu roboczego na kilku konstrukcjach pętli śledzących (kshana iq sweep): dla każdej konstrukcji i PRN drgania fazy i kodu w stanie ustalonym, ułamki synchronizacji i średnie C/N0. Najwyżej 256 kanałów (konstrukcja, PRN) na wywołanie; przedział musi mieścić się w budżecie próbek.
iq_monitor Uruchamia monitory detekcji zakłóceń i spoofingu na nagraniu IQ w katalogu roboczym (kshana iq monitor): monitory mocy szerokopasmowej i widmowe oraz monitory C/N0 i jakości sygnału dla każdego satelity względem wyuczonego punktu odniesienia. Nazwy i długości szeregów oraz do 200 zdarzeń w odpowiedzi; cały raport na żądanie jako pliki. Zdarzenie mówi, że zmierzona wielkość opuściła swój punkt odniesienia, a nie dlaczego. MODELLED.
iq_labfit Dopasowuje model utraty synchronizacji pętli śledzącej do przebiegów laboratoryjnych (kshana iq labfit) ze scenariusza iq-labfit, którego dzienniki są w treści (text lub base64; path jest odrzucane). Nie odczytuje ani nie zapisuje żadnego pliku. MODELLED.
iq_test_conditions Waliduje plik kshana.test-conditions/1 podany jako tekst i zwraca rozstrzygnięte warunki wraz z ich skrótem. Tylko w treści żądania.
compliance_report Mapowanie publicznych ram odniesienia wypełnione z dokumentów wyników podanych jako tekst (kshana compliance-report): które wiersze sześciu ram i norm dotyczących odporności (ramy US DHS Resilient PNT v2.0, IMO dla statków, EASA dla lotnictwa, NIS2 art. 21, EN 16803, NIST IR 8323r1) przebiegi dostarczają dowodów na (supports evidence for), których nie, oraz lukę w każdym wierszu. Przyjmuje runs typu {label, result, scenario?} (najwyżej 64, łącznie 4 MiB). Status mówi, że przebiegi dostarczają dowodów na (supports evidence for) możliwości danego wiersza; nie jest to stwierdzenie, że ramy zostały spełnione, ani ocena czy zatwierdzenie jakiegokolwiek produktu. statement jest zwracane z każdym raportem; pokaż je dosłownie. MODELLED. Zob. docs/compliance/.
compliance_mapping Statyczne tabele mapowania (albo, z sources, dokumenty źródłowe, które cytują, z wersjami i adresami URL) jako Markdown, poprzedzone tym samym oświadczeniem. Nie wymaga przebiegów.
trust_telemetry Strumień zaufania (linie JSON) lub wynik receiver-trust zapisany jako tekst Prometheus, linie syslog CEF lub LEEF, ładunek OTLP JSON albo linie wykrywania i stanu Home Assistant MQTT, z koderami kshana trust-telemetry. Tekst w odpowiedzi: nic nie jest wysyłane ani udostępniane i nie jest odczytywany żaden zegar. Wyłącznie doradczo.
fit_imu_log Parametry akcelerometru i żyroskopu scenariuszy hybrid i fusion dopasowane z nieruchomego dziennika IMU (CSV lub EuRoC) za pomocą odchylenia Allana, z gotową do wklejenia tabelą [accel_classical] i SHA-256 dziennika (kshana imu-fit). Tekst na wejściu, JSON na wyjściu; MODELLED.
list_standards_packs Pakiety norm (kshana standards-pack list): ocenione zestawy scenariuszy dla profili testowych ram DHS Resilient PNT (poziomy od 1 do 4), IMO MSC.1/Circ.1575 i ICAO Doc 9849 Appendix F.
run_standards_pack Jeden pakiet uruchomiony względem progów podanych przed przebiegiem (kshana standards-pack run): każdy test MET, NOT MET lub NEEDS INPUT, ze zmierzonymi i oczekiwanymi wartościami; przekaż raport do compliance_report, aby zobaczyć wiersze. MODELLED; nie ocenia żadnego produktu.
lunanet_afs_check LunaNet Augmented Forward Signal sprawdzony względem LNIS V5 AD1 Volume A (LSIS-AFS V1.0, 29 stycznia 2025): spec (implementacja względem wydrukowanych w dokumencie tabel kodów i przykładów obliczeń), symbols (strumień symboli: wzorzec synchronizacji, SB1, FID, ciągłość TOI) lub generate (strumień testowy). LDPC i CRC-24Q podramek od 2 do 4 nie są weryfikowane; żaden sygnał nie jest zapisywany.
score_benchmark Zgłoszenie kshana-bench ocenione względem pliku wzorca prawdy, oba jako tekst JSON (kshana bench score, bench/SPEC.md): plik wyniku z wersją specyfikacji, podziałem, skrótami danych wejściowych i metrykami zadania. MODELLED; opisuje dziennik lub korpus, nigdy produkt.
render_leaderboard Pliki wyników kshana-bench zapisane jako statyczna strona rankingu (tekst HTML), każdy wcześniej zwalidowany.
trust_telemetry Strumień zaufania (linie JSON) lub wynik receiver-trust zapisany jako tekst Prometheus, linie syslog CEF lub LEEF albo ładunek OTLP JSON, z koderami kshana trust-telemetry. Tekst w odpowiedzi: nic nie jest wysyłane ani udostępniane i nie jest odczytywany żaden zegar. Wyłącznie doradczo.
route_exposure Udział długości trasy przypadający na komórki zdegradowane, niezdegradowane, nieocenione i nieobserwowane w jednej lub kilku mapach zakłóceń, opcjonalnie w zakresie dat. Komórki nieobserwowane nie są dowodem, że trasa jest wolna od zakłóceń.
iq_signals Konfiguracja warstwy GNSS IQ: nazwy sygnałów przyjmowane przez narzędzia IQ, informacja, czy narzędzia do plików IQ są włączone, katalog roboczy i budżet próbek na wywołanie. Wywołaj je jako pierwsze.
iq_info Opisuje jedno nagranie IQ (składowe synfazowa i kwadraturowa) w katalogu roboczym bez jego przetwarzania: format, częstotliwość próbkowania, częstotliwość środkową, próbki, czas trwania, pliki danych i rozmiary (kshana iq info).
iq_scene Generuje wieloznaczną scenę GNSS IQ z wieloma satelitami w katalogu roboczym (kshana iq scene): podane profile Dopplera/C/N0 albo rzeczywistą geometrię z efemeryd rozgłaszanych z pliku nawigacyjnego RINEX, z opcjonalnym kanałem propagacji na poziomie sygnału. Odpowiada listą zapisanych plików z liczbą ich bajtów oraz pierwszą epoką prawdy odniesienia dla każdego satelity.
iq_acquire Akwizycja FFT (szybka transformata Fouriera) jednego lub kilku PRN (kodów pseudolosowych) w nagraniu (kshana iq acquire), opcjonalnie za stopniami toru wejściowego: dla każdego PRN informacja, czy został pozyskany, Doppler, faza kodu, statystyka piku i próg; surface_out (jeden PRN) zachowuje całą powierzchnię korelacji Doppler × faza kodu z precyzyjnym doprecyzowaniem Dopplera.
iq_track Akwizycja, a następnie śledzenie bankiem DLL/PLL/FLL (pętle synchronizacji opóźnienia, fazy i częstotliwości) (kshana iq track), z pętlami z pliku TOML kshana.loop-design/1 w katalogu roboczym (design) lub z wbudowanej konstrukcji, oraz opcjonalnym ponownym pozyskaniem (reacquire): dla każdego kanału epoki, końcowy Doppler, końcowe i średnie C/N0, ułamki synchronizacji fazy i kodu, stan zsynchronizowania na końcu, końcowy stan synchronizacji, fałszywe synchronizacje i ponowne pozyskania, a także nazwa i skrót konstrukcji. Śledzenie strumieniuje dane w ograniczonej pamięci; wyniki dla każdej epoki trafiają wyłącznie do plików (epochs_out: E/P/L, dyskryminatory, stany pętli, C/N0, stan synchronizacji jako .csv/.jsonl/.bin; events_out).
iq_frontend Stosuje tor wejściowy odbiornika i DSP (cyfrowe przetwarzanie sygnałów: filtr pasmowy, filtr wycinający, wygaszanie, wycinanie, AGC, kwantyzator) do łagodzenia zakłóceń na nagraniu i zapisuje nowe (kshana iq frontend).
iq_campaign Uruchamia kampanię odtworzeń laboratoryjnych (kshana iq campaign): nagrania, każde z plikiem warunków testu podającym znaną prawdę odniesienia laboratorium, × łańcuchy toru wejściowego × konstrukcje pętli. Każda komórka jest oceniana pod kątem czasu do utraty synchronizacji, czasu ponownego pozyskania, pogorszenia C/N0 względem podanego J/S (obok analitycznego odniesienia z etykietą MODELLED), częstości fałszywych synchronizacji, drgań PLL/DLL i dostępności. Przyrostowo i z możliwością wznowienia: każde wywołanie uruchamia oczekujące komórki, które mieszczą się w budżecie próbek (lub max_cells).
iq_campaign_status Postęp folderu wyjściowego kampanii: komórki zrobione i oczekujące oraz skrót po zakończeniu. Tylko odczyt plików.

Każde narzędzie jest cienką, wierną nakładką na publiczną funkcję biblioteki kshana; nie ma tu żadnej nowej logiki symulacji, więc agent uruchamia dokładnie ten silnik, który został sprawdzony względem niezależnego wzorca.

Narzędzia GNSS IQ: pliki na wejściu, zwięzły JSON na wyjściu#

Nagrania IQ sięgają gigabajtów, więc narzędzia iq_* nigdy nie przekazują próbek przez protokół. Obowiązuje je jeden kontrakt:

  • Katalog roboczy. Serwer odczytuje i zapisuje pliki IQ wyłącznie w folderze wskazanym przez KSHANA_MCP_IQ_DIR. Każdy argument ścieżki jest względny wobec niego (ścieżka bezwzględna musi rozwiązywać się do jego wnętrza); dane wejściowe są przed sprawdzeniem rozwiązywane przez dowiązania symboliczne, folder danych wyjściowych musi już w nim istnieć, a istniejące dane wyjściowe są zastępowane tylko z overwrite: true. Gdy nie jest ustawiony, narzędzia do plików IQ są wyłączone i podają, jak je włączyć; wszystkie inne narzędzia pozostają bez zmian.
  • Budżet próbek. Jedno wywołanie generuje lub przetwarza najwyżej KSHANA_MCP_IQ_MAX_SAMPLES zespolonych próbek (domyślnie 50 000 000). W bajtach to 400 MB jako cf32_le (8 bajtów na próbkę zespoloną), 200 MB jako ci16_le (4 bajty) i 100 MB jako ci8 (2 bajty); scena jest zapisywana jako cf32_le, chyba że format mówi inaczej. Kontrola odbywa się przed jakąkolwiek pracą, a odmowa podaje czas trwania lub max_seconds, który się mieści.
  • Zwięzłe odpowiedzi. Każde narzędzie odpowiada jednym podsumowaniem JSON: piki akwizycji, C/N0, stan synchronizacji oraz każdy zapisany plik z jego ścieżką i liczbą bajtów. Tabele dla każdej epoki trafiają do wskazanych przez Ciebie plików json_out / csv_out.
  • Nieznane argumenty są odrzucane, a nie ignorowane, więc błędnie wpisana opcja jest błędem.

Każde narzędzie uruchamia tę samą ścieżkę kodu co kshana iq w wierszu poleceń, w tym samym procesie. Warstwa jest wyłącznie programowa: zapisuje pliki dla odbiorników programowych i nie steruje żadnym sprzętem radiowym. Warstwa IQ nie dodaje syntezy zakłóceń ani spoofera i nic nie jest nigdy nadawane. (Osobny rodzaj scenariusza spectrum może zapisać do pliku analityczne migawki IQ zagłuszarki.)

{
  "mcpServers": {
    "kshana": {
      "command": "/Users/you/.cargo/bin/kshana-mcp",
      "env": { "KSHANA_MCP_IQ_DIR": "/Users/you/iq" }
    }
  }
}

Z obrazem Docker zamontuj folder i wskaż go zmiennej: docker run --rm -i -v "$PWD/iq:/iq" -e KSHANA_MCP_IQ_DIR=/iq ghcr.io/ashfordeou/kshana-mcp.

Każdy rodzaj jest osiągalny#

run_scenario rozdziela wywołania według kind scenariusza, więc przechodzi przez niego każdy rodzaj, który wymienia list_scenario_kinds. Obejmuje to nowsze rodziny, każdą z dołączonymi przykładami, które agent może pobrać:

Możliwość Rodzaje Przykład na początek
Widmo i wykres kaskadowy spectrum l-band-waterfall-jamming
Układ Słoneczny solar-system solar-system-tour
Konstelacje wokół dowolnego ciała constellation-design, body-pnt lunar-relay-constellation, europa-surface-pnt
Kampanie: łańcuchowe fazy, przeglądy, Monte Carlo (losowe zespoły z ziarnem), kompozycja campaign campaign-sweep-jammer-power
Nawigacja z niskiej orbity okołoziemskiej (LEO): projekt sygnału leo-signal leo-band-trade
Nawigacja LEO: bilans łącza przelotu leo-pass leo-pass-iridium
Nawigacja LEO: komunikat nawigacyjny leo-navmsg leo-navmsg-encode-decode
Nawigacja LEO: połączone pozycjonowanie i czas leo-pvt, leo-ppp, ntn-positioning, leo-pnt-chain leo-doppler-positioning, leo-pnt-end-to-end

list_example_scenarios z kind wymienia każdy dołączony przykład tego rodzaju. Animacje, raporty i eksporty interoperacyjne nie są rodzajami: są widokami przebiegu, a animate_scenario, report_scenario i export_interop zwracają je dla każdego scenariusza, do którego mają zastosowanie.

Nieobsługiwane: zestawy badań (kshana --study <suite.toml>), ponieważ zestaw wskazuje na dysku sąsiednie pliki scenariuszy, a narzędzia scenariuszy nie czytają żadnego pliku. Uruchom każdy element przez run_scenario. (Narzędzia IQ czytają i zapisują pliki, ale tylko w swoim katalogu roboczym.)

Instalacja serwera MCP#

Wyłącznie doradczo, nie jest to sprzęt nawigacyjny z zatwierdzeniem typu: za nawigację odpowiada nadal operator. Serwer działa na Twoim komputerze; nic nie jest wysyłane do Ashforde OÜ.

Fragment wymieniający zewnętrznych klientów AI został tu pominięty; jest w mcp/kshana-mcp/README.md na GitHubie.

Fragment wymieniający zewnętrznych klientów AI został tu pominięty; jest w mcp/kshana-mcp/README.md na GitHubie.

Fragment wymieniający zewnętrznych klientów AI został tu pominięty; jest w mcp/kshana-mcp/README.md na GitHubie.

Kanał Polecenie lub przycisk Wymaga Postać przypięta
Cursor (jedno kliknięcie) npx (Node) · Docker Node lub Docker kshana-mcp@0.40.0 / ghcr.io/ashfordeou/kshana-mcp:0.40.0
VS Code (jedno kliknięcie) npx (Node) · Docker · Insiders (npx) Node lub 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+ z uv lub 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 formuła dla v0.40.0
Scoop scoop bucket add ashforde https://github.com/ashfordeOU/scoop-bucket, następnie scoop install kshana-mcp Scoop (Windows) manifest dla 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
Gotowy plik binarny strona wydania: kshana-mcp (Linux x86-64), kshana-mcp-<target>[.exe], sprawdzane przez SHA256SUMS i gh attestation verify brak v0.40.0
Rejestr MCP io.github.ashfordeOU/kshana-mcp (znajdowany przez klientów obsługujących rejestr) klient obsługujący rejestr 0.40.0
Zdalnie (streamable HTTP) kshana-mcp --http 127.0.0.1:8080, własny hosting: zob. https://github.com/ashfordeOU/kshana/blob/main/docs/deploy/mcp-http.md własny host v0.40.0

Z kopii roboczej lub z git (rozwój):

cd mcp/kshana-mcp && cargo install --path .
cargo install --git https://github.com/AshfordeOU/kshana kshana-mcp

Tryb HTTP (własny hosting)#

kshana-mcp --http 127.0.0.1:8080 udostępnia te same narzędzia przez streamable HTTP pod /mcp. Nasłuchuje tylko na pętli zwrotnej; adres inny niż pętla zwrotna wymaga --allow-remote i tokenu bearer w KSHANA_MCP_HTTP_TOKEN; narzędzia do plików IQ są wyłączone; rozmiar żądania, czas i współbieżność są ograniczone; nie jest wysyłany żaden nagłówek CORS. Kshana nie udostępnia punktu końcowego: hostuje się go samodzielnie. Zob. docs/deploy/mcp-http.md.

cargo install umieszcza kshana-mcp w Twoim PATH (zwykle ~/.cargo/bin/kshana-mcp). Serwer komunikuje się przez JSON-RPC (zdalne wywołanie procedur JSON) po stdio; logi trafiają do stderr. Budowanie ze źródeł wymaga toolchainu Rust ≥ 1,88 (potrzebuje go załatany SDK rmcp 2.x, podobnie jak biblioteka kshana); obraz Docker nie wymaga żadnego.

Zarejestruj go w kliencie#

Praktycznie każdy klient MCP używa tego samego bloku konfiguracji mcpServers: zarejestruj plik binarny kshana-mcp przez ścieżkę bezwzględną:

{
  "mcpServers": {
    "kshana": {
      "command": "/Users/you/.cargo/bin/kshana-mcp",
      "args": [],
      "env": {}
    }
  }
}

Albo z obrazem Docker zamiast lokalnego pliku binarnego (PATH nie jest potrzebny):

{
  "mcpServers": {
    "kshana": {
      "command": "docker",
      "args": ["run", "--rm", "-i", "ghcr.io/ashfordeou/kshana-mcp"]
    }
  }
}

Miejsce tego bloku zależy od klienta:

  • Cursor — ~/.cursor/mcp.json (globalnie) lub .cursor/mcp.json (dla projektu).
  • JetBrains AI Assistant / Junie — Settings → Tools → AI Assistant → Model Context Protocol → Add → As JSON, wklej blok, a następnie całkowicie uruchom ponownie IDE (zintegrowane środowisko programistyczne).
  • Asystenci na komputerze — większość używa …_config.json o tym samym kształcie mcpServers; lokalizację pliku sprawdź w dokumentacji swojego klienta.
  • Agenci wiersza poleceń — wielu przyjmuje ten sam JSON przez mechanizm mcp add / mcp.json.

Zawsze używaj ścieżki bezwzględnej do pliku binarnego. Ustaw RUST_LOG=debug w env, aby diagnozować problemy (diagnostyka trafia do stderr; stdout jest zarezerwowane dla protokołu JSON-RPC).

Wypróbuj#

Po zarejestrowaniu zapytaj asystenta na przykład o:

  • „Wymień rodzaje scenariuszy Kshana.” → list_scenario_kinds
  • „Pokaż mi przykład spectrum z Kshana i uruchom go.” → list_example_scenarios, get_example_scenario, run_scenario
  • „Uruchom scenariusz holdover zegara z Kshana z progiem 20 ns i 2-godzinną przerwą w GNSS; jaki jest holdover kwantowy w porównaniu z klasycznym?” → run_scenario
  • „Wyeksportuj tę konstelację GPS (Global Positioning System) jako SP3.” → export_sp3
  • „Daj mi tabelę realtime-frame-eop jako CSV.” → export_table_csv
  • „Pokaż ten przelot Iridium na globusie Cesium.” → list_export_formats, export_interop
  • „Zanimuj kampanię zagłuszania.” → animate_scenario
  • „Daj mi raport z tego przebiegu wraz z zapisem odtwarzalności.” → report_scenario
  • „Zrób jednosekundową scenę GPS L1 z PRN 3 i 17, a potem ją pozyskaj i śledź.” → iq_signals, iq_scene, iq_acquire, iq_track

Uwaga projektowa: dlaczego osobny crate#

Serwer jest samodzielnym crate'em wyłączonym z workspace z własnym Cargo.lock, więc oficjalny SDK (zestaw narzędzi programistycznych) Rust MCP rmcp i jego asynchroniczne środowisko uruchomieniowe nigdy nie trafiają do grafu zależności opublikowanego crate'a kshana: użytkownik biblioteki lub Pythona nie kompiluje serwera, którego nie uruchamia. (Wydzielono go początkowo dlatego, że rmcp jest w edycji 2024, co wymaga rustc ≥ 1,85, podczas gdy główny crate obiecywał wtedy 1,75. Biblioteka i ten serwer deklarują teraz oba 1,88, dolną granicę załatanego pod względem bezpieczeństwa rmcp 2.x oraz zaktualizowanych crate'ów RustCrypto.) Ciągła integracja (CI) bramkuje ten crate osobno: testy i cargo deny względem jego pliku blokady. Drzewo licencji rmcp jest czyste (Apache-2.0/MIT/BSD), więc w odróżnieniu od crate'a walidacji krzyżowej xval/anise-frames, który poza tym odwzorowuje, podział nie wynika z licencjonowania.

Licencja: AGPL-3.0-only, GNU Affero General Public License wersja 3 wyłącznie (albo licencja komercyjna od Ashforde OÜ; zob. LICENSING.md w repozytorium).