Maskinöversättning, inte granskad av en modersmålstalare. Engelska är referensen.

API:er och integrationerRedigera på GitHubKälla: mcp/kshana-mcp/README.md

Kshana: märket, ett kompassmålkors som markerar det exakta ögonblicket, bredvid ordmärket kshanaKshana: märket, ett kompassmålkors som markerar det exakta ögonblicket, bredvid ordmärket kshana

kshana-mcp: fråga din AI-assistent, så svarar motorn

kshana-mcp är en Model Context Protocol-server (MCP) för Kshana, simulatorn med öppen källkod för PNT-resiliens (positionering, navigering och tidssynkronisering). Den låter en AI-assistent (artificiell intelligens) köra den verkliga motorn och läsa tillbaka dess JSON (JavaScript Object Notation) i stället för att gissa matematiken. Den talar över stdio (standard in och ut) med vilken MCP-kompatibel klient som helst, inklusive Cursor och JetBrains AI Assistant / Junie.

Matematiken som Kshana är validerad för är precis där en språkmodell gissar dåligt: SGP4-banpropagering (Simplified General Perturbations 4), IAU:s (International Astronomical Union) referenssystem, Allan-deviationer, tillgänglighet och DOP (dilution of precision) för GNSS (Global Navigation Satellite System), skyddsnivåer för ARAIM (advanced receiver autonomous integrity monitoring), fusion av GNSS och INS (tröghetsnavigeringssystem) samt kvantsensormodeller. Ställ en fråga; assistenten kör ett verkligt scenario och får kvalitetsmått med sitt ursprung och sin etikett VALIDATED eller MODELLED.

En öppen motor i mitten, med MCP-servern som en av dess ytor vid sidan av kommandoraden, Rust-biblioteket, Python, WebAssembly och Kshana Studio, Docker-avbilden och JetBrains-insticksmodulen; varje yta kör samma motor, och Kshana Pro bygger på den utan att förgrena denEn öppen motor i mitten, med MCP-servern som en av dess ytor vid sidan av kommandoraden, Rust-biblioteket, Python, WebAssembly och Kshana Studio, Docker-avbilden och JetBrains-insticksmodulen; varje yta kör samma motor, och Kshana Pro bygger på den utan att förgrena den

Verktyg#

