kshana-mcp: vraag het aan uw AI-assistent en de engine antwoordt
kshana-mcp is een Model Context Protocol-server (MCP) voor Kshana, de opensource-simulator voor de veerkracht van PNT (positiebepaling, navigatie en tijdsynchronisatie). Hij laat een AI-assistent (kunstmatige intelligentie) de echte engine draaien en de JSON (JavaScript Object Notation) teruglezen, in plaats van de wiskunde te raden. Hij communiceert via stdio (standaard in- en uitvoer) met elke MCP-compatibele client, waaronder Cursor en JetBrains AI Assistant / Junie.
De wiskunde waarvoor Kshana aan een onafhankelijke externe referentie is getoetst, is precies waar een taalmodel slecht raadt: SGP4 (Simplified General Perturbations 4) baanpropagatie, referentiestelsels van de IAU (International Astronomical Union), Allan-deviaties, beschikbaarheid van GNSS (Global Navigation Satellite System) en DOP (dilution of precision), beschermingsniveaus van ARAIM (advanced receiver autonomous integrity monitoring), fusie van GNSS en INS (inertial navigation system) en modellen van kwantumsensoren. Stel een vraag; de assistent draait een echt scenario en krijgt kwaliteitsmaten met hun herkomst en hun label VALIDATED of MODELLED.
Hulpmiddelen#
| Hulpmiddel | Wat het doet |
|---|---|
run_scenario |
Een scenario draaien vanuit een TOML-definitie (Tom's Obvious, Minimal Language); geeft de samenvatting plus de volledige resultaat-JSON (JavaScript Object Notation: kwaliteitsmaten, curven) terug. Met de optionele include_chart komt de grafiek terug als SVG (Scalable Vector Graphics). |
list_scenario_kinds |
De 92 ingebouwde scenariosoorten met beschrijvingen + vereiste/optionele velden — zodat de agent een geldig scenario kan opstellen. |
validate_scenario |
Controle vooraf: de TOML parsen en de soort ervan bepalen, zonder te draaien. |
list_example_scenarios |
De meegeleverde referentiescenario's als JSON: elk met zijn name, zijn kind en één zin over wat het toont. Optioneel filter kind. Elk voorbeeld draait zoals het is, dus dit is de snelste weg naar een geldige TOML voor een soort. |
get_example_scenario |
De TOML-tekst van één meegeleverd referentiescenario, byte voor byte het bestand onder scenarios/. |
report_scenario |
Een scenario draaien en het rapport teruggeven: samenvatting voor het management, invoer, elk cijfer met zijn eenheid en zijn label VALIDATED of MODELLED, gebeurtenissen, de uitgeoefende mogelijkheden en een reproduceerbaarheidsrecord. format is json (standaard) of html (de afdrukbare pagina in één bestand). |
animate_scenario |
Een scenario draaien en zijn tijdreeks als animatie teruggeven: svg (standaard), html (een zelfstandige speler) of frames (hoogstens 120 in een antwoord). Het eerste inhoudsitem is een JSON-samenvatting van wat is getekend; de bestanden volgen. Een soort zonder bemonsterde tijdas wordt met de reden geweigerd. |
list_export_formats |
Welke uitwisselingsformaten van toepassing zijn op een scenario (czml, kml, geojson, stk, sigmf), de reden wanneer een formaat niet van toepassing is, en de specificatie die elke schrijver volgt. Draait het scenario niet. |
export_interop |
Een scenario exporteren als CZML (Cesium Language), KML (Keyhole Markup Language), GeoJSON, STK (Systems Tool Kit)-efemeride .e, of SigMF (Signal Metadata Format, voor een spectrum-scenario met een [iq]-blok). Het eerste inhoudsitem is een JSON-index van de bestanden (achtervoegsel, grootte, codering en de SHA-256-digest, de 256-bit Secure Hash Algorithm); de bestanden volgen, het binaire SigMF-samplebestand als base64. |
import_route |
Een GeoJSON-route LineString in een scenario schrijven dat een waypointtraject vliegt (terrain-nav, terrain-slam, gravity-map, combined-altpnt) en de nieuwe TOML teruggeven. |
export_sp3 |
De constellatie van een orbit-scenario exporteren als SP3-c (Standard Product 3, revisie c) precieze efemeride. |
export_omm |
De elementen van een orbit-scenario exporteren als CCSDS (Consultative Committee for Space Data Systems) 502.0-B-2 OMM-catalogus (Orbit Mean-elements Message). |
export_oem |
De toestandsreeks van een orbit-scenario exporteren als CCSDS OEM-efemeride (Orbit Ephemeris Message) 2,0 — de TEME-reeks (true equator, mean equinox) van positie en snelheid die vluchtdynamicahulpmiddelen (GMAT, de General Mission Analysis Tool; Orekit; STK, de Systems Tool Kit) lezen; het aanvullende formaat met snelheid naast het alleen-positieformaat export_sp3. |
export_table_csv |
Een scenario draaien en zijn reproduceerbaarheidstabel als CSV (comma-separated values) teruggeven — de byte-stabiele tabel die de CLI (command-line interface) schrijft als <scenario>.table.csv. Alleen realtime-frame-eop, lunar-time-budget, lunar-jamming, telecom-timing, leo-navmsg (zijn encode-decode-analyse op een kepler16- of kepler-rac-berichtmodel) en moonlight-service-volume met export_site_lat_deg + export_site_lon_deg ingesteld leveren er een; elke andere soort geeft een fout die deze noemt. |
sky_geometry |
Hemelgeometrie onder een azimutafhankelijke skyline: vanaf een locatie, een tijdstip en constellatievoorinstellingen, two-line element sets (tle, door SGP4 gepropageerd naar een UTC-epoch) of satellieten als azimut/elevatie of ECEF, de zichtbare satellieten en de door de skyline verborgen satellieten, GDOP/PDOP/HDOP/VDOP/TDOP uit de door gnss_lib_py gecontroleerde DOP-kernel, de east-north-up-cofactor en -covariantie (één klok per systeem of één gemeenschappelijke) en de horizontale foutellips; met skyline_preset in plaats van request, een REPRESENTATIVE voorinstelling met haar herkomst en haar afsnijding per graad. MODELLED; draagt het advies; geen Monte Carlo via MCP. Zie docs/SKYLINE.md. |
assess_receiver_log |
Een echt GNSS-ontvangerlog (global navigation satellite system) beoordelen op vertrouwen. De TOML noemt het format van het log (ubx, rinex, android, nmea of sbf) en geeft de bytes ervan inline als text of base64; het hulpmiddel draait de vertrouwensmonitors (daling van de draaggolf-ruisdichtheid, verlies van lock, AGC (automatic gain control), jamming-indicator, positiesprong en, met RINEX plus broadcast-navigatie, RAIM (receiver autonomous integrity monitoring) en een klokondersteunde monitor) en geeft terug wanneer en waarom de positiebepaling niet meer betrouwbaar was. Optionele secties [[events]] en [compare] scoren opgegeven gebeurtenissen en voorspelde C/N0-dalingen tegen opgegeven toleranties. Een tabel [platform] kind = "vessel" kiest de maritieme monitors en voegt per epoch een vertrouwensscore van 0-100 toe met de monitors die hebben afgetrokken (adviserend; MODELLED). Het log gaat inline als text of base64 (hoogstens 4 MiB). Grafiek en CSV per epoch op verzoek. Zie docs/RECEIVER-TRUST.md. |
assess_vessel_stream |
Een begrensd NMEA 0183-fragment scoren (hoogstens 2 MiB en 20.000 epochs; het moet het kalibratievenster bevatten) zoals kshana receiver-trust live het scoort: vertrouwenstoestand en score van 0-100 per epoch met de monitors die hebben afgetrokken, een samenvatting en de laatste $PKSHT. De begrensde vorm van de live-opdracht: er wordt geen socket geopend en er wordt niets naar een poort geschreven; de gate, --listen en de telemetrie-exporters (Prometheus, OTLP, syslog) zijn alleen via de opdrachtregel beschikbaar. Alleen adviserend; MODELLED. Zie docs/MARITIME-TRUST.md. |
assess_vessel_log |
Het NMEA 0183-log van een vaartuig (hoogstens 4 MiB) als batchrun, met de sessie-TOML die de grenzen van het vaartuig vermeldt: het scoremodel en de score van 0-100 van elke epoch met zijn aftrekposten (het antwoord houdt aantallen per toestand bij en de eerste 200 gedegradeerde of onbetrouwbare epochs). Alleen adviserend; MODELLED. |
jammertest_import |
De gepubliceerde Jammertest-testcatalogus en zendplanning (NPRA/jammertest-plan, MIT) lezen als geplande referentie (kshana jammertest import): de slots van één testgebied worden ontvangervertrouwen-gebeurtenissen met de catalogus-id en het jaar in elk label. Geplande slots, geen opgenomen uitzendtijden; er wordt geen contactveld van het plan gelezen. MODELLED. Zie docs/JAMMERTEST.md. |
jammertest_score |
Een ontvangerlog scoren tegen die planning (kshana jammertest score): per test de detectielatentie, gemiste alarmen en hersteltijd, en de valse alarmen buiten elk slot. Tekstlogs als log, binaire (ubx, sbf) als log_base64. Een ondertekend pakket vereist een sleutel: opdrachtregel. Alleen adviserend; MODELLED. |
create_evidence_pack |
Een ondertekend bewijspakket voor een venster van het log van een vaartuig (kshana receiver-trust evidence): de ruwe logbytes voor het venster, de configuratie, de resultaten en redenen per epoch, een samenvattingspagina en een manifest met elke SHA-256 en een hashketen, ondertekend met Ed25519. De ondertekeningsseed wordt nooit teruggegeven of gelogd; zonder seed wordt een eenmalige sleutel gebruikt, dus het pakket bewijst integriteit, geen identiteit. Een technisch record, geen juridisch oordeel. Zie docs/EVIDENCE-PACKS.md. |
attach_evidence_timestamp |
Een RFC 3161-tijdstempeltoken (base64 van de .tsr-bytes) aan een pakket koppelen, in het geheugen (kshana evidence attach-timestamp); het pakket met het token moet nog steeds verifiëren. De handtekening van de tijdstempelautoriteit wordt niet gecontroleerd: gebruik openssl ts -verify. |
verify_evidence_pack |
Een pakket verifiëren (kshana evidence verify): elke hash, de keten, de handtekening en, met de publieke sleutel van de ondertekenaar en het volledige log, wie het heeft ondertekend en dat het fragment uit dat log komt. Noemt elke fout en elk bestand. Het verdict is verified (ondertekenaar vastgepind), intact-signer-not-pinned (alles klopt, maar er is geen publieke sleutel opgegeven, dus de ondertekenaar is niet vastgesteld) of failed; require_timestamp laat een pakket zonder tijdstempeltoken falen. |
generate_training_nmea |
Synthetisch brug-NMEA 0183 voor bemanningstraining uit een nmea-scenario-TOML (jamming, positie-wegtrekken, tijdspoofing, replay-vertraging) met het instructeurslog (kshana-nmea-training/1); deterministisch per seed. Alleen tekst: er wordt niets gesynthetiseerd op RF- of IQ-niveau en niets uitgezonden; nooit voor de actieve navigatiesystemen van een vaartuig. Het antwoord bevat de eerste 2000 regels. |
build_interference_map |
Een GNSS-interferentiekaart uit ADS-B- of AIS-positiemeldingen als CSV-tekst (hoogstens 4 MiB): één kshana-interference-map/v1 GeoJSON per UTC-dag, alleen geaggregeerd (geen identificatiegegevens, cellen met minder dan 5 verschillende vliegtuigen of vaartuigen achtergehouden), met de licentie van de dataset ingebed. Een gedegradeerde cel wijst interferentie niet aan als oorzaak; geen voorspelling. MODELLED. Zie docs/INTERFERENCE-MAP.md. |
export_test_bench |
De voertuigbeweging en gebeurtenissen van een scenario voor een laboratorium-GNSS-simulator (kshana bench-export): bewegings-CSV en JSON, NMEA, waypoints en gebeurtenissen als tekst, niets naar schijf geschreven. Soorten gnss-ins, jamming, gnss-sim. Geen signaal: niets van wat wordt geëxporteerd is, modelleert of stuurt een radiofrequent signaal of basisbandsignaal aan; de simulator en zijn operator leveren de signalen. Zie docs/TEST-BENCH.md. |
create_round_trip_pack |
Het ondertekende laboratorium-round-trippakket (kshana evidence round-trip): het scenario, het document kshana.test-conditions/1 van het laboratorium, het ontvangerlog en de score ervan tegen de opgegeven gebeurtenissen, door hashes gekoppeld. Weigert omstandigheden en scoregebeurtenissen die elkaar tegenspreken. Geen signaal; een technisch record, geen certificering. |
iq_sweep |
Eén IQ-opname in de werkmap afspelen over meerdere ontwerpen van volglussen (kshana iq sweep): per ontwerp en PRN de stationaire fase- en codejitter, lock-fracties en gemiddelde C/N0. Hoogstens 256 (ontwerp, PRN)-kanalen per aanroep; het bereik moet binnen het samplebudget passen. |
iq_monitor |
De monitors voor detectie van interferentie en spoofing draaien over een IQ-opname in de werkmap (kshana iq monitor): breedband- en spectrummonitors en C/N0- en signaalkwaliteitsmonitors per satelliet tegen een geleerde basislijn. Reeksnamen en -lengten en tot 200 gebeurtenissen in het antwoord; het hele rapport op verzoek als bestanden. Een gebeurtenis zegt dat een gemeten grootheid zijn basislijn verliet, niet waarom. MODELLED. |
iq_labfit |
Het verliezen-van-lock-model van de volglus fitten op labruns (kshana iq labfit) uit een iq-labfit-scenario waarvan de logs inline zijn (text of base64; een path wordt geweigerd). Leest en schrijft geen bestand. MODELLED. |
iq_test_conditions |
Een kshana.test-conditions/1-bestand dat als tekst is opgegeven valideren en de opgeloste omstandigheden met hun hash teruggeven. Alleen inline. |
compliance_report |
De afbeelding op openbare raamwerken, ingevuld uit resultaatdocumenten die als tekst zijn opgegeven (kshana compliance-report): voor welke rijen van zes raamwerken en standaarden voor veerkracht (US DHS Resilient PNT framework v2.0, IMO-scheepvaart, EASA-luchtvaart, NIS2 artikel 21, EN 16803, NIST IR 8323r1) de runs bewijs leveren, voor welke niet, en de lacune per rij. Neemt runs van {label, result, scenario?} (hoogstens 64, in totaal 4 MiB). Een status zegt dat de runs bewijs leveren voor de mogelijkheden van de rij; het is geen vaststelling dat een raamwerk is gehaald en geen beoordeling of goedkeuring van enig product. De statement wordt bij elk rapport teruggegeven; toon hem woordelijk. MODELLED. Zie docs/compliance/. |
compliance_mapping |
De statische afbeeldingstabellen (of, met sources, de brondocumenten die ze aanhalen met versies en URL's) als Markdown, voorafgegaan door dezelfde verklaring. Vereist geen runs. |
trust_telemetry |
Een vertrouwensstroom (JSON-regels) of receiver-trust-resultaat weergegeven als Prometheus-tekst, CEF- of LEEF-syslogregels, een OTLP-JSON-payload of Home Assistant MQTT-discovery- en statusregels, met de encoders van kshana trust-telemetry. Tekst in het antwoord: er wordt niets verzonden of aangeboden en er wordt geen klok gelezen. Alleen adviserend. |
fit_imu_log |
Versnellingsmeter- en gyroparameters van de scenario's hybrid en fusion, gefit uit een stilstaand IMU-log (CSV of EuRoC) met Allan-deviatie, met een kant-en-klare tabel [accel_classical] om te plakken en de SHA-256 van het log (kshana imu-fit). Tekst erin, JSON eruit; MODELLED. |
list_standards_packs |
De standaardenpakketten (kshana standards-pack list): gescoorde scenariosets voor de testprofielen van het DHS Resilient PNT framework (niveaus 1 tot 4), IMO MSC.1/Circ.1575 en ICAO Doc 9849 Appendix F. |
run_standards_pack |
Eén pakket gedraaid tegen zijn drempels die vóór de run zijn vastgelegd (kshana standards-pack run): elke test MET, NOT MET of NEEDS INPUT, met gemeten en verwachte waarden; geef het rapport aan compliance_report om de rijen te zien. MODELLED; beoordeelt geen enkel product. |
lunanet_afs_check |
Het LunaNet Augmented Forward Signal getoetst aan LNIS V5 AD1 Volume A (LSIS-AFS V1.0, 29 januari 2025): spec (de implementatie tegen de afgedrukte codetabellen en uitgewerkte voorbeelden van het document), symbols (een symboolstroom: synchronisatiepatroon, SB1, FID, TOI-continuïteit) of generate (een teststroom). LDPC en CRC-24Q van subframes 2 tot 4 worden niet geverifieerd; er wordt geen signaal geschreven. |
score_benchmark |
Een kshana-bench-inzending gescoord tegen een referentiebestand, beide JSON-tekst (kshana bench score, bench/SPEC.md): het resultaatbestand met de specificatieversie, de split, de invoerhashes en de metrieken van de taak. MODELLED; beschrijft een log of corpus, nooit een product. |
render_leaderboard |
kshana-bench-resultaatbestanden weergegeven als de statische ranglijstpagina (HTML-tekst), elk eerst getoetst. |
trust_telemetry |
Een vertrouwensstroom (JSON-regels) of receiver-trust-resultaat weergegeven als Prometheus-tekst, CEF- of LEEF-syslogregels of een OTLP-JSON-payload, met de encoders van kshana trust-telemetry. Tekst in het antwoord: er wordt niets verzonden of aangeboden en er wordt geen klok gelezen. Alleen adviserend. |
route_exposure |
Het aandeel van de lengte van een route in gedegradeerde, niet-gedegradeerde, niet-beoordeelde en niet-waargenomen cellen van een of meer interferentiekaarten, optioneel binnen een datumbereik. Niet-waargenomen cellen zijn geen bewijs van een vrije route. |
iq_signals |
De inrichting van de GNSS-IQ-laag: de signaalnamen die de IQ-hulpmiddelen accepteren, of de IQ-bestandshulpmiddelen aanstaan, de werkmap en het samplebudget per aanroep. Roep dit eerst aan. |
iq_info |
Eén IQ-opname (in-phase en quadrature) in de werkmap beschrijven zonder haar te verwerken: formaat, samplefrequentie, middenfrequentie, samples, duur, databestanden en groottes (kshana iq info). |
iq_scene |
Een GNSS-IQ-scène met meerdere satellieten genereren in de werkmap (kshana iq scene): opgegeven Doppler/C/N0-profielen, of echte geometrie van broadcast-efemeriden uit een RINEX-navigatiebestand, met optioneel een propagatiekanaal op signaalniveau. Antwoordt met de geschreven bestanden en hun aantallen bytes en de eerste epoch van de referentie per satelliet. |
iq_acquire |
FFT-acquisitie (fast Fourier transform) van een of meer PRN's (pseudo-random noise-codes) over een opname (kshana iq acquire), optioneel achter front-endtrappen: per PRN, verworven of niet, Doppler, codefase, piekstatistiek en drempel; surface_out (één PRN) bewaart het hele correlatieoppervlak Doppler × codefase met verfijningen van de fijne Doppler. |
iq_track |
Verwerven en daarna volgen met de DLL/PLL/FLL-bank (delay-, phase- en frequency-locked loop) (kshana iq track), met de lussen uit een kshana.loop-design/1-TOML-bestand in de werkmap (design) of het ingebouwde ontwerp, en optionele heracquisitie (reacquire): per kanaal, epochs, eindelijke Doppler, eindelijke en gemiddelde C/N0, fase- en codelock-fracties, aan het eind vergrendeld, de eindelijke lock-toestand, valse locks en heracquisities, plus de naam en hash van het ontwerp. Het volgen streamt in begrensd geheugen; uitvoer per epoch gaat alleen naar bestanden (epochs_out: E/P/L, discriminatoren, lustoestanden, C/N0, lock-toestand als .csv/.jsonl/.bin; events_out). |
iq_frontend |
Front-end- en interferentie-onderdrukkings-DSP (digital signal processing: banddoorlaat, notch, blanking, excisie, AGC, kwantiseerder) op een opname toepassen en een nieuwe schrijven (kshana iq frontend). |
iq_campaign |
Een lab-replaycampagne draaien (kshana iq campaign): opnamen, elk met een testomstandighedenbestand dat de bekende referentie van het lab vermeldt, × front-endketens × lusontwerpen. Elke cel wordt gescoord op tijd tot verlies van lock, heracquisitietijd, C/N0-degradatie tegen de opgegeven J/S (naast een analytische referentie met het label MODELLED), valse-lockfrequentie, PLL/DLL-jitter en beschikbaarheid. Incrementeel en hervatbaar: elke aanroep draait de openstaande cellen die in het samplebudget passen (of max_cells). |
iq_campaign_status |
De voortgang van een campagne-uitvoermap: voltooide en openstaande cellen, en de digest zodra de campagne klaar is. Leest alleen bestanden. |
Elk hulpmiddel is een dunne, getrouwe omhulling van een openbare functie van de bibliotheek kshana — hier zit geen nieuwe simulatielogica, dus een agent draait precies de engine die aan een onafhankelijke externe referentie is getoetst.
De GNSS-IQ-hulpmiddelen: bestanden erin, compacte JSON eruit#
IQ-opnamen lopen op tot gigabytes, dus de iq_*-hulpmiddelen laten nooit samples door het protocol lopen. Ze volgen één contract:
- Een werkmap. De server leest en schrijft IQ-bestanden alleen binnen de map die door
KSHANA_MCP_IQ_DIRwordt genoemd. Elk padargument is ten opzichte daarvan (een absoluut pad moet erbinnen uitkomen); invoer wordt vóór de controle via symlinks opgelost, de map van een uitvoer moet er al in bestaan, en een bestaande uitvoer wordt alleen vervangen metoverwrite: true. Als de variabele niet is ingesteld, staan de IQ-bestandshulpmiddelen uit en zeggen ze hoe ze aan te zetten; elk ander hulpmiddel blijft ongemoeid. - Een samplebudget. Eén aanroep genereert of verwerkt hoogstens
KSHANA_MCP_IQ_MAX_SAMPLEScomplexe samples (standaard 50.000.000). In bytes is dat 400 MB alscf32_le(8 bytes per complexe sample), 200 MB alsci16_le(4 bytes) en 100 MB alsci8(2 bytes); een scène wordt alscf32_legeschreven tenzijformatanders bepaalt. De controle vindt plaats vóór enig werk en de weigering noemt de duur ofmax_secondsdie past. - Compacte antwoorden. Elk hulpmiddel antwoordt met één JSON-samenvatting: acquisitiepieken, C/N0, lock-toestand en elk geschreven bestand met zijn pad en aantal bytes. Tabellen per epoch gaan naar de bestanden
json_out/csv_outdie u noemt. - Onbekende argumenten worden geweigerd, niet genegeerd, zodat een verkeerd gespelde optie een fout is.
Elk hulpmiddel draait hetzelfde codepad als kshana iq op de opdrachtregel, in hetzelfde proces. De laag is alleen software: ze schrijft bestanden voor softwareontvangers en stuurt geen radiohardware aan. De IQ-laag voegt geen synthese van interferentie of spoofers toe en er wordt nooit iets uitgezonden. (De aparte scenariosoort spectrum kan analytische IQ-momentopnamen van jammers naar een bestand schrijven.)
{
"mcpServers": {
"kshana": {
"command": "/Users/you/.cargo/bin/kshana-mcp",
"env": { "KSHANA_MCP_IQ_DIR": "/Users/you/iq" }
}
}
}
Koppel bij het Docker-image de map en laat de variabele ernaar wijzen: docker run --rm -i -v "$PWD/iq:/iq" -e KSHANA_MCP_IQ_DIR=/iq ghcr.io/ashfordeou/kshana-mcp.
Elke soort is bereikbaar#
run_scenario verdeelt op de kind van het scenario, dus elke soort die list_scenario_kinds noemt, draait erdoorheen. Dat omvat de nieuwere families, elk met meegeleverde voorbeelden die een agent kan ophalen:
| Mogelijkheid | Soorten | Een voorbeeld om mee te beginnen |
|---|---|---|
| Spectrum en waterfall | spectrum |
l-band-waterfall-jamming |
| Het zonnestelsel | solar-system |
solar-system-tour |
| Constellaties rond elk lichaam | constellation-design, body-pnt |
lunar-relay-constellation, europa-surface-pnt |
| Campagnes: geketende fasen, sweeps, Monte Carlo (gezaaide willekeurige ensembles), compositie | campaign |
campaign-sweep-jammer-power |
| Navigatie met lage aardbaan (LEO): signaalontwerp | leo-signal |
leo-band-trade |
| LEO-navigatie: linkbudget per overpassing | leo-pass |
leo-pass-iridium |
| LEO-navigatie: navigatiebericht | leo-navmsg |
leo-navmsg-encode-decode |
| LEO-navigatie: gefuseerde positiebepaling en tijdsynchronisatie | leo-pvt, leo-ppp, ntn-positioning, leo-pnt-chain |
leo-doppler-positioning, leo-pnt-end-to-end |
list_example_scenarios met een kind noemt elk meegeleverd voorbeeld van die soort. Animaties, rapporten en interoperabiliteitsexports zijn geen soorten: het zijn weergaven van een run, en animate_scenario, report_scenario en export_interop leveren ze voor elk scenario waarop ze van toepassing zijn.
Niet aangeboden: studiesuites (kshana --study <suite.toml>), omdat een suite naburige scenariobestanden op schijf noemt en de scenariohulpmiddelen geen bestand lezen. Draai elk lid met run_scenario. (De IQ-hulpmiddelen lezen en schrijven wel bestanden, maar alleen binnen hun werkmap.)
De MCP-server installeren#
Adviserend, geen typegoedgekeurde navigatieapparatuur: de exploitant blijft verantwoordelijk voor de navigatie. De server draait op uw computer; er wordt niets naar Ashforde OÜ verzonden.
Een passage waarin AI-clients van derden worden genoemd, is hier weggelaten; ze staat in mcp/kshana-mcp/README.md op GitHub.
| Kanaal | Opdracht of knop | Vereist | Vastgepinde vorm |
|---|---|---|---|
| Cursor (één klik) | npx (Node) · Docker | Node, of Docker | kshana-mcp@0.40.0 / ghcr.io/ashfordeou/kshana-mcp:0.40.0 |
| VS Code (één klik) | npx (Node) · Docker · Insiders (npx) | Node, of 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+ met uv of 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 | formula voor v0.40.0 |
| Scoop | scoop bucket add ashforde https://github.com/ashfordeOU/scoop-bucket en daarna scoop install kshana-mcp |
Scoop (Windows) | manifest voor 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 |
| Vooraf gebouwde binary | de releasepagina: kshana-mcp (Linux x86-64), kshana-mcp-<target>[.exe], gecontroleerd met SHA256SUMS en gh attestation verify |
geen | v0.40.0 |
| MCP-register | io.github.ashfordeOU/kshana-mcp (gevonden door clients die het register gebruiken) |
een client die het register gebruikt | 0.40.0 |
| Op afstand (streamable HTTP) | kshana-mcp --http 127.0.0.1:8080, zelf gehost: zie https://github.com/ashfordeOU/kshana/blob/main/docs/deploy/mcp-http.md |
uw eigen host | v0.40.0 |
Vanuit een checkout of git (ontwikkeling):
cd mcp/kshana-mcp && cargo install --path .
cargo install --git https://github.com/AshfordeOU/kshana kshana-mcp
HTTP-modus (zelf gehost)#
kshana-mcp --http 127.0.0.1:8080 biedt dezelfde hulpmiddelen via streamable HTTP op /mcp. Hij bindt alleen aan loopback; een niet-loopbackadres vereist --allow-remote en een bearer-token in KSHANA_MCP_HTTP_TOKEN; de IQ-bestandshulpmiddelen staan uit; omvang, tijd en gelijktijdigheid van verzoeken zijn begrensd; er wordt geen CORS-header verzonden. Kshana host geen endpoint: u host het zelf. Zie docs/deploy/mcp-http.md.
cargo install zet kshana-mcp op uw PATH (meestal ~/.cargo/bin/kshana-mcp). De server praat JSON-RPC (JSON remote procedure call) via stdio; logs gaan naar stderr. Bouwen uit de broncode vereist een Rust-toolchain ≥ 1,88 (de gepatchte rmcp 2.x-SDK heeft die nodig, net als de bibliotheek kshana); het Docker-image heeft er geen nodig.
Registreer hem bij een client#
Vrijwel elke MCP-client gebruikt hetzelfde configuratieblok mcpServers — registreer het binaire bestand kshana-mcp met zijn absolute pad:
{
"mcpServers": {
"kshana": {
"command": "/Users/you/.cargo/bin/kshana-mcp",
"args": [],
"env": {}
}
}
}
Of, met het Docker-image in plaats van een lokaal binair bestand (geen PATH nodig):
{
"mcpServers": {
"kshana": {
"command": "docker",
"args": ["run", "--rm", "-i", "ghcr.io/ashfordeou/kshana-mcp"]
}
}
}
Waar dat blok staat, hangt van de client af:
- Cursor —
~/.cursor/mcp.json(globaal) of.cursor/mcp.json(per project). - JetBrains AI Assistant / Junie — Settings → Tools → AI Assistant → Model Context Protocol → Add → As JSON, plak het blok en start de IDE (integrated development environment) daarna volledig opnieuw.
- Desktopassistenten — de meeste gebruiken een
…_config.jsonmet dezelfdemcpServers-vorm; raadpleeg de documentatie van uw client voor de bestandslocatie. - CLI-agents — veel accepteren dezelfde JSON via een mechanisme
mcp add/mcp.json.
Gebruik altijd een absoluut pad naar het binaire bestand. Stel RUST_LOG=debug in env in om problemen op te sporen (diagnostiek gaat naar stderr; stdout is gereserveerd voor het JSON-RPC-protocol).
Probeer het#
Eenmaal geregistreerd, kunt u uw assistent zulke dingen vragen als:
- "Geef de Kshana-scenariosoorten weer." →
list_scenario_kinds - "Toon me een Kshana-spectrumvoorbeeld en draai het." →
list_example_scenarios,get_example_scenario,run_scenario - "Draai het Kshana-scenario voor klok-holdover met een drempel van 20 ns en een GNSS-uitval van 2 uur; wat is de holdover kwantum versus klassiek?" →
run_scenario - "Exporteer die GPS-constellatie (Global Positioning System) als SP3." →
export_sp3 - "Geef me de tabel realtime-frame-eop als CSV." →
export_table_csv - "Zet die Iridium-overpassing op een Cesium-globe." →
list_export_formats,export_interop - "Animeer de jamming-campagne." →
animate_scenario - "Geef me het rapport voor die run, met zijn reproduceerbaarheidsrecord." →
report_scenario - "Maak een GPS L1-scène van een seconde met PRN's 3 en 17, en verwerf en volg die daarna." →
iq_signals,iq_scene,iq_acquire,iq_track
Ontwerpnotitie — waarom een aparte crate#
De server is een zelfstandige crate buiten de workspace met een eigen Cargo.lock, zodat de officiële Rust MCP-SDK (software development kit) rmcp en zijn asynchrone runtime nooit in de afhankelijkheidsgraaf van de gepubliceerde crate kshana terechtkomen: een gebruiker van de bibliotheek of van Python compileert geen server die hij niet draait. (Hij werd eerst afgesplitst omdat rmcp edition 2024 is en rustc ≥ 1,85 vereist, terwijl de hoofdcrate toen 1,75 beloofde. De bibliotheek en deze server verklaren nu allebei 1,88, de ondergrens van de beveiligingsgepatchte rmcp 2.x en van de geüpgradede RustCrypto-crates.) Continue integratie (CI) toetst deze crate afzonderlijk — tests en cargo deny tegen zijn lockfile. De licentieboom van rmcp is schoon (Apache-2.0/MIT/BSD), dus anders dan de kruisvalidatiecrate xval/anise-frames, die hij verder nabootst, gaat de afsplitsing niet om licenties.
Licentie: alleen AGPL-3.0, de GNU Affero General Public License versie 3 (of een commerciële licentie van Ashforde OÜ; zie LICENSING.md van de repository).