Köra kshana-mcp över HTTP (egen drift)
Ett stycke som nämner AI-klienter från tredje part är utelämnat här; det finns i docs/deploy/mcp-http.md på GitHub.
Kshana tillhandahåller ingen slutpunkt. Det finns ingen delad kshana-server att peka en klient mot. Du kör den på din egen maskin, i din egen container eller i ditt eget molnprojekt, och du äger dess åtkomstkontroll och kostnad. Servern 0.40.0 är den som finns i det här förrådet: dess siffror bär sina etiketter VALIDATED eller MODELLED precis som över stdio.
De säkra standardvärdena#
| Kontroll | Beteende |
|---|---|
| Bindningsadress | Endast loopback (127.0.0.1, ::1). En ensam port (--http 8080) betyder 127.0.0.1:8080. |
| Non-loopback | Kräver --allow-remote och en bearer-token i miljövariabeln KSHANA_MCP_HTTP_TOKEN (16 tecken eller fler). Utan båda vägrar servern att starta. Med båda skriver den ut en varning om att den lyssnar utanför den här maskinen. |
| Autentisering | Authorization: Bearer <token> på varje begäran när en token är satt (den kan sättas på loopback också). Jämförs i konstant tid. Saknas den eller är fel: 401. |
| Filsystem | Ingen. IQ-filverktygen (iq_*) är avstängda i HTTP-läge vad KSHANA_MCP_IQ_DIR än säger; varje annat verktyg tar sitt scenario inbäddat och vägrar ett som anger en fil. Inget verktygsargument läser eller skriver en sökväg. |
| Kroppsstorlek | --max-body-bytes, standard 5 MiB (scenariotaket är 4 MiB). Över den: 413, oavsett om längden är deklarerad eller kroppen är chunkad. |
| Svarstid | --request-timeout-secs, standard 120. Över den: 408. Det här begränsar hur länge en anropare väntar, inte arbetet: en körning som redan pågår kan inte stoppas, så den fortsätter efter 408 och slutförs i bakgrunden. |
| Samtidighet | --max-concurrent, standard 8. Utöver den får en begäran 503 med Retry-After direkt; ingen köas. |
| Arbetspool | Varje verktygsanrop körs på en blockerande tråd i en pool med --max-concurrent platser, aldrig på de asynkrona arbetarna, så en lång körning kan inte hindra servern från att svara. En plats frigörs först när själva körningen slutar, inte när anroparen ger upp: övergivna körningar kan därför inte hopa sig över poolens storlek, och ett anrop som finner poolen full avvisas som upptaget. |
| Arbetsbudget | Ett scenario som ber om mycket mer än de medföljande exemplen avvisas innan det körs: fler än 1000 Monte Carlo-realisationer (runs), ett parameterrutnät med fler än 1000 noder, fler än 5000 medlemskörningar (rutnätsnoder gånger realisationer), eller ett tidsrutnät med fler än 2 miljoner epoker. Felet anger vilket fält som ska sänkas. Samma budget gäller över stdio; kommandoraden kshana har ingen. |
| CORS | Något Access-Control-*-huvud skickas aldrig. En begäran som bär ett Origin-huvud avvisas (403) om det inte anges med --allow-origin <scheme://host[:port]>; * accepteras inte. |
| Host-huvud | Kontrolleras mot loopback-namn, eller bindningsadressen plus varje --allowed-host. Bakom en proxy eller på en plattforms-URL, ange --allowed-host your.domain. Allt annat: 403. |
| Sessioner | Inga. Varje POST får ett JSON-svar; ingen sessionstabell och ingen server-sent-event-ström hålls öppen. |
TLS avslutas inte av kshana-mcp. När den kan nås utanför en enda maskin, sätt HTTPS framför den (din plattforms TLS, eller en omvänd proxy) och håll token hemlig; en bearer-token över vanlig HTTP kan läsas på tråden.
Lokalt#
kshana-mcp --http 127.0.0.1:8080
Klientkonfiguration (en URL-klient; lägg till huvudet bara när en token är satt):
{ "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
Inuti containern måste servern lyssna på 0.0.0.0, så den behöver --allow-remote och token. Att publicera porten som 127.0.0.1:8080:8080 håller den på din maskin; ta bort 127.0.0.1: bara när du menar att exponera den, och avsluta då TLS framför den. Mallar för docker compose och Fly.io och Cloud Run finns i mcp-http/.
Mallar (du driftsätter dem; Kshana kör inga)#
mcp-http/docker-compose.ymlmcp-http/fly.toml: sätt token medfly secrets set KSHANA_MCP_HTTP_TOKEN=...mcp-http/cloudrun.service.yaml: hämta token från Secret Manager
Var och en kör den publicerade avbilden, sätter --allowed-host till plattformens värdnamn som du ersätter i filen, och förlitar sig på plattformen för HTTPS.
Sätt en CPU- och minnesgräns på plattformen#
Tidsgränsen, poolen och budgeten begränsar hur mycket arbete som släpps in, men ett insläppt anrop kan ändå använda en kärna under lång tid och ett stort resultat kan använda hundratals megabyte. Sätt en hård gräns på containern också: mallarna ber om 2 CPU:er och 1 GiB (cpus och mem_limit i Compose, [[vm]] i Fly, resources.limits i Cloud Run). Håll --max-concurrent vid eller under antalet CPU:er.
Vad den inte är#
- Ingen tjänst för flera hyresgäster. Den som har token kör simuleringar på din hårdvara; det finns inga kvoter per användare utöver gränserna ovan.
- Rådgivande, inte typgodkänd navigationsutrustning: operatören är fortsatt ansvarig för navigeringen. Simulatorns utdata är modellerade eller validerade siffror för analys, som överallt annars i Kshana.