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). Ele permite que um assistente de IA (inteligência artificial) execute o motor real e leia de volta seu JSON (JavaScript Object Notation), em vez de adivinhar a matemática. Fala por stdio (entrada e saída padrão) com qualquer cliente compatível com MCP, inclusive o Cursor e o JetBrains AI Assistant / Junie.
A matemática para a qual o Kshana é validado é exatamente onde 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 (sistema global de navegação por satélite) e DOP (diluição da precisão), níveis de proteção ARAIM (monitoramento avançado de integridade autônomo do receptor), 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 sua proveniência e seu rótulo VALIDATED ou MODELLED.
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 de resultado completo (JavaScript Object Notation: figuras de mérito, curvas). O opcional 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 detecta seu tipo, sem executar. |
list_example_scenarios |
Os cenários de referência incluídos como JSON: cada name, seu kind e uma frase sobre o que ele mostra. Filtro kind opcional. Todo exemplo roda como está, de modo que este é o caminho mais rápido para um TOML válido para um tipo. |
get_example_scenario |
O texto TOML de um cenário de referência incluído, byte a byte o arquivo em scenarios/. |
report_scenario |
Executa um cenário e devolve seu relatório: resumo executivo, entradas, cada valor com sua unidade e seu rótulo VALIDATED ou MODELLED, eventos, as capacidades exercitadas e um registro de reprodutibilidade. format é json (padrão) ou html (a página imprimível de arquivo único). |
animate_scenario |
Executa um cenário e devolve suas séries temporais como uma animação: svg (padrão), html (um reprodutor autossuficiente) ou frames (no máximo 120 em uma resposta). O primeiro item de conteúdo é um resumo JSON do que foi desenhado; os arquivos vêm em seguida. Um tipo sem eixo de tempo amostrado é recusado, com o motivo. |
list_export_formats |
Quais 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 arquivos (sufixo, tamanho, codificação e o resumo SHA-256, o Secure Hash Algorithm de 256 bits); os arquivos vêm em seguida, o arquivo binário de amostras SigMF em base64. |
import_route |
Escreve uma rota GeoJSON LineString em um 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 OEM (Orbit Ephemeris Message) CCSDS 2,0 — a série de posição e velocidade TEME (equador verdadeiro, equinócio médio) 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 do export_sp3, que só tem posição. |
export_table_csv |
Executa um cenário e devolve sua tabela de reprodutibilidade como CSV (valores separados por vírgula) — a tabela estável byte a byte que a CLI (interface de linha de comando) grava como <scenario>.table.csv. Só realtime-frame-eop, lunar-time-budget, lunar-jamming, telecom-timing, leo-navmsg (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 devolve um erro que nomeia estes. |
sky_geometry |
Geometria do céu sob um horizonte dependente do azimute: a partir de um local, de um instante e de predefinições de constelação, de conjuntos de elementos de duas linhas (tle, propagados por SGP4 até um epoch em UTC) ou de satélites como azimute/elevação ou ECEF, os satélites visíveis e os ocultos pelo horizonte, GDOP/PDOP/HDOP/VDOP/TDOP a partir do núcleo de DOP verificado com o gnss_lib_py, o cofator e a covariância leste-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 sua proveniência e seu corte a cada grau. MODELLED; traz o aviso consultivo; sem Monte Carlo por MCP. Veja docs/SKYLINE.md. |
assess_receiver_log |
Avalia a confiança de um registro real de receptor GNSS (sistema global de navegação por satélite). O TOML nomeia o format do registro (ubx, rinex, android, nmea ou sbf) e dá seus bytes em linha como text ou base64; a ferramenta executa os monitores de confiança (queda da densidade portadora/ruído, perda de sincronismo, AGC (controle automático de ganho), indicador de interferência, salto de posição e, com RINEX mais navegação transmitida, RAIM (monitoramento autônomo de integridade pelo receptor) e um monitor auxiliado por relógio) e devolve quando e por que a posição deixou de ser confiável. Seções opcionais [[events]] e [compare] pontuam eventos declarados e quedas previstas de C/N0 contra 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 descontaram (consultivo; MODELLED). O registro vai em linha como text ou base64 (no máximo 4 MiB). Gráfico e CSV por época sob solicitação. Veja docs/RECEIVER-TRUST.md. |
assess_vessel_stream |
Pontua um trecho NMEA 0183 limitado (no máximo 2 MiB e 20.000 épocas; deve conter a janela de calibração) do modo como kshana receiver-trust live o pontua: estado de confiança por época e pontuação de 0-100 com os monitores que descontaram, um resumo e o último $PKSHT. A forma limitada do comando ao vivo: nenhum socket é aberto e nada é gravado em uma porta; o portão, --listen e os exportadores de telemetria (Prometheus, OTLP, syslog) existem apenas na linha de comando. Somente consultivo; MODELLED. Veja docs/MARITIME-TRUST.md. |
assess_vessel_log |
O registro NMEA 0183 de uma embarcação (no máximo 4 MiB) como execução em lote, com o TOML de sessão declarando os limites da embarcação: o modelo de pontuação e a pontuação de 0-100 de cada época com seus descontos (a resposta mantém as contagens por estado e as primeiras 200 épocas degradadas ou não confiáveis). Somente consultivo; MODELLED. |
jammertest_import |
Lê o catálogo de testes e o plano de transmissão do Jammertest publicados (NPRA/jammertest-plan, MIT) como verdade programada (kshana jammertest import): os intervalos de uma área de teste tornam-se eventos de confiança do receptor, com o id do catálogo e o ano em cada rótulo. Intervalos planejados, não horários de transmissão registrados; nenhum campo de contato do plano é lido. MODELLED. Veja docs/JAMMERTEST.md. |
jammertest_score |
Pontua um registro de receptor contra esse cronograma (kshana jammertest score): por teste, a latência de detecção, os alarmes perdidos e o tempo de recuperação, e os alarmes falsos fora de todo intervalo. Registros de texto como log, binários (ubx, sbf) como log_base64. Um pacote assinado precisa de uma chave: linha de comando. Somente consultivo; MODELLED. |
create_evidence_pack |
Um pacote de evidências assinado para uma janela do registro de uma embarcação (kshana receiver-trust evidence): os bytes brutos do registro da janela, a configuração, os resultados e motivos por época, uma página-resumo e um manifesto com cada SHA-256 e uma cadeia de hashes, assinado com Ed25519. A semente de assinatura nunca é devolvida nem registrada; sem uma, usa-se uma chave descartável, de modo que o pacote prova integridade, não identidade. Um registro técnico, não um parecer jurídico. Veja docs/EVIDENCE-PACKS.md. |
attach_evidence_timestamp |
Vincula um token de carimbo de tempo RFC 3161 (base64 dos bytes .tsr) a um pacote, em memória (kshana evidence attach-timestamp); o pacote com o token ainda deve verificar. A assinatura da autoridade de carimbo de tempo não é conferida: 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 registro completo, quem o assinou e que o trecho veio desse registro. Nomeia toda falha e todo arquivo. O verdict é verified (signatário fixado), intact-signer-not-pinned (tudo confere, mas nenhuma chave pública foi dada, de modo que o signatário não está estabelecido) ou failed; require_timestamp reprova um pacote sem token de carimbo de tempo. |
generate_training_nmea |
NMEA 0183 de ponte sintético para treinamento de tripulações a partir de um TOML nmea-scenario (interferência, arrasto de posição, falsificação de tempo, atraso de repetição) com o registro do instrutor (kshana-nmea-training/1); determinístico por semente. Somente texto: nada é sintetizado em RF ou IQ e nada é transmitido; nunca para os sistemas de navegação reais de uma embarcação. A resposta traz as primeiras 2000 linhas. |
build_interference_map |
Um mapa de interferência GNSS a partir de relatos 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 interferência como a causa; não é uma previsão. MODELLED. Veja 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 gravado em disco. Tipos gnss-ins, jamming, gnss-sim. Nenhum sinal: nada do que é exportado é, modela ou aciona um sinal de radiofrequência ou de banda base; o simulador e seu operador fornecem os sinais. Veja 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 registro do receptor e sua pontuação contra os eventos declarados, ligados por hash. Recusa condições e eventos de pontuação que discordam. Nenhum sinal; um registro técnico, não uma certificação. |
iq_sweep |
Reproduz uma gravação IQ do diretório de trabalho por vários projetos de laço de rastreamento (kshana iq sweep): por projeto e PRN, o jitter de fase e de código em regime permanente, as frações de sincronismo e o C/N0 médio. No máximo 256 canais (projeto, PRN) por chamada; o intervalo deve caber no orçamento de amostras. |
iq_monitor |
Executa os monitores de detecção de interferência e de falsificação sobre uma gravação IQ do diretório de trabalho (kshana iq monitor): monitores de potência de banda larga e espectrais e monitores de C/N0 e de qualidade de sinal por satélite contra uma linha de base aprendida. Nomes e comprimentos de séries e até 200 eventos na resposta; o relatório inteiro sob solicitação, como arquivos. Um evento diz que uma grandeza medida saiu de sua linha de base, não por quê. MODELLED. |
iq_labfit |
Ajusta o modelo de perda de sincronismo do laço de rastreamento a execuções de laboratório (kshana iq labfit) a partir de um cenário iq-labfit cujos registros estão em linha (text ou base64; um path é recusado). Não lê nem grava arquivo. MODELLED. |
iq_test_conditions |
Valida um arquivo kshana.test-conditions/1 dado como texto e devolve as condições resolvidas com seu hash. Somente em linha. |
compliance_report |
O mapeamento de estruturas públicas preenchido a partir de documentos de resultado dados como texto (kshana compliance-report): para quais linhas de seis estruturas e normas de resiliência (a estrutura US DHS Resilient PNT v2.0, IMO navios, EASA aviação, NIS2 Artigo 21, EN 16803, NIST IR 8323r1) as execuções fornecem evidências em apoio de, para quais não, e a lacuna de cada linha. Recebe runs de {label, result, scenario?} (no máximo 64, 4 MiB no total). Um estado diz que as execuções fornecem evidências em apoio das capacidades da linha; não é uma constatação de que uma estrutura é atendida nem uma classificação ou aprovação de qualquer produto. A statement é devolvida com todo relatório; mostre-a literalmente. MODELLED. Veja docs/compliance/. |
compliance_mapping |
As tabelas estáticas de mapeamento (ou, com sources, os documentos de origem que elas citam, com versões e URLs) em 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 de receiver-trust renderizado como texto Prometheus, linhas de syslog CEF ou LEEF, uma carga JSON OTLP ou linhas de descoberta e de estado MQTT do Home Assistant, com os codificadores de kshana trust-telemetry. Texto na resposta: nada é enviado ou servido e nenhum relógio é lido. Somente consultivo. |
fit_imu_log |
Parâmetros de acelerômetro e de giroscópio dos cenários hybrid e fusion ajustados a partir de um registro de IMU estacionária (CSV ou EuRoC) por desvio de Allan, com uma tabela [accel_classical] pronta para colar e o SHA-256 do registro (kshana imu-fit). Texto na entrada, JSON na saída; MODELLED. |
list_standards_packs |
Os pacotes de normas (kshana standards-pack list): conjuntos de cenários pontuados para os perfis de teste da estrutura DHS Resilient PNT (níveis 1 a 4), IMO MSC.1/Circ.1575 e ICAO Doc 9849 Apêndice F. |
run_standards_pack |
Um pacote executado contra 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 Sinal Direto Aumentado LunaNet conferido com o LNIS V5 AD1 Volume A (LSIS-AFS V1.0, 29 de janeiro de 2025): spec (a implementação contra as tabelas de código impressas e os exemplos resolvidos do documento), symbols (um fluxo de símbolos: padrão de sincronização, SB1, FID, continuidade do TOI) ou generate (um fluxo de teste). LDPC e CRC-24Q dos subquadros 2 a 4 não são verificados; nenhum sinal é gravado. |
score_benchmark |
Uma submissão kshana-bench pontuada contra um arquivo de verdade, ambos em texto JSON (kshana bench score, bench/SPEC.md): o arquivo de resultado com a versão da especificação, a divisão, os hashes de entrada e as métricas da tarefa. MODELLED; descreve um registro ou corpus, nunca um produto. |
render_leaderboard |
Arquivos de resultado do kshana-bench renderizados como a página estática de classificação (texto HTML), cada um validado antes. |
trust_telemetry |
Um fluxo de confiança (linhas JSON) ou um resultado de receiver-trust renderizado como texto Prometheus, linhas de syslog CEF ou LEEF ou uma carga JSON OTLP, com os codificadores de kshana trust-telemetry. Texto na resposta: nada é enviado ou servido e nenhum relógio é lido. Somente consultivo. |
route_exposure |
A parcela 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. Células não observadas não são evidência de uma rota livre. |
iq_signals |
A configuração da camada IQ de GNSS: os nomes de sinal que as ferramentas IQ aceitam, se as ferramentas de arquivo IQ estão ligadas, 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) no diretório de trabalho sem processá-la: formato, taxa de amostragem, frequência central, amostras, duração, arquivos de dados e tamanhos (kshana iq info). |
iq_scene |
Gera uma cena IQ GNSS de vários satélites no diretório de trabalho (kshana iq scene): perfis de Doppler/C/N0 declarados, ou a geometria verdadeira de efemérides transmitidas a partir de um arquivo de navegação RINEX, com um canal de propagação opcional em nível de sinal. Responde com os arquivos gravados e suas contagens de bytes e a primeira época da verdade por satélite. |
iq_acquire |
Aquisição por FFT (transformada rápida de Fourier) de um ou mais PRNs (códigos de ruído pseudoaleatório) 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) mantém toda a superfície de correlação Doppler × fase do código com refinamentos de Doppler fino. |
iq_track |
Adquire e depois rastreia com o banco DLL/PLL/FLL (laços de sincronização de atraso, de fase e de frequência) (kshana iq track), com os laços de um arquivo TOML kshana.loop-design/1 no diretório de trabalho (design) ou o projeto incorporado, e reaquisição opcional (reacquire): por canal, épocas, Doppler final, C/N0 final e médio, frações de sincronismo de fase e de código, sincronizado ao final, o estado final de sincronismo, falsos sincronismos e reaquisições, mais o nome e o hash do projeto. O rastreamento transmite em memória limitada; a saída por época vai apenas para arquivos (epochs_out: E/P/L, discriminadores, estados dos laços, C/N0, estado de sincronismo como .csv/.jsonl/.bin; events_out). |
iq_frontend |
Aplica DSP (processamento digital de sinais: passa-faixa, notch, blanking, excisão, AGC, quantizador) de front-end de receptor e de mitigação de interferência a uma gravação e grava uma nova (kshana iq frontend). |
iq_campaign |
Executa uma campanha de reprodução de laboratório (kshana iq campaign): gravações, cada uma com um arquivo de condições de teste declarando a verdade conhecida do laboratório, × cadeias de front-end × projetos de laço. Cada célula é pontuada por tempo até a perda de sincronismo, tempo de reaquisição, degradação de C/N0 contra o J/S declarado (ao lado de uma referência analítica rotulada MODELLED), taxa de falso sincronismo, 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 em max_cells). |
iq_campaign_status |
O progresso da pasta de saída de uma campanha: células concluídas e pendentes, e o resumo criptográfico depois de concluída. Lê apenas arquivos. |
Cada ferramenta é um invólucro fino e fiel de uma função pública da biblioteca kshana — nenhuma lógica de simulação nova mora aqui, de modo que um agente executa exatamente o motor validado.
As ferramentas IQ de GNSS: arquivos na entrada, JSON compacto na saída#
As gravações IQ chegam a gigabytes, de modo que as ferramentas iq_* nunca passam amostras pelo protocolo. Elas seguem um único contrato:
- Um diretório de trabalho. O servidor lê e grava arquivos IQ apenas dentro da pasta nomeada por
KSHANA_MCP_IQ_DIR. Todo argumento de caminho é relativo a ela (um caminho absoluto deve resolver-se dentro dela); as entradas são resolvidas por links simbólicos antes da verificação, a pasta de uma saída já deve existir dentro dela e uma saída existente só é substituída comoverwrite: true. Sem definição, as ferramentas de arquivo IQ ficam desligadas e dizem como ativá-las; 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_SAMPLESamostras complexas (padrão 50.000.000). Em bytes, isso dá 400 MB comocf32_le(8 bytes por amostra complexa), 200 MB comoci16_le(4 bytes) e 100 MB comoci8(2 bytes); uma cena é gravada comocf32_lea menos queformatdiga outra coisa. A verificação roda antes de qualquer trabalho, e a recusa nomeia a duração ou omax_secondsque cabe. - Respostas compactas. Cada ferramenta responde com um resumo JSON: picos de aquisição, C/N0, estado de sincronismo e todo arquivo gravado com seu caminho e sua contagem de bytes. As tabelas por época vão para os arquivos
json_out/csv_outque você nomear. - Argumentos desconhecidos são recusados, não ignorados, de modo que uma opção com erro de grafia é um erro.
Cada ferramenta executa o mesmo caminho de código que kshana iq na linha de comando, no mesmo processo. A camada é só de software: grava arquivos para receptores por software e não aciona hardware de rádio. A camada IQ não acrescenta síntese de interferência nem de falsificador, e nada é jamais transmitido. (O tipo de cenário spectrum, separado, pode gravar em arquivo instantâneos IQ analíticos de interferidores.)
{
"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.
Todo tipo é alcançável#
run_scenario despacha pelo kind do cenário, de modo que todo tipo que list_scenario_kinds nomeia roda por ele. Isso inclui as famílias mais novas, cada uma com exemplos incluídos que um agente pode obter:
| Capacidade | Tipos de cenário | Um exemplo para começar |
|---|---|---|
| Espectro 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, varreduras, Monte Carlo (conjuntos aleatórios com semente), composição | campaign |
campaign-sweep-jammer-power |
| Navegação em órbita baixa da Terra (LEO): projeto de sinal | leo-signal |
leo-band-trade |
| Navegação LEO: orçamento de enlace da 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 nomeia todo exemplo incluído desse tipo. Animações, relatórios e exportações de interoperabilidade não são tipos: são vistas de uma execução, e animate_scenario, report_scenario e export_interop as devolvem para qualquer cenário ao qual se apliquem.
Não oferecidas: suítes de estudo (kshana --study <suite.toml>), porque uma suíte nomeia arquivos de cenário irmãos em disco e as ferramentas de cenário não leem arquivo. Execute cada membro com run_scenario. (As ferramentas IQ leem e gravam arquivos, apenas dentro de seu diretório de trabalho.)
Instalar o servidor MCP#
Consultivo, não é um equipamento de navegação homologado: o operador continua responsável pela navegação. O servidor roda no seu computador; nada é enviado à Ashforde OÜ.
Uma passagem que nomeia clientes de IA de terceiros fica de fora aqui; ela está em 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], conferido por SHA256SUMS e gh attestation verify |
nenhuma | v0.40.0 |
| Registro de MCP | io.github.ashfordeOU/kshana-mcp (encontrado por clientes que consultam o registro) |
um cliente que consulta o registro | 0.40.0 |
| Remoto (HTTP em fluxo contínuo) | kshana-mcp --http 127.0.0.1:8080, hospedagem própria: veja https://github.com/ashfordeOU/kshana/blob/main/docs/deploy/mcp-http.md |
seu próprio host | v0.40.0 |
A partir de uma cópia ou do git (desenvolvimento):
cd mcp/kshana-mcp && cargo install --path .
cargo install --git https://github.com/AshfordeOU/kshana kshana-mcp
Modo HTTP (hospedagem própria)#
kshana-mcp --http 127.0.0.1:8080 serve as mesmas ferramentas por HTTP em fluxo contínuo em /mcp. Faz bind apenas em loopback; um endereço fora de loopback exige --allow-remote e um token de portador (bearer) em KSHANA_MCP_HTTP_TOKEN; as ferramentas de arquivo IQ ficam desligadas; o tamanho, o tempo e a concorrência das requisições são limitados; nenhum cabeçalho CORS é enviado. O Kshana não hospeda um endpoint: você o hospeda por conta própria. Veja docs/deploy/mcp-http.md.
cargo install coloca kshana-mcp no seu PATH (normalmente ~/.cargo/bin/kshana-mcp). O servidor fala JSON-RPC (chamada de procedimento remoto em JSON) por stdio; os logs vão para stderr. Compilar a partir do código-fonte exige uma toolchain Rust ≥ 1,88 (o SDK rmcp 2.x corrigido a exige, e a biblioteca kshana também); a imagem Docker não precisa de nenhuma.
Registre-o em um cliente#
Praticamente todo cliente MCP usa o mesmo bloco de configuração mcpServers — registre 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"]
}
}
}
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 depois reinicie completamente a IDE (ambiente de desenvolvimento integrado).
- Assistentes de desktop — a maioria usa um
…_config.jsoncom o mesmo formatomcpServers; consulte a documentação do seu cliente para o local do arquivo. - Agentes de CLI — muitos aceitam o mesmo JSON por um mecanismo
mcp add/mcp.json.
Use sempre um caminho absoluto para o binário. Defina RUST_LOG=debug em env para diagnosticar (os diagnósticos vão para stderr; stdout é reservado ao protocolo JSON-RPC).
Experimente#
Depois de registrado, pergunte 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 interrupção de GNSS de 2 horas; qual é o holdover quântico contra o clássico?" →
run_scenario - "Exporte essa constelação GPS (Sistema de Posicionamento Global) como SP3." →
export_sp3 - "Dê-me a tabela realtime-frame-eop como CSV." →
export_table_csv - "Ponha essa passagem do Iridium em um globo Cesium." →
list_export_formats,export_interop - "Anime a campanha de jamming." →
animate_scenario - "Dê-me o relatório dessa execução, com seu registro de reprodutibilidade." →
report_scenario - "Faça uma cena GPS L1 de um segundo com os PRNs 3 e 17, depois adquira e rastreie." →
iq_signals,iq_scene,iq_acquire,iq_track
Nota de projeto — por que um crate separado#
O servidor é um crate independente, excluído do workspace, com seu próprio Cargo.lock, de modo que o SDK oficial de MCP em Rust (kit de desenvolvimento de software) rmcp e seu runtime assíncrono nunca entram no grafo de dependências do crate kshana publicado: quem usa a biblioteca ou o Python não compila um servidor que não executa. (Ele foi separado primeiro porque rmcp é edition 2024, exigindo rustc ≥ 1,85, enquanto o crate principal então prometia 1,75. A biblioteca e este servidor agora declaram ambos 1,88, o piso do rmcp 2.x corrigido quanto à segurança e dos crates RustCrypto atualizados.) A integração contínua (CI) controla este crate por conta própria — testes e cargo deny contra o seu lockfile. A árvore de licenças do rmcp está limpa (Apache-2.0/MIT/BSD), de modo que, ao contrário do crate de validação cruzada xval/anise-frames, que ele de resto espelha, a separação não tem a 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Ü; veja o LICENSING.md do repositório).