mcpField
C
CyberQP

CyberQP

本地服务
github.com安全01 周前更新

关于 CyberQP

CyberQP 是面向 AI 助手的只读 MCP 服务,用于访问 CyberQP 特权访问管理数据。它提供客户与账户元数据、租户事件以及即时账户状态和策略信息,但不提供凭据读取或特权访问变更。

主要功能

  1. 01列出客户和账户元数据
  2. 02查询租户事件日志和事件类型
  3. 03查看租户公司资料
  4. 04查看 JIT 策略和客户状态
  5. 05检查 JIT 账户是否存在及租户状态

适用场景

  1. 01查看客户的账户状态
  2. 02按客户或日期筛选租户事件
  3. 03核对 JIT 策略要求和时长

MCP 相关

它将选定的 CyberQP PAM 元数据以及 JIT 状态和策略操作作为 MCP 工具提供。支持从环境变量或网关模式的逐请求请求头接收 OAuth2 Bearer 令牌;不提供密码、OTP 或账户配置操作。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"wyre-ai-cyberqp": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"CYBERQP_ACCESS_TOKEN",
"-e",
"MCP_TRANSPORT",
"-e",
"AUTH_MODE",
"-e",
"LOG_LEVEL",
"ghcr.io/wyre-ai/cyberqp-mcp:v1.0.2"
],
"env": {
"CYBERQP_ACCESS_TOKEN": "<CYBERQP_ACCESS_TOKEN>",
"MCP_TRANSPORT": "<MCP_TRANSPORT>",
"AUTH_MODE": "<AUTH_MODE>",
"LOG_LEVEL": "<LOG_LEVEL>"
}
}
}
}
启动命令docker run -i --rm -e CYBERQP_ACCESS_TOKEN -e MCP_TRANSPORT -e AUTH_MODE -e LOG_LEVEL ghcr.io/wyre-ai/cyberqp-mcp:v1.0.2
需要配置的环境变量
CYBERQP_ACCESS_TOKEN密钥CyberQP OAuth2 access token (authorization_code flow, offline_access scope). Exchanged and refreshed upstream of this server - it only ever holds a live bearer token.
MCP_TRANSPORTTransport mode for the server. Set to 'stdio' for local CLI use; the image defaults to 'http' for gateway hosting.
AUTH_MODE密钥Credential source: 'env' reads vars locally, 'gateway' expects header injection from the WYRE MCP Gateway.
LOG_LEVELLog verbosity: debug, info, warn, error

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocighcr.io/wyre-ai/cyberqp-mcp:v1.0.2

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

CyberQP MCP 服务

面向 AI 助手和 WYRE Conduit 网关的 MCP 服务,适用于 CyberQP(原 QuickPass Cybersecurity)的特权访问管理(PAM)API,可查看客户/账户元数据、租户事件日志,以及 JIT(即时)账户状态/策略。

身份验证

CyberQP 使用 OAuth2 authorization_code 流程(offline_access 作用域,基于 refresh_token),而非 client_credentials。此连接器本身不会执行 OAuth 授权流程:WYRE Conduit 网关负责授权、交换和刷新环节;此服务只会接收有效的 bearer 访问令牌,并通过 Authorization: Bearer <token> 将其发送到 CyberQP API。在网关模式下,令牌会通过 X-CyberQP-Access-Token 标头随每个请求传入;在本地/stdio 模式下,令牌会从 CYBERQP_ACCESS_TOKEN 读取一次。

配置

复制 .env.example,并设置以下变量。stdio 传输会读取 CYBERQP_ACCESS_TOKEN,不会使用 CONDUIT_S2S_SECRET。

