机器翻译,未经母语人士审校。以英文版为准。

API与集成在GitHub上编辑来源:docs/deploy/mcp-http.md

通过HTTP运行kshana-mcp(自行托管)

此处省略了一段涉及第三方AI客户端的内容;它见于GitHub上的docs/deploy/mcp-http.md。

Kshana不托管任何端点。没有可供客户端指向的共享kshana服务器。你在自己的机器、容器或云项目上运行它,并自行负责其访问控制和成本。0.40.0服务器就是本仓库中的那个:其数字所带的VALIDATED或MODELLED标签,与通过stdio运行时完全相同。

安全的默认设置#

控制项 行为
绑定地址 仅限环回(127.0.0.1、::1)。单独的端口(--http 8080)表示127.0.0.1:8080。
Non-loopback 需要--allow-remote 以及环境变量KSHANA_MCP_HTTP_TOKEN中的bearer令牌(16个字符或更长)。两者缺一,服务器拒绝启动。两者都有时,它会打印一条警告,说明正在监听本机以外的地址。
身份验证 设置了令牌时,每个请求都带有Authorization: Bearer <token>(在环回地址上也可以设置)。以恒定时间比较。缺失或错误:401。
文件系统 无。无论KSHANA_MCP_IQ_DIR如何设置,IQ文件工具(iq_*)在HTTP模式下都处于关闭状态;其他所有工具都以内联方式接收其场景,并拒绝指向文件的场景。没有任何工具参数会读取或写入路径。
请求体大小 --max-body-bytes,默认5 MiB(场景上限为4 MiB)。超过时:413,无论长度是已声明的还是请求体为分块传输。
答复时间 --request-timeout-secs,默认120。超过时:408。这限制的是调用方等待多久,而不是工作本身:已经开始的运行无法停止,因此在408之后它会继续运行,并在后台完成。
并发 --max-concurrent,默认8。超出之后,请求会立即得到503并附带Retry-After;不排队。
工作池 每次工具调用都在一个含--max-concurrent个槽位的池内的阻塞线程上运行,绝不在异步工作线程上运行,因此长时间的运行不会使服务器无法应答。槽位只在运行本身结束时才释放,而不是在调用方放弃时:因此被放弃的运行不会堆积到超过池的大小,而遇到池已满的调用会以繁忙为由被拒绝。
工作预算 要求远超随附示例的场景在运行之前即被拒绝:超过1000次蒙特卡罗实现(runs)、超过1000个节点的参数网格、超过5000次成员运行(网格节点数乘以实现次数),或超过2百万个历元的时间网格。错误信息会指明应调低的字段。同一预算在stdio上同样适用;kshana命令行则没有该限制。
CORS 绝不会发送Access-Control-*头。带有Origin头的请求会被拒绝(403),除非用--allow-origin <scheme://host[:port]>指明;不接受*。
Host头 与环回名称,或绑定地址加上每个--allowed-host进行核对。在代理之后或使用平台URL时,请传入--allowed-host your.domain。其他任何情形:403。
会话 无。每个POST都得到一个JSON答复;不保留会话表,也不保持打开任何服务器发送事件流。

kshana-mcp不终止TLS。当它可以在一台机器之外被访问时,请在前面放置HTTPS(你所在平台的TLS,或反向代理),并妥善保管令牌;经明文HTTP传输的bearer令牌可以在线路上被读取。

本地#

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其他各处一样,仿真器的输出是供分析使用的由模型计算得出或经独立核对的数字。