Kør kshana-mcp over HTTP (selvhostet)
Et afsnit, der nævner AI-klienter fra tredjeparter, er udeladt her; det findes i docs/deploy/mcp-http.md på GitHub.
Kshana hoster ikke et endpoint. Der er ingen fælles kshana-server, som en klient kan pege på. Du kører den på din egen maskine, i din egen container eller i dit eget cloudprojekt, og du ejer adgangskontrollen og omkostningerne. Serveren i version 0.40.0 er den, der ligger i dette repository: dens tal bærer deres mærkater VALIDATED eller MODELLED på præcis samme måde som over stdio.
De sikre standardindstillinger#
| Kontrol | Adfærd |
|---|---|
| Bind-adresse | Kun loopback (127.0.0.1, ::1). En bar port (--http 8080) betyder 127.0.0.1:8080. |
| Non-loopback | Kræver --allow-remote og et bearer-token i miljøvariablen KSHANA_MCP_HTTP_TOKEN (16 tegn eller flere). Uden begge nægter serveren at starte. Med begge udskriver den en advarsel om, at den lytter ud over denne maskine. |
| Autentificering | Authorization: Bearer <token> på hver forespørgsel, når et token er sat (det kan også sættes på loopback). Sammenlignes i konstant tid. Manglende eller forkert: 401. |
| Filsystem | Ingen. IQ-filværktøjerne (iq_*) er slået fra i HTTP-tilstand, uanset hvad KSHANA_MCP_IQ_DIR siger; ethvert andet værktøj tager sit scenarie inline og afviser et, der nævner en fil. Intet værktøjsargument læser eller skriver en sti. |
| Body-størrelse | --max-body-bytes, standard 5 MiB (scenariegrænsen er 4 MiB). Over den: 413, uanset om længden er angivet, eller body'en sendes i bidder. |
| Svartid | --request-timeout-secs, standard 120. Over den: 408. Det afgrænser, hvor længe en kalder venter, ikke arbejdet: en kørsel, der allerede er i gang, kan ikke stoppes, så den fortsætter efter 408 og afsluttes i baggrunden. |
| Samtidighed | --max-concurrent, standard 8. Ud over den får en forespørgsel straks 503 med Retry-After; ingen står i kø. |
| Arbejdspulje | Ethvert værktøjskald kører på en blokerende tråd i en pulje med --max-concurrent pladser, aldrig på de asynkrone arbejdere, så en lang kørsel ikke kan hindre serveren i at svare. En plads frigives først, når selve kørslen slutter, ikke når kalderen giver op: forladte kørsler kan derfor ikke hobe sig op ud over puljens størrelse, og et kald, der finder puljen fuld, afvises som optaget. |
| Arbejdsbudget | Et scenarie, der beder om langt mere end de medfølgende eksempler, afvises, før det kører: mere end 1000 Monte Carlo-realisationer (runs), et parametergitter med mere end 1000 knudepunkter, mere end 5000 medlemskørsler (gitterknudepunkter gange realisationer) eller et tidsgitter med mere end 2 millioner epoker. Fejlen angiver det felt, der skal sænkes. Det samme budget gælder over stdio; kommandolinjen kshana har intet. |
| CORS | Der sendes aldrig en Access-Control-*-header. En forespørgsel med en Origin-header afvises (403), medmindre den er angivet med --allow-origin <scheme://host[:port]>; * accepteres ikke. |
| Host-header | Kontrolleres mod loopback-navne eller bind-adressen plus hver --allowed-host. Bag en proxy eller på en platforms URL skal du angive --allowed-host your.domain. Alt andet: 403. |
| Sessioner | Ingen. Hver POST får et JSON-svar; der føres ingen sessionstabel, og ingen server-sent event-strøm holdes åben. |
TLS afsluttes ikke af kshana-mcp. Når den kan nås ud over én maskine, skal du sætte HTTPS foran den (din platforms TLS eller en reverse proxy) og holde tokenet hemmeligt; et bearer-token over almindelig HTTP kan aflæses på linjen.
Lokal#
kshana-mcp --http 127.0.0.1:8080
Klientkonfiguration (en URL-klient; tilføj kun headeren, når et token er sat):
{ "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
Inde i containeren skal serveren lytte på 0.0.0.0, så den kræver --allow-remote og tokenet. Hvis du publicerer porten som 127.0.0.1:8080:8080, bliver den på din maskine; fjern 127.0.0.1: kun, når du vil eksponere den, og afslut så TLS foran den. docker compose- samt Fly.io- og Cloud Run-skabeloner findes i mcp-http/.
Skabeloner (du udruller dem selv; Kshana kører ingen)#
mcp-http/docker-compose.ymlmcp-http/fly.toml: sæt tokenet medfly secrets set KSHANA_MCP_HTTP_TOKEN=...mcp-http/cloudrun.service.yaml: hent tokenet fra Secret Manager
Hver af dem kører det publicerede image, sætter --allowed-host til det værtsnavn på platformen, som du indsætter i filen, og bruger platformen til HTTPS.
Sæt en CPU- og hukommelsesgrænse på platformen#
Timeout, pulje og budget afgrænser, hvor meget arbejde der lukkes ind, men ét indlukket kald kan stadig bruge en kerne i lang tid, og et stort resultat kan bruge hundredvis af megabyte. Sæt også en hård grænse på containeren: skabelonerne beder om 2 CPU'er og 1 GiB (cpus og mem_limit i Compose, [[vm]] i Fly, resources.limits i Cloud Run). Hold --max-concurrent på eller under antallet af CPU'er.
Hvad den ikke er#
- Ikke en tjeneste med flere lejere. Enhver, der har tokenet, kører simuleringer på din hardware; der er ingen kvoter pr. bruger ud over grænserne ovenfor.
- Vejledende, ikke typegodkendt navigationsudstyr: operatøren er fortsat ansvarlig for navigationen. Simulatorens output er modellerede eller validerede tal til analyse, som overalt ellers i Kshana.