Maschinelle Übersetzung, nicht von einem Muttersprachler geprüft. Englisch ist die maßgebliche Fassung.

APIs und IntegrationenAuf GitHub bearbeitenQuelle: docs/deploy/mcp-http.md

kshana-mcp über HTTP betreiben (selbst gehostet)

Eine Passage, die KI-Clients von Drittanbietern nennt, ist hier weggelassen; sie steht in docs/deploy/mcp-http.md auf GitHub.

Kshana hostet keinen Endpunkt. Es gibt keinen gemeinsamen kshana-Server, auf den ein Client zeigen könnte. Sie betreiben es auf Ihrer eigenen Maschine, Ihrem eigenen Container oder Cloud-Projekt und besitzen seine Zugriffskontrolle und Kosten. Der Server 0.40.0 ist der in diesem Repository: Seine Werte tragen ihre Kennzeichnungen VALIDATED oder MODELLED genau wie über stdio.

Die sicheren Voreinstellungen#

Kontrolle Verhalten
Bind-Adresse Nur Loopback (127.0.0.1, ::1). Ein bloßer Port (--http 8080) bedeutet 127.0.0.1:8080.
Non-loopback Braucht --allow-remote und ein Bearer-Token in der Umgebungsvariable KSHANA_MCP_HTTP_TOKEN (16 Zeichen oder mehr). Ohne beides weigert sich der Server zu starten. Mit beidem gibt er eine Warnung aus, dass er über diese Maschine hinaus lauscht.
Authentifizierung Authorization: Bearer <token> bei jeder Anfrage, wenn ein Token gesetzt ist (es kann auch auf Loopback gesetzt werden). In konstanter Zeit verglichen. Fehlend oder falsch: 401.
Dateisystem Keines. Die IQ-Dateiwerkzeuge (iq_*) sind im HTTP-Modus abgeschaltet, was auch immer KSHANA_MCP_IQ_DIR sagt; jedes andere Werkzeug nimmt sein Szenario inline und lehnt eines ab, das eine Datei nennt. Kein Werkzeugargument liest oder schreibt einen Pfad.
Körpergröße --max-body-bytes, Standard 5 MiB (die Szenariogrenze ist 4 MiB). Darüber: 413, ob die Länge deklariert ist oder der Körper in Chunks gesendet wird.
Antwortzeit --request-timeout-secs, Standard 120. Darüber: 408. Dies begrenzt, wie lange ein Aufrufer wartet, nicht die Arbeit: Ein bereits laufender Lauf kann nicht gestoppt werden, daher läuft er nach dem 408 weiter und endet im Hintergrund.
Nebenläufigkeit --max-concurrent, Standard 8. Darüber hinaus erhält eine Anfrage sofort 503 mit Retry-After; keine wird eingereiht.
Arbeitspool Jeder Werkzeugaufruf läuft auf einem blockierenden Thread innerhalb eines Pools von --max-concurrent Plätzen, nie auf den asynchronen Workern, sodass ein langer Lauf den Server nicht daran hindern kann zu antworten. Ein Platz wird erst frei, wenn der Lauf selbst endet, nicht wenn der Aufrufer aufgibt: Aufgegebene Läufe können sich daher nicht über die Poolgröße hinaus ansammeln, und ein Aufruf, der den Pool voll findet, wird als ausgelastet abgelehnt.
Arbeitsbudget Ein Szenario, das weit mehr verlangt als die mitgelieferten Beispiele, wird vor dem Lauf abgelehnt: mehr als 1000 Monte-Carlo-Realisierungen (runs), ein Parameter-Gitter mit mehr als 1000 Knoten, mehr als 5000 Mitgliedsläufe (Gitterknoten mal Realisierungen) oder ein Zeitgitter mit mehr als 2 Millionen Epochen. Der Fehler nennt das Feld, das zu senken ist. Dasselbe Budget gilt über stdio; die Befehlszeile kshana hat keines.
CORS Es wird nie ein Access-Control-*-Header gesendet. Eine Anfrage mit einem Header Origin wird abgelehnt (403), es sei denn, er wird mit --allow-origin <scheme://host[:port]> genannt; * wird nicht akzeptiert.
Host-Header Geprüft gegen Loopback-Namen oder die Bind-Adresse plus jedes --allowed-host. Hinter einem Proxy oder bei einer Plattform-URL übergeben Sie --allowed-host your.domain. Alles andere: 403.
Sitzungen Keine. Jeder POST erhält eine JSON-Antwort; es wird keine Sitzungstabelle und kein Server-Sent-Event-Strom offen gehalten.

TLS wird nicht von kshana-mcp terminiert. Ist es über eine Maschine hinaus erreichbar, stellen Sie HTTPS davor (das TLS Ihrer Plattform oder einen Reverse Proxy) und halten Sie das Token geheim; ein Bearer-Token über einfaches HTTP kann auf der Leitung gelesen werden.

Lokal#

kshana-mcp --http 127.0.0.1:8080

Client-Konfiguration (ein URL-Client; fügen Sie den Header nur hinzu, wenn ein Token gesetzt ist):

{ "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

Im Container muss der Server auf 0.0.0.0 lauschen, daher braucht er --allow-remote und das Token. Das Veröffentlichen des Ports als 127.0.0.1:8080:8080 hält ihn auf Ihrer Maschine; lassen Sie das 127.0.0.1: nur weg, wenn Sie ihn freigeben wollen, und terminieren Sie dann TLS davor. Vorlagen für docker compose sowie Fly.io und Cloud Run stehen in mcp-http/.

Vorlagen (Sie setzen sie ein; Kshana betreibt keine)#

Jede führt das veröffentlichte Image aus, setzt --allowed-host auf den Hostnamen der Plattform, den Sie in der Datei ersetzen, und verlässt sich für HTTPS auf die Plattform.

Legen Sie auf der Plattform eine CPU- und Speichergrenze fest#

Timeout, Pool und Budget begrenzen, wie viel Arbeit zugelassen wird, aber ein zugelassener Aufruf kann dennoch lange einen Kern nutzen, und ein großes Ergebnis kann Hunderte Megabyte nutzen. Setzen Sie auch am Container eine harte Grenze: Die Vorlagen fordern 2 CPUs und 1 GiB (cpus und mem_limit in Compose, [[vm]] in Fly, resources.limits in Cloud Run). Halten Sie --max-concurrent auf oder unter der CPU-Anzahl.

Was es nicht ist#

  • Kein mandantenfähiger Dienst. Jeder, der das Token hat, führt Simulationen auf Ihrer Hardware aus; es gibt keine Quoten je Benutzer über die obigen Grenzen hinaus.
  • Beratend, keine typzugelassene Navigationsausrüstung: Der Betreiber bleibt für die Navigation verantwortlich. Die Ausgaben des Simulators sind modellierte oder validierte Werte für die Analyse, wie überall sonst in Kshana.