kshana-mcp: запитайте свого ШІ-асистента, і відповість рушій
kshana-mcp — це сервер Model Context Protocol (MCP) для Kshana, симулятора стійкості PNT (позиціонування, навігація та час) з відкритим кодом. Він дає змогу асистентові зі штучним інтелектом (ШІ) запустити справжній рушій і прочитати його JSON (JavaScript Object Notation), замість того щоб вгадувати математику. Він працює через stdio (стандартний ввід і вивід) з будь-яким клієнтом, сумісним з MCP, зокрема Cursor і JetBrains AI Assistant / Junie.
Математика, для якої Kshana перевірена за зовнішнім еталоном, — це саме те, де мовна модель вгадує погано: розповсюдження орбіт за SGP4 (Simplified General Perturbations 4), системи відліку IAU (Міжнародного астрономічного союзу), девіації Аллана, доступність GNSS (глобальна навігаційна супутникова система) і DOP (геометричний чинник, погіршення точності), рівні захисту ARAIM (розширений автономний контроль цілісності приймача), злиття GNSS та INS (інерціальної навігаційної системи) і моделі квантових датчиків. Поставте запитання; асистент запустить справжній сценарій і отримає показники якості з їхнім походженням і позначкою VALIDATED або MODELLED.
Інструменти#
| Інструмент | Що він робить |
|---|---|
run_scenario |
Запустити сценарій із визначення TOML (Tom's Obvious, Minimal Language); повертає підсумок + повний JSON результату (JavaScript Object Notation: показники якості, криві). Необов'язковий include_chart повертає діаграму як SVG (Scalable Vector Graphics). |
list_scenario_kinds |
92 вбудованих видів сценаріїв з описами та обов'язковими/необов'язковими полями, щоб агент міг сконструювати коректний сценарій. |
validate_scenario |
Попередня перевірка: розібрати TOML і визначити його тип без запуску. |
list_example_scenarios |
Вбудовані еталонні сценарії як JSON: кожен name, його kind і одне речення про те, що він показує. Необов'язковий фільтр kind. Кожен приклад запускається як є, тож це найшвидший шлях до чинного TOML для типу. |
get_example_scenario |
Текст TOML одного вбудованого еталонного сценарію, байт у байт той самий файл у scenarios/. |
report_scenario |
Запустити сценарій і повернути його звіт: короткий підсумок для керівництва, вхідні дані, кожен показник з його одиницею та позначкою VALIDATED або MODELLED, події, задіяні можливості та запис відтворюваності. format — це json (типово) або html (друкована односторінкова сторінка). |
animate_scenario |
Запустити сценарій і повернути його часові ряди як анімацію: svg (типово), html (самодостатній програвач) або frames (не більше 120 у відповіді). Перший елемент вмісту — це підсумок JSON того, що було намальовано; далі йдуть файли. Тип без дискретизованої осі часу відхиляється з указанням причини. |
list_export_formats |
Які формати взаємодії застосовні до сценарію (czml, kml, geojson, stk, sigmf), причина, коли формат не застосовний, і специфікація, якої дотримується кожен записувач. Сценарій не запускає. |
export_interop |
Експортувати сценарій як CZML (Cesium Language), KML (Keyhole Markup Language), GeoJSON, ефемериди STK (Systems Tool Kit) .e або SigMF (Signal Metadata Format, для сценарію spectrum з блоком [iq]). Перший елемент вмісту — це індекс файлів у JSON (суфікс, розмір, кодування та дайджест SHA-256, 256-бітний Secure Hash Algorithm); далі йдуть файли, двійковий файл відліків SigMF у base64. |
import_route |
Записати маршрут GeoJSON LineString у сценарій, що летить за треком із шляхових точок (terrain-nav, terrain-slam, gravity-map, combined-altpnt), і повернути новий TOML. |
export_sp3 |
Експортувати орбітальне угруповання сценарію orbit як точні ефемериди SP3-c (Standard Product 3, ревізія c). |
export_omm |
Експортувати елементи сценарію orbit як каталог CCSDS (Consultative Committee for Space Data Systems) 502.0-B-2 OMM (Orbit Mean-elements Message). |
export_oem |
Експортувати ряд станів сценарію orbit як ефемериди CCSDS OEM (Orbit Ephemeris Message) 2,0 — ряд положення та швидкості в TEME (true equator, mean equinox), який читають інструменти польотної динаміки (GMAT, General Mission Analysis Tool; Orekit; STK, Systems Tool Kit); доповнення до export_sp3, що містить лише положення, яке несе й швидкість. |
export_table_csv |
Запустити сценарій і повернути його таблицю відтворюваності як CSV (значення через кому) — байт-стабільну таблицю, яку CLI (інтерфейс командного рядка) записує як <scenario>.table.csv. Лише realtime-frame-eop, lunar-time-budget, lunar-jamming, telecom-timing, leo-navmsg (його аналіз encode-decode на моделі повідомлення kepler16 або kepler-rac) і moonlight-service-volume із заданими export_site_lat_deg + export_site_lon_deg її видають; будь-який інший тип повертає помилку з переліком цих. |
sky_geometry |
Геометрія неба під азимутально залежним обрієм: за ділянкою, часом і наборами орбітальних угруповань, дворядковими наборами елементів (tle, розповсюджуваними за SGP4 до UTC epoch) або супутниками як азимут/кут місця чи ECEF — видимі супутники та ті, що сховані обрієм, GDOP/PDOP/HDOP/VDOP/TDOP із ядра DOP, перевіреного gnss_lib_py, кофактор і коваріація схід-північ-вгору (один годинник на систему або один спільний) і горизонтальний еліпс похибки; із skyline_preset замість request — REPRESENTATIVE набір із його походженням і зрізом щоградуса. MODELLED; містить консультативну заяву; жодного Монте-Карло через MCP. Див. docs/SKYLINE.md. |
assess_receiver_log |
Оцінити довіру до журналу справжнього приймача GNSS (глобальної навігаційної супутникової системи). TOML називає format журналу (ubx, rinex, android, nmea або sbf) і подає його байти в тілі як text або base64; інструмент запускає монітори довіри (падіння відношення сигнал/шум, втрата захоплення, AGC (автоматичне регулювання підсилення), індикатор глушіння, стрибок положення та, з RINEX і трансльованою навігацією, RAIM (автономний контроль цілісності приймача) і монітор за допомогою годинника) і повертає, коли та чому визначення місця перестало бути надійним. Необов'язкові розділи [[events]] і [compare] оцінюють зазначені події та передбачені падіння C/N0 за зазначеними допусками. Таблиця [platform] kind = "vessel" вибирає морські монітори й додає оцінку довіри 0–100 на епоху з моніторами, що віднімали бали (консультативно; MODELLED). Журнал подається в тілі як text або base64 (не більше 4 MiB). Діаграма та CSV на епоху — на запит. Див. docs/RECEIVER-TRUST.md. |
assess_vessel_stream |
Оцінювання обмеженого фрагмента NMEA 0183 (не більше 2 MiB і 20 000 епох; він має містити вікно калібрування) так, як це робить kshana receiver-trust live: стан довіри для кожної епохи та оцінка 0-100 із зазначенням моніторів, що знизили її, підсумок і останнє повідомлення $PKSHT. Обмежена форма живої команди: сокет не відкривається, нічого не записується в порт; шлюз, --listen та експортери телеметрії (Prometheus, OTLP, syslog) доступні лише з командного рядка. Лише консультативно; MODELLED. Див. docs/MARITIME-TRUST.md. |
assess_vessel_log |
Журнал NMEA 0183 судна (не більше 4 MiB) як пакетний прогін із сеансовим TOML, що визначає обмеження судна: модель оцінки та оцінка 0-100 для кожної епохи з її зниженнями (у відповіді зберігаються лічильники за станами та перші 200 епох зі зниженою якістю або без довіри). Лише консультативно; MODELLED. |
jammertest_import |
Читання опублікованого каталогу тестів Jammertest і плану передавання (NPRA/jammertest-plan, MIT) як запланованої істини (kshana jammertest import): слоти однієї тестової області стають подіями довіри до приймача з ідентифікатором каталогу та роком у кожній мітці. Це заплановані слоти, а не зафіксований час в ефірі; жодне контактне поле плану не читається. MODELLED. Див. docs/JAMMERTEST.md. |
jammertest_score |
Оцінювання журналу приймача за цим розкладом (kshana jammertest score): для кожного тесту затримка виявлення, пропущені тривоги та час відновлення, а також хибні тривоги поза всіма слотами. Текстові журнали як log, двійкові (ubx, sbf) як log_base64. Підписаний пакет потребує ключа: лише командний рядок. Лише консультативно; MODELLED. |
create_evidence_pack |
Підписаний пакет доказів для вікна журналу судна (kshana receiver-trust evidence): необроблені байти журналу для вікна, конфігурація, результати та причини для кожної епохи, сторінка підсумку та маніфест з усіма SHA-256 і ланцюжком хешів, підписаний за допомогою Ed25519. Зерно підпису ніколи не повертається і не записується в журнал; за його відсутності використовується одноразовий ключ, тож пакет доводить цілісність, а не особу підписанта. Технічний запис, а не юридичний висновок. Див. docs/EVIDENCE-PACKS.md. |
attach_evidence_timestamp |
Прив'язування токена позначки часу RFC 3161 (base64 байтів .tsr) до пакета в пам'яті (kshana evidence attach-timestamp); пакет із токеном і надалі має проходити перевірку. Підпис центру позначок часу не перевіряється: скористайтеся openssl ts -verify. |
verify_evidence_pack |
Перевірка пакета (kshana evidence verify): кожен хеш, ланцюжок, підпис, а з відкритим ключем підписанта та повним журналом - хто його підписав і що фрагмент походить із цього журналу. Називає кожну помилку та файл. Значення verdict - це verified (підписанта закріплено), intact-signer-not-pinned (усе збігається, але відкритий ключ не надано, тож підписанта не встановлено) або failed; require_timestamp позначає як невдалий пакет без токена позначки часу. |
generate_training_nmea |
Синтетичний місточковий NMEA 0183 для навчання екіпажу з TOML nmea-scenario (глушіння, відведення позиції, підміна часу, затримка повтору) з журналом інструктора (kshana-nmea-training/1); детермінований для кожного зерна. Лише текст: на рівні РЧ чи IQ нічого не синтезується і нічого не передається; ніколи не для живих навігаційних систем судна. Відповідь містить перші 2000 рядків. |
build_interference_map |
Карта завад ГНСС (GNSS) за звітами про позицію ADS-B або AIS у вигляді тексту CSV (не більше 4 MiB): один GeoJSON kshana-interference-map/v1 на добу UTC, лише агрегати (без ідентифікаторів, клітинки з менш ніж 5 різних повітряних суден або суден приховано), із вбудованою ліцензією набору даних. Знижена якість клітинки не вказує завади як причину; це не прогноз. MODELLED. Див. docs/INTERFERENCE-MAP.md. |
export_test_bench |
Рух транспортного засобу та події сценарію для лабораторного симулятора ГНСС (GNSS) (kshana bench-export): CSV і JSON руху, NMEA, шляхові точки та події у вигляді тексту, нічого не записується на диск. Види gnss-ins, jamming, gnss-sim. Без сигналу: ніщо з експортованого не є радіочастотним чи baseband-сигналом, не моделює і не формує його; сигнали забезпечують симулятор і його оператор. Див. docs/TEST-BENCH.md. |
create_round_trip_pack |
Підписаний лабораторний пакет кругового проходу (kshana evidence round-trip): сценарій, документ лабораторії kshana.test-conditions/1, журнал приймача та його оцінка за заявленими подіями, пов'язані хешем. Відхиляє умови та події оцінювання, що суперечать одні одним. Без сигналу; технічний запис, а не сертифікація. |
iq_sweep |
Відтворення одного запису IQ із робочого каталогу для кількох конструкцій петель стеження (kshana iq sweep): для кожної конструкції та PRN усталений джитер фази й коду, частки утримання та середнє C/N0. Не більше 256 каналів (конструкція, PRN) за виклик; інтервал має вкладатися в бюджет відліків. |
iq_monitor |
Запуск моніторів виявлення завад і спуфінгу над записом IQ у робочому каталозі (kshana iq monitor): монітори широкосмугової потужності та спектра, а також монітори C/N0 і якості сигналу для кожного супутника відносно вивченого базового рівня. У відповіді - назви та довжини рядів і до 200 подій; повний звіт на запит у вигляді файлів. Подія свідчить, що виміряна величина залишила базовий рівень, а не чому. MODELLED. |
iq_labfit |
Підгонка моделі втрати утримання петлі стеження до лабораторних прогонів (kshana iq labfit) зі сценарію iq-labfit, журнали якого вбудовані (text або base64; path відхиляється). Не читає і не записує жодного файлу. MODELLED. |
iq_test_conditions |
Перевірка файлу kshana.test-conditions/1, поданого як текст, і повернення розв'язаних умов разом з їхнім хешем. Лише вбудовано. |
compliance_report |
Зіставлення з публічними рамками, заповнене з документів результатів, поданих як текст (kshana compliance-report): для яких рядків шести рамок і стандартів стійкості (US DHS Resilient PNT framework v2.0, IMO ships, EASA aviation, NIS2 Article 21, EN 16803, NIST IR 8323r1) прогони підтримують докази для (supports evidence for), для яких - ні, і прогалина кожного рядка. Приймає runs з {label, result, scenario?} (не більше 64, разом 4 MiB). Статус означає, що прогони підтримують докази для можливостей рядка; це не висновок, що рамку виконано, і не оцінка чи схвалення будь-якого продукту. statement повертається з кожним звітом; показуйте його дослівно. MODELLED. Див. docs/compliance/. |
compliance_mapping |
Статичні таблиці зіставлення (або, з sources, документи-джерела, на які вони посилаються, з версіями та URL) у форматі Markdown, на чолі з тим самим твердженням. Прогони не потрібні. |
trust_telemetry |
Потік довіри (рядки JSON) або результат receiver-trust, відтворений як текст Prometheus, рядки syslog CEF чи LEEF, корисне навантаження OTLP JSON або рядки виявлення та стану Home Assistant MQTT, із кодувальниками kshana trust-telemetry. У відповіді текст: нічого не надсилається і не обслуговується, годинник не читається. Лише консультативно. |
fit_imu_log |
Параметри акселерометра та гіроскопа сценаріїв hybrid і fusion, підігнані за журналом нерухомого IMU (CSV або EuRoC) за девіацією Аллана, з готовою до вставлення таблицею [accel_classical] і SHA-256 журналу (kshana imu-fit). На вході текст, на виході JSON; MODELLED. |
list_standards_packs |
Пакети стандартів (kshana standards-pack list): оцінювані набори сценаріїв для профілів тестування рамки DHS Resilient PNT (рівні 1-4), IMO MSC.1/Circ.1575 та ICAO Doc 9849 Appendix F. |
run_standards_pack |
Один прогін пакета проти порогів, заявлених до прогону (kshana standards-pack run): кожен тест MET, NOT MET або NEEDS INPUT, з виміряними та очікуваними значеннями; передайте звіт у compliance_report, щоб побачити рядки. MODELLED; жодного продукту не оцінює. |
lunanet_afs_check |
LunaNet Augmented Forward Signal, перевірений за LNIS V5 AD1 Volume A (LSIS-AFS V1.0, 29 січня 2025): spec (реалізація проти надрукованих у документі кодових таблиць і розв'язаних прикладів), symbols (потік символів: шаблон синхронізації, SB1, FID, безперервність TOI) або generate (тестовий потік). LDPC і CRC-24Q підкадрів 2-4 не перевіряються; жоден сигнал не записується. |
score_benchmark |
Подання kshana-bench, оцінене за файлом істини, обидва як текст JSON (kshana bench score, bench/SPEC.md): файл результату з версією специфікації, розподілом, хешами входів і метриками завдання. MODELLED; описує журнал чи корпус, ніколи не продукт. |
render_leaderboard |
Файли результатів kshana-bench, відтворені як статична сторінка таблиці лідерів (текст HTML), кожен спершу перевіряється. |
trust_telemetry |
Потік довіри (рядки JSON) або результат receiver-trust, відтворений як текст Prometheus, рядки syslog CEF чи LEEF або корисне навантаження OTLP JSON, із кодувальниками kshana trust-telemetry. У відповіді текст: нічого не надсилається і не обслуговується, годинник не читається. Лише консультативно. |
route_exposure |
Частка довжини маршруту в клітинках однієї чи кількох карт завад зі зниженою якістю, без зниженої якості, неоцінених і неспостережених, за бажанням у межах діапазону дат. Неспостережені клітинки не є свідченням того, що маршрут вільний. |
iq_signals |
Налаштування шару IQ ГНСС (GNSS): назви сигналів, які приймають інструменти IQ, чи ввімкнено файлові інструменти IQ, робочий каталог і бюджет відліків на виклик. Викликайте його першим. |
iq_info |
Опис одного запису IQ (синфазна та квадратурна складові) у робочому каталозі без його обробки: формат, частота дискретизації, центральна частота, відліки, тривалість, файли даних і їхні розміри (kshana iq info). |
iq_scene |
Формування багатосупутникової сцени IQ ГНСС (GNSS) у робочий каталог (kshana iq scene): заявлені профілі Доплера/C/N0 або справжня геометрія за широкомовними ефемеридами з навігаційного файлу RINEX, з необов'язковим каналом поширення на рівні сигналу. У відповіді - записані файли та їхні розміри в байтах і перша епоха істини для кожного супутника. |
iq_acquire |
Захоплення за допомогою ШПФ (швидкого перетворення Фур'є) одного чи кількох PRN (псевдовипадкових шумових кодів) за записом (kshana iq acquire), за бажанням після ступенів вхідного тракту: для кожного PRN - захоплено чи ні, Доплер, фаза коду, пікова статистика та поріг; surface_out (один PRN) зберігає всю поверхню кореляції Доплер × фаза коду з уточненнями точного Доплера. |
iq_track |
Захоплення, а потім стеження банком DLL/PLL/FLL (петлі, що утримують затримку, фазу й частоту) (kshana iq track) із петлями з файлу kshana.loop-design/1 TOML у робочому каталозі (design) або вбудованою конструкцією та з необов'язковим повторним захопленням (reacquire): для кожного каналу - епохи, кінцевий Доплер, кінцеве та середнє C/N0, частки утримання фази й коду, утримується наприкінці, кінцевий стан утримання, хибні утримання та повторні захоплення, а також назва та хеш конструкції. Стеження потоково в обмеженій пам'яті; вивід для кожної епохи йде лише у файли (epochs_out: E/P/L, дискримінатори, стани петель, C/N0, стан утримання як .csv/.jsonl/.bin; events_out). |
iq_frontend |
Застосування ЦОС вхідного тракту приймача та пом'якшення завад (цифрова обробка сигналів: смуговий фільтр, режекторний фільтр, бланкування, ексцизія, АРП, квантувач) до запису і запис нового (kshana iq frontend). |
iq_campaign |
Запуск кампанії лабораторного відтворення (kshana iq campaign): записи, кожен із файлом умов тесту із відомою істиною лабораторії, × ланцюги вхідного тракту × конструкції петель. Кожну клітинку оцінюють за часом до втрати утримання, часом повторного захоплення, погіршенням C/N0 відносно заявленого J/S (поряд з аналітичним еталоном, позначеним MODELLED), частотою хибного утримання, джитером PLL/DLL і доступністю. Покроково й з можливістю відновлення: кожен виклик виконує відкладені клітинки, що вкладаються в бюджет відліків (або max_cells). |
iq_campaign_status |
Перебіг виконання вихідної теки кампанії: виконані та відкладені клітинки і дайджест після завершення. Лише читає файли. |
Кожен інструмент - тонка, точна обгортка над публічною функцією бібліотеки kshana; жодної нової логіки симуляції тут немає, тож агент виконує саме перевірений рушій.
Інструменти IQ ГНСС (GNSS): файли на вході, компактний JSON на виході#
Записи IQ сягають гігабайтів, тому інструменти iq_* ніколи не передають відліки через протокол. Вони дотримуються одного контракту:
- Робочий каталог. Сервер читає та записує файли IQ лише всередині теки, названої в
KSHANA_MCP_IQ_DIR. Кожен аргумент шляху відраховується від неї (абсолютний шлях має розв'язуватися всередині неї); входи розв'язуються через символічні посилання до перевірки, тека виходу вже має існувати всередині неї, а наявний вихід замінюється лише зoverwrite: true. Якщо змінну не задано, файлові інструменти IQ вимкнені та повідомляють, як їх увімкнути; усі інші інструменти не зачіпаються. - Бюджет відліків. Один виклик формує або обробляє не більше
KSHANA_MCP_IQ_MAX_SAMPLESкомплексних відліків (типово 50 000 000). У байтах це 400 МБ якcf32_le(8 байтів на комплексний відлік), 200 МБ якci16_le(4 байти) і 100 МБ якci8(2 байти); сцена записується якcf32_le, якщоformatне вказує іншого. Перевірка виконується до будь-якої роботи, а у відмові названо тривалість абоmax_seconds, що вкладається. - Компактні відповіді. Кожен інструмент відповідає одним підсумком JSON: піки захоплення, C/N0, стан утримання та кожен записаний файл зі шляхом і розміром у байтах. Таблиці для кожної епохи йдуть у файли
json_out/csv_out, які ви називаєте. - Невідомі аргументи відхиляються, а не ігноруються, тож помилка в назві параметра є помилкою.
Кожен інструмент виконує той самий шлях коду, що й kshana iq у командному рядку, у межах процесу. Шар лише програмний: він записує файли для програмних приймачів і не керує жодним радіообладнанням. Шар IQ не додає синтезу завад чи спуфера, і нічого ніколи не передається. (Окремий вид сценарію spectrum може записувати знімки IQ аналітичного глушника у файл.)
{
"mcpServers": {
"kshana": {
"command": "/Users/you/.cargo/bin/kshana-mcp",
"env": { "KSHANA_MCP_IQ_DIR": "/Users/you/iq" }
}
}
}
З образом Docker змонтуйте теку та спрямуйте змінну на неї: docker run --rm -i -v "$PWD/iq:/iq" -e KSHANA_MCP_IQ_DIR=/iq ghcr.io/ashfordeou/kshana-mcp.
Доступний кожен вид#
run_scenario розподіляє за kind сценарію, тож через нього виконується кожен вид, названий list_scenario_kinds. Це включає новіші родини, кожна з вбудованими прикладами, які агент може отримати:
| Можливість | Види | Приклад для початку |
|---|---|---|
| Спектр і водоспад | spectrum |
l-band-waterfall-jamming |
| Сонячна система | solar-system |
solar-system-tour |
| Орбітальні угруповання навколо будь-якого тіла | constellation-design, body-pnt |
lunar-relay-constellation, europa-surface-pnt |
| Кампанії: послідовні фази, перебори, Монте-Карло (випадкові ансамблі із зерном), композиція | campaign |
campaign-sweep-jammer-power |
| Навігація на низькій навколоземній орбіті (LEO): проєктування сигналу | leo-signal |
leo-band-trade |
| Навігація LEO: бюджет лінії проходу | leo-pass |
leo-pass-iridium |
| Навігація LEO: навігаційне повідомлення | leo-navmsg |
leo-navmsg-encode-decode |
| Навігація LEO: зведене позиціонування та час | leo-pvt, leo-ppp, ntn-positioning, leo-pnt-chain |
leo-doppler-positioning, leo-pnt-end-to-end |
list_example_scenarios з kind називає кожен вбудований приклад цього виду. Анімації, звіти та експорти для взаємодії не є видами: це подання прогону, і animate_scenario, report_scenario та export_interop повертають їх для будь-якого сценарію, до якого вони застосовні.
Не обслуговуються: набори досліджень (kshana --study <suite.toml>), бо набір називає сусідні файли сценаріїв на диску, а інструменти сценаріїв файлів не читають. Запускайте кожного учасника через run_scenario. (Інструменти IQ файли читають і записують, але лише в межах свого робочого каталогу.)
Встановлення сервера MCP#
Консультативне програмне забезпечення, не навігаційне обладнання із затвердженням типу: відповідальність за навігацію залишається на операторі. Сервер працює на вашому комп'ютері; нічого не надсилається до Ashforde OÜ.
Уривок із назвами сторонніх клієнтів ШІ тут опущено; він є в mcp/kshana-mcp/README.md на GitHub.
| Канал | Команда або кнопка | Потребує | Закріплена форма |
|---|---|---|---|
| Cursor (в один клік) | npx (Node) · Docker | Node або Docker | kshana-mcp@0.40.0 / ghcr.io/ashfordeou/kshana-mcp:0.40.0 |
| VS Code (в один клік) | npx (Node) · Docker · Insiders (npx) | Node або 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+ з uv або 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 | формула для v0.40.0 |
| Scoop | scoop bucket add ashforde https://github.com/ashfordeOU/scoop-bucket, потім scoop install kshana-mcp |
Scoop (Windows) | маніфест для 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 |
| Готовий двійковий файл | сторінка випуску: kshana-mcp (Linux x86-64), kshana-mcp-<target>[.exe], перевірено за допомогою SHA256SUMS і gh attestation verify |
немає | v0.40.0 |
| Реєстр MCP | io.github.ashfordeOU/kshana-mcp (знаходиться клієнтами з підтримкою реєстру) |
клієнт з підтримкою реєстру | 0.40.0 |
| Віддалений (streamable HTTP) | kshana-mcp --http 127.0.0.1:8080, власне розгортання: див. https://github.com/ashfordeOU/kshana/blob/main/docs/deploy/mcp-http.md |
ваш власний хост | v0.40.0 |
З локальної копії або git (розробка):
cd mcp/kshana-mcp && cargo install --path .
cargo install --git https://github.com/AshfordeOU/kshana kshana-mcp
Режим HTTP (власне розгортання)#
kshana-mcp --http 127.0.0.1:8080 обслуговує ті самі інструменти через потоковий HTTP за адресою /mcp. Він прив'язується лише до loopback; адреса не з loopback потребує --allow-remote і токена власника в KSHANA_MCP_HTTP_TOKEN; файлові інструменти IQ вимкнені; розмір, час і паралелізм запитів обмежені; заголовок CORS не надсилається. Kshana не розміщує кінцеву точку: ви розгортаєте її самостійно. Див. docs/deploy/mcp-http.md.
cargo install розміщує kshana-mcp у вашому PATH (зазвичай ~/.cargo/bin/kshana-mcp). Сервер спілкується через JSON-RPC (віддалений виклик процедур JSON) по stdio; журнали йдуть у stderr. Збірка з вихідного коду потребує набору інструментів Rust ≥ 1,88 (виправлений SDK rmcp 2.x потребує цього, як і бібліотека kshana); образу Docker це не потрібне.
Реєстрація у клієнті#
Практично кожен клієнт MCP використовує той самий блок конфігурації mcpServers - зареєструйте двійковий файл kshana-mcp за абсолютним шляхом:
{
"mcpServers": {
"kshana": {
"command": "/Users/you/.cargo/bin/kshana-mcp",
"args": [],
"env": {}
}
}
}
Або з образом Docker замість локального двійкового файлу (PATH не потрібен):
{
"mcpServers": {
"kshana": {
"command": "docker",
"args": ["run", "--rm", "-i", "ghcr.io/ashfordeou/kshana-mcp"]
}
}
}
Де міститься цей блок, залежить від клієнта:
- Cursor -
~/.cursor/mcp.json(глобально) або.cursor/mcp.json(для проєкту). - JetBrains AI Assistant / Junie - Settings → Tools → AI Assistant → Model Context Protocol → Add → As JSON, вставте блок, а потім повністю перезапустіть IDE (інтегроване середовище розробки).
- Настільні асистенти - більшість використовує
…_config.jsonз тією самою структуроюmcpServers; розташування файлу дивіться в документації вашого клієнта. - Агенти CLI - багато хто приймає той самий JSON через механізм
mcp add/mcp.json.
Завжди використовуйте абсолютний шлях до двійкового файлу. Для діагностики задайте RUST_LOG=debug в env (діагностика йде в stderr; stdout зарезервовано для протоколу JSON-RPC).
Спробуйте#
Після реєстрації запитуйте в асистента, наприклад:
- «Перелічи види сценаріїв Kshana.» →
list_scenario_kinds - «Покажи мені приклад спектра Kshana і запусти його.» →
list_example_scenarios,get_example_scenario,run_scenario - «Запусти сценарій holdover годинника Kshana з порогом 20 нс і 2-годинним відключенням ГНСС (GNSS); яким є квантовий і класичний holdover?» →
run_scenario - «Експортуй це угруповання GPS (глобальна система позиціонування) як SP3.» →
export_sp3 - «Дай мені таблицю realtime-frame-eop у форматі CSV.» →
export_table_csv - «Покажи той прохід Iridium на глобусі Cesium.» →
list_export_formats,export_interop - «Анімуй кампанію глушіння.» →
animate_scenario - «Дай мені звіт для цього прогону з його записом відтворюваності.» →
report_scenario - «Зроби однесекундну сцену GPS L1 з PRN 3 і 17, а потім захопи та відстеж її.» →
iq_signals,iq_scene,iq_acquire,iq_track
Примітка щодо проєктування - чому окремий крейт#
Сервер є окремим крейтом поза робочою областю зі власним Cargo.lock, тож офіційний Rust MCP SDK (набір для розробки програмного забезпечення) rmcp і його асинхронне середовище виконання ніколи не потрапляють у граф залежностей опублікованого крейту kshana: користувач бібліотеки чи Python не компілює сервер, який не запускає. (Спершу його відокремили, бо rmcp є edition 2024 і потребує rustc ≥ 1,85, тоді як головний крейт тоді обіцяв 1,75. Тепер і бібліотека, і цей сервер оголошують 1,88 - нижню межу виправленого з погляду безпеки rmcp 2.x та оновлених крейтів RustCrypto.) Безперервна інтеграція (CI) перевіряє цей крейт окремо - тести та cargo deny за його lock-файлом. Дерево ліцензій rmcp чисте (Apache-2.0/MIT/BSD), тож, на відміну від крейту перехресної перевірки xval/anise-frames, який він в іншому віддзеркалює, розділення не стосується ліцензування.
Ліцензія: лише AGPL-3.0, GNU Affero General Public License версії 3 лише (або комерційна ліцензія від Ashforde OÜ; див. LICENSING.md у репозиторії).