kshana-mcp: spør KI-assistenten din, så svarer motoren
kshana-mcp er en MCP-server (Model Context Protocol) for Kshana, den åpne simulatoren for robusthet i PNT (posisjonering, navigasjon og tidssynkronisering). Den lar en KI-assistent (kunstig intelligens) kjøre den virkelige motoren og lese tilbake JSON-svaret (JavaScript Object Notation), i stedet for å gjette på matematikken. Den snakker over stdio (standard inn og ut) med enhver MCP-klient, inkludert Cursor og JetBrains AI Assistant / Junie.
Matematikken som Kshana er validert for, er nettopp der en språkmodell gjetter dårlig: banepropagering med SGP4 (Simplified General Perturbations 4), referansesystemer fra IAU (International Astronomical Union), Allan-deviasjoner, tilgjengelighet for GNSS (Global Navigation Satellite System) og DOP (dilution of precision), beskyttelsesnivåer for ARAIM (advanced receiver autonomous integrity monitoring), fusjon av GNSS og INS (inertial navigation system), og kvantesensormodeller. Still et spørsmål; assistenten kjører et ekte scenario og får kvalitetsmål med opphav og merkelappen VALIDATED eller MODELLED.
Verktøy#
| Verktøy | Hva den gjør |
|---|---|
run_scenario |
Kjør et scenario fra en TOML-definisjon (Tom's Obvious, Minimal Language); returnerer sammendraget + hele resultat-JSON (JavaScript Object Notation: kvalitetsmål, kurver). Valgfri include_chart returnerer diagrammet som SVG (Scalable Vector Graphics). |
list_scenario_kinds |
De 92 innebygde scenariotypene med beskrivelser og påkrevde/valgfrie felt, slik at agenten kan bygge et gyldig scenario. |
validate_scenario |
Kontroll før kjøring: tolk TOML-en og finn typen, uten å kjøre. |
list_example_scenarios |
De medfølgende referansescenarioene som JSON: hver name, dens kind og én setning om hva den viser. Valgfritt filter på kind. Hvert eksempel kjører som det står, så dette er den raskeste veien til en gyldig TOML for en type. |
get_example_scenario |
TOML-teksten til ett medfølgende referansescenario, byte for byte filen under scenarios/. |
report_scenario |
Kjør et scenario og returner rapporten: sammendrag, inndata, hvert tall med enhet og merkelappen VALIDATED eller MODELLED, hendelser, funksjonene som ble utøvd og en reproduserbarhetspost. format er json (standard) eller html (den utskriftsvennlige enkeltfilsiden). |
animate_scenario |
Kjør et scenario og returner tidsserien som en animasjon: svg (standard), html (en selvstendig avspiller) eller frames (høyst 120 i ett svar). Det første innholdselementet er et JSON-sammendrag av det som ble tegnet; filene følger. En type uten samplet tidsakse avvises med begrunnelse. |
list_export_formats |
Hvilke interoperabilitetsformater som gjelder for et scenario (czml, kml, geojson, stk, sigmf), begrunnelsen når ett ikke gjør det, og spesifikasjonen hver skriver følger. Kjører ikke scenarioet. |
export_interop |
Eksporter et scenario som CZML (Cesium Language), KML (Keyhole Markup Language), GeoJSON, efemeride .e for STK (Systems Tool Kit), eller SigMF (Signal Metadata Format, for et scenario av typen spectrum med en blokk [iq]). Det første innholdselementet er en JSON-indeks over filene (suffiks, størrelse, koding og SHA-256-sammendraget, den 256-bits Secure Hash Algorithm); filene følger, den binære SigMF-samplefilen som base64. |
import_route |
Skriv en GeoJSON-rute av typen LineString inn i et scenario som flyr et veipunktspor (terrain-nav, terrain-slam, gravity-map, combined-altpnt) og returner den nye TOML-en. |
export_sp3 |
Eksporter konstellasjonen til et scenario av typen orbit som presis efemeride i SP3-c (Standard Product 3, revisjon c). |
export_omm |
Eksporter elementene til et scenario av typen orbit som en katalog i CCSDS (Consultative Committee for Space Data Systems) 502.0-B-2 OMM (Orbit Mean-elements Message). |
export_oem |
Eksporter tilstandsserien til et scenario av typen orbit som efemeride i CCSDS OEM (Orbit Ephemeris Message) 2,0 — TEME-serien (true equator, mean equinox) for posisjon og hastighet som verktøy for flydynamikk (GMAT, General Mission Analysis Tool; Orekit; STK, Systems Tool Kit) leser; komplementet som bærer hastighet, til det rene posisjonsverktøyet export_sp3. |
export_table_csv |
Kjør et scenario og returner reproduserbarhetstabellen som CSV (kommaseparerte verdier) — den byte-stabile tabellen som CLI-en (kommandolinjegrensesnittet) skriver som <scenario>.table.csv. Bare realtime-frame-eop, lunar-time-budget, lunar-jamming, telecom-timing, leo-navmsg (analysen encode-decode på en meldingsmodell kepler16 eller kepler-rac) og moonlight-service-volume med export_site_lat_deg + export_site_lon_deg satt gir en; alle andre typer returnerer en feil som nevner disse. |
sky_geometry |
Himmelgeometri under et azimutavhengig horisontprofil: fra et sted, et tidspunkt og konstellasjonsforhåndsinnstillinger, tolinjers elementsett (tle, propagert med SGP4 til UTC-tidspunktet epoch) eller satellitter som azimut/elevasjon eller ECEF, satellittene som er synlige og de som er skjult av horisontprofilen, GDOP/PDOP/HDOP/VDOP/TDOP fra DOP-kjernen som er kontrollert mot gnss_lib_py, øst-nord-opp-kofaktoren og kovariansen (én klokke per system eller én felles) og den horisontale feilellipsen; med skyline_preset i stedet for request, en REPRESENTATIVE forhåndsinnstilling med opphav og med utskjæringen for hver grad. MODELLED; bærer den veiledende merknaden; ingen Monte Carlo over MCP. Se docs/SKYLINE.md. |
assess_receiver_log |
Vurder en ekte GNSS-mottakerlogg (global navigation satellite system) for tillit. TOML-en oppgir loggens format (ubx, rinex, android, nmea eller sbf) og gir bytene inline som text eller base64; verktøyet kjører tillitsovervåkerne (fall i bærer-til-støy-tetthet, tap av lås, AGC (automatisk forsterkningsregulering), jamming-indikator, posisjonssprang og, med RINEX pluss kringkastet navigasjon, RAIM (receiver autonomous integrity monitoring) og en klokkestøttet overvåker) og returnerer når og hvorfor posisjonsbestemmelsen sluttet å være pålitelig. Valgfrie seksjoner [[events]] og [compare] skårer oppgitte hendelser og predikerte C/N0-fall mot oppgitte toleranser. En tabell [platform] kind = "vessel" velger de maritime overvåkerne og legger til en tillitsscore på 0-100 per epoke med overvåkerne som trakk fra (veiledende; MODELLED). Loggen sendes inline som text eller base64 (høyst 4 MiB). Diagram og CSV per epoke på forespørsel. Se docs/RECEIVER-TRUST.md. |
assess_vessel_stream |
Skår et avgrenset utdrag av NMEA 0183 (høyst 2 MiB og 20 000 epoker; det må inneholde kalibreringsvinduet) slik kshana receiver-trust live skårer det: tillitstilstand per epoke og score 0-100 med overvåkerne som trakk fra, et sammendrag og siste $PKSHT. Den avgrensede formen av live-kommandoen: ingen socket åpnes og ingenting skrives til en port; porten (gate), --listen og telemetrieksportørene (Prometheus, OTLP, syslog) finnes bare på kommandolinjen. Kun veiledende; MODELLED. Se docs/MARITIME-TRUST.md. |
assess_vessel_log |
Et fartøys logg i NMEA 0183 (høyst 4 MiB) som en batchkjøring, med økt-TOML-en som oppgir fartøyets grenser: skåremodellen og hver epokes score 0-100 med fradragene (svaret beholder antall per tilstand og de første 200 forringede eller upålitelige epokene). Kun veiledende; MODELLED. |
jammertest_import |
Les den publiserte Jammertest-testkatalogen og sendeplanen (NPRA/jammertest-plan, MIT) som planlagt referanse (kshana jammertest import): ett testområdes tidsluker blir mottakertillit-hendelser med katalog-id og år i hver etikett. Planlagte tidsluker, ikke registrerte sendetider; ingen kontaktfelt i planen leses. MODELLED. Se docs/JAMMERTEST.md. |
jammertest_score |
Skår en mottakerlogg mot den planen (kshana jammertest score): per test deteksjonsforsinkelse, uteblitte alarmer og tid til gjenoppretting, og falske alarmer utenfor alle tidsluker. Tekstlogger som log, binære (ubx, sbf) som log_base64. En signert pakke trenger en nøkkel: kommandolinjen. Kun veiledende; MODELLED. |
create_evidence_pack |
En signert bevispakke for et vindu av et fartøys logg (kshana receiver-trust evidence): råloggbytene for vinduet, konfigurasjon, resultater og begrunnelser per epoke, en sammendragsside og et manifest med hver SHA-256 og en hashkjede, signert med Ed25519. Signeringsfrøet returneres eller logges aldri; uten et brukes en engangsnøkkel, så pakken beviser integritet, ikke identitet. En teknisk oppføring, ikke en juridisk vurdering. Se docs/EVIDENCE-PACKS.md. |
attach_evidence_timestamp |
Bind et tidsstempeltoken etter RFC 3161 (base64 av bytene i .tsr) til en pakke, i minnet (kshana evidence attach-timestamp); pakken med tokenet må fortsatt kunne verifiseres. Tidsstempelmyndighetens signatur kontrolleres ikke: bruk openssl ts -verify. |
verify_evidence_pack |
Verifiser en pakke (kshana evidence verify): hver hash, kjeden, signaturen, og med signerens offentlige nøkkel og hele loggen, hvem som signerte den og at utsnittet kom fra den loggen. Nevner hver feil og fil. verdict er verified (signeren er festet), intact-signer-not-pinned (alt stemmer, men ingen offentlig nøkkel ble oppgitt, så signeren er ikke fastslått) eller failed; require_timestamp feiler en pakke uten tidsstempeltoken. |
generate_training_nmea |
Syntetisk bro-NMEA 0183 for mannskapstrening fra en TOML av typen nmea-scenario (jamming, drag-off av posisjon, tidsspoofing, replay-forsinkelse) med instruktørloggen (kshana-nmea-training/1); deterministisk per seed. Bare tekst: ingenting syntetiseres på RF eller IQ og ingenting sendes; aldri for et fartøys levende navigasjonssystemer. Svaret inneholder de første 2000 linjene. |
build_interference_map |
Et GNSS-interferenskart fra ADS-B- eller AIS-posisjonsrapporter som CSV-tekst (høyst 4 MiB): én GeoJSON-fil kshana-interference-map/v1 per UTC-dag, bare aggregert (ingen identifikatorer, celler under 5 distinkte fly eller fartøy holdes tilbake), med datasettlisensen innebygd. En forringet celle peker ikke ut interferens som årsak; ikke en prognose. MODELLED. Se docs/INTERFERENCE-MAP.md. |
export_test_bench |
Et scenarios kjøretøybevegelse og hendelser for en GNSS-simulator i laboratoriet (kshana bench-export): bevegelses-CSV og JSON, NMEA, veipunkter og hendelser som tekst, ingenting skrevet til disk. Typene gnss-ins, jamming, gnss-sim. Intet signal: ingenting som eksporteres er, modellerer eller styrer et radiofrekvens- eller basebåndssignal; simulatoren og operatøren leverer signalene. Se docs/TEST-BENCH.md. |
create_round_trip_pack |
Den signerte tur-retur-pakken fra laboratoriet (kshana evidence round-trip): scenarioet, dokumentet kshana.test-conditions/1 fra laboratoriet, mottakerloggen og dens skår mot de oppgitte hendelsene, koblet med hash. Avviser betingelser og skårehendelser som er uenige. Intet signal; en teknisk oppføring, ikke en sertifisering. |
iq_sweep |
Spill av ett IQ-opptak i arbeidskatalogen på tvers av flere utforminger av sporingssløyfer (kshana iq sweep): per utforming og PRN stabil fase- og kodejitter, låsandeler og gjennomsnittlig C/N0. Høyst 256 kanaler (utforming, PRN) per kall; spennet må passe innenfor sampelbudsjettet. |
iq_monitor |
Kjør deteksjonsovervåkerne for interferens og spoofing over et IQ-opptak i arbeidskatalogen (kshana iq monitor): bredbåndseffekt- og spektralovervåkere og C/N0- og signalkvalitetsovervåkere per satellitt mot en lært grunnlinje. Serienavn og -lengder og opptil 200 hendelser i svaret; hele rapporten på forespørsel som filer. En hendelse sier at en målt størrelse forlot grunnlinjen, ikke hvorfor. MODELLED. |
iq_labfit |
Tilpass tapet-av-lås-modellen for sporingssløyfen til laboratoriekjøringer (kshana iq labfit) fra et scenario av typen iq-labfit hvis logger er inline (text eller base64; en path avvises). Leser og skriver ingen fil. MODELLED. |
iq_test_conditions |
Validerer en kshana.test-conditions/1-fil gitt som tekst og returnerer de løste betingelsene med hasjen deres. Bare innebygd. |
compliance_report |
Kartleggingen mot offentlige rammeverk, fylt ut fra resultatdokumenter gitt som tekst (kshana compliance-report): hvilke rader i seks rammeverk og standarder for robusthet (US DHS Resilient PNT framework v2.0, IMO skip, EASA luftfart, NIS2 artikkel 21, EN 16803, NIST IR 8323r1) kjøringene gir belegg for, hvilke de ikke gir belegg for, og gapet for hver rad. Tar runs av {label, result, scenario?} (høyst 64, 4 MiB til sammen). En status sier at kjøringene gir belegg for radens funksjoner; den er ikke en konklusjon om at et rammeverk er oppfylt, og ikke en vurdering eller godkjenning av noe produkt. statement returneres med hver rapport; vis den ordrett. MODELLED. Se docs/compliance/. |
compliance_mapping |
De statiske kartleggingstabellene (eller, med sources, kildedokumentene de siterer, med versjoner og URL-er) som Markdown, med samme erklæring først. Trenger ingen kjøringer. |
trust_telemetry |
En tillitsstrøm (JSON-linjer) eller et receiver-trust-resultat gjengitt som Prometheus-tekst, CEF- eller LEEF-syslog-linjer, en OTLP-JSON-nyttelast eller Home Assistant MQTT-oppdagelses- og tilstandslinjer, med kodererne i kshana trust-telemetry. Tekst i svaret: ingenting sendes eller serveres, og ingen klokke leses. Kun veiledende. |
fit_imu_log |
Akselerometer- og gyroparametere for scenarioene hybrid og fusion, tilpasset fra en stasjonær IMU-logg (CSV eller EuRoC) med Allan-deviasjon, med en ferdig tabell [accel_classical] som kan limes inn og loggens SHA-256 (kshana imu-fit). Tekst inn, JSON ut; MODELLED. |
list_standards_packs |
Standardpakkene (kshana standards-pack list): scorede scenariosett for testprofilene i DHS Resilient PNT framework (nivå 1 til 4), IMO MSC.1/Circ.1575 og ICAO Doc 9849 tillegg F. |
run_standards_pack |
Én pakkekjøring mot terskler som er oppgitt før kjøringen (kshana standards-pack run): hver test MET, NOT MET eller NEEDS INPUT, med målte og forventede verdier; gi rapporten til compliance_report for å se radene. MODELLED; vurderer ikke noe produkt. |
lunanet_afs_check |
LunaNet Augmented Forward Signal kontrollert mot LNIS V5 AD1 bind A (LSIS-AFS V1.0, 29 januar 2025): spec (implementasjonen mot dokumentets trykte kodetabeller og gjennomgåtte eksempler), symbols (en symbolstrøm: synkroniseringsmønster, SB1, FID, TOI-kontinuitet) eller generate (en teststrøm). LDPC og CRC-24Q for delrammene 2 til 4 verifiseres ikke; ingen signaler skrives. |
score_benchmark |
En innsending til kshana-bench scoret mot en referansefil, begge som JSON-tekst (kshana bench score, bench/SPEC.md): resultatfilen med spesifikasjonsversjon, deling, inndatahasjer og oppgavens målinger. MODELLED; beskriver en logg eller et korpus, aldri et produkt. |
render_leaderboard |
Resultatfiler fra kshana-bench gjengitt som den statiske ledertavlesiden (HTML-tekst), hver validert først. |
trust_telemetry |
En tillitsstrøm (JSON-linjer) eller et receiver-trust-resultat gjengitt som Prometheus-tekst, CEF- eller LEEF-syslog-linjer eller en OTLP-JSON-nyttelast, med kodererne i kshana trust-telemetry. Tekst i svaret: ingenting sendes eller serveres, og ingen klokke leses. Kun veiledende. |
route_exposure |
Andelen av en ruteslengde i degraderte, ikke-degraderte, ikke-vurderte og ikke-observerte celler i ett eller flere interferenskart, eventuelt innenfor et datoområde. Uobserverte celler er ikke belegg for en fri rute. |
iq_signals |
Oppsettet for GNSS IQ-laget: signalnavnene IQ-verktøyene godtar, om IQ-filverktøyene er på, arbeidsmappen og samplebudsjettet per kall. Kall det først. |
iq_info |
Beskriv én IQ-opptak (in-phase og quadrature) i arbeidsmappen uten å behandle den: format, samplingsrate, sentralfrekvens, sampler, varighet, datafiler og størrelser (kshana iq info). |
iq_scene |
Generer en GNSS IQ-scene med flere satellitter i arbeidsmappen (kshana iq scene): oppgitte Doppler-/C/N0-profiler, eller sann broadcast-efemeridegeometri fra en RINEX-navigasjonsfil, med en valgfri forplantningskanal på signalnivå. Svarer med filene som er skrevet og antall byte i dem, og referansens første epoke per satellitt. |
iq_acquire |
FFT-akkvisisjon (fast Fourier transform) av én eller flere PRN-er (pseudo-random noise-koder) over et opptak (kshana iq acquire), eventuelt bak frontend-trinn: per PRN, akkvirert eller ikke, Doppler, kodefase, toppstatistikk og terskel; surface_out (én PRN) beholder hele Doppler × kodefase-korrelasjonsflaten med finforfininger av Doppler. |
iq_track |
Akkvirer, og spor deretter med DLL/PLL/FLL-banken (delay-, phase- og frequency-locked loop) (kshana iq track), med løkkene fra en kshana.loop-design/1-TOML-fil i arbeidsmappen (design) eller den innebygde utformingen, og valgfri reakkvisisjon (reacquire): per kanal, epoker, endelig Doppler, endelig og gjennomsnittlig C/N0, andeler for fase- og kodelås, låst på slutten, den endelige låsetilstanden, falske låsinger og reakkvisisjoner, pluss utformingens navn og hasj. Sporingen strømmer i begrenset minne; utdata per epoke går bare til filer (epochs_out: E/P/L, diskriminatorer, løkketilstander, C/N0, låsetilstand som .csv/.jsonl/.bin; events_out). |
iq_frontend |
Bruk mottakerens frontend og DSP for interferensdemping (digital signal processing: båndpass, notch, blanking, utskjæring, AGC, kvantiserer) på et opptak og skriv et nytt (kshana iq frontend). |
iq_campaign |
Kjør en laboratorie-avspillingskampanje (kshana iq campaign): opptak, hvert med en testbetingelsesfil som oppgir laboratoriets kjente referanse, × frontend-kjeder × løkkeutforminger. Hver celle scores for tid til tap av lås, reakkvisisjonstid, C/N0-degradering mot den oppgitte J/S (ved siden av en analytisk referanse merket MODELLED), frekvens av falsk lås, PLL/DLL-jitter og tilgjengelighet. Inkrementell og kan gjenopptas: hvert kall kjører de ventende cellene som får plass i samplebudsjettet (eller max_cells). |
iq_campaign_status |
Fremdriften i en kampanjes utdatamappe: celler ferdige og ventende, og sammendraget når den er ferdig. Leser bare filer. |
Hvert verktøy er en tynn, tro innpakning rundt en offentlig funksjon i biblioteket kshana — ingen ny simuleringslogikk ligger her, så en agent kjører nøyaktig den validerte motoren.
GNSS IQ-verktøyene: filer inn, kompakt JSON ut#
IQ-opptak går opp i gigabyte, så verktøyene iq_* sender aldri sampler gjennom protokollen. De følger én kontrakt:
- En arbeidsmappe. Serveren leser og skriver IQ-filer bare inne i mappen som er navngitt av
KSHANA_MCP_IQ_DIR. Hvert stiargument er relativt til den (en absolutt sti må løses opp innenfor den); inndata løses opp gjennom symlenker før kontrollen, mappen til en utdatafil må allerede finnes inne i den, og en eksisterende utdatafil erstattes bare medoverwrite: true. Når den ikke er satt, er IQ-filverktøyene av og sier hvordan de slås på; alle andre verktøy påvirkes ikke. - Et samplebudsjett. Ett kall genererer eller behandler høyst
KSHANA_MCP_IQ_MAX_SAMPLESkomplekse sampler (standard 50 000 000). I byte er det 400 MB somcf32_le(8 byte per komplekse sample), 200 MB somci16_le(4 byte) og 100 MB somci8(2 byte); en scene skrives somcf32_lemed mindreformatsier noe annet. Kontrollen kjører før noe arbeid, og avslaget nevner varigheten ellermax_secondssom passer. - Kompakte svar. Hvert verktøy svarer med ett JSON-sammendrag: akkvisisjonstopper, C/N0, låsetilstand og hver fil som er skrevet, med sti og antall byte. Tabeller per epoke går til filene
json_out/csv_outdu navngir. - Ukjente argumenter avvises, ikke ignoreres, så et feilstavet valg er en feil.
Hvert verktøy kjører samme kodesti som kshana iq på kommandolinjen, i prosessen. Laget er bare programvare: det skriver filer for programvaremottakere og styrer ingen radiomaskinvare. IQ-laget legger ikke til noen syntese av interferens eller spoofer, og ingenting sendes noen gang. (Scenariotypen spectrum kan skrive analytiske jammer-IQ-øyeblikksbilder til en fil.)
{
"mcpServers": {
"kshana": {
"command": "/Users/you/.cargo/bin/kshana-mcp",
"env": { "KSHANA_MCP_IQ_DIR": "/Users/you/iq" }
}
}
}
Med Docker-avbildningen monterer du mappen og peker variabelen på den: docker run --rm -i -v "$PWD/iq:/iq" -e KSHANA_MCP_IQ_DIR=/iq ghcr.io/ashfordeou/kshana-mcp.
Alle typer kan nås#
run_scenario sender videre etter scenarioets kind, så alle typer som list_scenario_kinds nevner, kjører gjennom det. Det omfatter de nyere familiene, hver med medfølgende eksempler en agent kan hente:
| Funksjon | Typer | Et eksempel å starte fra |
|---|---|---|
| Spektrum og waterfall | spectrum |
l-band-waterfall-jamming |
| Solsystemet | solar-system |
solar-system-tour |
| Konstellasjoner rundt et hvilket som helst legeme | constellation-design, body-pnt |
lunar-relay-constellation, europa-surface-pnt |
| Kampanjer: lenkede faser, sveip, Monte Carlo (tilfeldige ensembler med seed), sammensetning | campaign |
campaign-sweep-jammer-power |
| Navigasjon i lav jordbane (LEO): signalutforming | leo-signal |
leo-band-trade |
| LEO-navigasjon: linkbudsjett for overflyvning | leo-pass |
leo-pass-iridium |
| LEO-navigasjon: navigasjonsmelding | leo-navmsg |
leo-navmsg-encode-decode |
| LEO-navigasjon: fusjonert posisjonering og tidssynkronisering | leo-pvt, leo-ppp, ntn-positioning, leo-pnt-chain |
leo-doppler-positioning, leo-pnt-end-to-end |
list_example_scenarios med en kind nevner alle medfølgende eksempler av den typen. Animasjoner, rapporter og interoperabilitetseksporter er ikke typer: de er visninger av en kjøring, og animate_scenario, report_scenario og export_interop returnerer dem for ethvert scenario de gjelder for.
Ikke servert: studiesuiter (kshana --study <suite.toml>), fordi en suite navngir søsterscenariofiler på disken og scenarioverktøyene ikke leser noen fil. Kjør hvert medlem med run_scenario. (IQ-verktøyene leser og skriver filer, men bare innenfor arbeidsmappen sin.)
Installer MCP-serveren#
Veiledende, ikke typegodkjent navigasjonsutstyr: operatøren er fortsatt ansvarlig for navigasjonen. Serveren kjører på din datamaskin; ingenting sendes til Ashforde OÜ.
En passasje som nevner tredjeparts AI-klienter er utelatt her; den står i mcp/kshana-mcp/README.md på GitHub.
| Kanal | Kommando eller knapp | Krever | Festet form |
|---|---|---|---|
| Cursor (ett klikk) | npx (Node) · Docker | Node, eller Docker | kshana-mcp@0.40.0 / ghcr.io/ashfordeou/kshana-mcp:0.40.0 |
| VS Code (ett klikk) | npx (Node) · Docker · Insiders (npx) | Node, eller 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+ med uv eller 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 | formel for v0.40.0 |
| Scoop | scoop bucket add ashforde https://github.com/ashfordeOU/scoop-bucket deretter scoop install kshana-mcp |
Scoop (Windows) | manifest for 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 |
| Ferdigbygd binærfil | utgivelsessiden: kshana-mcp (Linux x86-64), kshana-mcp-<target>[.exe], kontrollert med SHA256SUMS og gh attestation verify |
ingen | v0.40.0 |
| MCP-register | io.github.ashfordeOU/kshana-mcp (finnes av klienter som støtter registeret) |
en klient som støtter registeret | 0.40.0 |
| Fjernbruk (streamable HTTP) | kshana-mcp --http 127.0.0.1:8080, selvdrevet: se https://github.com/ashfordeOU/kshana/blob/main/docs/deploy/mcp-http.md |
din egen vert | v0.40.0 |
Fra en utsjekk eller git (utvikling):
cd mcp/kshana-mcp && cargo install --path .
cargo install --git https://github.com/AshfordeOU/kshana kshana-mcp
HTTP-modus (selvdrevet)#
kshana-mcp --http 127.0.0.1:8080 serverer de samme verktøyene over strømmende HTTP på /mcp. Den binder seg bare til loopback; en adresse som ikke er loopback, trenger --allow-remote og et bearer-token i KSHANA_MCP_HTTP_TOKEN; IQ-filverktøyene er av; forespørselsstørrelse, tid og samtidighet er begrenset; ingen CORS-header sendes. Kshana driver ikke noe endepunkt: du drifter det selv. Se docs/deploy/mcp-http.md.
cargo install legger kshana-mcp i din PATH (vanligvis ~/.cargo/bin/kshana-mcp). Serveren snakker JSON-RPC (JSON remote procedure call) over stdio; logger går til stderr. Bygging fra kildekode trenger en Rust-verktøykjede ≥ 1,88 (den patchede rmcp 2.x SDK-en trenger det, og det gjør biblioteket kshana også); Docker-avbildningen trenger ingen.
Registrer den hos en klient#
Så å si alle MCP-klienter bruker den samme konfigurasjonsblokken mcpServers — registrer binærfilen kshana-mcp med absolutt sti:
{
"mcpServers": {
"kshana": {
"command": "/Users/you/.cargo/bin/kshana-mcp",
"args": [],
"env": {}
}
}
}
Eller, med Docker-avbildningen i stedet for en lokal binærfil (ingen PATH nødvendig):
{
"mcpServers": {
"kshana": {
"command": "docker",
"args": ["run", "--rm", "-i", "ghcr.io/ashfordeou/kshana-mcp"]
}
}
}
Hvor den blokken ligger, avhenger av klienten:
- Cursor —
~/.cursor/mcp.json(globalt) eller.cursor/mcp.json(per prosjekt). - JetBrains AI Assistant / Junie — Settings → Tools → AI Assistant → Model Context Protocol → Add → As JSON, lim inn blokken, og start deretter IDE-en (integrated development environment) helt på nytt.
- Skrivebordsassistenter — de fleste bruker en
…_config.jsonmed sammemcpServers-form; sjekk klientens dokumentasjon for filplasseringen. - CLI-agenter — mange godtar den samme JSON-en gjennom en
mcp add/mcp.json-mekanisme.
Bruk alltid en absolutt sti til binærfilen. Sett RUST_LOG=debug i env for å feilsøke (diagnostikk går til stderr; stdout er reservert for JSON-RPC-protokollen).
Prøv det#
Når den er registrert, kan du spørre assistenten din om ting som:
- «List scenariotypene i Kshana.» →
list_scenario_kinds - «Vis meg et spectrum-eksempel i Kshana og kjør det.» →
list_example_scenarios,get_example_scenario,run_scenario - «Kjør scenarioet for klokke-holdover i Kshana med en terskel på 20 ns og et GNSS-utfall på 2 timer; hva er holdover for kvante mot klassisk?» →
run_scenario - «Eksporter den GPS-konstellasjonen (Global Positioning System) som SP3.» →
export_sp3 - «Gi meg tabellen realtime-frame-eop som CSV.» →
export_table_csv - «Legg den Iridium-overflyvningen på en Cesium-globus.» →
list_export_formats,export_interop - «Animer jamming-kampanjen.» →
animate_scenario - «Gi meg rapporten for den kjøringen, med reproduserbarhetsposten.» →
report_scenario - «Lag en GPS L1-scene på ett sekund med PRN-ene 3 og 17, og akkvirer og spor den deretter.» →
iq_signals,iq_scene,iq_acquire,iq_track
Designnotat — hvorfor en egen crate#
Serveren er en frittstående crate som er utelatt fra workspace, med sin egen Cargo.lock, slik at det offisielle Rust MCP-SDK-et (software development kit) rmcp og den asynkrone kjøretiden aldri kommer inn i avhengighetsgrafen til den publiserte crate-en kshana: en bruker av biblioteket eller Python kompilerer ikke en server vedkommende ikke kjører. (Den ble først skilt ut fordi rmcp er edition 2024 og trenger rustc ≥ 1,85, mens hovedcrate-en den gang lovte 1,75. Biblioteket og denne serveren oppgir nå begge 1,88, gulvet for den sikkerhetspatchede rmcp 2.x og for de oppgraderte RustCrypto-crate-ene.) Kontinuerlig integrasjon (CI) setter port for denne crate-en på egen hånd — tester og cargo deny mot sin egen låsfil. Lisenstreet til rmcp er rent (Apache-2.0/MIT/BSD), så, i motsetning til krysskontrollcrate-en xval/anise-frames den ellers speiler, handler splittingen ikke om lisensiering.
Lisens: AGPL-3.0-only, GNU Affero General Public License versjon 3 alene (eller en kommersiell lisens fra Ashforde OÜ; se LICENSING.md i depotet).