Env var描述
CYBERQP_ACCESS_TOKENCyberQP 签发的 OAuth2 访问令牌。stdio 模式和 AUTH_MODE=env 时的 HTTP 模式必填。网关模式不会读取此变量。
MCP_TRANSPORTstdio(默认)或 http。
AUTH_MODEenv(默认,读取上述变量)或 gateway(凭据由 Conduit 网关注入,通过 X-CyberQP-Access-Token 标头随每个请求传入)。容器镜像和 Compose 默认使用 gateway。
CONDUIT_S2S_SECRETHTTP 模式必填。用于对每个 /mcp 请求中的 X-Gateway-S2S 进行校验的 HMAC 密钥。若此变量为空或为已知占位值(changeme、placeholder、secret、example 等公开示例值),进程会记录错误并以非零状态码退出。未设置时,Compose 不会启动。切勿提交真实密钥。可使用 openssl rand -hex 32 生成。此值绝不会写入日志。
MCP_ALLOW_INSECURE_DEV仅在本地开发时,精确设置为 1,以便在未设置 CONDUIT_S2S_SECRET 的情况下启动 HTTP。进程会记录警告,不会强制校验 X-Gateway-S2S,并且只绑定到 127.0.0.1。更宽泛的 MCP_HTTP_HOST(包括 0.0.0.0)会被忽略,并记录此覆盖操作。已知占位密钥仍会被拒绝。
MCP_HTTP_HOSTMCP_TRANSPORT=http 时的绑定地址。未设置时绑定到 127.0.0.1。若配置了 CONDUIT_S2S_SECRET,则使用此值(容器镜像将其设置为 0.0.0.0)。未设置密钥时,不安全开发模式绕过选项会强制绑定到 127.0.0.1。
MCP_HTTP_PORTHTTP 端口。默认为 8080。
LOG_LEVELdebug | info(默认)| warn | error。

/health 无需身份验证,也不会读取凭据。

HTTP 身份验证

当设置了 MCP_TRANSPORT=http 和 CONDUIT_S2S_SECRET 时,每个 /mcp 请求都必须包含 X-Gateway-S2S:

t=<unix seconds>,v1=<hex hmac-sha256>

v1 是 ASCII 消息 t=<unix seconds> 的小写十六进制 HMAC-SHA256 值,密钥为 CONDUIT_S2S_SECRET。时间戳与服务器时钟的偏差必须在 300 秒以内。若标头缺失或无效,将在读取任何供应商凭据之前返回 401。密钥绝不会写入日志或错误正文。

在 AUTH_MODE=gateway 模式下,/mcp 还要求提供 X-CyberQP-Access-Token。该标头是此请求唯一的凭据来源。令牌缺失时返回 401。服务不会回退到进程环境中的 CYBERQP_ACCESS_TOKEN。

X-Gateway-S2S: t=1710000000,v1=<hmac-sha256 of "t=1710000000">
X-CyberQP-Access-Token: <live bearer token>

单租户 HTTP 模式(AUTH_MODE=env)仍要求有效的 X-Gateway-S2S 标头。访问令牌则来自 CYBERQP_ACCESS_TOKEN。

请求限制
  • HTTP 请求正文上限为 256 KiB(262144 字节)。通过 X-Gateway-S2S 检查(以及在 AUTH_MODE=gateway 模式下,X-CyberQP-Access-Token 存在性检查)后,若 Content-Length 超过上限,则返回 413 和 JSON-RPC 错误;没有 Content-Length 的正文由 MCP SDK 传输层限制。未通过身份验证的请求仍会优先收到 401。
  • tools/call 参数上限为 10,000 个元素(包括任意深度的每个数组项和对象键)。超出限制的输入会返回带有固定消息的 isError 工具结果(不会回显工具名称),且绝不会被分发。

这些限制用于应对 CVE-2026-111768 / GHSA-46jr-4wx8-v453(验证期间内存耗尽)以及 GHSA-f897-62hf-6gxq(缺少请求正文 / 批次上限)。

工具

客户
  • cyberqp_list_customers - 列出经过身份验证的技术人员可见的客户,可按目录类型和名称筛选。
  • cyberqp_get_customer_accounts - 列出客户的账户元数据(ID、用户名、类型、状态)。
  • cyberqp_get_customer_accounts_count - 获取客户各账户类型的数量。
事件
  • cyberqp_get_events - 获取租户的事件日志,可按客户、账户、事件类型、状态和日期范围筛选。
  • cyberqp_get_event_types - 获取完整的事件类型值集合。
租户
  • cyberqp_get_tenant_company_data - 获取经过身份验证的租户自身的公司资料。
JIT(Just-In-Time)- 仅提供状态和策略
  • cyberqp_get_jit_policies - 获取客户 + 账户类型对应的已配置 JIT 策略(审批要求、最长持续时间)。
  • cyberqp_get_customer_jit_status - 获取指定客户的 JIT 账户状态。
  • cyberqp_check_jit_account_exists - 检查客户 + 目录类型对应的 JIT 账户是否存在。
  • cyberqp_get_tenant_jit_status - 获取整个租户范围内的 JIT 账户状态。