Verktyg Vad den gör
run_scenario Kör ett scenario från en TOML-definition (Tom's Obvious, Minimal Language); returnerar sammanfattningen + hela resultat-JSON (JavaScript Object Notation: kvalitetsmått, kurvor). Valfri include_chart returnerar diagrammet som SVG (Scalable Vector Graphics).
list_scenario_kinds De 92 inbyggda scenariotyperna med beskrivningar + obligatoriska/valfria fält — så att agenten kan konstruera ett giltigt scenario.
validate_scenario Kontroll före körning: tolka TOML och identifiera dess typ, utan att köra.
list_example_scenarios De medföljande referensscenariona som JSON: varje name, dess kind och en mening om vad det visar. Valfritt filter kind. Varje exempel körs som det står, så det här är den snabbaste vägen till en giltig TOML för en typ.
get_example_scenario TOML-texten för ett medföljande referensscenario, byte för byte filen under scenarios/.
report_scenario Kör ett scenario och returnera dess rapport: sammanfattning för ledningen, indata, varje siffra med sin enhet och sin etikett VALIDATED eller MODELLED, händelser, de förmågor som övats och en reproducerbarhetspost. format är json (standard) eller html (den utskrivbara enfilssidan).
animate_scenario Kör ett scenario och returnera dess tidsserier som en animering: svg (standard), html (en fristående spelare) eller frames (högst 120 i ett svar). Det första innehållsobjektet är en JSON-sammanfattning av vad som ritades; filerna följer. En typ utan samplad tidsaxel avvisas med skälet.
list_export_formats Vilka interoperabilitetsformat som gäller för ett scenario (czml, kml, geojson, stk, sigmf), skälet när ett inte gör det, och den specifikation varje skrivare följer. Kör inte scenariot.
export_interop Exportera ett scenario som CZML (Cesium Language), KML (Keyhole Markup Language), GeoJSON, STK-efemerid (Systems Tool Kit) .e, eller SigMF (Signal Metadata Format, för ett spectrum-scenario med ett [iq]-block). Det första innehållsobjektet är ett JSON-index över filerna (ändelse, storlek, kodning och SHA-256-digesten, den 256-bitars Secure Hash Algorithm); filerna följer, den binära SigMF-samplefilen som base64.
import_route Skriv en GeoJSON-rutt LineString in i ett scenario som flyger ett vägpunktsspår (terrain-nav, terrain-slam, gravity-map, combined-altpnt) och returnera den nya TOML.
export_sp3 Exportera konstellationen i ett orbit-scenario som SP3-c (Standard Product 3, revision c) precisionsefemerid.
export_omm Exportera elementen i ett orbit-scenario som en CCSDS (Consultative Committee for Space Data Systems) 502.0-B-2 OMM-katalog (Orbit Mean-elements Message).
export_oem Exportera tillståndsserien i ett orbit-scenario som CCSDS OEM-efemerid (Orbit Ephemeris Message) 2,0 — TEME-serien (true equator, mean equinox) av position och hastighet som verktyg för flygdynamik (GMAT, General Mission Analysis Tool; Orekit; STK, Systems Tool Kit) läser; den hastighetsbärande motsvarigheten till den rent positionsbaserade export_sp3.
export_table_csv Kör ett scenario och returnera dess reproducerbarhetstabell som CSV (kommaseparerade värden) — den bytestabila tabell som CLI (kommandoradsgränssnittet) skriver som <scenario>.table.csv. Bara realtime-frame-eop, lunar-time-budget, lunar-jamming, telecom-timing, leo-navmsg (dess encode-decode-analys på en kepler16- eller kepler-rac-meddelandemodell) och moonlight-service-volume med export_site_lat_deg + export_site_lon_deg satta ger en; varje annan typ returnerar ett fel som nämner dessa.
sky_geometry Himmelsgeometri under en azimutberoende horisontlinje: från en plats, en tid och konstellationsförinställningar, tvåradselementmängder (tle, propagerade med SGP4 till en UTC-epoch) eller satelliter som azimut/elevation eller ECEF, de synliga satelliterna och de som skyms av horisontlinjen, GDOP/PDOP/HDOP/VDOP/TDOP från den med gnss_lib_py kontrollerade DOP-kärnan, den öst-nord-upp-baserade kofaktorn och kovariansen (en klocka per system eller en gemensam) och den horisontella felellipsen; med skyline_preset i stället för request, en REPRESENTATIVE förinställning med sitt ursprung och sin skärning för varje grad. MODELLED; bär den rådgivande förklaringen; ingen Monte Carlo över MCP. Se docs/SKYLINE.md.
assess_receiver_log Bedöm förtroendet för en verklig GNSS-mottagarlogg (global navigation satellite system). TOML anger loggens format (ubx, rinex, android, nmea eller sbf) och ger dess byte inbäddade som text eller base64; verktyget kör förtroendeövervakarna (fall i bärvåg-brus-täthet, förlust av låsning, AGC (automatisk förstärkningsreglering), störningsindikator, positionssprång och, med RINEX plus sändningsnavigering, RAIM (receiver autonomous integrity monitoring) och en klockstödd övervakare) och returnerar när och varför positionsbestämningen slutade vara pålitlig. Valfria sektioner [[events]] och [compare] poängsätter angivna händelser och förutsagda C/N0-fall mot angivna toleranser. En tabell [platform] kind = "vessel" väljer de maritima övervakarna och lägger till en förtroendepoäng på 0-100 per epok med de övervakare som drog av (rådgivande; MODELLED). Loggen ges inbäddad som text eller base64 (högst 4 MiB). Diagram och CSV per epok på begäran. Se docs/RECEIVER-TRUST.md.
assess_vessel_stream Poängsätt ett begränsat NMEA 0183-utdrag (högst 2 MiB och 20 000 epoker; det måste rymma kalibreringsfönstret) på det sätt som kshana receiver-trust live poängsätter det: förtroendetillstånd per epok och poäng 0-100 med de övervakare som drog av, en sammanfattning och den sista $PKSHT. Den begränsade formen av live-kommandot: ingen socket öppnas och ingenting skrivs till en port; grinden, --listen och telemetriexportörerna (Prometheus, OTLP, syslog) finns bara på kommandoraden. Endast rådgivande; MODELLED. Se docs/MARITIME-TRUST.md.
assess_vessel_log Ett fartygs NMEA 0183-logg (högst 4 MiB) som en batchkörning, med sessions-TOML som anger fartygets gränser: poängmodellen och varje epoks poäng 0-100 med dess avdrag (svaret behåller antal per tillstånd och de första 200 degraderade eller opålitliga epokerna). Endast rådgivande; MODELLED.
jammertest_import Läs den publicerade testkatalogen och sändningsplanen för Jammertest (NPRA/jammertest-plan, MIT) som schemalagd referens (kshana jammertest import): en testytas tidsluckor blir förtroendehändelser för mottagare med katalog-id och år i varje etikett. Planerade tidsluckor, inte inspelade sändningstider; inget kontaktfält i planen läses. MODELLED. Se docs/JAMMERTEST.md.
jammertest_score Poängsätt en mottagarlogg mot det schemat (kshana jammertest score): per test detektionsfördröjning, missade larm och tid till återhämtning, samt falsklarmen utanför varje lucka. Textloggar som log, binära (ubx, sbf) som log_base64. Ett signerat paket behöver en nyckel: kommandoraden. Endast rådgivande; MODELLED.
create_evidence_pack Ett signerat bevispaket för ett fönster av ett fartygs logg (kshana receiver-trust evidence): råloggens byte för fönstret, konfiguration, resultat och skäl per epok, en sammanfattningssida och ett manifest med varje SHA-256 och en hashkedja, signerat med Ed25519. Signeringsfröet returneras eller loggas aldrig; utan ett används en engångsnyckel, så paketet visar integritet, inte identitet. En teknisk post, inte ett juridiskt utlåtande. Se docs/EVIDENCE-PACKS.md.
attach_evidence_timestamp Bind en RFC 3161-tidsstämpeltoken (base64 av .tsr-byten) till ett paket, i minnet (kshana evidence attach-timestamp); paketet med token måste fortfarande kunna verifieras. Tidsstämplingsmyndighetens signatur kontrolleras inte: använd openssl ts -verify.
verify_evidence_pack Verifiera ett paket (kshana evidence verify): varje hash, kedjan, signaturen, och med signerarens publika nyckel och hela loggen vem som signerade det och att utsnittet kom från den loggen. Namnger varje fel och fil. verdict är verified (signeraren fastnålad), intact-signer-not-pinned (allt stämmer men ingen publik nyckel gavs, så signeraren är inte fastställd) eller failed; require_timestamp underkänner ett paket utan tidsstämpeltoken.
generate_training_nmea Syntetisk NMEA 0183 för bryggan för besättningsträning från en nmea-scenario-TOML (jamming, bortdragning av position, tidsspoofing, fördröjning vid återuppspelning) med instruktörsloggen (kshana-nmea-training/1); deterministisk per frö. Endast text: ingenting syntetiseras på RF- eller IQ-nivå och ingenting sänds; aldrig för ett fartygs levande navigationssystem. Svaret bär de första 2000 raderna.
build_interference_map En GNSS-störningskarta från ADS-B- eller AIS-positionsrapporter som CSV-text (högst 4 MiB): en kshana-interference-map/v1-GeoJSON per UTC-dygn, endast aggregerat (inga identifierare, celler med färre än 5 skilda flygplan eller fartyg hålls tillbaka), med datamängdens licens inbäddad. En degraderad cell identifierar inte störning som orsak; ingen prognos. MODELLED. Se docs/INTERFERENCE-MAP.md.
export_test_bench Ett scenarios fordonsrörelse och händelser för en GNSS-simulator i laboratorium (kshana bench-export): rörelse som CSV och JSON, NMEA, vägpunkter och händelser som text, ingenting skrivs till disk. Typerna gnss-ins, jamming, gnss-sim. Ingen signal: ingenting som exporteras är, modellerar eller driver en radiofrekvens- eller basbandssignal; simulatorn och dess operatör levererar signalerna. Se docs/TEST-BENCH.md.
create_round_trip_pack Det signerade tur-och-retur-paketet från laboratoriet (kshana evidence round-trip): scenariot, laboratoriets kshana.test-conditions/1-dokument, mottagarloggen och dess poäng mot de angivna händelserna, länkade med hash. Avvisar villkor och poängsättningshändelser som motsäger varandra. Ingen signal; en teknisk post, inte en certifiering.
iq_sweep Spela upp en IQ-inspelning i arbetskatalogen över flera spårningsloopsutformningar (kshana iq sweep): per utformning och PRN den stationära fas- och kodjittern, låsningsandelar och genomsnittlig C/N0. Högst 256 (utformning, PRN)-kanaler per anrop; spannet måste rymmas i samplebudgeten.
iq_monitor Kör störnings- och spoofingdetektionsövervakarna över en IQ-inspelning i arbetskatalogen (kshana iq monitor): bredbandiga effekt- och spektralövervakare samt C/N0- och signalkvalitetsövervakare per satellit mot en inlärd baslinje. Serienamn och längder och upp till 200 händelser i svaret; hela rapporten på begäran som filer. En händelse säger att en uppmätt storhet lämnade sin baslinje, inte varför. MODELLED.
iq_labfit Anpassa modellen för förlust av låsning i spårningsloopen till laboratoriekörningar (kshana iq labfit) från ett iq-labfit-scenario vars loggar är inbäddade (text eller base64; en path avvisas). Läser och skriver ingen fil. MODELLED.
iq_test_conditions Validera en kshana.test-conditions/1-fil som ges som text och returnera de lösta villkoren med deras hash. Endast inbäddat.
compliance_report Kartläggningen mot offentliga ramverk, ifylld utifrån resultatdokument som ges som text (kshana compliance-report): vilka rader i sex ramverk och standarder för resiliens (US DHS Resilient PNT framework v2.0, IMO för fartyg, EASA för luftfart, NIS2 artikel 21, EN 16803, NIST IR 8323r1) körningarna ger belägg för, vilka de inte gör, och varje rads lucka. Tar runs av {label, result, scenario?} (högst 64, 4 MiB totalt). En status säger att körningarna ger belägg för radens förmågor; den är inte ett fynd att ett ramverk uppfylls och inte ett betyg eller ett godkännande av någon produkt. statement returneras med varje rapport; visa den ordagrant. MODELLED. Se docs/compliance/.
compliance_mapping De statiska kartläggningstabellerna (eller, med sources, källdokumenten de hänvisar till med versioner och URL:er) som Markdown, med samma förklaring först. Behöver inga körningar.
trust_telemetry En förtroendeström (JSON-rader) eller ett receiver-trust-resultat återgivet som Prometheus-text, CEF- eller LEEF-syslog-rader, en OTLP-JSON-last eller Home Assistant MQTT-discovery- och tillståndsrader, med kodarna kshana trust-telemetry. Text i svaret: ingenting skickas eller serveras och ingen klocka läses. Endast rådgivande.
fit_imu_log Accelerometer- och gyroparametrar för scenariona hybrid och fusion anpassade från en stillastående IMU-logg (CSV eller EuRoC) med Allan-deviation, med en färdig tabell [accel_classical] att klistra in och loggens SHA-256 (kshana imu-fit). Text in, JSON ut; MODELLED.
list_standards_packs Standardpaketen (kshana standards-pack list): poängsatta scenariouppsättningar för testprofilerna i DHS Resilient PNT framework (nivå 1 till 4), IMO MSC.1/Circ.1575 och ICAO Doc 9849 bilaga F.
run_standards_pack Ett paket körs mot sina trösklar som fastställts före körningen (kshana standards-pack run): varje test MET, NOT MET eller NEEDS INPUT, med uppmätta och förväntade värden; ge rapporten till compliance_report för att se raderna. MODELLED; betygsätter ingen produkt.
lunanet_afs_check LunaNet Augmented Forward Signal kontrollerad mot LNIS V5 AD1 Volume A (LSIS-AFS V1.0, 29 januari 2025): spec (implementationen mot dokumentets tryckta kodtabeller och genomräknade exempel), symbols (en symbolström: synkmönster, SB1, FID, TOI-kontinuitet) eller generate (en testström). LDPC och CRC-24Q för delramarna 2 till 4 verifieras inte; ingen signal skrivs.
score_benchmark Ett kshana-bench-bidrag poängsatt mot en referensfil, båda JSON-text (kshana bench score, bench/SPEC.md): resultatfilen med specifikationsversion, delmängd, indatahashar och uppgiftens mått. MODELLED; beskriver en logg eller ett korpus, aldrig en produkt.
render_leaderboard Resultatfiler från kshana-bench återgivna som den statiska topplistesidan (HTML-text), var och en först validerad.
trust_telemetry En förtroendeström (JSON-rader) eller ett receiver-trust-resultat återgivet som Prometheus-text, CEF- eller LEEF-syslog-rader eller en OTLP-JSON-last, med kodarna kshana trust-telemetry. Text i svaret: ingenting skickas eller serveras och ingen klocka läses. Endast rådgivande.
route_exposure Andelen av en rutts längd i degraderade, icke-degraderade, ej bedömda och ej observerade celler i en eller flera störningskartor, eventuellt inom ett datumintervall. Oobserverade celler är inget belägg för en klar rutt.
iq_signals Uppsättningen för GNSS-IQ-lagret: de signalnamn IQ-verktygen accepterar, om IQ-filverktygen är på, arbetskatalogen och samplebudgeten per anrop. Anropa det först.
iq_info Beskriv en IQ-inspelning (inphase och kvadratur) i arbetskatalogen utan att bearbeta den: format, samplingshastighet, mittfrekvens, sampel, varaktighet, datafiler och storlekar (kshana iq info).
iq_scene Generera en GNSS-IQ-scen med flera satelliter i arbetskatalogen (kshana iq scene): angivna Doppler/C/N0-profiler, eller sann geometri från sändningsefemerid ur en RINEX-navigeringsfil, med en valfri propagationskanal på signalnivå. Svarar med de skrivna filerna och deras bytetal och referensens första epok per satellit.
iq_acquire FFT-förvärv (fast Fourier transform) av en eller flera PRN (pseudoslumpkoder) över en inspelning (kshana iq acquire), eventuellt bakom frontändssteg: per PRN, förvärvad eller inte, Doppler, kodfas, toppstatistik och tröskel; surface_out (en PRN) behåller hela korrelationsytan Doppler × kodfas med finjusteringar av Doppler.
iq_track Förvärva och spåra sedan med bänken av DLL/PLL/FLL (fördröjnings-, fas- och frekvenslåsta loopar) (kshana iq track), med looparna från en kshana.loop-design/1-TOML-fil i arbetskatalogen (design) eller den inbyggda utformningen, och valfri återförvärvning (reacquire): per kanal, epoker, slutlig Doppler, slutlig och genomsnittlig C/N0, fas- och kodlåsningsandelar, låst vid slutet, det slutliga låsningstillståndet, falska låsningar och återförvärvningar, plus utformningens namn och hash. Spårning strömmar i begränsat minne; utdata per epok går bara till filer (epochs_out: E/P/L, diskriminatorer, looptillstånd, C/N0, låsningstillstånd som .csv/.jsonl/.bin; events_out).
iq_frontend Tillämpa mottagarens frontändes- och störningsdämpande DSP (digital signalbehandling: bandpass, notch, blankning, excision, AGC, kvantiserare) på en inspelning och skriv en ny (kshana iq frontend).
iq_campaign Kör en kampanj med uppspelning i laboratorium (kshana iq campaign): inspelningar, var och en med en testvillkorsfil som anger laboratoriets kända referens, × frontändskedjor × looputformningar. Varje cell poängsätts för tid till förlust av låsning, tid för återförvärvning, C/N0-försämring mot det angivna J/S (bredvid en analytisk referens märkt MODELLED), andel falska låsningar, PLL/DLL-jitter och tillgänglighet. Inkrementell och återupptagbar: varje anrop kör de väntande celler som ryms i samplebudgeten (eller max_cells).
iq_campaign_status En kampanjutdatamapps framsteg: celler klara och väntande, och digesten när den är klar. Läser bara filer.

Varje verktyg är ett tunt, troget skal kring en offentlig funktion i biblioteket kshana — ingen ny simuleringslogik finns här, så en agent kör exakt den validerade motorn.

GNSS-IQ-verktygen: filer in, kompakt JSON ut#

IQ-inspelningar kan uppgå till gigabyte, så verktygen iq_* skickar aldrig sampel genom protokollet. De följer ett kontrakt:

  • En arbetskatalog. Servern läser och skriver IQ-filer bara i mappen som anges av KSHANA_MCP_IQ_DIR. Varje sökvägsargument är relativt den (en absolut sökväg måste lösas upp inuti den); indata löses upp genom symlänkar före kontrollen, en utdatas mapp måste redan finnas inuti den, och en befintlig utdata ersätts bara med overwrite: true. Om den inte är satt är IQ-filverktygen av och säger hur de aktiveras; alla andra verktyg påverkas inte.
  • En samplebudget. Ett anrop genererar eller bearbetar högst KSHANA_MCP_IQ_MAX_SAMPLES komplexa sampel (standard 50 000 000). I byte är det 400 MB som cf32_le (8 byte per komplext sampel), 200 MB som ci16_le (4 byte) och 100 MB som ci8 (2 byte); en scen skrivs som cf32_le om inte format säger annat. Kontrollen körs före allt arbete, och avslaget anger den varaktighet eller max_seconds som ryms.
  • Kompakta svar. Varje verktyg svarar med en JSON-sammanfattning: förvärvstoppar, C/N0, låsningstillstånd och varje skriven fil med sin sökväg och sitt bytetal. Tabeller per epok går till de filer json_out / csv_out som du namnger.
  • Okända argument avvisas, ignoreras inte, så ett felstavat alternativ är ett fel.

Varje verktyg kör samma kodväg som kshana iq på kommandoraden, i processen. Lagret är enbart programvara: det skriver filer för mjukvarumottagare och driver ingen radiohårdvara. IQ-lagret lägger inte till någon syntes av störning eller spoofer, och ingenting sänds någonsin. (Den separata scenariotypen spectrum kan skriva analytiska ögonblicksbilder av störsändar-IQ till en fil.)

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

Med Docker-avbilden, montera mappen och peka variabeln mot den: docker run --rm -i -v "$PWD/iq:/iq" -e KSHANA_MCP_IQ_DIR=/iq ghcr.io/ashfordeou/kshana-mcp.

Varje typ är nåbar#

run_scenario skickar vidare efter scenariots kind, så varje typ som list_scenario_kinds nämner körs genom den. Det inkluderar de nyare familjerna, var och en med medföljande exempel som en agent kan hämta:

Förmåga Slag Ett exempel att utgå från
Spektrum och vattenfall spectrum l-band-waterfall-jamming
Solsystemet solar-system solar-system-tour
Konstellationer kring vilken kropp som helst constellation-design, body-pnt lunar-relay-constellation, europa-surface-pnt
Kampanjer: kedjade faser, svep, Monte Carlo (slumpmässiga ensembler med frö), sammansättning campaign campaign-sweep-jammer-power
Navigering i låg omloppsbana runt jorden (LEO): signalutformning leo-signal leo-band-trade
LEO-navigering: länkbudget för passage leo-pass leo-pass-iridium
LEO-navigering: navigeringsmeddelande leo-navmsg leo-navmsg-encode-decode
LEO-navigering: sammanfogad positionering och tidssynkronisering leo-pvt, leo-ppp, ntn-positioning, leo-pnt-chain leo-doppler-positioning, leo-pnt-end-to-end

list_example_scenarios med en kind nämner varje medföljande exempel av den typen. Animeringar, rapporter och interoperabilitetsexporter är inga typer: de är vyer av en körning, och animate_scenario, report_scenario och export_interop returnerar dem för varje scenario de gäller.

Serveras inte: studiesviter (kshana --study <suite.toml>), eftersom en svit nämner syskonscenariofiler på disk och scenarioverktygen inte läser någon fil. Kör varje medlem med run_scenario. (IQ-verktygen läser och skriver filer, men bara inuti sin arbetskatalog.)

Installera MCP-servern#

Rådgivande, inte typgodkänd navigationsutrustning: operatören är fortsatt ansvarig för navigeringen. Servern körs på din dator; ingenting skickas till Ashforde OÜ.

Ett stycke som nämner AI-klienter från tredje part är utelämnat här; det finns i mcp/kshana-mcp/README.md på GitHub.

Ett stycke som nämner AI-klienter från tredje part är utelämnat här; det finns i mcp/kshana-mcp/README.md på GitHub.

Ett stycke som nämner AI-klienter från tredje part är utelämnat här; det finns i mcp/kshana-mcp/README.md på GitHub.

Kanal Kommando eller knapp Kräver Fastnålad form
Cursor (ett klick) npx (Node) · Docker Node, eller Docker kshana-mcp@0.40.0 / ghcr.io/ashfordeou/kshana-mcp:0.40.0
VS Code (ett klick) 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 för v0.40.0
Scoop scoop bucket add ashforde https://github.com/ashfordeOU/scoop-bucket sedan scoop install kshana-mcp Scoop (Windows) manifest för 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
Förbyggd binär utgivningssidan: kshana-mcp (Linux x86-64), kshana-mcp-<target>[.exe], kontrollerad med SHA256SUMS och gh attestation verify ingen v0.40.0
MCP-register io.github.ashfordeOU/kshana-mcp (hittas av register-medvetna klienter) en register-medveten klient 0.40.0
Fjärr (streamable HTTP) kshana-mcp --http 127.0.0.1:8080, egen drift: se https://github.com/ashfordeOU/kshana/blob/main/docs/deploy/mcp-http.md din egen värd v0.40.0

Från en utcheckning eller git (utveckling):

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

HTTP-läge (egen drift)#

kshana-mcp --http 127.0.0.1:8080 serverar samma verktyg över streamable HTTP på /mcp. Den binder bara loopback; en adress som inte är loopback kräver --allow-remote och en bearer-token i KSHANA_MCP_HTTP_TOKEN; IQ-filverktygen är av; förfrågans storlek, tid och samtidighet är begränsade; inget CORS-huvud skickas. Kshana tillhandahåller ingen slutpunkt: du driver den själv. Se docs/deploy/mcp-http.md.

cargo install lägger kshana-mcp på din PATH (vanligen ~/.cargo/bin/kshana-mcp). Servern talar JSON-RPC (JSON remote procedure call) över stdio; loggar går till stderr. Att bygga från källkod kräver en Rust-verktygskedja ≥ 1,88 (den lagade SDK:n rmcp 2.x kräver det, och det gör även biblioteket kshana); Docker-avbilden behöver ingen.

Registrera den hos en klient#

Praktiskt taget varje MCP-klient använder samma konfigurationsblock mcpServers — registrera binärfilen kshana-mcp med absolut sökväg:

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

Eller, med Docker-avbilden i stället för en lokal binärfil (ingen PATH behövs):

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

Var det blocket finns beror på klienten:

  • Cursor — ~/.cursor/mcp.json (globalt) eller .cursor/mcp.json (per projekt).
  • JetBrains AI Assistant / Junie — Settings → Tools → AI Assistant → Model Context Protocol → Add → As JSON, klistra in blocket och starta sedan om IDE:n (integrated development environment) helt.
  • Skrivbordsassistenter — de flesta använder en …_config.json med samma form mcpServers; kontrollera din klients dokumentation för filens plats.
  • CLI-agenter — många accepterar samma JSON via en mekanism mcp add / mcp.json.

Använd alltid en absolut sökväg till binärfilen. Sätt RUST_LOG=debug i env för att felsöka (diagnostik går till stderr; stdout är reserverad för JSON-RPC-protokollet).

Prova#

När den är registrerad, fråga din assistent saker som:

  • "Lista scenariotyperna i Kshana." → list_scenario_kinds
  • "Visa mig ett spektrumexempel i Kshana och kör det." → list_example_scenarios, get_example_scenario, run_scenario
  • "Kör scenariot clock-holdover i Kshana med en tröskel på 20 ns och ett GNSS-avbrott på 2 timmar; vad är holdover för kvant jämfört med klassisk?" → run_scenario
  • "Exportera den GPS-konstellationen (Global Positioning System) som SP3." → export_sp3
  • "Ge mig tabellen realtime-frame-eop som CSV." → export_table_csv
  • "Lägg den Iridium-passagen på en Cesium-glob." → list_export_formats, export_interop
  • "Animera jamming-kampanjen." → animate_scenario
  • "Ge mig rapporten för den körningen, med dess reproducerbarhetspost." → report_scenario
  • "Skapa en GPS L1-scen på en sekund med PRN 3 och 17, förvärva och spåra den sedan." → iq_signals, iq_scene, iq_acquire, iq_track

Designanteckning — varför en separat crate#

Servern är en fristående crate utanför arbetsytan med egen Cargo.lock, så att den officiella Rust-MCP-SDK:n (software development kit) rmcp och dess asynkrona körmiljö aldrig hamnar i beroendegrafen för den publicerade crate:n kshana: en biblioteks- eller Python-användare kompilerar inte en server de inte kör. (Den delades först ut eftersom rmcp är edition 2024 och kräver rustc ≥ 1,85, medan huvudcrate:n då lovade 1,75. Biblioteket och den här servern deklarerar nu båda 1,88, golvet för den säkerhetslagade rmcp 2.x och för de uppgraderade RustCrypto-crate:ena.) Kontinuerlig integration (CI) styr den här crate:n för sig — tester och cargo deny mot dess låsfil. rmcp:s licensträd är rent (Apache-2.0/MIT/BSD), så, till skillnad från korsvalideringscrate:n xval/anise-frames som den i övrigt speglar, handlar uppdelningen inte om licensiering.

Licens: endast AGPL-3.0, GNU Affero General Public License version 3 endast (eller en kommersiell licens från Ashforde OÜ; se förrådets LICENSING.md).