
SentinelOne (Purple)
io.github.wyre-technology由 GitHub 账号 wyre-technology 发布v1.0.6更新于 Oct 24, 2026
Multitenant Streamable HTTP wrapper for the SentinelOne purple-mcp server.
概览
多租户 HTTP 包装层,为 SentinelOne purple-mcp 服务器提供前端,让网关以请求头方式传入各租户的 SentinelOne 凭据。
- 可以做什么
- 通过单一 Streamable HTTP 端点(POST /mcp)以及无需认证的 GET /health 暴露上游 SentinelOne purple-mcp 的工具。
- 按请求从请求头读取 SentinelOne 凭据(X-S1-API-Token 与 X-S1-Console-URL,兼容旧版 x-purplemcp-* 别名),而非环境变量。
- 为每组租户凭据在私有回环端口上惰性启动一个独立的 purple-mcp 子进程,并转发请求体。
- 按可配置的空闲超时回收租户子进程,并限制并发租户数量。
- 在读取任何租户凭据之前校验服务间 HMAC 证明请求头。
- 适用场景
- 适用于运行多租户 MCP 网关、需要用单个容器服务多个 SentinelOne 控制台的运维场景,每个请求自带所属组织的凭据。它是网关侧代理而非直接的 SentinelOne 客户端,单用户桌面环境通常用不上。
- 运行要求
- 以本地容器镜像运行,内含 Node/Fastify 代理与打包的 purple-mcp Python 环境。启动必须设置 CONDUIT_S2S_SECRET,每个请求需带 X-Gateway-S2S、X-S1-API-Token 和 X-S1-Console-URL 请求头。可选配置包括 PORT、MCP_HTTP_HOST、IDLE_EVICT_MS、SPAWN_READY_TIMEOUT_MS、MAX_CHILDREN、LOG_LEVEL 和 PURPLE_MCP_DIR。需要能访问 SentinelOne 控制台的网络。
安装
在 SourceWeft 中
- 打开 控制台中的 SentinelOne (Purple),将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
sentinelone-mcp
Multitenant Streamable HTTP wrapper for sentinel-one/purple-mcp, built so the wyre-technology MCP gateway can forward per-tenant SentinelOne credentials as HTTP headers.
Why
purple-mcp is a great first-party MCP server, but it reads its SentinelOne console token + URL from environment variables at process startup, which makes it single-tenant per container. Our gateway is multi-tenant: every request carries the calling org's credentials as HTTP headers, and the vendor container has to translate those headers into something the upstream understands.
This image bundles purple-mcp plus a small Node/Fastify proxy. The proxy:
- Listens on
:8080withPOST /mcpandGET /health. - Requires a valid
X-Gateway-S2Sproof, then readsX-S1-API-TokenandX-S1-Console-URLfrom that request (legacyx-purplemcp-token/x-purplemcp-base-urlstill accepted). A request missing either the token or the console URL, after per-field fallback, gets 401, which Conduit's vendor-monitor treats as reachable but auth-gated. There is no fallback toPURPLEMCP_CONSOLE_*in the environment. - Lazily spawns one
purple-mcp --mode streamable-httpchild per(token, base-url)tenant on a private loopback port, with the right env vars set. - Proxies the request body to that child and streams the response back.
- Evicts idle children after 60 minutes (
IDLE_EVICT_MS).
The result is a single container that the gateway can talk to like any other vendor MCP server.
Configuration
Copy .env.example. Leave CONDUIT_S2S_SECRET empty in that file; put a real value only in an uncommitted .env or the process environment.
Request headers
This server is gateway mode. It does not read PURPLEMCP_CONSOLE_TOKEN or PURPLEMCP_CONSOLE_BASE_URL from the environment for an incoming request. The gateway must forward these headers on every /mcp request. Names are case-insensitive. When both pairs are present, the X-S1-* value wins per field.
X-Gateway-S2S
With CONDUIT_S2S_SECRET set, every POST /mcp must include X-Gateway-S2S. The check is verifyS2sHeader in src/s2s-verify.ts: the header value is t=<unix seconds>,v1=<hex>, where the hex is HMAC-SHA256 of the literal string t=<unix seconds> keyed with CONDUIT_S2S_SECRET (64 lowercase hex characters). The timestamp must be within 300 seconds of the server clock. A missing or invalid header is HTTP 401, before tenant credentials are read, and the secret is not logged.
In gateway mode, /mcp also requires X-S1-API-Token and X-S1-Console-URL (or the legacy x-purplemcp-* pair, including a mixed pair). A request missing either credential is HTTP 401 (JSON-RPC -32001) and does not fall back to PURPLEMCP_CONSOLE_* in the process environment. Vendor-monitor's credless initialize probe relies on that: 401/403 means the sidecar is up but auth-gated, while 400 marks the slug DOWN.
GET /health stays unauthenticated and does not read credentials.
Build
The image listens on 0.0.0.0 inside the container (MCP_HTTP_HOST) and refuses to start until CONDUIT_S2S_SECRET is set. Publish the port on loopback. SentinelOne credentials arrive on each request as headers; they are not read from the environment.
Compose refuses to start when CONDUIT_S2S_SECRET is unset, publishes 127.0.0.1:8080:8080, and does not inject PURPLEMCP_CONSOLE_TOKEN or PURPLEMCP_CONSOLE_BASE_URL:
Local HTTP without a secret is development-only. It binds 127.0.0.1 and logs a warning. A non-loopback MCP_HTTP_HOST (including 0.0.0.0) makes startup exit:
License
Apache-2.0. The bundled purple-mcp is MIT-licensed by SentinelOne.
来源:README.md,提交 74b12e4
工具
0版本历史
1- v1.0.6最新Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分