Tradução automática, não revista por um falante nativo. O inglês é a referência.

APIs e integraçõesEditar no GitHubFonte: mcp/kshana-mcp/README.md

Kshana: a marca, uma retícula de bússola que assinala o instante preciso, ao lado do logótipo kshanaKshana: a marca, uma retícula de bússola que assinala o instante preciso, ao lado do logótipo kshana

kshana-mcp: pergunte ao seu assistente de IA, e o motor responde

kshana-mcp é um servidor de Model Context Protocol (MCP) para o Kshana, o simulador de código aberto para a resiliência de PNT (posicionamento, navegação e temporização). Permite que um assistente de IA (inteligência artificial) execute o motor real e leia o seu JSON (JavaScript Object Notation), em vez de adivinhar a matemática. Comunica por stdio (entrada e saída padrão) com qualquer cliente compatível com MCP, incluindo o Cursor e o JetBrains AI Assistant / Junie.

A matemática para a qual o Kshana é validado é exatamente aquela em que um modelo de linguagem adivinha mal: propagação de órbita SGP4 (Simplified General Perturbations 4), referenciais da IAU (União Astronómica Internacional), desvios de Allan, disponibilidade de GNSS (Global Navigation Satellite System) e DOP (diluição da precisão), níveis de proteção ARAIM (advanced receiver autonomous integrity monitoring), fusão de GNSS e INS (sistema de navegação inercial) e modelos de sensores quânticos. Faça uma pergunta; o assistente executa um cenário real e obtém figuras de mérito com a sua proveniência e a sua etiqueta VALIDATED ou MODELLED.

Um motor aberto ao centro, com o servidor MCP como uma das suas superfícies ao lado da linha de comandos, da biblioteca Rust, de Python, de WebAssembly e do Kshana Studio, da imagem Docker e do plugin JetBrains; todas as superfícies executam o mesmo motor, e o Kshana Pro depende dele sem o bifurcarUm motor aberto ao centro, com o servidor MCP como uma das suas superfícies ao lado da linha de comandos, da biblioteca Rust, de Python, de WebAssembly e do Kshana Studio, da imagem Docker e do plugin JetBrains; todas as superfícies executam o mesmo motor, e o Kshana Pro depende dele sem o bifurcar

Ferramentas#