范围

这是一个刻意限定范围、只读且不会暴露凭据的 v1 接口。 CyberQP 是一款 PAM 产品——其多个真实端点会返回实时明文密码和 OTP 代码,或修改/配置特权访问。出于设计考虑(并非疏忽),这里均未实现这些端点:

明确排除(暴露凭据)——绝不实现:

  • GET /api/v1/account/{accountId}/password (AccountController_getAccountPassword_v1)
  • GET /api/v1/jit/customer/{customerId}/account/{accountId}/password (JitController_getJitAccountPassword_v1)
  • GET /api/v1/jit/customer/{customerId}/account/{accountId}/otp (JitController_getJitAccountOTP_v1)
  • POST /api/v1/jit/customer/{customerId}/account/{accountId}/otp (JitController_saveJitAccountOtpSecret_v1)
  • DELETE /api/v1/jit/customer/{customerId}/account/{accountId}/otp (JitController_deleteJitAccountOtpSecret_v1)

明确排除(配置/修改)——绝不实现:

  • PATCH /api/v1/jit/customer/{customerId}/account/{accountId}/enable (JitController_enableJitAccount_v1)
  • PATCH /api/v1/jit/customer/{customerId}/account/{accountId}/disable (JitController_disableJitAccount_v1)
  • DELETE /api/v1/jit/customer/{customerId}/account/{accountId} (JitController_deleteJitAccount_v1)
  • POST /api/v1/jit/customer/{customerId}/account (JitController_createJitAccount_v1)

不在 v1 范围内(不涉及凭据或配置,仅不属于此连接器的元数据可见性范围——之后可作为有意规划的后续工作添加):

  • GET /api/v1/customers/installer (CustomerController_downloadAgent_v1) - 返回二进制安装程序,而非结构化数据。
  • GET /api/v1/tenants/install-token (TenantController_getInstallToken_v1) - 返回安装令牌。
  • GET /api/v1/auth/login、GET /api/v1/auth/status、POST /api/v1/auth/refresh-token、POST /api/v1/auth/revoke-token、POST /api/v1/auth/notification-engine-token - 这些是网关已负责的 OAuth/会话机制,不适合封装为工具。
  • POST /api/v1/event (EventController_processGenericEvent_v1) - 写操作。
  • POST /api/v1/identity-verification/self-serve-notification (IdentityVerificationController_triggerSelfServePushIdentityVerification_v1) - 写操作/通知触发器。

如有需求,可在审慎决定范围后作为后续工作添加——不会默认添加。

开发

npm install
npm run build
npm test
npm run lint   # tsc --noEmit

Docker

镜像在容器内监听 0.0.0.0(MCP_HTTP_HOST),并默认使用 AUTH_MODE=gateway。请将端口发布到环回地址,并传入 S2S 密钥。在网关模式下,每个请求都会通过 X-CyberQP-Access-Token 传入访问令牌;不会从环境变量中读取该令牌。

docker build -t cyberqp-mcp .
docker run \
  -e CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" \
  -p 127.0.0.1:8080:8080 \
  cyberqp-mcp

若未设置 CONDUIT_S2S_SECRET,Compose 将拒绝启动;它默认将 AUTH_MODE 设为 gateway,发布 127.0.0.1:8080:8080,并且不会设置 CYBERQP_ACCESS_TOKEN 或 env_file:

CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" docker compose up

单租户 HTTP(AUTH_MODE=env)仍需要 S2S 密钥,然后使用 CYBERQP_ACCESS_TOKEN:

docker run \
  -e CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" \
  -e AUTH_MODE=env \
  -e CYBERQP_ACCESS_TOKEN="$CYBERQP_ACCESS_TOKEN" \
  -p 127.0.0.1:8080:8080 \
  cyberqp-mcp

不配置密钥的本地 HTTP 仅用于开发。即使 MCP_HTTP_HOST 为 0.0.0.0,它也会绑定到 127.0.0.1,并记录警告:

MCP_TRANSPORT=http MCP_ALLOW_INSECURE_DEV=1 npm run start:http

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。