機械翻訳であり、ネイティブスピーカーによる確認は行われていません。英語版が基準です。

API とインテグレーションGitHub で編集ソース:docs/deploy/mcp-http.md

kshana-mcp を HTTP で実行する(セルフホスト)

サードパーティの AI クライアントに触れた一節は、ここでは省いています。GitHub のdocs/deploy/mcp-http.mdにあります。

Kshana はエンドポイントをホストしません。クライアントの接続先となる共有のkshanaサーバーはありません。ご自身のマシン、コンテナ、またはクラウドプロジェクトで実行し、そのアクセス制御とコストはご自身で管理します。0.40.0 のサーバーは、このリポジトリにあるものです。その数値には、stdio の場合とまったく同じように、VALIDATED または MODELLED のラベルが付きます。

安全な既定値#

制御 動作
バインドアドレス ループバックのみ(127.0.0.1、::1)。ポート番号だけを指定した場合(--http 8080)は、127.0.0.1:8080の意味になります。
Non-loopback --allow-remoteと、KSHANA_MCP_HTTP_TOKEN環境変数のベアラートークン(16 文字以上)の両方が必要です。両方がなければ、サーバーは起動を拒否します。両方がある場合は、このマシンの外でも待ち受けている旨の警告を出力します。
認証 トークンが設定されている場合は、すべてのリクエストにAuthorization: Bearer <token>が必要です(ループバックでも設定できます)。比較は一定時間で行われます。欠けている、または誤っている場合:401。
ファイルシステム なし。IQ ファイルツール(iq_*)は、KSHANA_MCP_IQ_DIRの設定にかかわらず HTTP モードでは無効です。ほかのすべてのツールは、シナリオをインラインで受け取り、ファイルを指定したシナリオは拒否します。パスを読み書きするツール引数はありません。
ボディのサイズ --max-body-bytes、既定は 5 MiB(シナリオの上限は 4 MiB)。超過した場合:413。長さが宣言されている場合も、ボディがチャンク転送の場合も同様です。
応答時間 --request-timeout-secs、既定は 120。超過した場合:408。これが制限するのは呼び出し元が待つ時間であり、処理そのものではありません。すでに進行中の実行は止められないため、408の後も続行し、バックグラウンドで完了します。
同時実行数 --max-concurrent、既定は 8。これを超えるとリクエストは直ちにRetry-Afterつきの503を受け取ります。キューに入るものはありません。
ワークプール すべてのツール呼び出しは、非同期ワーカーではなく、--max-concurrentスロットのプール内のブロッキングスレッドで実行されるため、長い実行がサーバーの応答を止めることはありません。スロットは、呼び出し元が諦めたときではなく、実行そのものが終わったときにだけ解放されます。そのため、放棄された実行がプールのサイズを超えて溜まることはなく、プールが満杯のときの呼び出しは、ビジーとして拒否されます。
作業の予算 同梱の例よりはるかに多くを要求するシナリオは、実行前に拒否されます。1000 を超えるモンテカルロ実現数(runs)、1000 ノードを超えるパラメーターグリッド、5000 を超えるメンバー実行数(グリッドノード数と実現数の積)、または 2 百万エポックを超える時間グリッドが対象です。エラーには、下げるべきフィールドが示されます。同じ予算は stdio でも適用されます。kshanaコマンドラインには予算がありません。
CORS Access-Control-*ヘッダーは一切送信されません。Originヘッダーを持つリクエストは、--allow-origin <scheme://host[:port]>で指定されていない限り拒否されます(403)。*は受け付けられません。
Host ヘッダー ループバック名、またはバインドアドレスと各--allowed-hostに対して検査されます。プロキシの背後やプラットフォームの URL では、--allowed-host your.domainを指定してください。それ以外:403。
セッション なし。すべての POST には JSON の応答が返され、セッションテーブルも、サーバー送信イベントのストリームも、開いたままにされることはありません。

TLS はkshana-mcpでは終端されません。一台のマシンの外から到達できる場合は、その前段に HTTPS(プラットフォームの TLS、またはリバースプロキシ)を置き、トークンを秘密にしてください。平文の HTTP 上のベアラートークンは、通信経路上で読み取られる可能性があります。

ローカル#

kshana-mcp --http 127.0.0.1:8080

クライアント設定(URL クライアント。ヘッダーはトークンを設定した場合にのみ追加):

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

コンテナ内では、サーバーは0.0.0.0で待ち受ける必要があるため、--allow-remoteとトークンが必要です。ポートを127.0.0.1:8080:8080として公開すると、ポートはご自身のマシンにとどまります。公開するつもりのときにだけ127.0.0.1:を外し、そのうえでその前段で TLS を終端してください。docker compose、Fly.io、Cloud Run のテンプレートはmcp-http/にあります。

テンプレート(デプロイはご自身で行います。Kshana は何も実行しません)#

いずれも、公開済みのイメージを実行し、--allowed-hostをファイル内で置き換えるプラットフォームのホスト名に設定し、HTTPS はプラットフォームに任せます。

プラットフォームで CPU とメモリの上限を設定する#

タイムアウト、プール、予算は、受け入れる作業量を制限しますが、受け入れられた一回の呼び出しが長時間コアを使うことや、大きな結果が数百メガバイトを使うことは起こりえます。コンテナにも厳格な上限を設けてください。テンプレートは 2 CPU と 1 GiB を要求します(Compose ではcpusとmem_limit、Fly では[[vm]]、Cloud Run ではresources.limits)。--max-concurrentは CPU 数以下に保ってください。

対象外のもの#

  • マルチテナントのサービスではありません。トークンを持つ人は誰でも、あなたのハードウェアでシミュレーションを実行できます。上記の制限以外に、ユーザーごとのクォータはありません。
  • 助言用であり、型式承認を受けた航法装置ではありません。航行の責任は引き続き運用者にあります。シミュレーターの出力は、Kshana のほかの箇所と同様に、解析のための、モデルから計算した、または独立した参照と照合して確認した数値です。