Ferramenta O que faz
run_scenario Executa um cenário a partir de uma definição TOML (Tom's Obvious, Minimal Language); devolve o resumo + o JSON completo do resultado (JavaScript Object Notation: figuras de mérito, curvas). A opção include_chart devolve o gráfico como SVG (Scalable Vector Graphics).
list_scenario_kinds Os 92 tipos de cenário incorporados com descrições + campos obrigatórios/opcionais — para que o agente possa montar um cenário válido.
validate_scenario Verificação prévia: analisa o TOML e deteta o seu tipo de cenário, sem executar.
list_example_scenarios Os cenários de referência incluídos como JSON: cada name, o seu kind e uma frase sobre o que mostra. Filtro facultativo kind. Todos os exemplos são executados tal como estão, pelo que este é o caminho mais rápido para um TOML válido de um tipo de cenário.
get_example_scenario O texto TOML de um cenário de referência incluído, byte a byte o ficheiro em scenarios/.
report_scenario Executa um cenário e devolve o seu relatório: resumo executivo, entradas, cada valor com a sua unidade e a sua etiqueta VALIDATED ou MODELLED, eventos, as capacidades exercidas e um registo de reprodutibilidade. format é json (predefinição) ou html (a página de ficheiro único imprimível).
animate_scenario Executa um cenário e devolve as suas séries temporais como animação: svg (predefinição), html (um leitor autónomo) ou frames (no máximo 120 numa resposta). O primeiro item de conteúdo é um resumo JSON do que foi desenhado; seguem-se os ficheiros. Um tipo de cenário sem eixo de tempo amostrado é recusado com o motivo.
list_export_formats Que formatos de interoperabilidade se aplicam a um cenário (czml, kml, geojson, stk, sigmf), o motivo quando um não se aplica e a especificação que cada gravador segue. Não executa o cenário.
export_interop Exporta um cenário como CZML (Cesium Language), KML (Keyhole Markup Language), GeoJSON, efemérides STK (Systems Tool Kit) .e, ou SigMF (Signal Metadata Format, para um cenário spectrum com um bloco [iq]). O primeiro item de conteúdo é um índice JSON dos ficheiros (sufixo, tamanho, codificação e o resumo SHA-256, o Secure Hash Algorithm de 256 bits); seguem-se os ficheiros, o ficheiro binário de amostras SigMF em base64.
import_route Escreve uma rota GeoJSON LineString num cenário que percorre uma trajetória de pontos de passagem (terrain-nav, terrain-slam, gravity-map, combined-altpnt) e devolve o novo TOML.
export_sp3 Exporta a constelação de um cenário orbit como efemérides precisas SP3-c (Standard Product 3, revisão c).
export_omm Exporta os elementos de um cenário orbit como um catálogo OMM (Orbit Mean-elements Message) CCSDS (Consultative Committee for Space Data Systems) 502.0-B-2.
export_oem Exporta a série de estados de um cenário orbit como efemérides CCSDS OEM (Orbit Ephemeris Message) 2,0 — a série de posição e velocidade em TEME (true equator, mean equinox) que as ferramentas de dinâmica de voo (GMAT, o General Mission Analysis Tool; Orekit; STK, o Systems Tool Kit) leem; o complemento com velocidade de export_sp3, que só tem posição.
export_table_csv Executa um cenário e devolve a sua tabela de reprodutibilidade como CSV (comma-separated values) — a tabela estável byte a byte que a CLI (command-line interface) escreve como <scenario>.table.csv. Só realtime-frame-eop, lunar-time-budget, lunar-jamming, telecom-timing, leo-navmsg (a sua análise encode-decode sobre um modelo de mensagem kepler16 ou kepler-rac) e moonlight-service-volume com export_site_lat_deg + export_site_lon_deg definidos emitem uma; qualquer outro tipo de cenário devolve um erro que os indica.
sky_geometry Geometria do céu sob uma linha do horizonte dependente do azimute: a partir de um local, um instante e predefinições de constelações, conjuntos de elementos de duas linhas (tle, propagados por SGP4 para um epoch UTC) ou satélites como azimute/elevação ou ECEF, os satélites visíveis e os ocultados pela linha do horizonte, GDOP/PDOP/HDOP/VDOP/TDOP a partir do núcleo de DOP verificado com gnss_lib_py, o cofator e a covariância este-norte-cima (um relógio por sistema ou um em comum) e a elipse de erro horizontal; com skyline_preset em vez de request, uma predefinição REPRESENTATIVE com a sua proveniência e o seu corte a cada grau. MODELLED; traz o aviso consultivo; sem Monte Carlo sobre MCP. Ver docs/SKYLINE.md.
assess_receiver_log Avalia a confiança num registo real de um recetor GNSS (global navigation satellite system). O TOML indica o format do registo (ubx, rinex, android, nmea ou sbf) e dá os seus bytes em linha como text ou base64; a ferramenta executa os monitores de confiança (queda da densidade portadora-ruído, perda de bloqueio, AGC (controlo automático de ganho), indicador de jamming, salto de posição e, com RINEX mais navegação difundida, RAIM (receiver autonomous integrity monitoring) e um monitor assistido por relógio) e devolve quando e porquê a solução de posição deixou de ser fiável. As secções facultativas [[events]] e [compare] pontuam eventos declarados e quedas de C/N0 previstas face a tolerâncias declaradas. Uma tabela [platform] kind = "vessel" seleciona os monitores marítimos e acrescenta uma pontuação de confiança de 0-100 por época com os monitores que deduziram (consultivo; MODELLED). O registo vai em linha como text ou base64 (no máximo 4 MiB). Gráfico e CSV por época a pedido. Ver docs/RECEIVER-TRUST.md.
assess_vessel_stream Pontua um excerto NMEA 0183 limitado (no máximo 2 MiB e 20 000 épocas; tem de conter a janela de calibração) como kshana receiver-trust live o pontua: estado de confiança por época e pontuação de 0-100 com os monitores que deduziram, um resumo e o último $PKSHT. A forma limitada do comando em direto: não é aberto nenhum socket e nada é escrito numa porta; o gate, --listen e os exportadores de telemetria (Prometheus, OTLP, syslog) são apenas de linha de comandos. Apenas consultivo; MODELLED. Ver docs/MARITIME-TRUST.md.
assess_vessel_log Um registo NMEA 0183 de uma embarcação (no máximo 4 MiB) como execução em lote, com o TOML de sessão a indicar os limites da embarcação: o modelo de pontuação e a pontuação de 0-100 de cada época com as suas deduções (a resposta mantém contagens por estado e as primeiras 200 épocas degraded ou untrusted). Apenas consultivo; MODELLED.
jammertest_import Lê o catálogo de testes e o plano de transmissão do Jammertest publicados (NPRA/jammertest-plan, MIT) como referência programada (kshana jammertest import): os intervalos de uma área de teste tornam-se eventos de confiança do recetor, com o id do catálogo e o ano em cada etiqueta. Intervalos planeados, não horas de emissão registadas; nenhum campo de contacto do plano é lido. MODELLED. Ver docs/JAMMERTEST.md.
jammertest_score Pontua um registo de recetor face a esse calendário (kshana jammertest score): por teste, a latência de deteção, os alarmes perdidos e o tempo de recuperação, e os falsos alarmes fora de todos os intervalos. Registos de texto como log, binários (ubx, sbf) como log_base64. Um pacote assinado precisa de uma chave: linha de comandos. Apenas consultivo; MODELLED.
create_evidence_pack Um pacote de evidências assinado para uma janela do registo de uma embarcação (kshana receiver-trust evidence): os bytes brutos do registo para a janela, a configuração, os resultados e motivos por época, uma página de resumo e um manifesto com cada SHA-256 e uma cadeia de hashes, assinado com Ed25519. A semente de assinatura nunca é devolvida nem registada; sem uma, é usada uma chave única, pelo que o pacote prova a integridade, não a identidade. Um registo técnico, não um parecer jurídico. Ver docs/EVIDENCE-PACKS.md.
attach_evidence_timestamp Associa um token de marca temporal RFC 3161 (base64 dos bytes .tsr) a um pacote, em memória (kshana evidence attach-timestamp); o pacote com o token tem ainda de ser verificado. A assinatura da autoridade de marca temporal não é verificada: use openssl ts -verify.
verify_evidence_pack Verifica um pacote (kshana evidence verify): cada hash, a cadeia, a assinatura e, com a chave pública do signatário e o registo completo, quem o assinou e que o excerto veio desse registo. Indica cada falha e cada ficheiro. O verdict é verified (signatário fixado), intact-signer-not-pinned (tudo confere mas não foi dada nenhuma chave pública, pelo que o signatário não é estabelecido) ou failed; require_timestamp faz falhar um pacote sem token de marca temporal.
generate_training_nmea NMEA 0183 sintético de ponte para formação de tripulações a partir de um TOML nmea-scenario (jamming, arrastamento de posição, spoofing de tempo, atraso de repetição) com o registo do instrutor (kshana-nmea-training/1); determinista por semente. Apenas texto: nada é sintetizado em RF nem em IQ e nada é transmitido; nunca para os sistemas de navegação em direto de uma embarcação. A resposta traz as primeiras 2000 linhas.
build_interference_map Um mapa de interferência GNSS a partir de relatórios de posição ADS-B ou AIS como texto CSV (no máximo 4 MiB): um GeoJSON kshana-interference-map/v1 por dia UTC, apenas agregado (sem identificadores, células com menos de 5 aeronaves ou embarcações distintas retidas), com a licença do conjunto de dados incorporada. Uma célula degradada não identifica a interferência como causa; não é uma previsão. MODELLED. Ver docs/INTERFERENCE-MAP.md.
export_test_bench O movimento do veículo e os eventos de um cenário para um simulador GNSS de laboratório (kshana bench-export): CSV e JSON de movimento, NMEA, pontos de passagem e eventos como texto, nada escrito em disco. Tipos de cenário gnss-ins, jamming, gnss-sim. Sem sinal: nada do que é exportado é, modela ou comanda um sinal de radiofrequência ou de banda de base; o simulador e o seu operador fornecem os sinais. Ver docs/TEST-BENCH.md.
create_round_trip_pack O pacote assinado de ida e volta de laboratório (kshana evidence round-trip): o cenário, o documento kshana.test-conditions/1 do laboratório, o registo do recetor e a sua pontuação face aos eventos declarados, ligados por hash. Recusa condições e eventos de pontuação que discordem. Sem sinal; um registo técnico, não uma certificação.
iq_sweep Repete uma gravação IQ do diretório de trabalho com vários projetos de malha de seguimento (kshana iq sweep): por projeto e PRN, o jitter de fase e de código em regime estacionário, as frações de bloqueio e o C/N0 médio. No máximo 256 canais (projeto, PRN) por chamada; o intervalo tem de caber no orçamento de amostras.
iq_monitor Executa os monitores de deteção de interferência e de spoofing sobre uma gravação IQ do diretório de trabalho (kshana iq monitor): monitores de potência e espetrais de banda larga e monitores de C/N0 e de qualidade de sinal por satélite face a uma linha de base aprendida. Nomes e comprimentos das séries e até 200 eventos na resposta; o relatório completo a pedido como ficheiros. Um evento indica que uma grandeza medida saiu da sua linha de base, não porquê. MODELLED.
iq_labfit Ajusta o modelo de perda de bloqueio da malha de seguimento a execuções de laboratório (kshana iq labfit) a partir de um cenário iq-labfit cujos registos vão em linha (text ou base64; um path é recusado). Não lê nem escreve nenhum ficheiro. MODELLED.
iq_test_conditions Valida um ficheiro kshana.test-conditions/1 dado como texto e devolve as condições resolvidas com o seu hash. Apenas em linha.
compliance_report O mapeamento do quadro público preenchido a partir de documentos de resultados dados como texto (kshana compliance-report): de seis quadros de resiliência e normas (US DHS Resilient PNT framework v2.0, IMO ships, EASA aviation, NIS2 Article 21, EN 16803, NIST IR 8323r1), as linhas em apoio das quais as execuções fornecem elementos de prova, as que não têm esse apoio e a lacuna de cada linha. Recebe runs de {label, result, scenario?} (no máximo 64, 4 MiB no total). Um estado indica que as execuções fornecem elementos de prova em apoio das capacidades da linha; não é uma conclusão de que um quadro seja atingido nem uma classificação ou aprovação de qualquer produto. O statement é devolvido com cada relatório; mostre-o tal como está. MODELLED. Ver docs/compliance/.
compliance_mapping As tabelas de mapeamento estáticas (ou, com sources, os documentos de origem que citam, com versões e URL) como Markdown, encabeçadas pela mesma declaração. Não precisa de execuções.
trust_telemetry Um fluxo de confiança (linhas JSON) ou um resultado receiver-trust apresentado como texto Prometheus, linhas syslog CEF ou LEEF, uma carga JSON OTLP ou linhas de descoberta e de estado MQTT do Home Assistant, com os codificadores kshana trust-telemetry. Texto na resposta: nada é enviado nem servido e nenhum relógio é lido. Apenas consultivo.
fit_imu_log Parâmetros do acelerómetro e do giroscópio dos cenários hybrid e fusion ajustados a partir de um registo de IMU parada (CSV ou EuRoC) por desvio de Allan, com uma tabela [accel_classical] pronta a colar e o SHA-256 do registo (kshana imu-fit). Texto à entrada, JSON à saída; MODELLED.
list_standards_packs Os pacotes de normas (kshana standards-pack list): conjuntos de cenários pontuados para os perfis de teste do quadro DHS Resilient PNT (níveis 1 a 4), a IMO MSC.1/Circ.1575 e o ICAO Doc 9849 Apêndice F.
run_standards_pack Uma execução de um pacote face aos seus limiares declarados antes da execução (kshana standards-pack run): cada teste MET, NOT MET ou NEEDS INPUT, com valores medidos e esperados; dê o relatório a compliance_report para ver as linhas. MODELLED; não classifica nenhum produto.
lunanet_afs_check O LunaNet Augmented Forward Signal verificado face ao LNIS V5 AD1 Volume A (LSIS-AFS V1.0, 29 de janeiro de 2025): spec (a implementação face às tabelas de códigos impressas do documento e aos exemplos resolvidos), symbols (um fluxo de símbolos: padrão de sincronização, SB1, FID, continuidade de TOI) ou generate (um fluxo de teste). O LDPC e o CRC-24Q das subtramas 2 a 4 não são verificados; nenhum sinal é escrito.
score_benchmark Uma submissão kshana-bench pontuada face a um ficheiro de referência, ambos como texto JSON (kshana bench score, bench/SPEC.md): o ficheiro de resultados com a versão da especificação, a divisão, os hashes de entrada e as métricas da tarefa. MODELLED; descreve um registo ou um corpus, nunca um produto.
render_leaderboard Ficheiros de resultados do kshana-bench apresentados como a página estática de classificação (texto HTML), cada um validado primeiro.
trust_telemetry Um fluxo de confiança (linhas JSON) ou um resultado receiver-trust apresentado como texto Prometheus, linhas syslog CEF ou LEEF ou uma carga JSON OTLP, com os codificadores kshana trust-telemetry. Texto na resposta: nada é enviado nem servido e nenhum relógio é lido. Apenas consultivo.
route_exposure A proporção do comprimento de uma rota em células degradadas, não degradadas, não avaliadas e não observadas de um ou mais mapas de interferência, opcionalmente dentro de um intervalo de datas. As células não observadas não são evidência de uma rota livre.
iq_signals A configuração da camada GNSS IQ: os nomes de sinais que as ferramentas IQ aceitam, se as ferramentas de ficheiros IQ estão ativas, o diretório de trabalho e o orçamento de amostras por chamada. Chame-a primeiro.
iq_info Descreve uma gravação IQ (em fase e em quadratura) do diretório de trabalho sem a processar: formato, taxa de amostragem, frequência central, amostras, duração, ficheiros de dados e tamanhos (kshana iq info).
iq_scene Gera uma cena GNSS IQ com vários satélites no diretório de trabalho (kshana iq scene): perfis de Doppler/C/N0 declarados, ou geometria verdadeira de efemérides difundidas a partir de um ficheiro de navegação RINEX, com um canal de propagação ao nível do sinal facultativo. Responde com os ficheiros escritos e as suas contagens de bytes e a primeira época da referência por satélite.
iq_acquire Aquisição por FFT (fast Fourier transform) de um ou mais PRN (pseudo-random noise codes) sobre uma gravação (kshana iq acquire), opcionalmente atrás de estágios de front-end: por PRN, adquirido ou não, Doppler, fase do código, estatística de pico e limiar; surface_out (um PRN) conserva toda a superfície de correlação Doppler × fase do código com refinamentos de Doppler fino.
iq_track Adquire e depois segue com o banco de DLL/PLL/FLL (malhas de bloqueio de atraso, de fase e de frequência) (kshana iq track), com as malhas de um ficheiro TOML kshana.loop-design/1 no diretório de trabalho (design) ou o projeto incorporado, e reaquisição facultativa (reacquire): por canal, épocas, Doppler final, C/N0 final e médio, frações de bloqueio de fase e de código, bloqueado no fim, o estado de bloqueio final, falsos bloqueios e reaquisições, mais o nome e o hash do projeto. O seguimento processa fluxos em memória limitada; a saída por época vai apenas para ficheiros (epochs_out: E/P/L, discriminadores, estados das malhas, C/N0, estado de bloqueio como .csv/.jsonl/.bin; events_out).
iq_frontend Aplica DSP (digital signal processing: passa-banda, notch, blanking, excisão, AGC, quantizador) de front-end do recetor e de mitigação de interferência a uma gravação e escreve uma nova (kshana iq frontend).
iq_campaign Executa uma campanha de repetição em laboratório (kshana iq campaign): gravações, cada uma com um ficheiro de condições de teste que indica a referência conhecida do laboratório, × cadeias de front-end × projetos de malha. Cada célula é pontuada quanto ao tempo até à perda de bloqueio, ao tempo de reaquisição, à degradação do C/N0 face ao J/S declarado (ao lado de uma referência analítica etiquetada MODELLED), à taxa de falso bloqueio, ao jitter de PLL/DLL e à disponibilidade. Incremental e retomável: cada chamada executa as células pendentes que cabem no orçamento de amostras (ou max_cells).
iq_campaign_status O progresso de uma pasta de saída de campanha: células concluídas e pendentes, e o resumo digest quando estiver completa. Só lê ficheiros.

Cada ferramenta é um invólucro fino e fiel de uma função pública da biblioteca kshana — nenhuma lógica de simulação nova reside aqui, pelo que um agente executa exatamente o motor validado.

As ferramentas GNSS IQ: ficheiros à entrada, JSON compacto à saída#

As gravações IQ atingem gigabytes, pelo que as ferramentas iq_* nunca passam amostras pelo protocolo. Seguem um só contrato:

  • Um diretório de trabalho. O servidor lê e escreve ficheiros IQ apenas dentro da pasta indicada por KSHANA_MCP_IQ_DIR. Cada argumento de caminho é relativo a ela (um caminho absoluto tem de resolver para dentro dela); as entradas são resolvidas através de ligações simbólicas antes da verificação, a pasta de uma saída tem de já existir dentro dela, e uma saída existente só é substituída com overwrite: true. Se não estiver definida, as ferramentas de ficheiros IQ ficam desligadas e dizem como as ativar; todas as outras ferramentas não são afetadas.
  • Um orçamento de amostras. Uma chamada gera ou processa no máximo KSHANA_MCP_IQ_MAX_SAMPLES amostras complexas (predefinição 50 000 000). Em bytes, isso são 400 MB como cf32_le (8 bytes por amostra complexa), 200 MB como ci16_le (4 bytes) e 100 MB como ci8 (2 bytes); uma cena é escrita como cf32_le a menos que format indique outra coisa. A verificação corre antes de qualquer trabalho, e a recusa indica a duração ou o max_seconds que cabe.
  • Respostas compactas. Cada ferramenta responde com um resumo JSON: picos de aquisição, C/N0, estado de bloqueio e todos os ficheiros escritos com o seu caminho e contagem de bytes. As tabelas por época vão para os ficheiros json_out / csv_out que indicar.
  • Os argumentos desconhecidos são recusados, não ignorados, pelo que uma opção com erro ortográfico é um erro.

Cada ferramenta executa o mesmo caminho de código que kshana iq na linha de comandos, no mesmo processo. A camada é apenas software: escreve ficheiros para recetores de software e não aciona nenhum equipamento de radiofrequência. A camada IQ não acrescenta síntese de interferência nem de spoofer, e nada é alguma vez transmitido. (O tipo de cenário spectrum, separado, pode escrever instantâneos IQ analíticos de jammer num ficheiro.)

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

Com a imagem Docker, monte a pasta e aponte a variável para ela: docker run --rm -i -v "$PWD/iq:/iq" -e KSHANA_MCP_IQ_DIR=/iq ghcr.io/ashfordeou/kshana-mcp.

Todos os tipos de cenário são acessíveis#

run_scenario despacha segundo o kind do cenário, pelo que todos os tipos de cenário que list_scenario_kinds indica são executados através dele. Isso inclui as famílias mais recentes, cada uma com exemplos incluídos que um agente pode obter:

Capacidade Tipos de cenário Um exemplo para começar
Espetro e cascata spectrum l-band-waterfall-jamming
O sistema solar solar-system solar-system-tour
Constelações em torno de qualquer corpo constellation-design, body-pnt lunar-relay-constellation, europa-surface-pnt
Campanhas: fases encadeadas, varrimentos, Monte Carlo (conjuntos aleatórios com semente), composição campaign campaign-sweep-jammer-power
Navegação em órbita terrestre baixa (LEO): projeto do sinal leo-signal leo-band-trade
Navegação LEO: orçamento da ligação de passagem leo-pass leo-pass-iridium
Navegação LEO: mensagem de navegação leo-navmsg leo-navmsg-encode-decode
Navegação LEO: posicionamento e temporização fundidos leo-pvt, leo-ppp, ntn-positioning, leo-pnt-chain leo-doppler-positioning, leo-pnt-end-to-end

list_example_scenarios com um kind indica todos os exemplos incluídos desse tipo de cenário. As animações, os relatórios e as exportações de interoperabilidade não são tipos de cenário: são vistas de uma execução, e animate_scenario, report_scenario e export_interop devolvem-nas para qualquer cenário a que se apliquem.

Não servidos: os conjuntos de estudo (kshana --study <suite.toml>), porque um conjunto indica ficheiros de cenário irmãos em disco e as ferramentas de cenário não leem ficheiros. Execute cada membro com run_scenario. (As ferramentas IQ leem e escrevem ficheiros, mas apenas dentro do seu diretório de trabalho.)

Instalar o servidor MCP#

Consultivo, não um equipamento de navegação homologado: o operador continua a ser responsável pela navegação. O servidor é executado no seu computador; nada é enviado à Ashforde OÜ.

Uma passagem que menciona clientes de IA de terceiros é omitida aqui; consta de mcp/kshana-mcp/README.md no GitHub.

Uma passagem que menciona clientes de IA de terceiros é omitida aqui; consta de mcp/kshana-mcp/README.md no GitHub.

Uma passagem que menciona clientes de IA de terceiros é omitida aqui; consta de mcp/kshana-mcp/README.md no GitHub.

Canal Comando ou botão Requer Forma fixada
Cursor (um clique) npx (Node) · Docker Node, ou Docker kshana-mcp@0.40.0 / ghcr.io/ashfordeou/kshana-mcp:0.40.0
VS Code (um clique) npx (Node) · Docker · Insiders (npx) Node, ou 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+ com uv ou 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 fórmula para v0.40.0
Scoop scoop bucket add ashforde https://github.com/ashfordeOU/scoop-bucket e depois scoop install kshana-mcp Scoop (Windows) manifesto para 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
Binário pré-compilado a página da versão: kshana-mcp (Linux x86-64), kshana-mcp-<target>[.exe], verificado por SHA256SUMS e gh attestation verify none v0.40.0
Registo do MCP io.github.ashfordeOU/kshana-mcp (encontrado por clientes que reconhecem o registo) um cliente que reconhece o registo 0.40.0
Remoto (HTTP em fluxo contínuo) kshana-mcp --http 127.0.0.1:8080, em alojamento próprio: ver https://github.com/ashfordeOU/kshana/blob/main/docs/deploy/mcp-http.md o seu próprio anfitrião v0.40.0

A partir de um checkout ou de git (desenvolvimento):

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

Modo HTTP (alojamento próprio)#

kshana-mcp --http 127.0.0.1:8080 serve as mesmas ferramentas sobre HTTP em fluxo contínuo em /mcp. Liga-se apenas ao loopback; um endereço que não seja de loopback precisa de --allow-remote e de um token de portador em KSHANA_MCP_HTTP_TOKEN; as ferramentas de ficheiros IQ ficam desligadas; o tamanho, o tempo e a concorrência dos pedidos são limitados; não é enviado nenhum cabeçalho CORS. O Kshana não aloja um ponto de acesso: é o utilizador quem o aloja. Ver docs/deploy/mcp-http.md.

cargo install coloca kshana-mcp no seu PATH (tipicamente ~/.cargo/bin/kshana-mcp). O servidor fala JSON-RPC (JSON remote procedure call) sobre stdio; os registos vão para o stderr. Compilar a partir do código-fonte exige uma cadeia de ferramentas Rust ≥ 1,88 (o SDK rmcp 2.x corrigido exige-o, tal como a biblioteca kshana); a imagem Docker não exige nenhuma.

Registá-lo num cliente#

Praticamente todos os clientes MCP usam o mesmo bloco de configuração mcpServers — registe o binário kshana-mcp por caminho absoluto:

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

Ou, com a imagem Docker em vez de um binário local (sem necessidade de PATH):

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

O local onde esse bloco fica depende do cliente:

  • Cursor — ~/.cursor/mcp.json (global) ou .cursor/mcp.json (por projeto).
  • JetBrains AI Assistant / Junie — Settings → Tools → AI Assistant → Model Context Protocol → Add → As JSON, cole o bloco e reinicie por completo o IDE (ambiente de desenvolvimento integrado).
  • Assistentes de ambiente de trabalho — a maioria usa um …_config.json com a mesma estrutura mcpServers; consulte a documentação do seu cliente para saber a localização do ficheiro.
  • Agentes de CLI — muitos aceitam o mesmo JSON através de um mecanismo mcp add / mcp.json.

Use sempre um caminho absoluto para o binário. Defina RUST_LOG=debug em env para diagnosticar problemas (o diagnóstico vai para o stderr; o stdout está reservado ao protocolo JSON-RPC).

Experimente#

Depois de registado, peça ao seu assistente coisas como:

  • "Liste os tipos de cenário do Kshana." → list_scenario_kinds
  • "Mostre-me um exemplo de spectrum do Kshana e execute-o." → list_example_scenarios, get_example_scenario, run_scenario
  • "Execute o cenário de holdover de relógio do Kshana com um limiar de 20 ns e uma falha de GNSS de 2 horas; qual é o holdover quântico face ao clássico?" → run_scenario
  • "Exporte essa constelação GPS (Global Positioning System) como SP3." → export_sp3
  • "Dê-me a tabela realtime-frame-eop como CSV." → export_table_csv
  • "Coloque essa passagem de Iridium num globo Cesium." → list_export_formats, export_interop
  • "Anime a campanha de jamming." → animate_scenario
  • "Dê-me o relatório dessa execução, com o seu registo de reprodutibilidade." → report_scenario
  • "Crie uma cena GPS L1 de um segundo com os PRN 3 e 17, depois adquira-a e siga-a." → iq_signals, iq_scene, iq_acquire, iq_track

Nota de conceção — porque um crate separado#

O servidor é um crate autónomo, excluído do workspace, com o seu próprio Cargo.lock, pelo que o SDK (software development kit) oficial de MCP para Rust, rmcp, e o seu runtime assíncrono nunca entram no grafo de dependências do crate kshana publicado: quem usa a biblioteca ou Python não compila um servidor que não executa. (Foi separado primeiro porque rmcp é edition 2024, o que exige rustc ≥ 1,85, enquanto o crate principal prometia então 1,75. A biblioteca e este servidor declaram agora ambos 1,88, o mínimo do rmcp 2.x corrigido em segurança e dos crates RustCrypto atualizados.) A integração contínua (CI) condiciona este crate por si só — testes e cargo deny face ao seu ficheiro de bloqueio. A árvore de licenças do rmcp está limpa (Apache-2.0/MIT/BSD), pelo que, ao contrário do crate de validação cruzada xval/anise-frames, que de resto espelha, a separação não tem que ver com licenciamento.

Licença: AGPL-3.0-only, a GNU Affero General Public License versão 3 apenas (ou uma licença comercial da Ashforde OÜ; ver o LICENSING.md do repositório).