Uruchamianie kshana-mcp przez HTTP (własny hosting)
Fragment wymieniający zewnętrznych klientów AI został tu pominięty; jest w docs/deploy/mcp-http.md na GitHubie.
Kshana nie udostępnia punktu końcowego. Nie ma wspólnego serwera kshana, na który można by wskazać klienta. Uruchamia się go na własnej maszynie, w kontenerze lub w projekcie chmurowym, a kontrola dostępu i koszty leżą po stronie uruchamiającego. Serwer 0.40.0 to ten z tego repozytorium: jego wartości mają etykiety VALIDATED lub MODELLED dokładnie tak samo jak przez stdio.
Bezpieczne ustawienia domyślne#
| Mechanizm | Zachowanie |
|---|---|
| Adres nasłuchu | Tylko pętla zwrotna (127.0.0.1, ::1). Sam port (--http 8080) oznacza 127.0.0.1:8080. |
| Non-loopback | Wymaga --allow-remote oraz tokenu bearer w zmiennej środowiskowej KSHANA_MCP_HTTP_TOKEN (co najmniej 16 znaków). Bez obu serwer odmawia uruchomienia. Z obiema wypisuje ostrzeżenie, że nasłuchuje poza tą maszyną. |
| Uwierzytelnianie | Authorization: Bearer <token> w każdym żądaniu, gdy ustawiono token (można go ustawić także na pętli zwrotnej). Porównywany w stałym czasie. Brak lub błąd: 401. |
| System plików | Brak. Narzędzia do plików IQ (iq_*) są w trybie HTTP wyłączone niezależnie od wartości KSHANA_MCP_IQ_DIR; każde inne narzędzie przyjmuje scenariusz w treści żądania i odrzuca ten, który wskazuje plik. Żaden argument narzędzia nie odczytuje ani nie zapisuje ścieżki. |
| Rozmiar treści | --max-body-bytes, domyślnie 5 MiB (limit scenariusza to 4 MiB). Po przekroczeniu: 413, niezależnie od tego, czy długość jest zadeklarowana, czy treść jest przesyłana we fragmentach. |
| Czas odpowiedzi | --request-timeout-secs, domyślnie 120. Po przekroczeniu: 408. Ogranicza to czas oczekiwania wywołującego, a nie samą pracę: trwającego już przebiegu nie można zatrzymać, więc po 408 toczy się dalej i kończy w tle. |
| Współbieżność | --max-concurrent, domyślnie 8. Ponad ten limit żądanie od razu dostaje 503 z Retry-After; żadne nie czeka w kolejce. |
| Pula robocza | Każde wywołanie narzędzia działa w wątku blokującym w puli --max-concurrent miejsc, nigdy w wątkach asynchronicznych, więc długi przebieg nie może zatrzymać odpowiadania serwera. Miejsce zwalnia się dopiero wtedy, gdy kończy się sam przebieg, a nie wtedy, gdy wywołujący zrezygnuje: porzucone przebiegi nie mogą więc narosnąć ponad rozmiar puli, a wywołanie, które zastaje pulę pełną, jest odrzucane jako zajęte. |
| Budżet pracy | Scenariusz żądający znacznie więcej niż dołączone przykłady jest odrzucany przed uruchomieniem: ponad 1000 realizacji Monte Carlo (runs), siatka parametrów licząca ponad 1000 węzłów, ponad 5000 przebiegów składowych (węzły siatki razy realizacje) albo siatka czasu licząca ponad 2 miliony epok. Błąd wskazuje pole do zmniejszenia. Ten sam budżet obowiązuje przez stdio; wiersz poleceń kshana go nie ma. |
| CORS | Nagłówek Access-Control-* nigdy nie jest wysyłany. Żądanie z nagłówkiem Origin jest odrzucane (403), chyba że wskazano go przez --allow-origin <scheme://host[:port]>; * nie jest akceptowane. |
| Nagłówek Host | Sprawdzany względem nazw pętli zwrotnej albo adresu nasłuchu plus każdego --allowed-host. Za proxy lub pod adresem URL platformy podaj --allowed-host your.domain. Cokolwiek innego: 403. |
| Sesje | Brak. Każdy POST dostaje odpowiedź JSON; nie jest utrzymywana tabela sesji ani otwarty strumień zdarzeń wysyłanych przez serwer. |
TLS nie jest kończony przez kshana-mcp. Gdy serwer jest osiągalny poza jedną maszyną, postaw przed nim HTTPS (TLS platformy lub reverse proxy) i trzymaj token w tajemnicy; token bearer przesyłany zwykłym HTTP można odczytać w sieci.
Lokalnie#
kshana-mcp --http 127.0.0.1:8080
Konfiguracja klienta (klient z adresem URL; nagłówek dodaj tylko wtedy, gdy ustawiono token):
{ "mcpServers": { "kshana": { "url": "http://127.0.0.1:8080/mcp",
"headers": { "Authorization": "Bearer ${KSHANA_MCP_HTTP_TOKEN}" } } } }
Docker#
export KSHANA_MCP_HTTP_TOKEN="$(openssl rand -hex 32)"
docker run --rm -p 127.0.0.1:8080:8080 -e KSHANA_MCP_HTTP_TOKEN \
ghcr.io/ashfordeou/kshana-mcp:0.40.0 \
--http 0.0.0.0:8080 --allow-remote --allowed-host localhost:8080 --allowed-host 127.0.0.1:8080
Wewnątrz kontenera serwer musi nasłuchiwać na 0.0.0.0, więc potrzebuje --allow-remote i tokenu. Opublikowanie portu jako 127.0.0.1:8080:8080 zachowuje go na Twojej maszynie; usuń 127.0.0.1: tylko wtedy, gdy zamierzasz go udostępnić, a wtedy zakończ TLS przed nim. Szablony docker compose oraz Fly.io i Cloud Run są w mcp-http/.
Szablony (wdrażasz je samodzielnie; Kshana żadnego nie uruchamia)#
mcp-http/docker-compose.ymlmcp-http/fly.toml: token ustaw poleceniemfly secrets set KSHANA_MCP_HTTP_TOKEN=...mcp-http/cloudrun.service.yaml: token pobierz z Secret Managera
Każdy uruchamia opublikowany obraz, ustawia --allowed-host na nazwę hosta platformy, którą podmieniasz w pliku, i polega na platformie w kwestii HTTPS.
Ustaw limit CPU i pamięci na platformie#
Limit czasu, pula i budżet ograniczają, ile pracy zostaje przyjęte, ale jedno przyjęte wywołanie nadal może długo zajmować rdzeń, a duży wynik może zająć setki megabajtów. Nałóż też twardy limit na kontener: szablony żądają 2 CPU i 1 GiB (cpus i mem_limit w Compose, [[vm]] we Fly, resources.limits w Cloud Run). Wartość --max-concurrent utrzymuj na poziomie liczby CPU lub niższym.
Czym nie jest#
- Nie jest usługą wielodostępną. Każdy, kto ma token, uruchamia symulacje na Twoim sprzęcie; poza powyższymi limitami nie ma żadnych limitów na użytkownika.
- Wyłącznie doradczo, nie jest to sprzęt nawigacyjny z zatwierdzeniem typu: za nawigację nadal odpowiada operator. Wyniki symulatora to obliczone z modelu lub sprawdzone względem niezależnego wzorca wartości do analizy, jak wszędzie indziej w Kshana.